Skip to main content
The API uses conventional HTTP status codes. A 2xx means success; a 4xx means the request was rejected (usually something you can fix); a 5xx means a problem on Etherfuse’s side. Error responses carry a short, human-readable message describing the problem — for example, An order with this transaction ID already exists. Depending on the endpoint, the body is either plain text or a JSON object { "error": "<message>" }. Switch on the HTTP status code as the primary signal and treat the message as human-facing detail — there is no stable machine-readable error code to parse.

Status codes

CodeMeaningTypical cause
400Bad RequestInvalid or missing fields, or a missing/expired quote.
401UnauthorizedMissing/invalid API key, or a Bearer prefix on the header. See Authentication.
403ForbiddenYour organization isn’t authorized to access this resource.
404Not FoundA referenced ID doesn’t exist or isn’t linked to the customer/org (wrong customerId, bankAccountId, publicKey, etc.).
409ConflictThe resource already exists, or it collides with a business rule. See Idempotency.
422Unprocessable EntityThe request is well-formed but can’t be processed — e.g. an unsupported asset, currency, or blockchain for the requested operation.
424Failed DependencyA valid quote couldn’t be produced for the requested trading path right now (a FailedToGetQuote). Transient — retry with backoff.
500Internal Server ErrorUnexpected error on our side. Safe to retry with backoff.
501Not ImplementedThe requested capability isn’t available for this route (e.g. an unsupported provider or flow).
503Service UnavailableA dependency is temporarily down. Retry with backoff.

Common errors

Message / situationCodeCauseFix
Proxy account not found404customerId or publicKey doesn’t match onboardingUse the exact IDs from the onboarding call.
Bank account not found404bankAccountId is wrong or belongs to a different customerVerify the bank account is linked to this customer.
Quote expired400Order created more than 2 minutes after the quoteCreate a fresh quote and retry.
An order with this transaction ID already exists409Re-used an orderIdSee Idempotency — treat as already-created.
A pending onramp order already exists for this bank account and amount409Duplicate pending onramp for the same (bank account, amount)Wait for the existing order to settle, or change the amount.
401 Unauthorized401Bearer prefix or wrong-environment keySend the raw key matching the base URL.
FailedToGetQuote — “Temporarily unable to get a valid quote for this trading path”424Etherfuse can’t currently guarantee the fee/spread for that trading pathTransient protection — retry with exponential backoff.
OrderTooSmall — “Combined fee … exceeds maximum (5000 bps / 50%)“400Amount too small to cover fees (EVM offramp gas, or a new-wallet Stellar onboarding cost) — the fee can’t exceed 50% of the orderIncrease the amount (on EVM, offramp ≳ 50 CETES). See Base.
tx_too_late (returned by Stellar on submit)The pre-built Stellar transaction expired (~1–2 min TTL) before you submitted itRegenerate with regenerate_tx and resubmit promptly. See Stellar.
IDs are permanently bound after onboarding. The customerId, bankAccountId, and publicKey are linked during onboarding and cannot be mixed across customers — mismatches surface as 404.

Handling errors

  • 4xx — fix the request before retrying. Retrying an identical bad request will fail the same way. For 409 on a create, treat the resource as already created (see Idempotency).
  • 424 — a quote couldn’t be produced for that trading path right now (a price/spread couldn’t be guaranteed). It’s transient — retry with exponential backoff.
  • 5xx500 and 503 are transient; retry with exponential backoff. Because creates use client-generated UUIDs, a retry won’t create a duplicate. 501 Not Implemented is not retryable — the operation isn’t supported, so adjust the request instead.
  • Quotes expire after 2 minutes — refresh the quote rather than retrying the order.
  • Expired Stellar transactions (tx_too_late) — don’t resubmit the same XDR; regenerate it (see Stellar) and submit the fresh one.
Still stuck? Book a session with the team.