Skip to main content
Circle Mint surfaces errors in two shapes: synchronous responses to API calls, and asynchronous status transitions on resources. The tables below catalog every code, organized by product. When an endpoint returns a generic code: -1 with a message of Something went wrong, treat it as the transient fallback and retry with backoff.

Error response shape

Every synchronous error returns an HTTP status code plus a JSON body with a numeric code and a human-readable message. Validation errors include an extended errors[] array with one entry per offending field.
{
  "code": 2,
  "message": "Invalid entity."
}
{
  "code": 2,
  "message": "Invalid entity.",
  "errors": [
    {
      "error": "min_value",
      "message": "Must be at least 1.",
      "location": "amount",
      "invalidValue": "0",
      "constraints": { "min": 1 }
    }
  ]
}
Each entry in errors[] carries an error name that you can branch on programmatically:
NameMeaning
requiredField is missing.
min_valueValue is below the allowed minimum.
max_valueValue exceeds the allowed maximum.
length_outside_boundsString length is outside the allowed range.
pattern_mismatchValue didn’t match the required regular expression pattern.
date_not_in_pastDate must be in the past.
date_not_in_futureDate must be in the future.
number_formatValue isn’t a valid number for the field.
value_must_be_trueThe boolean field must be true.
value_must_be_falseThe boolean field must be false.
not_requiredField was provided but is disallowed.
invalid_valueValue isn’t in the allowed set for this field.

Synchronous and asynchronous errors

Circle Mint surfaces errors in two distinct shapes depending on when the problem is detected.
KindWhere it surfaces
SynchronousReturned inline in the HTTP response with a status code (400, 401, 403, 404, 409, 429, or 500) and a JSON body containing code and message.
AsynchronousSurfaced on a resource after it reaches a terminal failed (or denied) status. The resource carries a string errorCode and, for risk-driven denials, an optional riskEvaluation object.
Use these categories to decide how your integration should respond to a given error.
CategorySignalAction
Malformed request4xx response with a validation errors[] array.Fix the request and retry with the same idempotencyKey.
State conflict409 response, or a code indicating an existing or conflicting resource.Re-fetch the resource state and decide whether to retry, update, or skip.
Insufficient fundsinsufficient_funds on a payout or transfer, or INSUFFICIENT_BALANCE on a credit draw.Top up the source wallet (or wait for a credit repayment) and retry.
Compliance or risk denialAsynchronous errorCode paired with riskEvaluation.decision = denied.Review the originator and beneficiary information, then resubmit with a new idempotencyKey.
Transient or network5xx response, timeout, or generic code: -1.Retry with exponential backoff. If the error persists, contact Circle.

Common errors

These codes can appear on any endpoint.
CodeMeaningHTTPTreatment
-1Something went wrong.500Transient
1Malformed authorization header.401Malformed
2Invalid entity.400Malformed
3Forbidden.403State conflict

Core API errors

These codes cover the core money-movement endpoints: payments, payouts, transfers, and blockchain address management.
CodeMeaningTreatment
1077Payment amount must be greater than zero.Malformed
1078Payment currency not supported.Malformed
1083Idempotency key already bound to another request—retry with a different value.State conflict
1084This item cannot be canceled.State conflict
1085This item cannot be refunded.State conflict
1086This payment was already canceled.State conflict
1087Total amount to be refunded exceeds the original payment amount.Malformed
1088Invalid source account specified in a payout or transfer request.Malformed
1089The source account could not be found.Malformed
1093Source account has insufficient funds for the payout or transfer amount.Insufficient funds
1096Encryption key ID could not be found; an encryption key ID is required for encrypted data.Malformed
1097Cannot cancel or refund a failed payment.State conflict
1100Invalid country format.Malformed
1101Invalid country format—provide a valid ISO 3166-1 alpha-2 country code.Malformed
1106Invalid district format—must be a 2-character value.Malformed
1107Payout limit exceeded.State conflict
1108Country not supported for customer.Malformed
1112Country or district error on a request payload.Malformed
2003The recipient blockchain address is already associated with the account.State conflict
2004The blockchain address is not a verified withdrawal address.State conflict
2005The blockchain address belongs to an unsupported blockchain.Malformed
2006The wallet type specified when creating an end-user wallet is not supported.Malformed
2007A transfer from the provided source to the provided destination is not supported.Malformed
2009Unsupported transfer configuration.Malformed
2020Unsupported transfer request.Malformed
5001Payout doesn’t exist—verify the payout ID.Malformed
5002Payout amount must be greater than zero.Malformed
5003Inactive destination address. Addresses may require a 24-hour wait after creation before use.State conflict
5004The destination address for this payout could not be found.Malformed
5005The source wallet for this payout could not be found.Malformed
5006The source wallet has insufficient funds for this payout.Insufficient funds
5007Currency not supported for this operation.Malformed
5011Invalid destination address.Malformed
5012Cannot search for both crypto and fiat payouts at the same time.Malformed
5013Source wallet ID must be a number for payouts search.Malformed
5014The blockchain address is not valid for the corresponding blockchain.Malformed
5015The destination blockchain doesn’t match the currency used.Malformed
5017Destination address or blockchain configuration error on a payout request.Malformed

