Error codes · Limits
Rate limited
Code
rate_limitedStatus429
If this was an orderMay still complete — resume with the same id
Send it again unchanged?Yes — see What to do
.NET SDK
RateLimitedExceptionThe order may still complete
Resume it with the same operation id and the same body. A new operation id can buy the cards a second time.
What it means
Too many requests: in the current window, or running at the same time. The limit is either one Anis staff set on your application or wallet — counting all requests, orders only, or reveals only — or one of Anis’s own protective limits, listed in Errors and limits. On an order, this refusal does not prove nothing was placed: an earlier copy of the same order (a call that timed out, or a retry your HTTP client made) may already have gone through.
What to do
- Wait for the time in
Retry-Afterwhen it is present. Otherwise back off: wait 1 second, double the wait after each refusal, add a little random jitter, and never wait more than 30 seconds. The limits are listed in Errors and limits. - Then send again. An order is different: resume it with the same operation id and the same body, never a new id. The .NET SDK 1.1.0 returns a rate-limited order as
OrderOutcomeUnknown. - A refusal for too many calls at the same time clears as soon as one of your own calls ends: run fewer calls in parallel.
Where you can meet it
- GETRead your profile
/v1/profile - GETList wallets
/v1/wallets - GETRead a wallet
/v1/wallets/{walletId} - GETList catalogue categories
/v1/wallets/{walletId}/catalog/categories - GETList subcategories of a category
/v1/wallets/{walletId}/catalog/categories/{categoryId}/subcategories - GETRead a subcategory
/v1/wallets/{walletId}/catalog/subcategories/{subcategoryId} - GETList cards for sale
/v1/wallets/{walletId}/catalog/subcategories/{subcategoryId}/cards - GETRead a catalogue card
/v1/wallets/{walletId}/catalog/cards/{cardId} - POSTPlace an order
/v1/wallets/{walletId}/orders - GETRead an order
/v1/orders/{operationId} - GETList owned cards
/v1/wallets/{walletId}/owned-cards - GETRead an owned card
/v1/wallets/{walletId}/owned-cards/{soldCardId} - POSTReveal a card
/v1/wallets/{walletId}/owned-cards/{soldCardId}/reveal - POSTReveal an invoice
/v1/wallets/{walletId}/invoices/{invoiceId}/owned-cards/reveal - POSTSuspend your application
/v1/application/suspend - POSTRevoke an application key
/v1/keys/{keyId}/revoke - POSTCheck your signature
/v1/diagnostics/signature - GETRead an invitation
/v1/enrollments/{invitationId} - POSTSubmit a public key
/v1/enrollments/{invitationId}/keys - POSTProve you hold the key
/v1/enrollments/{invitationId}/proof - GETRead enrolment status
/v1/enrollments/{invitationId}/status - GETList your allowed addresses
/v1/application/networks - POSTAllow one more address
/v1/application/networks - POSTRemove an address you added
/v1/application/networks/remove - GETGet meter packages
/v1/wallets/{walletId}/meter-packages - GETGet my meter charges
/v1/wallets/{walletId}/meter-charges - POSTCharge a meter
/v1/wallets/{walletId}/meter-charges - GETRead a meter charge
/v1/meter-charges/{operationId} - GETGet direct recharge products
/v1/wallets/{walletId}/direct-recharge-products - GETRead a direct recharge product
/v1/wallets/{walletId}/direct-recharge-products/{productId} - GETGet recipient locations
/v1/wallets/{walletId}/direct-recharge-products/{productId}/locations - GETQuote a direct recharge product
/v1/wallets/{walletId}/direct-recharge-products/{productId}/quote - GETGet my direct recharges
/v1/wallets/{walletId}/direct-recharges - POSTRequest a direct recharge product
/v1/wallets/{walletId}/direct-recharges - GETRead a direct recharge
/v1/direct-recharges/{operationId} - PATCHCorrect a suspended recipient
/v1/direct-recharges/{operationId}/recipient - GETRead your webhook endpoint
/v1/webhook-endpoint - PUTSet your webhook endpoint
/v1/webhook-endpoint - POSTTest your webhook endpoint
/v1/webhook-endpoint/test - GETGet webhook deliveries
/v1/webhook-events - POSTRedeliver a webhook
/v1/webhook-events/{eventId}/redeliver
Example
The body of the refusal. Its type is the address of this page.
{
"type": "https://developers.anis.ly/errors/rate-limited",
"title": "Rate limited",
"status": 429,
"code": "rate_limited",
"requestId": "01J9R2K8T4V6XQ0M3B7C5D9E1F"
}