Docs
API reference
Versioned JSON under /api/v1. Amounts are base-unit strings. Errors use a stable code and never include stack traces.
Envelope
Success responses use status success and a data object. Errors use status error, data null, a human message, and error.code.
{
"status": "error",
"data": null,
"message": "No routing provider is configured.",
"error": { "code": "ROUTING_PROVIDER_UNAVAILABLE", "details": {} }
}Endpoints
GET /api/health — process health. routingProvider is not_configured until an adapter is set.
GET /api/v1/networks — Devnet and Mainnet. Mainnet writesEnabled is false.
POST /api/v1/quotes — validate a quote request. Without a routing provider the API returns 503 and no estimated output.
POST /api/v1/swaps/build — Devnet returns QUOTE_NOT_FOUND until a real quote exists. Mainnet returns MAINNET_WRITES_DISABLED.
GET /api/v1/swaps/:signature — unknown signatures are TRANSACTION_NOT_FOUND. A signature is not confirmation.
POST /api/v1/hooks/inspect — validates the address. Without RPC the API returns RPC_NOT_CONFIGURED.
POST /api/v1/hooks/resolve-accounts — reserved for reviewed hook implementations.
GET /api/v1/fees/config — the effective policy. The default policy is disabled, feeBps 0, collectionMode none.
GET /api/v1/analytics/fees and POST /api/v1/webhooks/test require an API key and currently return UNAUTHORIZED.
Quote body
cluster is devnet or mainnet-beta. amount is a decimal string of base units, greater than zero.
{
"cluster": "devnet",
"inputMint": "INPUT_MINT_ADDRESS",
"outputMint": "OUTPUT_MINT_ADDRESS",
"amount": "1000000",
"slippageBps": 50
}