API Error Catalog

Complete reference of error codes and validation errors across all API endpoints

This page catalogs all error responses returned by the Caliza API. Errors fall into two categories: coded errors with a machine-readable code, and validation errors with a list of field-level messages.


Error response formats

Standard error response

All non-validation errors return this structure:

{
  "code": "beneficiary.not_found",
  "message": "Beneficiary not found",
  "traceId": "abc123",
  "path": "/v1/beneficiaries/xyz"
}
FieldTypeDescription
codestringMachine-readable error code (see tables below)
messagestringHuman-readable error message
traceIdstringTrace identifier for debugging — include this when contacting support
pathstringThe request URI that triggered the error

Validation error response

Request body validation failures return:

{
  "errors": [
    "External id is required",
    "Beneficiary type is required"
  ]
}
FieldTypeDescription
errorsstring[]List of human-readable field errors

Common error codes

These error codes can appear across multiple endpoints. When you receive one, you can look it up here regardless of which endpoint returned it.

Resource not found (404)

CodeMessageDescription
beneficiary.not_foundBeneficiary not foundThe beneficiary ID does not exist or is not owned by your integrator
integrator.not_foundIntegrator not foundThe authenticated integrator does not exist
simulation.not_foundSimulation not foundThe simulation ID does not exist
transaction.not_foundTransaction not foundThe transaction ID does not exist
flow_of_funds.not_foundFlow of funds not foundNo matching payment flow exists for the given currency pair and integrator
recipient.not_foundRecipient not foundThe recipient ID does not exist or is not owned by your integrator
virtual_account.not_foundVirtual Account not foundNo virtual accounts exist for the given beneficiary or integrator
payment-instructions.not_found(dynamic)Beneficiary is not enabled, or no deposit configuration exists for the requested payment rail
block.not_found(dynamic)No root crypto deposit block found for the transaction's flow of funds

Precondition failed (412)

CodeMessageDescription
callback_url.not_setCallback URL must be set before creating beneficiaryConfigure your webhook URL before creating beneficiaries
beneficiary.operation_not_permittedBeneficiaries can only be updated while pendingBeneficiary status is not PENDING
beneficiary.cannot_create_operationBeneficiary can not create operationBeneficiary is not in a valid state to transact
simulation.is_already_executedSimulation is already executedThe simulation was already used to create a transaction — create a new one
simulation.is_expiredSimulation is expiredThe simulation TTL has elapsed — create a new one
simulation.exchange_rate_changed_too_muchSimulation exchange rate changed too muchMarket rate drifted beyond the acceptable threshold since the simulation was created
integrator.efx_not_enabledeFX transactions are not enabled for this integratorefx=true in request but your integrator does not have eFX capability
integrator.invalid_fee_configurationIntegrator fee configuration is not configured properlyYour fee/contract configuration is missing or invalid — contact support
transaction.not_efx_transactionACAM220 files can only be uploaded for eFX transactionsThe transaction is not an eFX transaction
operation.not_allowed_outside_sandboxThis resource is not available on productionThe operation is only available in the sandbox environment

Bad request (400)

CodeMessageDescription
flow_of_funds.insufficient-fundsInsufficient funds. Available available - Required requiredBeneficiary balance is insufficient for the transaction amount
flow_of_funds.invalid-amountMinimum amount for transaction/payment is minimumTransaction amount is below the minimum for the payment rail
flow_of_funds.invalid-beneficiary-typeIt's not possible to execute transaction/payment for type beneficiariesBeneficiary type not supported for the configured payment rail
limit.daily_limit_reachedThe max daily amount is 'limit'Daily transaction limit exceeded
limit.sandbox_limit_reachedThe max amount of sandbox is 'limit'Sandbox transaction limit exceeded
transaction.invalid_transfer_purpose_for_countryTransfer purpose purpose is invalid for country countryInvalid transfer purpose for the destination country
validation.invalid_enum_value(dynamic)An invalid enum value was provided (e.g., currency code, payment rail type)
validation.invalid_file_type(dynamic)Uploaded file has an unsupported type

Conflict (409)

CodeMessageDescription
beneficiary.conflictBeneficiary already existsA beneficiary with the same integratorBeneficiaryId already exists

Unprocessable entity (422)

CodeMessageDescription
virtual_account.unprocessableUnprocessable Virtual Account Request: detailVirtual account creation validation failed — see detail message
payout.unprocessableUnprocessable Payout Request: detailPayout request is missing required configuration
flexiblekyx.missing-kyx-requirementsPlease complete KYX requirements before proceedingBeneficiary has not completed required KYC/KYB steps

Simulation-specific bad requests (400)

These errors are returned when the simulation request body is malformed:

