Limits and reliability (v1)
Access
Section titled “Access”v1 endpoints take no API key. Anyone can call them.
X-Integrator-Id is an optional header on POST /v1/quotes. It only selects fee configuration; it is not authentication.
- The format is a lowercase slug, a hyphen and 8 hex characters, such as
acme-1a2b3c4d. Khalani assigns it. - A malformed header is ignored, not rejected. An unknown or disabled id falls back to the default fees.
- The id is stored with the quote, so the build and the submit need no header.
- The body field
integratorIddoes the same. The header wins when both are sent.
v2 requires an API key. See Migrate to v2.
Rate limits
Section titled “Rate limits”| Route | Per wallet | Per IP |
|---|---|---|
POST /v1/deposit/build |
60 / minute | 300 / minute |
- Per wallet means per
fromin the build body. A build withoutfromcounts against a per-IP bucket of the same size instead. - A build must pass both limits. Other traffic from a shared egress IP can use up the per-IP allowance.
- Limits are counted per edge location and are approximate.
- A
429has the body{ "errorCode": "RATE_LIMITED", "message": "Too many requests, please retry later" }and noRetry-Afterheader. Back off and retry.
POST /v1/quotes is not rate limited, and neither are the submit and the order reads. Quote as often as your UI needs, but quote on user intent, not on a tight timer, because every quote asks every route for a price.
Maintenance
Section titled “Maintenance”During maintenance, POST /v1/quotes and POST /v1/deposit/build return 503 with Retry-After: 300:
{ "name": "MaintenanceException", "message": "SystemMaintenance" }They pause together, so no quote is offered that the next build would refuse. PUT /v1/deposit/submit and the order reads keep working. A user who deposited before maintenance began can still submit and be tracked.
What an outage can affect
Section titled “What an outage can affect”An API outage stops new quotes and builds, and delays submits and order status. It does not move funds that are already deposited:
- Native route. A deposited order is an intent with its output, recipient, refund address and deadline already fixed. It fills, or it is refunded after its deadline. Refunds and status updates can lag while services recover.
- External routes. Across, deBridge and Glacis settle the order themselves, without the API.
If the user deposited but the submit could not reach the API, submit the same hash once the API is back. The quote stays stored until 60 seconds after its validBefore. After that, the submit returns 404, so contact Khalani with the transaction hash.
Getting help
Section titled “Getting help”Contact Khalani through your partner channel. Include the orderId if there is one, the quoteId, the routeId, the deposit’s transaction hash, the x-request-id of the failing response, and the time of the call.