Error Codes

When validation fails, or when request parameters violate business rules, Harbor returns structured validation errors (422 Unprocessable Entity), state conflicts (409 Conflict), or custom numeric error codes. Use this reference to parse error responses and guide your users on corrective actions.

Error Response Format

Every error response from the Application API follows the same JSON shape:

{
  "message": "Human-readable error description",
  "error": "Same as message (deprecated, use message instead)",
  "code": 3017,
  "error_type": "transfer.quote_expired"
}
FieldTypeDescription
messagestringHuman-readable error description. Safe to show to end users for some errors, but treat it as free text, because it can change without notice.
errorstringDeprecated. Alias for message. Kept for backward compatibility only.
codeintegerStable numeric error code. Use this for programmatic error handling. It will not change once published.
error_typestringDot-notation identifier derived from code (e.g. transfer.quote_expired), handy for logging/readability.
detailsarray/object(optional) Additional machine-readable context, present when applicable (e.g. which fields are missing).
errorsobject(validation only) Field-level validation errors keyed by field name, returned with code: 2005.

Recommendation: branch on code (or error_type), not on message. The wording of message is not a stable contract.

Onboarding & Validation Error Codes

The following numeric error codes are returned in the response body when submitting or updating onboarding data (POST / PATCH / /upgrade endpoints):

HTTPCodeMeaningWhat It Means / Developer Action
422—Field-level validation failedOne or more payload parameters are invalid. The response contains specific field-level validation errors.
4092301No verification record to elevateAn /upgrade request was made for a customer with no existing verification record. Complete initial onboarding first, or contact support if one should exist.
4092302Submission under reviewThe previous submission is waiting for review, or another request is being submitted. Wait for the result instead of submitting again.
4092303Level already approved / ConflictTarget level has already been approved, or PATCH/POST conflicts with current verified tier.
4092305Action blocked during processingTried to call PATCH or submit an upgrade while the onboarding status is still processing. Wait for processing to complete.
4222306Customer already verifiedThe customer is already fully KYC/KYB verified and cannot undergo onboarding again.
4222310Ineligible for elevationThe upgrade request does not meet eligibility prerequisites (e.g., attempting to upgrade to Level 3 before Level 2 is verified).
4092311Must update existing recordThis customer already has a verification record. Send corrections with PATCH on the same path instead of POST.
4092312Declined (final)The customer was declined (or the verification provider marked it as banned) and cannot be verified again through this API. This state is final; contact support for manual review.
4092313Upgrade cooldown in progressA Level 3 upgrade request was recently rejected, and the compliance cooldown period is active.
4092314KYC session change not allowedThe customer is already verified and the requested change cannot be re-verified. Only a Level 1 → 2 upgrade, or a switch between US and non-US residence, is accepted.
4092315KYC revokedThe customer's verification was revoked by the provider. No further information can be submitted through this API.
4222316Level 1 US-only violationSubmitting a non-US resident (residence.country != "US") for Level 1 is forbidden.
5032317Verification session temporarily unavailableThe verification session could not be started right now. Retry after a short delay.
4092318Corrections pendingThe onboarding is in action_required. Send the corrections with PATCH on the existing onboarding, not a new submission.
4092319Submission still processingThe previous submission is still processing. Retry in a moment. If it continues, contact support with the onboarding_uuid.

The 2302, 2318 and 2319 errors can come from the onboarding endpoint and from /upgrade. Their details object has the onboarding_uuid, the onboarding_status and the submitted_at of the open onboarding, so you can retrieve it.


Onboarding Upgrade Conflicts (409 Conflict)

When calling the /upgrade endpoint, if the upgrade request cannot proceed due to the customer's current onboarding state, the API returns a 409 Conflict response with a specific situation or error state:

Situation / Situation CodeMeaningWhat It Means / Developer Action
action_requiredOnboarding action requiredThe current onboarding level is in action_required state. The customer must resolve outstanding requirements using PATCH on the main onboarding endpoint.
action_required_in_flightUpgrade action requiredAn upgrade is already pending but needs correction. Fix issues by sending a PATCH request.
processingOnboarding in progressThe customer's initial onboarding is still being validated. Wait for initial onboarding to become verified first.
submission_processingUpgrade request validatingAn upgrade request is already in progress and being validated. Wait for the request to finish.
submittedUpgrade under reviewAn upgrade request is under manual compliance review. Wait for the compliance team to approve or reject the pending review.
already_activeLevel already activeNo action needed. The customer has already been verified at this level (or higher).
detailsPrerequisites not metThe upgrade request does not meet the eligibility prerequisites. Read the error details and ensure Level 2 is verified before attempting Level 3.

