Routes and permissions

Anis staff grant your application its permissions. Read your profile to see the ones it has right now.

Every call

CallPermissionAuthenticationLimits it counts toward
GET Read your profileprofile:readSigned readAll requests
GET List walletswallets:readSigned readAll requests
GET Read a walletwallets:readSigned readAll requests
GET List catalogue categoriescatalogue:readSigned readAll requests
GET List subcategories of a categorycatalogue:readSigned readAll requests
GET Read a subcategorycatalogue:readSigned readAll requests
GET List cards for salecatalogue:readSigned readAll requests
GET Read a catalogue cardcatalogue:readSigned readAll requests
POST Place an orderorders:createSigned purchaseAll requests, Purchases (orders limit)
GET Read an orderorders:read or orders:create for your own ordersSigned readAll requests
GET List owned cardscards:readSigned readAll requests
GET Read an owned cardcards:readSigned readAll requests
POST Reveal a cardcards:revealSigned changeAll requests, Reveals
POST Reveal an invoicecards:revealSigned changeAll requests, Reveals
POST Suspend your applicationNoneSigned changeAll requests
POST Revoke an application keyNoneSigned changeAll requests
POST Check your signaturediagnostics:useSigned changeAll requests
GET Read an invitationNoneEnrolment tokenNone
POST Submit a public keyNoneEnrolment tokenNone
POST Prove you hold the keyNoneEnrolment tokenNone
GET Read enrolment statusNoneEnrolment tokenNone
GET Anis’s public signing keysNonePublicNone
GET List your allowed addressesNoneSigned readAll requests
POST Allow one more addressNoneSigned changeAll requests
POST Remove an address you addedNoneSigned changeAll requests
GET Get meter packagesmeter_charges:readSigned readAll requests
GET Get my meter chargesmeter_charges:readSigned readAll requests
POST Charge a metermeter_charges:createSigned purchaseAll requests, Purchases (orders limit)
GET Read a meter chargemeter_charges:readSigned readAll requests
GET Get direct recharge productsdirect_recharges:readSigned readAll requests
GET Read a direct recharge productdirect_recharges:readSigned readAll requests
GET Get recipient locationsdirect_recharges:readSigned readAll requests
GET Quote a direct recharge productdirect_recharges:readSigned readAll requests
GET Get my direct rechargesdirect_recharges:readSigned readAll requests
POST Request a direct recharge productdirect_recharges:createSigned purchaseAll requests, Purchases (orders limit)
GET Read a direct rechargedirect_recharges:readSigned readAll requests
PATCH Correct a suspended recipientdirect_recharges:createSigned changeAll requests
GET Read your webhook endpointNoneSigned readAll requests
PUT Set your webhook endpointNoneSigned changeAll requests
POST Test your webhook endpointNoneSigned changeAll requests
GET Get webhook deliveriesNoneSigned readAll requests
POST Redeliver a webhookNoneSigned changeAll requests

Permissions are profile:read, wallets:read, catalogue:read, orders:create, orders:read, cards:read, cards:reveal, diagnostics:use, meter_charges:create, meter_charges:read, direct_recharges:create and direct_recharges:read. orders:create also permits reading your own orders. meter_charges:create includes package and charge reads. direct_recharges:create includes direct recharge product, location, quote and direct recharge reads, and permits recipient correction. Webhook endpoint and event calls need no additional scope; they still require an admitted signed request for your own application.

Before a call is looked at

Anis checks each of these before any business decision, so an order call refused by one of them placed nothing itself. It says nothing about an earlier attempt with the same operation id: after invalid_credentials, insufficient_scope or wallet_not_granted, restore access first — after malformed_signed_request, fix how the request is signed first — then resume the same id (or read it with GET /orders/{operationId}). Never place it again under a new id. The order in which the checks run is not part of the contract — do not rely on meeting one before another.

Check Refusal
The request’s shape and body, including a body where none is allowed validation_failed
The signature headers can be read and sign the parts this route needs, in its order; the body matches its digest malformed_signed_request
You call the address Anis gave you; the key exists, is active and signed this request; the signature is fresh invalid_credentials
The nonce was not seen before replay_detected
A staff-set limit, or Anis’s own protection rate_limited
The call comes from one of your allowed networks insufficient_scope
Your application has the route’s permission insufficient_scope
The wallet in the address is granted to your application wallet_not_granted

Paging

The list calls return a page and a nextCursor. Pass it back as cursor — exactly as received — to get the next page. New product lists end with nextCursor: null. Existing card and wallet lists retain their documented last-page behavior: nextCursor is absent on the last page. A changed or malformed cursor is refused as validation_failed.