MessageTrigger
toCurrencyCode or to.currencyCode destination are requiredNo destination currency specified
type is required when destination is setdestination is set but type is null
Only one of from or to can be setBoth from.value and to.value are positive
from or to value is requiredNeither from.value nor to.value is positive
toCurrencyCode is required when dashboardExperience is setdashboardExperience is true but to.currencyCode is null
When payout is informed, the recipient id is requiredpayout is set but recipientId is null (V2 only)
📘

InsufficientFundsException during simulation creation is surfaced in the response body's amountValidation field rather than as an HTTP error. The simulation is still created successfully with the warning attached.


Validation errors by domain

These are field-level validation errors returned in the validation error response format (see above).

Beneficiary fields

Applies to POST /v1/beneficiaries and PUT /v1/beneficiaries/{id}.

Common fields

MessageTrigger
External id is requiredintegratorBeneficiaryId is null
Beneficiary type is requiredtype is null
Beneficiary person has to be filled for INDIVIDUAL users or business has to be filled for BUSINESS typeType/data mismatch

Person fields (INDIVIDUAL beneficiaries)

MessageTrigger
Name is requiredperson.firstName is blank
Lastname is requiredperson.lastName is blank
Firstname is too longperson.firstName exceeds 100 characters
Lastname is too longperson.lastName exceeds 100 characters
Date of birth is requiredperson.dateOfBirth is null
ID is requiredperson.idNumber is blank
Email is requiredperson.email is blank
Email format is wrongperson.email fails email validation
Telephone is requiredperson.phoneNumber is blank
Phone number format is wrong the expected one is +551519874562539Does not match + followed by 6–20 digits
Address is requiredperson.address is null

Address fields

These apply to both person and business addresses:

MessageTrigger
Street one is requiredaddress.streetOne is blank
Street one is too longaddress.streetOne exceeds 100 characters
City is requiredaddress.city is blank
City is too longaddress.city exceeds 100 characters
Zipcode is requiredaddress.zipcode is blank
State is requiredaddress.state is blank
State is too longaddress.state exceeds 3 characters
Country is requiredaddress.country is blank
Country and state should follow ISO 3166-2Invalid ISO 3166-2 country/state combination

Business fields (BUSINESS beneficiaries)

MessageTrigger
Name is requiredbusiness.name is blank
Name is invalidbusiness.name exceeds 60 characters
Date of incorporation is requiredbusiness.dateOfIncorporation is null
Id Number is requiredbusiness.idNumber is blank
Address is requiredbusiness.address is null
Telephone is requiredbusiness.phoneNumber is blank
Email is requiredbusiness.email is blank
Contact must be at list onebusiness.contacts is empty

Transaction fields

Applies to POST /v1/transactions.

MessageTrigger
simulationId requiredsimulationId is null
beneficiaryIp requiredbeneficiaryIp is null

File upload errors (for endpoints accepting documents):

MessageTrigger
File is emptyUploaded file has zero bytes
File size exceeds 10MBUploaded file exceeds the 10 MB limit

Simulation fields

Applies to POST /v1/simulations and POST /v2/simulations.

MessageTrigger
beneficiaryId requiredbeneficiaryId is null (V1 only)
from requiredfrom amount object is null (V1 only)
invalid custom feecustomFees contains invalid fee types or negative values

Payout fields

Applies to POST /v1/transactions/payouts and POST /v1/transactions/sweep-payouts.

MessageTrigger
source is requiredsource is null
sourceType is requiredsourceType is null
transactions is requiredtransactions list is null
amount is requiredA payout transaction's amount is null
target is requiredA payout transaction's target is null
target type is requiredA payout transaction's targetType is null
paymentRailType is requiredA payout transaction's paymentRailType is null

Virtual account fields

Applies to POST /v1/beneficiaries/{beneficiaryId}/virtualAccounts. All return virtual_account.unprocessable (422).

Individual beneficiary validation

MessageTrigger
Person information is required for individual beneficiaryMissing person data
ID number is requiredMissing idNumber
ID number invalid. 5 character minimum. 20 character maximum.idNumber not 5–20 alphanumeric characters
First name is requiredMissing person.firstName
Last name is requiredMissing person.lastName
Country is requiredMissing beneficiary country
Date of birth is requiredMissing person.dateOfBirth
Email is requiredMissing person.email
Phone number is requiredMissing person.phoneNumber
Person address is requiredMissing person.address
Person street address is requiredMissing person.address.streetOne
Person city is requiredMissing person.address.city
Person state is requiredMissing person.address.state
Person postal code is requiredMissing person.address.zipcode
Person country is requiredMissing person.address.country

Business beneficiary validation

