Skip to content

Errors and troubleshooting

CodeMeaningWhen it occurs
200OKSuccessful request.
403ForbiddenX-Device-Id header missing or invalid.
404Not FoundNon-existent route, or invalid currency on order creation, or amount below the minimum, or malformed redirect URLs.
429Too Many RequestsRate limit exceeded. Use Retry-After.
500Internal Server ErrorBackend error. Retry with exponential backoff; if it persists, contact support.

The 404 groups several causes. The response body typically points to the specific one:

  • Invalid currencyinput_currency does not match any symbol from GET /currencies.
  • Minimum amount not metexpected_output_amount below the currency’s min_amount.
  • Redirect URLs missing or malformed (merchant_urlok, merchant_urlko).
  • Verify the header is named exactly X-Device-Id (with hyphens, case-insensitive in HTTP but use the exact form anyway).
  • Verify the key has no leading/trailing whitespace.
  • Verify the device is not disabled in the dashboard.

I get 404 on POST /orders/ with a symbol that does exist

Section titled “I get 404 on POST /orders/ with a symbol that does exist”
  • Call GET /currencies and copy the exact symbol. Symbols are granular per network (for example USDC_POLYGON_NXTB, not just USDC).
  • Verify letter case.
  • Check that notification_url points to a public URL (not localhost).
  • Use HTTPS.
  • Confirm your endpoint returns 200 quickly (< 5 s).
  • Verify your server firewall.

Common causes (in order of frequency):

  1. You did not decode the Secret Key from hex to bytes.
  2. You parsed and re-serialized the JSON body (use the raw body).
  3. You added a trailing newline to the body.
  4. You concatenated body + nonce instead of nonce + body.
  5. You compared with == instead of timing-safe.

Validate with the official test vectors.