API Error Codes
All errors returned by the Due API follow a consistent structure. The error_code field in the response body uniquely identifies the error type and can be used for programmatic handling.
Error response format
{
"error_code": "err_recipient_not_found",
"message": "Recipient is required",
"http_code": 400
}Error codes
| http_code | error_code | description |
|---|---|---|
| 400 | err_account_no_wallets | Account has no wallets created |
| 400 | err_account_cannot_be_completed | Account cannot be completed in its current status |
| 400 | err_credential_already_approved | This credential has already been approved |
| 400 | err_credential_not_approved | This credential has not been approved |
| 400 | err_credential_session_invalid | This session is not a registration session |
| 400 | err_credential_not_owned | Credential is not owned |
| 400 | err_otp_invalid | Invalid OTP code |
| 400 | err_otp_required | OTP code is required |
| 400 | err_signin_jwt_required | JWT token is required |
| 400 | err_token_invalid | Invalid token |
| 400 | err_signup_email_required | Email is required |
| 400 | err_user_address_taken | This address is already linked to another account |
| 400 | err_user_address_not_owned | This address does not belong to your account |
| 400 | err_user_password_already_set | A password has already been set |
| 400 | err_user_email_taken | This email is already in use |
| 400 | err_webhook_endpoint_invalid_url | Invalid URL provided |
| 400 | err_webhook_event_not_supported | The specified webhook event is not supported |
| 400 | err_market_history_invalid_interval | The specified interval is invalid |
| 400 | err_channel_not_found | Channel not found |
| 400 | err_channel_not_found | Virtual account channel not found |
| 400 | err_channel_restricted | Channel is restricted in your country |
| 400 | err_channel_restricted_category | Channel is restricted for your category |
| 400 | err_channel_recipient_country_restricted | Recipient country is not supported for this channel |
| 400 | err_channel_sender_required | This channel requires a sender |
| 400 | err_channel_sender_invalid_schema | Sender schema is invalid |
| 400 | err_purpose_required | Purpose code is required for this destination |
| 400 | err_purpose_invalid | Purpose code does not match the channel's purpose code list |
| 400 | err_purpose_not_supported | Purpose code is not supported for this destination |
| 400 | err_endorsement_required | Required endorsements are missing |
| 400 | err_recipient_type_not_supported | Recipient type is not supported for this destination |
| 400 | err_channel_does_not_support_disposable_account | This channel does not support disposable accounts |
| 400 | err_channel_virtual_account_creation_restricted | This channel does not support creation of new virtual accounts |
| 400 | err_kyc_not_passed | KYC not passed |
| 400 | err_kyc_already_passed | KYC has already been passed |
| 400 | err_kyc_document_requirement_not_satisfied | Requirement for a document is not satisfied |
| 400 | err_kyc_questionnaire_not_answered | The required questionnaire has not been answered |
| 400 | err_kyc_questionnaire_reference_answer_not_found | Reference answer not found for the specified question |
| 400 | err_kyc_questionnaire_answer_not_found | Answer is missing for the specified question |
| 400 | err_policy_usage_limit_exceeded | Usage limit exceeded |
| 400 | err_policy_3rd_party_transfer_limit_exceeded | Third-party transfer limit exceeded |
| 400 | err_policy_transfer_limit_exceeded | Transfer limit exceeded |
| 400 | err_policy_breached | This transfer could not be approved due to internal compliance policy |
| 400 | err_quote_limit_below_minimum | The amount is below the required minimum. Please enter a greater amount. |
| 400 | err_quote_limit_below_fee | Fees exceeded the estimated quote. Please try again with a higher amount. |
| 400 | err_quote_limit_exceeded | The amount exceeds the permissible limit. Please enter a smaller amount. |
| 400 | err_estimate_invalid_source_channel_type | Invalid source channel type |
| 400 | err_estimate_invalid_destination_channel_type | Invalid destination channel type |
| 400 | err_quote_application_fee_outside_platform | Application fee is only available for platforms |
| 400 | err_quote_application_fee_one_side_only | Either source or destination application fee can be specified, not both |
| 400 | err_quote_application_fee_exceeds_internal_fee | Application fee cannot exceed the transfer fee |
| 400 | err_memo_unsupported | This payment type does not support memos |
| 400 | err_memo_required | The memo is required for this payment method |
| 400 | err_memo_invalid_length | Memo length is outside the allowed range |
| 400 | err_memo_invalid_characters | Memo must only contain alphanumeric characters and & - . / |
| 400 | err_memo_repeating_character | Memo must not consist of one repeating character |
| 400 | err_rail_schema_unsupported | The destination rail does not support this schema |
| 400 | err_recipient_deleted | This recipient has been deleted |
| 400 | err_recipient_invalidated | This recipient is no longer valid |
| 400 | err_recipient_required | Recipient is required |
| 400 | err_tos_ip_address_required | IP address is required |
| 400 | err_transfer_invalid_destination_id | Invalid destination ID |
| 400 | err_transfer_invalid_sender_id | Invalid sender ID |
| 400 | err_transfer_invalid_amount | Invalid transfer amount |
| 400 | err_transfer_intent_should_be_crypto | Transfer intent must be a crypto transfer |
| 400 | err_wallet_invalid_address | This wallet address is empty or invalid |
| 400 | err_transfer_intent_failure | Transfer intent failure |
| 400 | err_transfer_intent_already_completed | This transfer intent has already been completed |
| 400 | err_transfer_intent_has_different_id | A pending intent with this reference has a different ID |
| 400 | err_transfer_intent_invalid_token | Invalid transfer intent token |
| 400 | err_cctp_not_configured | CCTP not configured for this network |
| 400 | err_cctp_chain_not_supported | Chain is unsupported |
| 400 | err_cctp_not_supported | CCTP is not supported |
| 400 | err_cctp_network_does_not_support_session_key | This network does not support session key execution |
| 400 | err_cctp_nonce_required | Nonce is required |
| 400 | err_relay_json_rpc | A JSON RPC error occurred |
| 400 | err_quote_no_amount | Invalid quote request: you should specify either amount in or out |
| 400 | err_insufficient_balance | Insufficient balance |
| 401 | err_signin_invalid_credentials | Invalid credentials |
| 401 | err_signin_jwt_invalid | Invalid JWT token |
| 401 | err_signin_jwt_expired | JWT token has expired |
| 401 | err_wallet_signin_invalid_signature | Invalid signature |
| 403 | err_aml_risk_score_hit | Transaction flagged by compliance check |
| 404 | err_credential_missing | Credential is missing |
| 404 | err_sumsub_applicant_not_found | Sumsub applicant not found |
| 404 | err_company_formation_document_not_found | Company formation document not found |
| 404 | err_company_ownership_document_not_found | Company ownership document not found |
| 404 | err_proof_of_address_not_found | Proof of address not found |
| 404 | err_id_doc_not_found | Identity document not found |
| 404 | err_liveness_check_not_found | Liveness check (selfie) not found |
| 404 | err_occupation_not_found | Occupation not found |
| 404 | err_ip_address_not_found | IP address not found |
| 404 | err_kyc_questionnaire_not_found | Questionnaire with this template ID not found |
| 409 | err_account_external_id_conflict | An account with this external ID already exists |
| 409 | err_webhook_endpoint_already_exists | Webhook endpoint already exists |
| 409 | err_kyc_applicant_invalid_status | Invalid applicant status for this operation |
| 409 | err_kyc_sharing_invalid_status | Sharing is unavailable for this account due to its current KYC status |
| 409 | err_kyc_sharing_state_terminal | Sharing reached its terminal state |
| 409 | err_endorsement_already_exists | Endorsement already exists |
| 409 | err_kyc_root_applicant_already_exists | A root applicant for this account already exists |
| 409 | err_recipient_already_exists | Recipient already exists |
| 422 | err_platform_deactivated | Platform is deactivated |
| 422 | err_user_email_required | User email is required |
| 422 | err_user_name_required | User name is required |
| 422 | err_invalid_signed_agreement_id | Invalid signed agreement ID |
| 422 | err_kyc_sharing_invalid_account_type | Only individual accounts are supported |
| 422 | err_kyc_sharing_not_possible | Sharing is not possible due to an account restriction |
| 422 | err_kyc_unsupported_param_combination | The combination of country, account type, and role is not supported |
| 422 | err_kyc_submission_finalized | Submission must be open |
| 422 | err_kyc_has_open_submissions | Applicant has open submissions |
| 422 | err_kyc_document_request_invalid | Document of this type and variant was not found in submission requirements |
| 422 | err_kyc_validation_error | Validation error |
| 422 | err_recipient_validation_failed | Recipient details failed validation. Check account information and try again. |
| 422 | err_tos_region_not_configured | Not configured for your region |
| 422 | err_transfer_not_awaiting_funds | Transfer is not awaiting funds |
| 422 | err_derived_account_not_supported | This account does not support derivation |
| 428 | err_signup_required | Signup required |
| 428 | err_bvn_required | BVN not found |
Updated 4 days ago