Skip to main content

Transfers API Errors

The Transfers API uses standard HTTP status codes and structured error responses to indicate validation issues, permission failures, resource conflicts, upstream dependency failures, and internal errors.

Error response format

Error responses include:
  • an HTTP status code
  • a machine-readable code
  • a human-readable message
  • in some cases, additional context such as source.key for field-level validation failures

Example error response


HTTP status and error codes

400 Bad Request

Returned when the request is malformed, contains invalid parameters, or fails request preconditions.

401 Unauthorized

Returned when the requested feature or rail is not enabled for the developer account.

403 Forbidden

Returned when the request is understood but not permitted.

404 Not Found

Returned when the transfer or related resource cannot be found.

409 Conflict

Returned when the requested action is not allowed in the transfer’s current state.

422 Unprocessable Entity

Returned when the request is structurally valid but cannot be processed.

424 Failed Dependency

Returned when an upstream dependency fails during processing.

500 Internal Server Error

Returned when an unexpected internal error occurs.

503 Service Unavailable

Returned when the service is temporarily unavailable.

Validation errors

Requests that fail with invalid_parameters may include a source.key value identifying the specific field that caused the failure.

Common fields

  • source.payment_rail
  • source.from_address
  • source.amount
  • source.external_account_id
  • source.bridge_wallet_id
  • source.batch_settlement_schedule_id
  • destination.currency
  • destination.external_account_id
  • destination.payment_rail
  • developer_fee
  • features.allow_any_from_address
  • amount

Common validation messages

Validation messages may vary depending on payment rail, transfer type, and configuration.

Idempotency errors

The Transfers API enforces idempotency for repeated requests using the same idempotency key.

Possible idempotency errors

Best practice

Reuse an idempotency key only for exact retries of the same request.
Do not reuse an idempotency key with modified parameters. If the request payload changes, generate a new idempotency key.

Error handling guidance

Use the following guidance when determining whether an error should be retried.
  1. Validate required fields before making the request.
  2. Use idempotency keys for create operations.
  3. Log both the HTTP status code and the error code.
  4. Inspect source.key for invalid_parameters responses.
  5. Retry only transient failures such as 424, 500, and 503.

Notes

  • Validation-related exceptions are returned as structured JSON.
  • Unhandled exceptions fall back to a 500 response with a generic message and reference code.
  • Some responses, such as missing_required_endorsements, may include context-specific messaging depending on the payment rail or configuration involved.

See also