Every API response β success or failure β uses the same envelope. On failure, status is false, data is null, code is a stable machine-readable error code, and meta.next_steps carries an action and a docs_url that links straight to this page at the matching anchor.
message is for developers and logs β do not show it to end users. Quote meta.request_id when contacting support.
These are request-level errors β the API call itself was rejected. If a call succeeds but the resulting money movement or verification later ends in a failed state, the reason is reported on the resourceβs failure_reason field instead β see Failure reasons.
Bad request
HTTP 400 Β· bad_request
The request failed validation β a required field is missing, or a value has the wrong type or format.
Common causes
- A required field was omitted from the request body.
- A field has the wrong type (e.g. a string where a number is expected).
- A value fails a format or enum constraint. The
meta.errors array lists the offending fields.
What to do β Review the request and retry with corrected parameters.
HTTP 400 Β· invalid_input
A field passed schema validation but failed a semantic check the API applies before processing.
Common causes
- A value is individually valid but invalid in context (e.g. an amount below the minimum, or mismatched currency pair).
- A referenced field combination isnβt permitted.
What to do β Inspect the request payload for missing or malformed fields and retry.
Invalid amount precision
HTTP 400 Β· invalid_amount_precision
The amount carries more decimal places than the currency can settle. USDC settles in whole US cents, so USDC amounts support at most 2 significant decimal places. Trailing zeros are fine β 2.980000 is accepted, 2.980228 is rejected.
Common causes
- A high-precision USDC
source_amount or amount on an offramp quote, conversion quote, or transfer β for example a 6-decimal value taken directly from a balance or a destination-anchored price calculation.
What to do β The amount has more decimal places than the currency can settle. Reduce it to the stated maximum (e.g. 2 decimal places for USDC β trailing zeros are fine) and retry.
Prohibited country
HTTP 400 Β· prohibited_country
The country_code supplied is on GlobalStackβs compliance prohibited list, so the merchant or customer cannot be onboarded from it. Onboarding is open to all other countries; this is a presence restriction only β it does not limit which currencies or corridors an onboarded merchant can transact in.
Common causes
- Registering a merchant or creating a customer with a
country_code on the prohibited list.
- A typo producing a prohibited ISO code. (A value that isnβt a valid ISO-3166-1 alpha-2 code at all returns
invalid_input instead.)
What to do β This country is not available for onboarding.
Account resolution failed
HTTP 400 Β· account_resolution_failed
The bank account could not be verified with the provider.
Common causes
- The
account_number is wrong or doesnβt exist at the named institution.
- The
provider_id (bank/institution) doesnβt match the account.
What to do β The account could not be verified with the provider. Confirm the account_number and provider_id and retry.
Authentication failed
HTTP 401 Β· authentication_failed
The request was not authenticated.
Common causes
- Missing
Authorization header.
- An invalid, revoked, or malformed API key / bearer token.
- Using a key from the wrong environment.
What to do β Include a valid Bearer token in the Authorization header.
Merchant inactive
HTTP 401 Β· merchant_inactive
The merchant account is authenticated but not yet active.
Common causes
- KYC/KYB verification is not complete.
- The account is pending review.
What to do β This merchant account is not active yet. Please follow the KYC link provided to complete identity verification (KYC/KYB) to activate it.
Forbidden
HTTP 403 Β· forbidden
The credentials are valid but donβt grant access to this resource.
Common causes
- The API key or user lacks permission for the resource.
- Accessing a resource that belongs to another merchant.
What to do β The credentials supplied do not have access to this resource.
Forbidden key role
HTTP 403 Β· forbidden_key_role
The requested API-key role isnβt permitted for this caller.
Common causes
- Creating or granting a key with a role above the callerβs own grant.
What to do β The requested API-key role is not permitted under this user or integration. Use a role at or below the callerβs own grant.
Resource access required
HTTP 403 Β· resource_access_required
The resource requires an explicit access grant the caller doesnβt have yet.
Common causes
- Using a resource (e.g. a currency) that is gated behind an access request.
What to do β This resource requires explicit access. Request it via POST /v1/currencies/:code/access-requests and retry after approval.
Not found
HTTP 404 Β· not_found
The referenced resource doesnβt exist.
Common causes
- A wrong, mistyped, or already-deleted resource id in the path.
- The resource belongs to a different merchant account.
What to do β Verify the resource identifier and retry.
Invalid status
HTTP 409 Β· invalid_status
The action isnβt allowed while the resource is in its current state.
Common causes
- Acting on a resource whose lifecycle has moved past the point the action is valid (e.g. cancelling an already-settled transfer).
What to do β Check the resource status and ensure the action is permitted in its current state.
Conflict
HTTP 409 Β· conflict
The request conflicts with the current state of the resource.
Common causes
- A concurrent update changed the resource since you last read it.
What to do β The request conflicts with the current state of the resource. Refresh and retry.
Duplicate resource
HTTP 409 Β· duplicate_resource
A resource with the same unique value already exists.
Common causes
- Re-using a value that must be unique (e.g. a
reference or a beneficiary already on file).
What to do β A resource with the same unique identifier already exists. Retry with different values.
Idempotency conflict
HTTP 409 Β· idempotency_conflict
The Idempotency-Key was already used with a different request body.
Common causes
- Reusing an idempotency key for a request whose body differs from the original.
What to do β The Idempotency-Key has already been used with a different request body. Use a new key, or replay the request with the original body.
Idempotency in progress
HTTP 409 Β· idempotency_in_progress
A request with the same Idempotency-Key is still being processed.
Common causes
- A retry fired while the original request with that key is still in flight.
What to do β A request with the same Idempotency-Key is still in progress. Retry after a short delay.
API key limit exceeded
HTTP 409 Β· api_key_limit_exceeded
The account has reached its maximum number of active API keys.
Common causes
- Creating a new key while at the active-key cap.
What to do β Revoke an unused API key before creating a new one.
Access already granted
HTTP 409 Β· access_already_granted
The merchant already has an active grant for the resource.
Common causes
- Submitting an access request for a resource thatβs already granted.
What to do β This merchant already has an active grant for the resource. No further action is required.
Ledger insufficient funds
HTTP 422 Β· ledger_insufficient_funds
The source balance doesnβt have enough available funds.
Common causes
- The walletβs available balance is below the requested amount (funds may be held/pending).
What to do β The source balance does not have enough available funds for this amount. Fund the wallet or lower the amount and retry.
Rate limited
HTTP 429 Β· rate_limited
Youβve exceeded the request rate limit.
Common causes
- Too many requests in a short window.
What to do β You have exceeded the request rate limit. Slow down and retry shortly.
Internal error
HTTP 500 Β· internal_error
An unexpected server error occurred.
Common causes
- An unhandled condition on the server.
What to do β Retry the request after a short delay. If the failure persists, contact support.