Skip to main content

// developers · limits

Limits you can read, and a log of every call.

120 requests a minute per credential by default, stated on every refusal. Every call, including tools/list, lands in an audit log you can read back through the API.

// rate limits

Back off for the seconds you are told.

The limit counts per credential per minute, and a store can be given a different one. It is not part of the versioned contract, so read it from the response rather than hard-coding it.

A 429 carries Retry-After and the RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset headers, and its body names the limit and the wait.

429
POST /api/v1/tools/get_orders  →  HTTP/1.1 429 Too Many Requests
Retry-After: 17
RateLimit-Limit: 120
RateLimit-Remaining: 0
RateLimit-Reset: 17

{ "error": "rate_limited", "limit": 120, "retry_after_seconds": 17, … }

// every bound

The numbers, in one place.

Requests per minute
120 per credential (default)
Webhook subscriptions
20 per store
Webhook delivery
6 attempts, 10 seconds timeout, disabled after 20 consecutive failures
Partner sources
5 per store, 500 calls a day each by default
Access token
1 hour
Refresh token
30 days
Audit page size
50 by default, 200 at most

// audit

Every call is recorded before it is answered.

Each MCP message and REST call is written to the audit log, and that write finishes before the response is sent. GET /api/v1/audit covers the stores your credential reaches, pages with limit and the opaque before cursor (with an explicit has_more), filters by subject_ref to answer “which call made this refund”, and returns CSV with format=csv. Reading the audit log is itself audited.

What else is recorded, and how long it is kept, is on the Trust Center.

audit
curl "https://app.magistry.io/api/v1/audit?limit=50&format=csv" \
  -H "Authorization: Bearer mag_sk_live_…"

Build on the same tools the product uses.

Create a sandbox key on demo data, or start free and connect a real store.

MCP + REST · OAuth 2.1 or API keys · every call audited