Sandbox Testing for Payouts
Use Stage test accounts to trigger specific payout rejection scenarios before going live with Bank Transfer payouts.
Before you send payouts to real beneficiaries in Production, use the Stage environment to confirm your integration handles both successful payouts and the rejection scenarios beneficiaries' banks return in practice. This guide covers the Bank Transfer payout sandbox flow and provides dedicated test accounts, one per country, that deterministically trigger each rejection scenario.
Before You Begin
- Valid API credentials (access token) for Stage.
- Familiarity with Send funds via Bank Transfer and the Create a Payout request structure.
- A webhook endpoint configured to receive payout status notifications.
How the Sandbox Simulates Rejections
Stage does not move real money, but it follows the same flow as Production: Localpayment receives your request, validates the request structure, and if it's correctly formatted, sets it to In Progress and routes it for a simulated bank response based on the account details you submit. That response decides whether to approve or reject the payout. You find out the result the normal way: by webhook, or by querying the transaction status.
Any payout with a correctly structured request is approved automatically. The test accounts in this guide are the exception: each one is mapped to a specific rejection reason, so you can reproduce that error condition on demand instead of waiting for it to occur naturally.
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#31467c', 'primaryTextColor': '#ffffff', 'primaryBorderColor': '#0c1a29', 'actorBkg': '#31467c', 'actorBorder': '#0c1a29', 'actorTextColor': '#ffffff', 'actorLineColor': '#0c1a29', 'signalColor': '#0c1a29', 'signalTextColor': '#0c1a29', 'labelBoxBkgColor': '#31467c', 'labelBoxBorderColor': '#0c1a29', 'labelTextColor': '#ffffff', 'loopTextColor': '#0c1a29', 'noteBkgColor': '#ffffff', 'noteBorderColor': '#31467c', 'noteTextColor': '#0c1a29'}}}%%
sequenceDiagram
autonumber
participant Dev as Your Backend
participant LP as Localpayment (Stage)
participant Bank as Simulated Bank Response
Dev->>LP: POST /api/payout/ (test beneficiary.bank details)
LP->>LP: Validate request fields
LP-->>Dev: Response: status In Progress
LP->>Bank: Route the payout
Bank-->>LP: Approve, or reject with the mapped test code
alt Rejected
LP-->>Dev: Webhook: status REJECTED (code / description)
else Approved
LP-->>Dev: Webhook: status COMPLETED
end
Dev->>LP: (or) GET payout status
LP-->>Dev: Current status
- You submit a payout in Stage using one of the test accounts from the tables below.
- Localpayment validates the request structure and, if it's valid, sets the payout to
In Progresswhile it routes for a simulated bank response. - The simulated bank response evaluates the beneficiary account details. A correctly structured account that doesn't match one of the test accounts below is approved automatically. A test account is rejected with its mapped code.
- Localpayment notifies you of the final status through your webhook endpoint, or you retrieve it by querying the transaction. Use this to confirm your integration reacts correctly to
REJECTEDpayouts without waiting for a real bank rejection.
These test accounts are for Stage only. Sending a payout to one of these accounts in Production will not produce the same result, since Production routes to real banks.
Rejection Codes
Each test account below returns one of these five outcomes. All resolve to a REJECTED payout with the corresponding status.code and status.description.
| Code | Description | Scenario |
|---|---|---|
701 | InvalidAccountNumber | The account number fails format or check-digit validation. |
702 | InvalidAccountNumber - Account Closed | The account exists in format but is closed or inactive. |
703 | InvalidAccountNumber - Account Blocked | The account exists in format but is blocked. |
640 | Transaction rejected by AML | The transaction is rejected by AML controls. |
833 | Error account does not accept transfers | The destination account or institution does not accept incoming transfers. |
Test Accounts by Country
Each tab lists the beneficiary bank details for one country. Every scenario shares the same paymentMethod.code and, unless noted otherwise, the same beneficiary.bank.code and beneficiary.bank.name for that country. account.details is the value to send in beneficiary.bank.account.number (or beneficiary.bank.account.alias, where noted) to trigger the matching rejection code. Description is the status.description you'll see in the response and webhook for that code.
Payment method: COELSA, code 0010 · Bank: BANCO DE GALICIA (007) · account.type: S · account.details is the CBU
| Code | account.details | Description |
|---|---|---|
701 | 0070001600000000000017 | InvalidAccountNumber |
702 | 0070001600000000000024 | InvalidAccountNumber - Account Closed |
703 | 0070001600000000000031 | InvalidAccountNumber - Account Blocked |
640 | 0070001600000000000048 | Transaction rejected by AML |
833 | 0070001600000000000055 | Error account does not accept transfers |
account.type C (checking) also works for these scenarios.
Payment method: code 0020 · Any institution · account.type: S · beneficiary.bank.code is not yet published, confirm the correct value with your account manager before going live.
| Code | account.details | Description |
|---|---|---|
701 | 00000001 | InvalidAccountNumber |
702 | 00000002 | InvalidAccountNumber - Account Closed |
703 | 00000003 | InvalidAccountNumber - Account Blocked |
640 | 00000004 | Transaction rejected by AML |
833 | 00000005 | Error account does not accept transfers |
Payment method: PIX, code 0031
PIX payouts identify the beneficiary through beneficiary.bank.account.alias (the PIX key) instead of a bank account number. Some scenarios below use a standard bank account instead, to also cover Bank Transfer beneficiaries.
| Code | account.details | Description |
|---|---|---|
701 | account.alias: 00100000001 | InvalidAccountNumber |
702 | Bank 001 BCO DO BRASIL S.A. · account.number: 00001235-0 | InvalidAccountNumber - Account Closed |
703 | Bank 001 BCO DO BRASIL S.A. · account.number: 00001234-1, account.type: S | InvalidAccountNumber - Account Blocked |
640 | account.alias: [email protected] | Transaction rejected by AML |
833 | account.alias: 00100000005 | Error account does not accept transfers |
Payment method: code 0050 · Bank: BANCO DE CHILE (001) · account.type: S
| Code | account.details | Description |
|---|---|---|
701 | 001000000001 | InvalidAccountNumber |
702 | 001000000002 | InvalidAccountNumber - Account Closed |
703 | 001000000003 | InvalidAccountNumber - Account Blocked |
640 | 001000000004 | Transaction rejected by AML |
833 | 001000000005 | Error account does not accept transfers |
account.type accepts S (savings), C (checking), or V (vista).
These test scenarios use the ACH rail (code 0060). Any institution accepts these test values. account.type: S.
| Code | account.details | Description |
|---|---|---|
701 | 000000001 | InvalidAccountNumber |
702 | 000000002 | InvalidAccountNumber - Account Closed |
703 | 000000003 | InvalidAccountNumber - Account Blocked |
640 | 000000004 | Transaction rejected by AML |
This scenario uses Bre-B (code 0062) instead. account.type: P.
| Code | account.details | Description |
|---|---|---|
833 | +573000000005 | Error account does not accept transfers |
Payment method: code 0070 · Bank: BANCO DE COSTA RICA (0152) · account.type: S · account.details is the IBAN (22 characters)
| Code | account.details | Description |
|---|---|---|
701 | CR38015200000000000001 | InvalidAccountNumber |
702 | CR11015200000000000002 | InvalidAccountNumber - Account Closed |
703 | CR81015200000000000003 | InvalidAccountNumber - Account Blocked |
640 | CR54015200000000000004 | Transaction rejected by AML |
833 | CR27015200000000000005 | Error account does not accept transfers |
Payment method: code 0080 · Bank: BANCO BHD (101012308) · account.details is the IBAN (28 characters)
| Code | account.details | Description |
|---|---|---|
701 | DO13BAGR00000000000000000001 | InvalidAccountNumber |
702 | DO83BAGR00000000000000000002 | InvalidAccountNumber - Account Closed |
703 | DO56BAGR00000000000000000003 | InvalidAccountNumber - Account Blocked |
640 | DO29BAGR00000000000000000004 | Transaction rejected by AML |
833 | DO02BAGR00000000000000000005 | Error account does not accept transfers |
Payment method: code 0100 · Any institution · account.type: S · account.details is the IBAN (28 characters)
| Code | account.details | Description |
|---|---|---|
701 | SV50ACAT00000000000000000001 | InvalidAccountNumber |
702 | SV23ACAT00000000000000000002 | InvalidAccountNumber - Account Closed |
703 | SV93ACAT00000000000000000003 | InvalidAccountNumber - Account Blocked |
640 | SV66ACAT00000000000000000004 | Transaction rejected by AML |
833 | SV39ACAT00000000000000000005 | Error account does not accept transfers |
Payment method: code 0110 · Any institution · account.type: S · beneficiary.bank.code is not yet published, confirm the correct value with your account manager before going live.
| Code | account.details | Description |
|---|---|---|
701 | 0000000001 | InvalidAccountNumber |
702 | 0000000002 | InvalidAccountNumber - Account Closed |
703 | 0000000003 | InvalidAccountNumber - Account Blocked |
640 | 0000000004 | Transaction rejected by AML |
833 | 0000000005 | Error account does not accept transfers |
Payment method: code 0120 · Any institution · account.type: S · beneficiary.bank.code is not yet published, confirm the correct value with your account manager before going live.
| Code | account.details | Description |
|---|---|---|
701 | 00000000001 | InvalidAccountNumber |
702 | 00000000002 | InvalidAccountNumber - Account Closed |
703 | 00000000003 | InvalidAccountNumber - Account Blocked |
640 | 00000000004 | Transaction rejected by AML |
833 | 00000000005 | Error account does not accept transfers |
Payment method: SPEI, code 0130 · Bank: BANAMEX (002) · account.details is the CLABE (18 digits)
| Code | account.details | Description |
|---|---|---|
701 | 002180000000000012 | InvalidAccountNumber |
702 | 002180000000000025 | InvalidAccountNumber - Account Closed |
703 | 002180000000000030 | InvalidAccountNumber - Account Blocked |
640 | 002180000000000041 | Transaction rejected by AML |
833 | 002180000000000054 | Error account does not accept transfers |
Payment method: code 0150 · Any institution · account.type: S · beneficiary.bank.code is not yet published, confirm the correct value with your account manager before going live.
| Code | account.details | Description |
|---|---|---|
701 | 000000000001 | InvalidAccountNumber |
702 | 000000000002 | InvalidAccountNumber - Account Closed |
703 | 000000000003 | InvalidAccountNumber - Account Blocked |
640 | 000000000004 | Transaction rejected by AML |
833 | 000000000005 | Error account does not accept transfers |
Payment method: code 0160 · Any institution · account.type: S · beneficiary.bank.code is not yet published, confirm the correct value with your account manager before going live.
| Code | account.details | Description |
|---|---|---|
701 | 000000000001 | InvalidAccountNumber |
702 | 000000000002 | InvalidAccountNumber - Account Closed |
703 | 000000000003 | InvalidAccountNumber - Account Blocked |
640 | 000000000004 | Transaction rejected by AML |
833 | 000000000005 | Error account does not accept transfers |
Payment method: code 0170 · Bank: Interbank (003) · account.type: S · account.details is the CCI (20 digits)
| Code | account.details | Description |
|---|---|---|
701 | 00300029183746555075 | InvalidAccountNumber |
702 | 00300047392810555078 | InvalidAccountNumber - Account Closed |
703 | 00300091827364777776 | InvalidAccountNumber - Account Blocked |
640 | 00300053748291777777 | Transaction rejected by AML |
833 | 00300062839471777776 | Error account does not accept transfers |
Field Mapping Reference
The test accounts above populate the standard beneficiary.bank object from Create a Payout:
| Field | Notes |
|---|---|
beneficiary.bank.code | Required for Argentina, Chile, Colombia (ACH), and Peru. Not required for Mexico (CLABE already encodes the bank) or Brazil PIX. |
beneficiary.bank.account.number | Required for most countries. Exclude it when you send a PIX key (Brazil), Peru (Yape), Bolivia (Yape), or Colombia (Bre-B) in account.alias instead. |
beneficiary.bank.account.type | S (savings), C (checking), or V (vista, Chile only). Required for Argentina, Chile, Colombia, and Peru. Not used with a PIX key (Brazil), Peru (Yape), Bolivia (Yape), or Colombia (Bre-B). |
beneficiary.bank.account.alias | Used for a PIX key (Brazil), Peru (Yape), Bolivia (Yape), and Colombia (Bre-B). |
Account numbers that pass check-digit validation (Mexico CLABE, Argentina CBU, and the IBAN formats used by Costa Rica, Dominican Republic, and El Salvador) are structurally valid test values, not real accounts. They exist only to reach the mapped rejection scenario.
Next Steps
Updated 25 days ago