Onboarding Entry Middleware Errors

These errors are thrown by the gateway middleware prior to route processing to protect data scheme integrity:

HTTPCodeError IdentifierWhat It Means / Developer Action
4222307individual_route_type_mismatchAttempted to submit a Graded Onboarding (V2) individual payload for a customer whose type is corporate.
4222308kyc_delegated_not_supportedGraded Onboarding is not supported for Delegated KYC customers.
4222309v1_customer_use_v1Customer is already on the (V1) onboarding scheme (has (V1) records/history) and cannot migrate to (V2).

Authentication & General Errors

HTTPCodeError TypeWhat It Means / Developer Action
4011001auth.api_key_requiredThe X-API-KEY header is missing from the request.
4011002auth.invalid_api_keyThe provided API key is invalid or has been revoked. Generate a new one from the Harbor Portal.
4011003auth.token_expiredThe authentication token has expired. Re-authenticate and retry.
4031006auth.api_key_scope_insufficientThe API key does not have the required scope/permission for this endpoint. Check the key's scopes in the Harbor Portal.
4042001general.resource_not_foundThe requested resource does not exist.
4032002general.forbiddenAccess to the resource is denied.
4002003general.bad_requestThe request is malformed.
202 / 4002004general.idempotency_conflictA request with the same X-Idempotency-Key is still being processed. Wait for it to finish. Once it has finished, a retry with the same key returns the original response.
4222005general.validation_errorRequest body validation failed. Check the errors field for per-field details.
5022006general.internal_server_errorAn unexpected internal error occurred. Retry later; contact support if it persists.

Customer & Application Errors

HTTPCodeError TypeWhat It Means / Developer Action
4042101customer.not_foundThe specified customer does not exist.
4032102customer.not_verifiedThe customer status is not verified. The action requires a verified customer.
4032103customer.agreement_not_signedThe customer has not signed the required agreement yet.
4002104customer.link_expiredThe customer-facing link (e.g. onboarding/KYC link) has expired. Generate a new one.
4002105customer.hash_errorCustomer hash verification failed. The link or signed payload was tampered with or malformed.
4002106customer.invalid_integrated_statusThe customer's integrated KYC status is invalid for this operation.
4032107customer.creation_not_allowedYour application is not allowed to create customers. Contact support.
4032201application.kyc_not_verifiedYour application's own KYC/verification is not complete. Complete application-level verification before this operation is allowed.
4002202application.feature_not_enabledThis feature (e.g. customer deposit accounts) is not enabled for your application. Contact your account manager to have it enabled.

Transfer Error Codes

