Authentication
Every request must include your resolver API key:Error envelope
Protocol errors use this envelope:Discovery
GET /v1/networks
Lists supported networks. Response items include:
GET /v1/tokens
Lists supported tokens. Query parameters:
Response:
GET /v1/resolvers/webhooks/public-key
Returns the Ed25519 public key used to verify webhook signatures.
Intents and swaps
GET /v1/intents/{id}
Retrieves an intent. Statuses:
Notable fields (non-exhaustive): chain and token identifiers, source and destination addresses,
resolver_id, deadline, nonce, amount lots and decimals, quote_id, slippage_tolerance_bps, intermediate-token bounds, affiliate_id, swap_type (standard or optimized), resolver_deposit_address, deposit_type (escrowed or direct), and lifecycle timestamps.
GET /v1/intents/status/pending
Lists intents that are waiting for a resolver decision. Query parameters: limit (default page size 20) and offset. The response is paginated.
POST /v1/intents/{id}/accept
Accepts an intent. The response carries the data the resolver needs for the deposit transaction: system_contract_address, permit2_contract_address, permit2_signature, proxy_address, fulfillment_signature, psbt, and cosign_transaction. Which fields are meaningful depends on the source chain.
Errors: 403 (this resolver may not update the intent), 404, 409 (the intent is no longer in a state that can be accepted), 500.
POST /v1/intents/{id}/decline
Declines an intent. The body is optional:
403, 404, 409, 500.
POST /v1/intents/{intent_id}/refund
Refunds the user’s locked funds without waiting for the timelock to expire.
GET /v1/resolvers/stream
Opens a WebSocket stream for the resolver (HTTP 101 Switching Protocols). Send the X-API-Key header on the upgrade request.
GET /v1/swaps/{intent_id}/swap
Retrieves the on-chain execution record for an intent. Notable fields: status, proxy_address, deposit/fulfill/withdraw/swap transaction hashes, intermediate-token data, and lifecycle timestamps.
Reporting transactions
Resolvers must report each on-chain step. For standard swaps, report the Deposit, then the Fulfill.POST /v1/intents/{id}/deposit
POST /v1/intents/{id}/fulfill
signature is optional for EVM, Solana, and Tron. It is required for Bitcoin.
Optimized swaps report only the
Swap step. Confirm the reporting endpoint for optimized swaps with Utexo during onboarding.Secret retrieval
GET /v1/intents/{id}/reveal-secret
POST /v1/intents/batch/reveal-secrets
Request:
Health
GET /v1/system/live
Requires the X-API-Key header, like every Protocol API request.
200— healthy400— theX-API-Keyheader is missing or malformed (error code14)500— unhealthy