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

Pestañas Verticales con Banderas

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

FieldRequiredDescription
countryYesPayment processing country code. ISO 3166-1 alpha-2 code.
payment_method_idYesPayment method code chosen to create the Virtual Account.
Payer ObjectYes
payer.nameYesPayer's full name.
payer.emailYesPayer's email.
payer.phoneNoPayer's mobile phone number.
payer.documentYesPayer's document.
payer.ipNoPayer's IP.
user_referenceYesUnique user ID at the merchant side.
Address Object
payer.address.countryNoPayer's address country.
payer.address.stateNoPayer's address state.
payer.address.cityNoPayer's address city.
payer.address.zip_codeNoPayer's address ZIP Code.
payer.address.streetNoPayer's address street.
payer.address.numberNoPayer'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

FieldDescription
idPayment ID.
amountPayment amount.
currencyPayment currency.
created_datePayment's creation date.
statusPayment status.
status_detailDescription of the status of the payment.
status_codePayment status code
payment_method_idID of the selected payment method by the user.
payment_method_typeType can be BANK_TRANSFER.
payment_method_flowPayment method flow, can be DIRECT or REDIRECT.
countryPayment processing country code. ISO 3166-1 alpha-2 code.
Payer Object
payer.namePayer's full name.
payer.user_referenceUnique reference with whom the payer of the payment is identified.
payer.emailPayer's email.
payer.documentPayer'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

FieldRequiredDescription
amountYesPayment amount.
currencyYesPayment currency.
countryYesPayment processing country code. ISO 3166-1 alpha-2 code.
payment_method_idYesPayment method code chosen to create the Virtual Account.
payment_method_flowYesIndicates the flow type, which can be DIRECT or REDIRECT.
Payer ObjectYes
payer.nameYesPayer's full name.
payer.emailYesPayer's email.
payer.phoneNoPayer's mobile phone number.
payer.documentYesPayer's document.
payer.ipNoPayer's IP.
payer.user_referenceYesUnique user ID at the merchant side.
Address ObjectNo
payer.address.countryNoPayer's address country.
payer.address.stateNoPayer's address state.
payer.address.cityNoPayer's address city.
payer.address.zip_codeNoPayer's address ZIP Code.
payer.address.streetNoPayer's address street.
payer.address.numberNoPayer'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

FieldDescription
idPayment ID.
amountPayment amount.
currencyPayment currency.
created_datePayment's creation date.
statusPayment status.
status_detailDescription of the status of the payment.
status_codePayment status code.
payment_method_idID of the selected payment method by the user.
payment_method_typeType can be BANK_TRANSFER.
payment_method_flowPayment method flow, can DIRECT or REDIRECT.
Bank Transfer Object
bank_transfer.bank_account_typeThe type of ticket can be CHECKING or SAVING.
bank_transfer.bank_nameName of the bank.
bank_transfer.bank_codeCode of the bank.
bank_transfer.beneficiary_nameName of the account holder.
bank_transfer.bank_accountBank account number.
bank_transfer.bank_account_labelLabel to be displayed related to bank_account.
bank_transfer.beneficiary_document_typeType of document of the account holder.
bank_transfer.beneficiary_documentDocument number of the account holder.
bank_transfer.referenceReference code for the payer to add on payment.
bank_transfer.redirect_urlURL of the full version of the ticket. In case you want to redirect.
bank_transfer.user_payment_amountAmount the user needs to pay.
bank_transfer.payment_instructionInstructions for making the payment.
order_idID of the payment given by the merchant in their system. Can retrieve payments based on this ID. (is not mandatory)
notification_urlURL 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

FieldRequiredDescription
countryYesPayment processing country code. ISO 3166-1 alpha-2 code.
payment_method_idYesPayment method code chosen to create the virtual account.
Payer ObjectYes
payer.nameYesName of the payer.
payer.emailYesEmail of the payer.
payer.user_referenceYesUnique 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

FieldDescription
idPayment ID.
countryPayment processing country code. ISO 3166-1 alpha-2 code.
created_datePayment's creation date.
statusPayment status.
status_codePayment status code.
status_detailPayment status detail.
payment_method_idPayment method code chosen to create the virtual account
Virtual Account Object
virtual_account.numberVirtual account number that represents the unique reference to pay in the store. It can be used to generate the barcode.
Payer Object
payer.nameName of the payer.
payer.emailEmail of the payer.
payer.user_referenceUnique 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

FieldDescription
idPayment ID.
countryPayment processing country code. ISO 3166-1 alpha-2 code.
amountPayment amount.
currencyPayment currency.
statusStatus of the payment.
status_detailDescription of the status of the payment.
status_codeStatus code.
payment_method_idID of the selected payment method by the user
payment_method_typeType can be TICKET.
payment_method_flowPayment method flow can DIRECT or REDIRECT.
order_idID of the payment given by the merchant in their system. Can retrieve payments based on this ID.
Extra Info Object
extra_info.payer_account_numberVirtual account number that represents the unique reference to pay in the store. It can be used to generate the barcode.
Payer Object
payer.nameName of the payer.
payer.user_referenceUnique reference with whom the payer of the payment is identified.
payer.emailEmail of the payer.