HTTPCodeError TypeWhat It Means / Developer Action
4003001transfer.final_amount_negativeThe calculated final amount is negative. Check fees/rates against the requested amount.
4003002transfer.unsupported_transfer_typeThe requested transfer type is not supported.
4003003transfer.on_behalf_of_not_foundThe on_behalf_of customer was not found.
4003004transfer.failed_to_create_orderFailed to create the order with the payment provider. Retry, or contact support if it persists.
4003005transfer.failed_to_query_orderFailed to query the order status from the payment provider.
4003006transfer.on_behalf_of_not_activeThe on_behalf_of customer is not in an active state.
4003007transfer.unsupported_transfer_pairThe requested source/destination currency pair is not supported.
4003008transfer.exchange_rate_not_foundNo exchange rate is available for the requested pair right now.
4003009transfer.min_transfer_amount_in_USDThe transfer amount is below the minimum limit.
4003010transfer.unsupported_source_assetThe source asset is not supported for this route.
4003011transfer.failed_to_update_statusFailed to update the transfer status.
4003012transfer.monthly_transaction_count_limit_exceededThe monthly transaction count limit has been reached.
4003013transfer.max_transfer_amount_in_USDThe transfer amount exceeds the maximum limit.
4003014transfer.invalid_rateThe exchange rate used is invalid.
4003015transfer.invalid_commissionThe commission configuration is invalid.
4003016transfer.invalid_partner_feeThe partner fee configuration is invalid.
4003017transfer.quote_expiredThe transfer quote has expired. Request a new quote and retry.
4003018transfer.failed_to_get_quotesFailed to retrieve quotes from the payment provider.
4003019transfer.failed_to_query_bank_module_quote_requirementsFailed to query quote requirements.
4003020transfer.update_transfer_status_failedFailed to update the transfer status.
4003021transfer.quote_requirements_not_foundQuote requirements could not be found for this route.
4003022transfer.failed_to_query_bank_module_quote_exchange_rateFailed to query the exchange rate for the quote.
4003023transfer.failed_to_query_bank_module_quote_limitsFailed to query quote limits.
4003024transfer.failed_to_query_bank_module_supported_sender_countries_and_currenciesFailed to query supported sender countries/currencies.
4003025transfer.failed_to_query_bank_module_supported_destination_countries_and_currenciesFailed to query supported destination countries/currencies.
4003026transfer.no_fee_set_foundNo active fee set is configured for this application. Contact support.
4003027transfer.failed_to_query_bank_module_supported_withdrawal_chainsFailed to query supported withdrawal chains.
4003028transfer.failed_to_query_bank_module_supported_withdrawal_source_countriesFailed to query supported withdrawal source countries.
4003029transfer.payment_method_per_transaction_limit_exceededThe per-transaction limit was exceeded for this payment method.
4003030transfer.payment_method_weekly_limit_exceededThe weekly limit was exceeded for this payment method.
4003031transfer.payment_method_monthly_limit_exceededThe monthly limit was exceeded for this payment method.
4003032transfer.payment_method_daily_limit_exceededThe daily limit was exceeded for this payment method.
4003033transfer.creation_failedTransfer creation failed.
4003034transfer.receipt_calculation_failedFee/receipt calculation failed.
4003035transfer.quote_retrieval_failedNo quotes are available for the requested transfer pair.
4003036transfer.quote_creation_failedFailed to persist the transfer quote.
4003037transfer.missing_amount_inputEither source or destination amount is required, and neither was supplied.
4003038transfer.insufficient_wallet_balanceThe wallet does not have enough available balance to complete this transfer.
4003039transfer.rtp_routing_number_requiredA routing number is required for RTP transfers.
4003040transfer.rtp_routing_number_not_supportedThe supplied routing number does not support RTP.
4003041transfer.simulate_not_allowedTransfer simulation is not allowed for this request/application.
4003042transfer.x402_quote_not_owlpayx402 requires a transfer quote created in OwlPay gas-fee mode.
4003043transfer.x402_type_not_off_rampx402 only supports off-ramp transfers.
4003044transfer.x402_transfer_state_invalidThe transfer is not in a state that can be enabled for x402 (must be pending the customer's transfer start).
4003045transfer.x402_not_enabledx402 is not enabled for this customer.
4003049transfer.x402_transfer_expiredThe transfer's crypto pay-in window has already expired; it can no longer be enabled for x402. Create a fresh transfer instead.
4223050transfer.not_completedThe requested resource (e.g. a payment confirmation letter) is only available once the transfer is COMPLETED.
4033051transfer.creation_not_allowedYour application is not allowed to create new transfers right now (existing quotes/transfers are unaffected). Contact support.
4003052transfer.incomplete_cardholder_profileThe customer's cardholder profile is missing fields required for a card payment. Check details for which fields are missing.
4003053transfer.tier_quota_per_transaction_exceededThe amount exceeds the per-transaction limit for the customer's verification level.
4003054transfer.tier_quota_daily_exceededThe amount would exceed the daily limit for the customer's verification level.
4003055transfer.tier_quota_monthly_exceededThe amount would exceed the monthly limit for the customer's verification level.
4003056transfer.tier_quota_lifetime_exceededThe amount would exceed the lifetime limit for the customer's verification level.
4003057transfer.tier_quota_valuation_unavailableThe source asset could not be valued in USD to check the verification-level quota. Retry later. If it continues, contact support.
4093058transfer.tier_quota_check_in_progressAnother transfer is currently being created for this customer, holding the quota lock. Retry shortly.
4003059transfer.usdt_not_enabledUSDT is not enabled for this application. Contact your account manager.
4003060transfer.tier_quota_level_missingThe customer has no approved verification level yet, so no quota can be measured. Complete verification first. If the customer is already approved, contact support with the customer ID.
4003061transfer.tier_quote_method_not_allowedNo quote is available because the customer's verification level restricts which payment methods can be quoted.

Bank Connection Error Codes

HTTPCodeError TypeWhat It Means / Developer Action
4005001bank_connection.failed_to_generate_widget_urlFailed to generate the bank connection widget URL.
4005002bank_connection.failed_to_syncFailed to sync bank connection data.
4005003bank_connection.failed_to_list_accountsFailed to list linked bank accounts.
4005004bank_connection.failed_to_get_balanceFailed to retrieve the account balance.
4005005bank_connection.failed_to_generate_update_widget_urlFailed to generate the widget URL used to refresh/update an existing bank connection.

Card Error Codes

HTTPCodeError TypeWhat It Means / Developer Action
4006001card.failed_to_create_binding_linkFailed to create the card binding link.
4006002card.failed_to_listFailed to list cards.
4006003card.failed_to_reviewFailed to submit the card for compliance review.
4006004card.incomplete_cardholder_profileThe cardholder profile is missing fields required for card binding. Check details for which fields are missing.

Faucet Error Codes

The faucet endpoints are sandbox/testnet-only developer tools for funding test wallets. They are not part of the production API surface.

HTTPCodeError TypeWhat It Means / Developer Action
4227001faucet.daily_limit_exceededThe daily USDC faucet limit has been reached. Retry after the limit resets.
4227002faucet.circle_recipient_failedFailed to create the Circle recipient for the faucet payout.
4227003faucet.circle_payout_failedFailed to create the Circle payout.
4037004faucet.production_not_allowedThe faucet is not available in production. Use the sandbox environment.
4227005faucet.usdt_chain_not_supportedThe USDT faucet only supports the Ethereum chain.
4227006faucet.bank_module_faucet_failedThe underlying faucet call failed. Check details.http_status for the upstream status.

Wallet Error Codes

HTTPCodeError TypeWhat It Means / Developer Action
4048001wallet.not_foundThe specified wallet does not exist.
4008002wallet.api_not_enabledThe Wallet API is not enabled for this application. It is an optional feature: ask your Account Manager to enable it.
4008003wallet.failed_to_createFailed to create the wallet.
4008004wallet.failed_to_deleteFailed to delete the wallet.
4008005wallet.failed_to_get_recordsFailed to retrieve wallet records.
4008006wallet.failed_to_get_balancesFailed to retrieve wallet balances.
4228007wallet.rate_not_configuredNo active wallet fee rate is set for this application. Ask your Account Manager to configure it before you create wallets.

Deposit Account Error Codes

HTTPCodeError TypeWhat It Means / Developer Action
4229805additional_fee_setting.rate_not_configuredNo active deposit account fee rate is set for this application. Ask your Account Manager to configure it before you open deposit accounts.

Identity Verification (AML/KYC Provider) Errors

These codes come from Harbor's calls to its identity-verification provider during onboarding, transfer creation, and card binding. All of them return HTTP 400. For these specifically, the message field is either a curated, merchant-safe message from the provider or a generic fallback ("We were unable to complete this request with our verification provider. Please try again later or contact support if the issue persists."). The underlying diagnostic detail is intentionally never exposed. Branch on code, not on message, for these errors.

CodeError TypeWhat It Means
9901aml.chain_bind_failedFailed to bind a blockchain address to the customer's verification profile.
9902aml.target_chain_bind_failedFailed to bind the destination chain address.
9903aml.on_ramp_order_creation_failedFailed to create the on-ramp order with the verification provider.
9904aml.off_ramp_order_creation_failedFailed to create the off-ramp order with the verification provider.
9905aml.swap_order_creation_failedFailed to create the swap order with the verification provider.
9906aml.swap_order_finish_failedFailed to finalize the swap order with the verification provider.
9907aml.transfer_metadata_missingRequired transfer metadata was missing for the verification call.
9908aml.cpn_rfi_sync_failedFailed to sync the RFI (request-for-information) status with the verification provider.
9909aml.order_cancel_failedFailed to cancel the order with the verification provider.
9910aml.order_crypto_info_failedFailed to retrieve crypto order info from the verification provider.
9911aml.order_fiat_info_failedFailed to retrieve fiat order info from the verification provider.
9912aml.liveness_requirement_check_failedFailed to check whether a liveness check is required.
9913aml.liveness_token_request_failedFailed to request a liveness-check token.
9914aml.liveness_token_missingThe provider reported success but returned no liveness token.
9915aml.user_info_fetch_failedFailed to fetch the customer's verification profile.
9916aml.user_parent_name_update_failedFailed to update the customer's parent/guardian name on file.
9917aml.meta_fetch_failedFailed to fetch verification metadata.
9918aml.v2_request_failedThe (V2) verification API request failed.
9919aml.v2_response_missing_fieldThe (V2) verification API response was missing a required field.
9920aml.submit_check_response_invalidThe submission-check response from the provider was invalid.
9921aml.sumsub_token_request_failedFailed to request a Sumsub verification session token.
9922aml.sumsub_token_missingThe provider reported success but returned no Sumsub session token.
9923aml.card_bind_failedFailed to notify the verification provider of a card-binding event.


Did this page help you?