Stablecoin Payins errors

Most Stablecoin Payins asynchronous failures surface via the payments webhook and the paymentIntent lifecycle rather than through discrete error codes. The synchronous codes below cover checkout-session validation.
CodeMeaningTreatment
1143Checkout session not found—the supplied session ID doesn’t exist.Malformed
1144Checkout session is already in a completed state and cannot be extended.State conflict
For asynchronous failure events on payment intents and payments, see Webhook Notifications.

Stablecoin Payouts errors

Stablecoin Payouts errors have two sources. Synchronous validation covers Travel Rule fields and Address Book entity validation. After submission, the payout entity itself can transition to failed with an errorCode that describes why.

Synchronous validation

For full Travel Rule context, see Travel Rule Compliance.
CodeMeaningTreatment
5020purposeOfTransfer field is missing or invalid on a CIRCLE_SG-booked crypto payout.Malformed
2024Address Book identity is missing for this entity.Malformed
2025Address Book ownership is missing for this entity.Malformed
2026Address Book VASP ID is missing for this entity.Malformed
2027Address Book ownership type is invalid for this entity.Malformed
2028Address Book custody type is invalid for this entity.Malformed
2029Address Book custody is missing for this entity.Malformed
2030Address Book VASP ID is invalid for this entity.Malformed
2031Address Book identity type is invalid—must be individual or business.Malformed
2032Address Book identity first name is missing for an individual identity.Malformed
2033Address Book identity last name is missing for an individual identity.Malformed
2034Address Book identity business name is missing for a business identity.Malformed
2035Address Book VASP ID is not allowed—VASP ID must be omitted for self-hosted custody.Malformed
2036Identity is not allowed in Address Book PATCH requests.Malformed
2037Ownership is not allowed in Address Book PATCH requests.Malformed

Asynchronous entity errors

errorCodeMeaning
insufficient_fundsSource wallet doesn’t have enough USDC for the payout.
transaction_deniedPayout was denied by Circle Risk Service—see riskEvaluation for the reason.
transaction_failedPayout failed due to an unknown reason.
transaction_returnedPayout was returned by the receiving network.
fiat_account_limit_exceededThe fiat account limit was exceeded.
When riskEvaluation.reason is 3220, the denial is a Travel Rule violation. Review your originator identities, beneficiary identity, VASP ID, and purposeOfTransfer, then resubmit with a new idempotencyKey. See Travel Rule Compliance.

Credit errors

The Credit API’s draw, fee, and repayment endpoints surface validation failures via a top-level validationErrors array on the credit line. When validationErrors is non-empty, draw and repayment endpoints return HTTP 400 until the listed conditions clear.
ValueMeaningTreatment
INSUFFICIENT_BALANCEThe credit line’s Circle Mint wallet balance is below minBalance, blocking new draws.State conflict
PENDING_FEESAn unpaid fee is blocking new draws.State conflict
OVERDUE_TRANSFERSAt least one disbursed transfer is past its due date.State conflict
Calling POST /v1/credit/cryptoRepayment against a Settlement Advance credit line returns HTTP 400—crypto repayment is only supported on Line of Credit lines. See the Credit API concept for product differences.

Institutional Distribution errors

These responses surface when you create or manage external entities through the Institutional API.
HTTPMeaningTreatment
400Missing or invalid fields on external entity creation.Malformed
401The API key doesn’t have the Institutional Distribution permission.State conflict: contact Circle to enable the entitlement.
409An external entity with the supplied businessUniqueIdentifier and identifierIssuingCountryCode already exists. Re-fetch via GET /v1/externalEntities.State conflict

Custody balance errors

These codes apply to daily user balance reporting for custody accounts.
CodeMeaningTreatment
500000Unsupported currency for reporting daily user balance—must be USDC or EURC.Malformed
500001Custody balance asOfDate is too far from today’s date.Malformed
500002Custody balance cannot be less than zero.Malformed
500003Local custody balance can’t be greater than total custody balance.Malformed
500004Idempotency key can’t be reused across different requests.State conflict
500005A custody balance report already exists for the provided date and currency. Contact customer care for edits.State conflict

Transfer entity errors

These errorCode values appear on a transfer resource after it transitions to failed.
errorCodeMeaningTreatment
transfer_failedTransfer could not be completed.Transient: investigate riskEvaluation and network conditions.
transfer_deniedTransfer was denied by Circle Risk Service.Compliance: review and resubmit with a new idempotencyKey.
blockchain_errorOnchain failure prevented the transfer from settling.Transient: retry once network is healthy.
insufficient_fundsSource wallet doesn’t have enough USDC for the transfer.Insufficient funds