Static Virtual Accounts
Discover the benefits of Static Virtual Accounts and understand how they work.
Static Virtual Accounts (SVA) are fixed account numbers that are linked to specific merchants or customers, making them ideal for customer-initiated recurring payments and long-term relationships in both B2B and B2C contexts.
These accounts remain constant over time and do not expire.
Types of Static Virtual Accounts
Based on payment initiation
There are two different types of flows depending on how payments are initiated:
- Merchant Initiated Payments (MIP): These are scenarios where, to process a payment, the merchant must always send a payment request via API to dLocal. The payment can only be completed for the amount specified in the merchant's request to dLocal.
- Customer Initiated Payments (CIP): The merchant needs to request the creation of a virtual account via API. Once a Static Virtual Account is created, the merchant's customer can directly make payments to the account without requiring the merchant to first send a request to dLocal. In this flow, payments are created in dLocal after the customer's funds are received, allowing for flexibility in the payment amount, as it does not need to be predefined.
Based on payment method
Additionally, SVA can be classified based on the payment method:
- Bank Static Virtual Accounts: Fixed account numbers that are issued to specific merchants or customers and associated with a bank. The use cases for the bank virtual accounts are merchants with business customers, marketplace/platform merchants with sub-merchants, and merchants with retail customers.
- Cash Static Virtual Accounts: Specialized account solutions that allow merchants to receive and reconcile payments made via cash deposits. These accounts are ideal for cash-driven markets where digital banking penetration may be limited and cash remains a primary payment method. By providing a unique reference for each merchant or transaction, these accounts enable efficient tracking and reconciliation of cash payments.
Availability
Brazil
Minimum Amount: 1 BRL
Notification delay: Immediate
Flow: REDIRECT
, DIRECT
MIP: Not available
CIP: Available
-
"payment_method_id" = "FC"
Bank Static Virtual Accounts:Available
-
"payment_method_id" = "FC"
Cash Static Virtual Accounts: Not available
Mexico
Minimum Amount: 1 MXN
Notification delay: Immediate
Flow: REDIRECT
, DIRECT
MIP: Available
"payment_method_id" = "SE"
"payment_method_id" = "IO"
CIP: Available
"payment_method_id" = "FC"
"payment_method_id" = "OU"
Bank Static Virtual Accounts: Available
"payment_method_id" = "SE"
"payment_method_id" = "IO"
"payment_method_id" = "FC"
Cash Static Virtual Accounts: Available
"payment_method_id" = "OU"
Indonesia
Minimum Amount: 1 IDR
Notification delay: Immediate
Flow: REDIRECT
, DIRECT
MIP: Available
"payment_method_id" = "IO"
CIP: Available
"payment_method_id" = "VS"
Bank Static Virtual Accounts: Available
"payment_method_id" = "IO"
"payment_method_id" = "VS"
Cash Static Virtual Accounts: Not available
Philippines
Minimum Amount: 1 PHP
Notification delay: Immediate
Flow: REDIRECT
, DIRECT
MIP: Not available
CIP: Available
"payment_method_id" = "VS"
Bank Static Virtual Accounts: Available
"payment_method_id" = "VS"
Cash Static Virtual Accounts: Not available
Nigeria
Minimum Amount: 51 NGN
Notification delay: Immediate
Flow: REDIRECT
, DIRECT
MIP: Available
"payment_method_id" = "IO"
CIP: Not available
Bank Static Virtual Accounts: Available
"payment_method_id" = "IO"
Cash Static Virtual Accounts: Not available
Japan
Minimum Amount: 1 JPY
Notification delay: Immediate
Flow: REDIRECT
, DIRECT
MIP: Available
"payment_method_id" = "IO"
CIP: Not available
Bank Static Virtual Accounts: Available
"payment_method_id" = "IO"
Cash Static Virtual Accounts:Not available
Overall Flow
1. Customer Initiated Payments using Bank Static Virtual Accounts
Captured below is the flow for the Bank Static Virtual Account creation and receiving payments without merchant instructions.
Bank account creation and unique reference account assignment
Flow
Example request
{
"country": "MX",
"payment_method_id": "FC",
"payment_method_flow": "DIRECT",
"payer": {
"name": "Jane Doe",
"user_reference": "301371669",
"email": "[email protected]",
"phone": "+529848774040",
"document": "99999999",
"ip": "179.27.83.210",
"address": {
"country": "MX",
"state": "Mexico DF",
"city": "Mexico DF",
"zip_code": "403516",
"street": "Maddo Vaddo",
"number": "1207"
},
}
}
Request params
Field | Required | Description |
---|---|---|
country | Yes | Payment processing country code. ISO 3166-1 alpha-2 code. |
payment_method_id | Yes | Payment method code chosen to create the Virtual Account. |
Payer Object | Yes | |
payer.name | Yes | Payer's full name. |
payer.email | Yes | Payer's email. |
payer.phone | No | Payer's mobile phone number. |
payer.document | Yes | Payer's document. |
payer.ip | No | Payer's IP. |
user_reference | Yes | Unique user ID at the merchant side. |
Address Object | ||
payer.address.country | No | Payer's address country. |
payer.address.state | No | Payer's address state. |
payer.address.city | No | Payer's address city. |
payer.address.zip_code | No | Payer's address ZIP Code. |
payer.address.street | No | Payer's address street. |
payer.address.number | No | Payer's address number. |
Synchronous response
{
"id": "75c7473a-ab86-4e43-bd39-c840268747d3",
"country": "MX",
"created_date": "2018-12-26T20:37:20.000+0000",
"status": "CREATED",
"status_detail": "The virtual account has been created",
"status_code": "200",
"virtual_bank_account": {
"bank_code": "Arcus",
"branch_code": "Arcus",
"bank_account":"706180323360518000"
},
"payer": {
"name": "Jane Doe",
"user_reference": "301371669",
"email": "[email protected]",
"phone": "+529848774040",
"document": "99999999"
}
}
{
"status": "REJECTED",
"status_detail": "The virtual account creation was rejected",
"status_code": "300",
}
Receive payments without merchant instructions
Flow
IPN (Instant Payment Notification)
{
"id": "D-50217-6753b14d-9463-4833-ac47-b37ff42c1635",
"amount": 300,
"status": "PAID",
"status_detail": "The payment was paid.",
"status_code": "200",
"currency": "MXN",
"country": "MX",
"payment_method_id": "FC",
"payment_method_type": "BANK_TRANSFER",
"payment_method_flow": "DIRECT",
"payer": {
"name": "Jane Doe",
"user_reference": "301371669",
"email": "[email protected]",
"document": "1634874961"
},
"order_id": "56952682",
"notification_url": "http://merchantsite.com/notification/new",
"created_date": "2022-12-20T19:26:5yo t0.000+0000"
}
Response params
Field | Description |
---|---|
id | Payment ID. |
amount | Payment amount. |
currency | Payment currency. |
created_date | Payment's creation date. |
status | Payment status. |
status_detail | Description of the status of the payment. |
status_code | Payment status code |
payment_method_id | ID of the selected payment method by the user. |
payment_method_type | Type can be BANK_TRANSFER . |
payment_method_flow | Payment method flow, can be DIRECT or REDIRECT . |
country | Payment processing country code. ISO 3166-1 alpha-2 code. |
Payer Object | |
payer.name | Payer's full name. |
payer.user_reference | Unique reference with whom the payer of the payment is identified. |
payer.email | Payer's email. |
payer.document | Payer's document. |
2. Merchant Initiated Payments using Bank Static Virtual Accounts
This should be repeated for every transaction but the bank account won’t change.
Bank Static Account creation with payment associated
Example request
{
"amount": 100,
"currency": "MXN",
"country": "MX",
"payment_method_id": "SE",
"payment_method_flow": "DIRECT",
"payer": {
"name": "Jane Doe",
"user_reference": "301371669",
"email": "[email protected]",
"document": "1234567890",
"phone": "+529848774040",
"document": "99999999",
"ip": "179.27.83.210",
"address": {
"country": "MX",
"state": "Mexico DF",
"city": "Mexico DF",
"zip_code": "8858",
"street": "Av. Principal",
"number": "5940"
}
},
"order_id": "34545sk3483kqw0",
"description": "Tshirt",
"notification_url": "http://merchantsite.com/notification/new",
"callback_url": "http://merchantsite.com/success_page"
}
Request params
Field | Required | Description |
---|---|---|
amount | Yes | Payment amount. |
currency | Yes | Payment currency. |
country | Yes | Payment processing country code. ISO 3166-1 alpha-2 code. |
payment_method_id | Yes | Payment method code chosen to create the Virtual Account. |
payment_method_flow | Yes | Indicates the flow type, which can be DIRECT or REDIRECT. |
Payer Object | Yes | |
payer.name | Yes | Payer's full name. |
payer.email | Yes | Payer's email. |
payer.phone | No | Payer's mobile phone number. |
payer.document | Yes | Payer's document. |
payer.ip | No | Payer's IP. |
payer.user_reference | Yes | Unique user ID at the merchant side. |
Address Object | No | |
payer.address.country | No | Payer's address country. |
payer.address.state | No | Payer's address state. |
payer.address.city | No | Payer's address city. |
payer.address.zip_code | No | Payer's address ZIP Code. |
payer.address.street | No | Payer's address street. |
payer.address.number | No | Payer's address number. |
Synchronous response
{
"id": "D-4-3e6e6631-2ed6-4444-65tr-b109af0f5a1d",
"amount": 100,
"currency": "MXN",
"payment_method_id": "IO",
"payment_method_type": "BANK_TRANSFER",
"payment_method_flow": "DIRECT",
"country": "MX",
"bank_transfer": {
"bank_account_type": "CHECKING",
"bank_name": "STP",
"bank_code": "STP",
"beneficiary_name": "DEMERGE MEXICO SA DE CV",
"beneficiary_document_type": "CURP",
"beneficiary_document": "DOTJ900207HASXSX07",
"bank_account": "646180205700879296",
"bank_account_label": "CLABE",
"reference": "64618020",
"redirect_url": "https://pay.dlocal.com/gmf-apm/payments/M-450359a6-b3a6-4415-82a4-7965tr370370",
"user_payment_amount": 100,
"payment_instruction": "Ingresa a tu banca en línea y realiza la transferencia a la siguiente cuenta. Recuerda que no se pueden hacer pagos en ventanilla.",
"expiration_date": "2023-07-06T00:16:02.500+0000"
},
"ticket": {},
"created_date": "2023-07-05T22:16:02.000+0000",
"status": "PENDING",
"status_detail": "The payment is pending.",
"status_code": "100",
"order_id": "34545sk3483kqw0",
"notification_url": "http://merchantsite.com/notification/new"
}
{
"status": "REJECTED",
"status_detail": "The payment was rejected",
"status_code": "300",
}
Response params
Field | Description |
---|---|
id | Payment ID. |
amount | Payment amount. |
currency | Payment currency. |
created_date | Payment's creation date. |
status | Payment status. |
status_detail | Description of the status of the payment. |
status_code | Payment status code. |
payment_method_id | ID of the selected payment method by the user. |
payment_method_type | Type can be BANK_TRANSFER . |
payment_method_flow | Payment method flow, can DIRECT or REDIRECT . |
Bank Transfer Object | |
bank_transfer.bank_account_type | The type of ticket can be CHECKING or SAVING . |
bank_transfer.bank_name | Name of the bank. |
bank_transfer.bank_code | Code of the bank. |
bank_transfer.beneficiary_name | Name of the account holder. |
bank_transfer.bank_account | Bank account number. |
bank_transfer.bank_account_label | Label to be displayed related to bank_account. |
bank_transfer.beneficiary_document_type | Type of document of the account holder. |
bank_transfer.beneficiary_document | Document number of the account holder. |
bank_transfer.reference | Reference code for the payer to add on payment. |
bank_transfer.redirect_url | URL of the full version of the ticket. In case you want to redirect. |
bank_transfer.user_payment_amount | Amount the user needs to pay. |
bank_transfer.payment_instruction | Instructions for making the payment. |
order_id | ID of the payment given by the merchant in their system. Can retrieve payments based on this ID. (is not mandatory) |
notification_url | URL where dLocal will send notifications associated to changes to this payment. |
3. Customer Initiated Payments using Cash Static Virtual Accounts
Cash Account Creation and unique reference account assignment
Flow
Example request
{
"country": "MX",
"payment_method_id": "OU",
"payer": {
"name": "Jane Doe",
"user_reference": "123456789",
"email": "[email protected]"
}
}
Request params
Field | Required | Description |
---|---|---|
country | Yes | Payment processing country code. ISO 3166-1 alpha-2 code. |
payment_method_id | Yes | Payment method code chosen to create the virtual account. |
Payer Object | Yes | |
payer.name | Yes | Name of the payer. |
payer.email | Yes | Email of the payer. |
payer.user_reference | Yes | Unique user ID at the merchant side. |
Synchronous response
{
"id": "75c7473a-ab86-4e43-bd39-c840268747d3",
"country": "MX",
"created_date": "2024-12-26T20:37:20.000+0000",
"status": "CREATED",
"status_detail": "The virtual account has been created",
"status_code": "200",
"external_reference": "5346523565",
"virtual_account": {
"number":"9610001673128006"
},
"payer": {
"name": "Jane Doe",
"user_reference": "301371669",
"email": "[email protected]"
}
}
{
"status": "REJECTED",
"status_detail": "The virtual account creation was rejected",
"status_code": "300",
}
Response params
Field | Description |
---|---|
id | Payment ID. |
country | Payment processing country code. ISO 3166-1 alpha-2 code. |
created_date | Payment's creation date. |
status | Payment status. |
status_code | Payment status code. |
status_detail | Payment status detail. |
payment_method_id | Payment method code chosen to create the virtual account |
Virtual Account Object | |
virtual_account.number | Virtual account number that represents the unique reference to pay in the store. It can be used to generate the barcode. |
Payer Object | |
payer.name | Name of the payer. |
payer.email | Email of the payer. |
payer.user_reference | Unique reference with whom the payer of the payment is identified. |
Receive payments without merchant instructions
Flow
IPN (Instant Payment Notification)
{
"id": "D-50217-6753b14d-9463-4833-ac47-b37ff42c1635",
"amount": 300,
"status": "PAID",
"status_detail": "The payment was paid",
"status_code": "200",
"currency": "MXN",
"country": "MX",
"payment_method_id": "OU",
"payment_method_type": "TICKET",
"payment_method_flow": "DIRECT",
"payer": {
"name": "Jane Doe",
"user_reference": "301371669",
"email": "[email protected]"
},
extra_info {
"payer_account_number": "9610001673128006"
},
"order_id": "56952682",
"notification_url": "http://merchantsite.com/notifications",
"created_date": "2024-10-20T19:26:5yo t0.000+0000"
}
Response params
Field | Description |
---|---|
id | Payment ID. |
country | Payment processing country code. ISO 3166-1 alpha-2 code. |
amount | Payment amount. |
currency | Payment currency. |
status | Status of the payment. |
status_detail | Description of the status of the payment. |
status_code | Status code. |
payment_method_id | ID of the selected payment method by the user |
payment_method_type | Type can be TICKET . |
payment_method_flow | Payment method flow can DIRECT or REDIRECT . |
order_id | ID of the payment given by the merchant in their system. Can retrieve payments based on this ID. |
Extra Info Object | |
extra_info.payer_account_number | Virtual account number that represents the unique reference to pay in the store. It can be used to generate the barcode. |
Payer Object | |
payer.name | Name of the payer. |
payer.user_reference | Unique reference with whom the payer of the payment is identified. |
payer.email | Email of the payer. |
Updated 2 days ago