MessageTrigger
Business information is required for business beneficiaryMissing business data
Business name is requiredMissing business.name
Business ID number is requiredMissing business.idNumber
Business email is requiredMissing business.email
Business phone number is requiredMissing business.phoneNumber
Date of incorporation is requiredMissing business.dateOfIncorporation
Business address is requiredMissing business.address
Business street address is requiredMissing business.address.streetOne
Business city is requiredMissing business.address.city
Business state is requiredMissing business.address.state
Business postal code is requiredMissing business.address.zipcode
Business country is requiredMissing business.address.country
📘

Each entry in business.contacts[] is validated with the same rules as individual person fields.


Recipient fields

Applies to POST /v1/recipients and PUT /v1/recipients/{id}.

Common recipient fields

MessageTrigger
The field recipient.currency is requiredcurrency is null
The field recipient.type is requiredtype is null
The field recipient.details is requireddetails is null
The field recipient.individualName or recipient.businessName is requiredNeither name provided, or both provided
The field recipient.countryOfIncorporation is required when recipient.businessName is providedbusinessName set but countryOfIncorporation is null
The field recipient.countryOfIncorporation should follow ISO 3166-2countryOfIncorporation exceeds 2 characters
The field recipient.beneficiaryId is requiredbeneficiaryId is null when integratorRecipient is false
Nickname max length exceedednickname exceeds 50 characters
Nickname contains invalid charactersnickname contains characters outside letters, numbers, spaces, and -().,_'

ACH (USD) details

MessageTrigger
accountNumber is requiredMissing details.accountNumber
routingNumber is requiredMissing details.routingNumber
bankName is requiredMissing details.bankName
bankCountry is requiredMissing details.bankCountry
accountType is requiredMissing details.accountType
accountType must be one of: Checking, Savings, GeneralLedger, LoanInvalid accountType value
recipientAddress is requiredMissing details.recipientAddress
recipientAddress.street1 is requiredMissing street1
recipientAddress.city is requiredMissing city
recipientAddress.state is requiredMissing state
recipientAddress.postalCode is requiredMissing postal code
recipientAddress.country is requiredMissing country

WIRE (USD) details

MessageTrigger
accountNumber is requiredMissing details.accountNumber
routingNumber is requiredMissing details.routingNumber
routingNumber must be exactly 9 charactersInvalid length
bankName is requiredMissing details.bankName
bankAddress is requiredMissing details.bankAddress
bankAddress.street1 is requiredMissing bank street1
bankAddress.city is requiredMissing bank city
bankAddress.state is requiredMissing bank state
bankAddress.postalCode is requiredMissing bank postal code
bankAddress.country is requiredMissing bank country
recipientAddress is requiredMissing details.recipientAddress
bank.not_foundroutingNumber does not match a known bank

Recipient address sub-fields follow the same pattern as ACH.

SWIFT (USD) details

MessageTrigger
swiftCode is requiredMissing details.swiftCode
swiftCode format is invalidInvalid SWIFT/BIC format
bankName is requiredMissing details.bankName
bankAddress is requiredMissing details.bankAddress
bankAddress.country cannot be US for SWIFTUse WIRE for US domestic transfers
iban or accountNumber is requiredNeither provided
iban format is invalidInvalid IBAN format
recipientAddress is requiredMissing details.recipientAddress
bank.not_foundSWIFT code or IBAN does not match a known bank

Bank and recipient address sub-fields follow the same pattern as WIRE.

PIX (BRL) details

MessageTrigger
pixKey is requiredMissing details.pixKey
documentNumber is requiredMissing details.documentNumber
documentNumber must be a valid CPF (11 digits) or CNPJ (14 digits)Invalid length after stripping formatting

SPEI (MXN) details

MessageTrigger
clabe is requiredMissing details.clabe
bankCode is requiredMissing details.bankCode
receiverName is requiredMissing details.receiverName

COP (COP) details

MessageTrigger
accountType is requiredMissing details.accountType
accountType must be one of: CHECKING, SAVINGSInvalid value
bankAccount is requiredMissing details.bankAccount
bankCode is requiredMissing details.bankCode
documentId is requiredthirdPartyWithdrawal is true but documentId missing
documentType is requiredthirdPartyWithdrawal is true but documentType missing
email is requiredthirdPartyWithdrawal is true but email missing

CVU (ARS) details

MessageTrigger
recipientName is requiredMissing details.recipientName
cvu is requiredMissing details.cvu

RTP (USD) details

MessageTrigger
accountNumber is requiredMissing details.accountNumber
routingNumber is requiredMissing details.routingNumber

Crypto details

MessageTrigger
walletAddress is requiredMissing or blank details.walletAddress
memo is requiredPayment rail is STELLAR but details.memo is missing