Skip to main content
Use this page when code looks right but the integration still fails in staging or production.
How to use this page Start at the top and move downward. Most failures are either auth, payload shape, or a callback/recovery issue.

Authentication fails

  • Confirm x-api-key is on every developer request.
  • Keep the API key on your server only.
  • Match test keys to sandbox traffic and live keys to live traffic.
  • If you rotated the key, update the backend environment and redeploy.

Quote or order creation returns no route

  • Confirm side, asset, chain, and fiatCurrency match a supported corridor.
  • For buy quotes, send fiatAmount and omit tokenAmount.
  • For sell quotes, send tokenAmount and omit fiatAmount.
  • If the quote still fails, check the provider list in the catalog response.

Callback URL is rejected

  • Use a public https:// URL only.
  • Do not use localhost, private IPs, private hostnames, or placeholder domains.
  • Make sure the callback host is reachable from the internet.
  • If you are testing locally, use a public tunnel or a staging host.

Bank resolution fails

  • Confirm bankCode and accountNumber are correct.
  • Use bankName only as an optional helper.
  • Resolve the bank again right before you create the sell order.

Webhooks do not arrive

  • Verify the receiver accepts public POST requests.
  • Verify the signature against the raw request body.
  • Keep delivery handling idempotent.
  • Persist the delivery id so retries do not double-apply the same event.

Status stays pending

  • Treat webhooks first.
  • Use monitor-status only when a callback is delayed or the user refreshes.
  • Do not guess settlement state locally.