Guides
Errors
Errors use conventional HTTP status codes and a consistent JSON body with a stable, machine-readable code.
{
"error": {
"type": "invalid_request",
"code": "validation_error",
"message": "amount: Amounts must be greater than zero.",
"param": "amount",
"request_id": "req_8f1c2b7d9a3e4f50"
}
}codeis stable — branch on it, not onmessage.paramis present when a specific field caused the error.request_ididentifies the request in your request logs and for support.- Errors never include stack traces, SQL, or credentials.
Error codes
validation_errorHTTP 400invalid_requestThe request body, query or headers failed validation. param points at the first invalid field.
invalid_jsonHTTP 400invalid_requestThe request body is not valid JSON.
idempotency_key_requiredHTTP 400invalid_requestThis endpoint can create side effects and requires an Idempotency-Key header.
authentication_requiredHTTP 401authentication_errorNo credentials were supplied. Send Authorization: Bearer <api key>.
invalid_api_keyHTTP 401authentication_errorThe API key is unknown, revoked or expired.
environment_mismatchHTTP 401authentication_errorThe API key belongs to a different environment than the base URL you called. Sandbox keys (gs_test_) only work against the Sandbox base URL, Live keys (gs_live_) only against the Live base URL.
insufficient_fundsHTTP 402transfer_errorThe wallet's available balance is lower than the amount plus fees.
insufficient_scopeHTTP 403permission_errorThe API key does not have the scope required for this endpoint.
live_access_not_approvedHTTP 403permission_errorThe organization has not been approved for Live access.
sandbox_onlyHTTP 403permission_errorThis endpoint only exists in the Sandbox environment.
activation_requiredHTTP 403permission_errorLive card programs require an activated account (business verification and setup fee).
not_foundHTTP 404invalid_requestThe requested resource does not exist or is not visible to this API key.
card_state_conflictHTTP 409card_errorThe operation is not allowed in the card's current state (for example funding a frozen or terminated card, or terminating a card that still has a balance).
operation_in_progressHTTP 409card_errorAnother operation on this card is still being processed. Retry shortly.
insufficient_card_balanceHTTP 409card_errorThe card balance is too low for this withdrawal. A minimum balance must remain on the card.
idempotency_in_progressHTTP 409idempotency_errorA request with the same Idempotency-Key is still being processed. Retry later.
payload_too_largeHTTP 413invalid_requestThe request body exceeds the maximum allowed size.
unsupported_media_typeHTTP 415invalid_requestRequest bodies must be sent as application/json.
idempotency_key_reuseHTTP 422idempotency_errorThe Idempotency-Key was already used with a different request body or endpoint.
rate_limitedHTTP 429rate_limit_errorToo many requests. Wait for the number of seconds in the Retry-After header.
internal_errorHTTP 500api_errorAn unexpected error occurred. The request_id identifies the failure for support.
provider_errorHTTP 502provider_errorThe downstream provider returned an error. The transfer was marked as failed and reserved funds were released.
live_operations_disabledHTTP 503service_unavailableLive money movement is not enabled on this deployment. No provider has been authorized yet.
provider_not_configuredHTTP 503service_unavailableNo payment provider is configured for this environment and operation.
provider_timeoutHTTP 504provider_errorThe downstream provider did not answer in time. The transfer was marked as failed and reserved funds were released.