Routes and permissions
Anis staff grant your application its permissions. Read your profile to see the ones it has right now.
Every call
| Call | Permission | Authentication | Limits it counts toward |
|---|---|---|---|
| GET Read your profile | profile:read | Signed read | All requests |
| GET List wallets | wallets:read | Signed read | All requests |
| GET Read a wallet | wallets:read | Signed read | All requests |
| GET List catalogue categories | catalogue:read | Signed read | All requests |
| GET List subcategories of a category | catalogue:read | Signed read | All requests |
| GET Read a subcategory | catalogue:read | Signed read | All requests |
| GET List cards for sale | catalogue:read | Signed read | All requests |
| GET Read a catalogue card | catalogue:read | Signed read | All requests |
| POST Place an order | orders:create | Signed purchase | All requests, Purchases (orders limit) |
| GET Read an order | orders:read or orders:create for your own orders | Signed read | All requests |
| GET List owned cards | cards:read | Signed read | All requests |
| GET Read an owned card | cards:read | Signed read | All requests |
| POST Reveal a card | cards:reveal | Signed change | All requests, Reveals |
| POST Reveal an invoice | cards:reveal | Signed change | All requests, Reveals |
| POST Suspend your application | None | Signed change | All requests |
| POST Revoke an application key | None | Signed change | All requests |
| POST Check your signature | diagnostics:use | Signed change | All requests |
| GET Read an invitation | None | Enrolment token | None |
| POST Submit a public key | None | Enrolment token | None |
| POST Prove you hold the key | None | Enrolment token | None |
| GET Read enrolment status | None | Enrolment token | None |
| GET Anis’s public signing keys | None | Public | None |
| GET List your allowed addresses | None | Signed read | All requests |
| POST Allow one more address | None | Signed change | All requests |
| POST Remove an address you added | None | Signed change | All requests |
| GET Get meter packages | meter_charges:read | Signed read | All requests |
| GET Get my meter charges | meter_charges:read | Signed read | All requests |
| POST Charge a meter | meter_charges:create | Signed purchase | All requests, Purchases (orders limit) |
| GET Read a meter charge | meter_charges:read | Signed read | All requests |
| GET Get direct recharge products | direct_recharges:read | Signed read | All requests |
| GET Read a direct recharge product | direct_recharges:read | Signed read | All requests |
| GET Get recipient locations | direct_recharges:read | Signed read | All requests |
| GET Quote a direct recharge product | direct_recharges:read | Signed read | All requests |
| GET Get my direct recharges | direct_recharges:read | Signed read | All requests |
| POST Request a direct recharge product | direct_recharges:create | Signed purchase | All requests, Purchases (orders limit) |
| GET Read a direct recharge | direct_recharges:read | Signed read | All requests |
| PATCH Correct a suspended recipient | direct_recharges:create | Signed change | All requests |
| GET Read your webhook endpoint | None | Signed read | All requests |
| PUT Set your webhook endpoint | None | Signed change | All requests |
| POST Test your webhook endpoint | None | Signed change | All requests |
| GET Get webhook deliveries | None | Signed read | All requests |
| POST Redeliver a webhook | None | Signed change | All 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.