API
REST and JSON, defined in openapi.yaml. Testnet only.
The contract is openapi.yaml. Open the full API reference →
Endpoints
| Endpoint | Auth | What it does |
|---|---|---|
GET /v1/info | — | Network, pool, asset and enabled modes |
POST /v1/onboarding | SEP-53 signature | Registers keys, runs the simulated KYC, requests the allow-list |
GET /v1/users/{account} | — | KYC and allow-list status |
POST /v1/intents | SEP-53 signature | Creates a ramp intent and returns the anchor's interactive URL (only here) |
GET /v1/intents/{id} | — | Status and on-chain hashes (never the interactive URL) |
POST /v1/asp/block | ADMIN_TOKEN | Blocks a key (block-list) |
POST /v1/asp/unblock | ADMIN_TOKEN | Unblocks a key |
GET /v1/audit/transactions | AUDITOR_TOKEN | Pool activity decrypted with the view key |
GET /v1/audit/public/{tx_hash} | — | What anyone sees about a transaction |
Errors
Every error has a stable code:
{ "error": "user_not_allowed", "message": "…" }| Status | Common codes |
|---|---|
| 400 | invalid_request, invalid_signature, invalid_key, invalid_limit |
| 401 | unauthorized |
| 404 | not_found |
| 409 | account_already_onboarded, pool_key_already_registered, user_not_allowed, ramp_mode_disabled |
| 502 / 503 | anchor_unavailable, service_unavailable |
Intent statuses
| Status | Meaning |
|---|---|
awaiting_anchor | The user has to pay at the anchor |
funds_received | The anchor's payment is confirmed and in Shield's custody |
shielding | The pool deposit is being sent |
transferring | The private transfer is being sent |
completed | The private balance is the user's |
rejected, expired, error | Final; see message |