---
updatedAt: 2026-10-14T10:12:02.000Z
agentTools:
  projectIndex: https://docs.dlocal.com/llms.txt
---

# Indonesia

Learn about the dLocal supported payment methods in Indonesia.

<HTMLBlock>{`
<style>
  
  .main {
    margin-left: auto;
    margin-right: auto;
    margin-bottom: 5px;
    display: grid;
    grid-template-columns: repeat(3, 1fr); /* Tres columnas */
    width: 740px; /* Ancho máximo de la caja */
}

.overview-card1 {
    position: relative; 
    width: 100%;
    max-width: 233px;
    box-sizing: border-box;
    margin: 0;
}

.overview-card1::after {
    content: '';
    position: absolute;
    right: 0; /* Pega la línea al borde derecho */
    top: 30%; /* Ajusta la posición superior de la línea */
    height: 42%; /* Establece el alto de la línea al 60% */
    width: 1px; /* Grosor de la línea */
    background-color: #D2D8EC; /* Color de la línea */
}

  .overview-card2 {
    position: relative; /* Asegúrate de que el contenedor sea relativo para posicionar el pseudoelemento */
    width: 100%;
    max-width: 233px;
    box-sizing: border-box;
    margin: 0;
}
  
  .overview-card2::after {
    content: '';
    position: absolute;
    right: 0; /* Pega la línea al borde derecho */
    top: 30%; /* Ajusta la posición superior de la línea */
    height: 70%; /* Establece el alto de la línea al 60% */
    width: 1px; /* Grosor de la línea */
    background-color: #D2D8EC; /* Color de la línea */
}
  
.overview-card3 {
    position: relative; /* Asegúrate de que el contenedor sea relativo para posicionar el pseudoelemento */
    width: 100%;
    max-width: 233px;
    box-sizing: border-box;
    margin: 0;
}

.overview-card-upper-side1 {
    height: 105px;
    padding: 20px;
    background-color: transparent;
    text-align: left;
}

.overview-card-bottom-side {
    position: relative;
    width: 100%;
    height: 100%;
    padding: 30px;
    padding-right: 20px;
    background-color: transparent;
    border-radius: 16px;
}

.overview-card-title1 {
    font-family: 'Plus Jakarta Sans', sans-serif;
    font-size: 24px;
    font-weight: 700;
    line-height: 26.4px;
}

.overview-card-content1 {
    font-size: 14px;
    font-weight: 300;
    margin-top: 20px;
    line-height: 20px;
    margin-bottom: 40px!important;
}

.overview-icon1 {
    margin-bottom: -5px;
    margin-top: 20px;
}
  
.doc-link {
        position: relative;
        font-weight: 500;
        color: #21A35B !important;
        text-decoration: none;
        display: block;
    }
  

div:not(.markdown-body) .doc-link:hover {
            text-decoration: none;
            color: #1043FA !important;
            transform: translateX(0.2em);
        }

.overview-card-title1:hover {
    color: #2D59F5 !important;
    cursor:pointer;
    transform: none!important;
}

    div:not(.markdown-body) .doc-link_arrow {
        display: inline-block;
        height: 1em;
        width: auto;
        vertical-align: middle;
        margin-left: 0.2em;
        margin-top: -0.1em;
    }
  
     div:not(.markdown-body) .doc-link:hover .doc-link_arrow-color {
            fill: #1043FA !important;
        }
  
      [data-color-mode="dark"] .overview-icon1 img {
  filter: brightness(0) invert(1);
  transition: filter 0.3s ease;
}
  
/* Media Queries para dispositivos móviles */
@media (max-width: 768px) {
  .main {
    grid-template-columns: repeat(2, 1fr); /* Dos columnas en pantallas medianas */
  }
}

@media (max-width: 480px) {
  .main {
    grid-template-columns: 1fr; /* Una columna en pantallas pequeñas */
}
</style>
  
    <div class="main">

     
      <div class="overview-card1" onclick="parent.location='/docs/indonesia#market-specifications'">
     <div class="overview-card-bottom-side">
       <div class="overview-icon1"><img width="48" src="https://files.readme.io/922681fecfb238c94f7213fa9e0aa1675f1e190ec55beff2b6994169c77fdefc-adjust-circle.svg"  alt="" loading="lazy"><div class="img_overlay img_color_rgba(0,0,0,.2)"></div></div>
           <h3 class="overview-card-title1">Market specifications</h3>
          <p class="overview-card-content1">

            Take a look of all the payment methods available.   
        </p>
          <a href="#country-reference" class="doc-link">Country reference</a>
          <a href="#cards-supported" class="doc-link">Cards supported</a>
          <a href="#alternative-payment-method-supported" class="doc-link">APM supported</a>
        </div>
      </div>
      
      
      <div
        class="overview-card2" onclick="parent.location='/docs/indonesia#cards'">
        <div class="overview-card-bottom-side">
                 <div class="overview-icon1"><img width="48" src="https://files.readme.io/8d450ada4af3880f85f70c5daedebb0bec1b2b6d64479be929af48fdc8d66f40-credit-card.svg"  alt="" loading="lazy"><div class="img_overlay img_color_rgba(0,0,0,.2)"></div></div>
           <h3 class="overview-card-title1">Cards</h3><br>
          <p class="overview-card-content1">

           Find all the information about the card supported capabilities.   
          </p>
          <a href="#capabilities" class="doc-link">Capabilities</a>
          <a href="#how-to-process-card-payments" class="doc-link">Process Card Payments</a>
        </div>
      </div>  
      
      
      <div class="overview-card3" onclick="parent.location='/docs/indonesia#alternative-payment-method'">
    <div class="overview-card-bottom-side">
             <div class="overview-icon1"><img width="48" src="https://files.readme.io/5a59519487455e7af361db8b67a2dee8d71627d4d6e1ed0a0bd805f5da861fcc-money-stack.svg"  alt="" loading="lazy"><div class="img_overlay img_color_rgba(0,0,0,.2)"></div></div>
           <h3 class="overview-card-title1">Alternative Payments</h3>
          <p class="overview-card-content1">

             Learn how to integrate cash, bank transfer or wallet payment.  
        </p>
          <a href="#virtual-accounts" class="doc-link">Virtual Accounts</a>
          <a href="#cash" class="doc-link">Cash</a>
          <a href="#ovo-recurring" class="doc-link">OVO Recurring</a>
          <a href="#dana" class="doc-link">Dana</a>
          <a href="#linkaja" class="doc-link">LinkAja</a>
          <a href="#shopeepay" class="doc-link">ShopeePay</a>
          <a href="#qris" class="doc-link">QRIS</a>
          <a href="#direct-debit" class="doc-link">Direct Debit</a>
        </div>
      </div> 
      
    </div>
`}</HTMLBlock>

***

# Market specifications

Do you want to know more information about Indonesia's market? Go to the [Indonesia’s economy and eCommerce market](https://dlocal.com/online-payment-processors-in-asia/indonesia-payment-methods-processors-ecommerce-market/) article.

## Country reference

| `country` code | `currency` code | `amount` decimals | `document` name | `document` format | `document` required? |
| :------------: | :-------------: | :---------------: | :-------------: | :---------------: | :------------------: |
|      `ID`      |      `IDR`      |         2         |       NIK       |     16 digits     |          Yes         |

## Cards supported

| `payment_method_id` | Brand ID | Name               | `payment_method_type` | Details       | Allowed Flows       | Logo                                                                                |
| :------------------ | :------- | :----------------- | :-------------------- | :------------ | :------------------ | :---------------------------------------------------------------------------------- |
| `CARD`              | `VI`     | Visa               | `CARD`                | Credit Card ​ | `DIRECT` `REDIRECT` | <img src="https://static.dlocal.com/images/providers/checkout/VI.svg" width="40px"> |
| `CARD`              | `VD`     | Visa Debit ​       | `CARD`                | Debit Card ​  | `DIRECT` `REDIRECT` | <img src="https://static.dlocal.com/images/providers/checkout/VD.svg" width="40px"> |
| `CARD`              | `MC`     | Mastercard         | `CARD`                | Credit Card ​ | `DIRECT` `REDIRECT` | <img src="https://static.dlocal.com/images/providers/checkout/MC.svg" width="40px"> |
| `CARD`              | `MD`     | Mastercard Debit ​ | `CARD`                | Debit Card ​  | `DIRECT` `REDIRECT` | <img src="https://static.dlocal.com/images/providers/checkout/MD.svg" width="40px"> |
| `CARD`              | `JC`     | JCB                | `CARD`                | Credit Card ​ | `DIRECT` `REDIRECT` | <img src="https://static.dlocal.com/images/providers/checkout/JC.svg" width="40px"> |
| `CARD`              | `AE`     | American Express   | `CARD`                | Credit Card ​ | `DIRECT` `REDIRECT` | <img src="https://static.dlocal.com/images/providers/checkout/AE.svg" width="40px"> |

## Alternative Payment Method supported

| `payment_method_id` | Name             | `payment_method_type` | Details       | Allowed Flows            | Logo                                                                             |
| :------------------ | :--------------- | :-------------------- | :------------ | :----------------------- | :------------------------------------------------------------------------------- |
| `VS`                | Virtual Accounts | `WALLET`              | Wallet        | `DIRECT` `REDIRECT`      | <img src="https://pay.dlocal.com/views/2.0/images/payments/VS.png" width="40px"> |
| `RO`                | Cash             | `TICKET`              | Cash Payments | `REDIRECT`               | <img src="https://pay.dlocal.com/views/2.0/images/payments/RO.png" width="40px"> |
| `OV`                | OVO Recurring    | `WALLET`              | Wallet        | `DIRECT`<br />`REDIRECT` | <img src="https://static.dlocal.com/images/providers/OVO.png" width="40px">      |
| `DN`                | Dana             | `WALLET`              | Wallet        | `DIRECT` `REDIRECT`      | <img src="https://static.dlocal.com/images/providers/IDDana.png" width="40px">   |
| `LK`                | LinkAja          | `WALLET`              | Wallet        | `REDIRECT`               | <img src="https://static.dlocal.com/images/providers/link-aja.png" width="40px"> |
| `SO`                | ShopeePay        | `WALLET`              | Wallet        | `REDIRECT`               | <img src="https://static.dlocal.com/images/providers/SO.png" width="40px">       |
| `QR`                | QRIS             | `WALLET`              | Wallet        | `DIRECT` `REDIRECT`      | <img src="https://static.dlocal.com/images/providers/QRIS.png" width="40px">     |
| `YD`                | Direct Debit     | `BANK_TRANSFER`       | Bank Transfer | `DIRECT` `REDIRECT`      | <img src="https://static.dlocal.com/images/providers/IO.png" width="40px">       |

***

# Cards

## Capabilities

|                               | Visa Credit                                 | Visa Debit                                  | Mastercard Credit                           | Mastercard Debit                            | JBC                                         | American Express                            |
| :---------------------------- | :------------------------------------------ | :------------------------------------------ | :------------------------------------------ | :------------------------------------------ | :------------------------------------------ | :------------------------------------------ |
| **Minimum amount**            | 11000 IDR                                   | 11000 IDR                                   | 11000 IDR                                   | 11000 IDR                                   | 11000 IDR                                   | 11000 IDR                                   |
| **Refunds**                   | Yes                                         | Yes                                         | Yes                                         | Yes                                         | Yes                                         | Yes                                         |
| **Recurring**                 | Yes                                         | Yes                                         | Yes                                         | Yes                                         | Yes                                         | Yes                                         |
| **Chargeback option**         | Yes                                         | Yes                                         | Yes                                         | Yes                                         | Yes                                         | Yes                                         |
| **Chargeback Dispute option** | Yes                                         | Yes                                         | Yes                                         | Yes                                         | Yes                                         | Yes                                         |
| **Descriptor**                | Can be personalized, depending on provider. | Can be personalized, depending on provider. | Can be personalized, depending on provider. | Can be personalized, depending on provider. | Can be personalized, depending on provider. | Can be personalized, depending on provider. |

## How to process Card Payments?

Learn how to process payments with credit and debit cards with dLocal in our [Card Payments](https://docs.dlocal.com/docs/card-payments) section.

***

# Alternative Payment Method

Wallets are the most popular form of fintech service in Indonesia. They allow the user to pay for almost anything: bill payments, barcode scan transactions for offline payments, and online purchases.

## Virtual Accounts

A Virtual Account is a digital payment method through an account that is created virtually for each customer. To make payments, customers will be referred to their Virtual Accounts.

A Virtual Account consists of a unique customer ID number. It requires the customer to transfer funds to a virtual bank account via a banking mobile application, internet banking, or physically via ATM.

### Capabilities

|                                    | Virtual Accounts                      |
| :--------------------------------- | :------------------------------------ |
| **Min. amount**                    | 11000 IDR                             |
| **Max. expiration time supported** | 30 days (Can be extended by provider) |
| **Notification delay**             | Immediate                             |
| **Refunds**                        | Yes                                   |
| **Flow**                           | `DIRECT` <br /> `REDIRECT`            |

### UX Flow

<Image src="https://files.readme.io/c126c8e24e2c3aab7477245cdcbdd34a66f445b9dd16795ae0144afb3053b073-APM_-_Virtual_Account.png" alt="Payers select their bank, and payment instructions will be displayed." align="center" width="70% " caption="Payers select their bank, and payment instructions will be displayed." />

### Request parameters

| Property              | Type   | Description                                                                                                            | Mandatory? |
| :-------------------- | :----- | :--------------------------------------------------------------------------------------------------------------------- | :--------- |
| `amount`              | Number | .Amount to be charged.                                                                                                 | Yes        |
| `currency`            | String | `IDR`<br /><br />Transaction currency in [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217).                            | Yes        |
| `country`             | String | `ID` <br /><br />Transaction country in [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).      | Yes        |
| `payment_method_id`   | String | `VS` <br /><br />ID of the selected payment method.                                                                    | Yes        |
| `payment_method_flow` | String | `DIRECT` or `REDIRECT`                                                                                                 | Yes        |
| `payer.name`          | String | Name of the payer.                                                                                                     | Yes        |
| `payer.email`         | String | Email of the payer.                                                                                                    | Yes        |
| `payer.document`      | String | Document of the payer.                                                                                                 | Yes        |
| `order_id`            | String | ID of the capture given by the merchant in their system. Think of it as an external id of the capture.                 | No         |
| `notification_url`    | String | Notifications will be sent in every change of status of a payment to the `notification_url` specified by the merchant. | No         |

### Examples

```json Request Example
{
    "amount": 15000,
    "currency": "IDR",
    "country": "ID",
    "payment_method_id": "VS",
    "payment_method_flow": "REDIRECT",
    "payer": {
        "name": "Jane Doe",
        "email": "janedoe@mymail.com",
        "document": "1234567890123456",
        "address": {
            "country": "ID",
            "state": "Jakarta",
            "city": "Jakarta",
            "zip_code": "8858",
            "street": "Main St.",
            "number": "540"
        }
    },
    "order_id": "34545sdk3483kqw0",
    "description": "Tshirt",
    "notification_url": "http://merchantsite.com/notification/new",
    "callback_url": "http://merchantsite.comm/success_page"
}
```
```json Response Example
{
    "id": "D-4-89fb9d50-f025-dg43-b4d2-047114b2bac2",
    "amount": 15000,
    "currency": "IDR",
    "payment_method_id": "VS",
    "payment_method_type": "BANK_TRANSFER",
    "payment_method_flow": "DIRECT",
    "country": "ID",
    "bank_transfer": {},
    "ticket": {},
    "created_date": "2023-01-27T18:30:24.000+0000",
    "status": "PENDING",
    "status_detail": "The payment is pending.",
    "status_code": "100",
    "order_id": "34545hgdsdk3483kqw0",
    "notification_url": "http://merchant.com/notification/new"
}
```

## Cash

Reach the unbanked by enabling your customers to complete cash payments. With dLocal’s solution, you can show your customers a payment code for them to complete the payment in any of the supported payment points.

### Capabilities

|                                    | Cash                       |
| :--------------------------------- | :------------------------- |
| **Min. amount**                    | 11000 IDR                  |
| **Max. expiration time supported** | 48 hours                   |
| **Notification delay**             | Immediate                  |
| **Refunds**                        | Yes                        |
| **Flow**                           | `DIRECT` <br /> `REDIRECT` |

### Request parameters

| Property              | Type   | Description                                                                                                            | Mandatory? |
| :-------------------- | :----- | :--------------------------------------------------------------------------------------------------------------------- | :--------- |
| `amount`              | Number | Amount to be charged.                                                                                                  | Yes        |
| `currency`            | String | `IDR`<br /><br />Transaction currency in [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217).                            | Yes        |
| `country`             | String | `ID` <br /><br />Transaction country in [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).      | Yes        |
| `payment_method_id`   | String | `RO` <br /><br />ID of the selected payment method.                                                                    | Yes        |
| `payment_method_flow` | String | `DIRECT` or `REDIRECT`                                                                                                 | Yes        |
| `payer.name`          | String | Name of the payer.                                                                                                     | Yes        |
| `payer.email`         | String | Email of the payer.                                                                                                    | Yes        |
| `payer.document`      | String | Document of the payer.                                                                                                 | Yes        |
| `order_id`            | String | ID of the capture given by the merchant in their system. Think of it as an external id of the capture.                 | No         |
| `notification_url`    | String | Notifications will be sent in every change of status of a payment to the `notification_url` specified by the merchant. | No         |

### UX Flow

<Image src="https://files.readme.io/e074a0cac35ceba3efcfb5e4c6741151d772cbf35165fb3c4720b64d896874eb-APM_-_Cash.png" alt="Example Cash UI built with the information in the example above." align="center" width="70% " />

### Examples

```json Request Example
{
    "amount": 15000,
    "currency": "IDR",
    "country": "ID",
    "payment_method_id": "RO",
    "payment_method_flow": "REDIRECT",
    "payer": {
        "name": "Jane Doe",
        "email": "janedoe@mymail.com",
        "document": "1234567890123456",
        "address": {
            "country": "ID",
            "state": "Jakarta",
            "city": "Jakarta",
            "zip_code": "8858",
            "street": "Main St.",
            "number": "540"
        }
    },
    "order_id": "34545sk3483kqw0",
    "description": "Tshirt",
    "notification_url": "http://merchantsite.com/notification/new",
    "callback_url": "http://merchantsite.com/success_page"
}
```
```json Response Example
{
    "id": "D-4-59104f48-fd43-432b-80a7-795d01ae295c",
    "amount": 15000,
    "currency": "IDR",
    "payment_method_id": "RO",
    "payment_method_type": "BANK_TRANSFER",
    "payment_method_flow": "DIRECT",
    "country": "ID",
    "bank_transfer": {},
    "ticket": {},
    "created_date": "2023-01-27T18:23:38.000+0000",
    "status": "PENDING",
    "status_detail": "The payment is pending.",
    "status_code": "100",
    "order_id": "34545sdk3483kqw0",
    "notification_url": "http://merchant.com/notification/new"
}
```

## OVO Recurring

OVO is a leading Indonesian digital wallet that enables fast, secure cashless payments for everyday online and offline purchases, from shopping to bill payments. For recurring payments, Customers only need to complete a verification once during the enrollment process, which grants the merchant authorization to execute subsequent payments on demand.

### Capabilities

|                                    | OVO                                                   |
| :--------------------------------- | :---------------------------------------------------- |
| **Min. amount**                    | 11000 IDR                                             |
| **Max. expiration time supported** | 15 minutes                                            |
| **Notification delay**             | Immediate                                             |
| **Refunds**                        | Yes. Full and partial.                                |
| **Flow**                           | Enrollment `REDIRECT`<br />Recurring payment `DIRECT` |

### UX Flow

<Image src="https://files.readme.io/4e2ba9f5fe7e6b85e4cdcc703c30561b7a70038fec33bfcae5cfa94bccd3d6f6-OVO_Recurring_-_enrollment.png" alt="The screenshots illustrate a generic Dana redirect flow." align="center" caption="The screenshots illustrate a generic OVO enrollment flow." />

### One-time user enrollment

<Table align={["left","left","left","left"]}>
  <thead>
    <tr>
      <th>
        Property
      </th>

      <th>
        Type
      </th>

      <th>
        Description
      </th>

      <th>
        Mandatory?
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        `external_id`
      </td>

      <td>
        String
      </td>

      <td>
        An identifier used by the merchant to identify the enrollment in their system.
      </td>

      <td>
        Yes
      </td>
    </tr>

    <tr>
      <td>
        `currency`
      </td>

      <td>
        String
      </td>

      <td>
        `IDR`<br /><br />Transaction currency in [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217).
      </td>

      <td>
        Yes
      </td>
    </tr>

    <tr>
      <td>
        `country`
      </td>

      <td>
        String
      </td>

      <td>
        `ID` <br /><br />Transaction country in [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).
      </td>

      <td>
        Yes
      </td>
    </tr>

    <tr>
      <td>
        `type`
      </td>

      <td>
        String
      </td>

      <td>
        Possible options include:

        `ON_DEMAND`: For future recurring payments initiated by the customer or merchant on demand, rather than on a fixed schedule.
      </td>

      <td>
        Yes
      </td>
    </tr>

    <tr>
      <td>
        `payment_method_id`
      </td>

      <td>
        String
      </td>

      <td>
        `OV` <br /><br />ID of the selected payment method.
      </td>

      <td>
        Yes
      </td>
    </tr>

    <tr>
      <td>
        `payment_method_flow`
      </td>

      <td>
        String
      </td>

      <td>
        `REDIRECT`&#x20;
      </td>

      <td>
        Yes
      </td>
    </tr>

    <tr>
      <td>
        `payer.name`
      </td>

      <td>
        String
      </td>

      <td>
        Name of the payer.
      </td>

      <td>
        No
      </td>
    </tr>

    <tr>
      <td>
        `payer.email`
      </td>

      <td>
        String
      </td>

      <td>
        Email of the payer.
      </td>

      <td>
        No
      </td>
    </tr>

    <tr>
      <td>
        `payer.phone`
      </td>

      <td>
        String
      </td>

      <td>
        User's phone number.
      </td>

      <td>
        Yes
      </td>
    </tr>

    <tr>
      <td>
        `order_id`
      </td>

      <td>
        String
      </td>

      <td>
        ID of the capture given by the merchant in their system. Think of it as an external id of the capture.
      </td>

      <td>
        No
      </td>
    </tr>

    <tr>
      <td>
        `notification_url`
      </td>

      <td>
        String
      </td>

      <td>
        Notifications will be sent in every change of status of a enrollment to the `notification_url` specified by the merchant.
      </td>

      <td>
        Yes
      </td>
    </tr>

    <tr>
      <td>
        `callback_url`
      </td>

      <td>
        String
      </td>

      <td>
        The payer will be redirected to the merchant’s website after completing the enrollment via the `callback_url`specified by the merchant
      </td>

      <td>
        Yes
      </td>
    </tr>
  </tbody>
</Table>

### Examples

[block:html]
{
  "html": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>URL Selector with Opacity</title>\n  <style>\n    .url-container {\n      display: flex;\n      align-items: center;\n      border-radius: 16px;\n      background-color: #fff;\n      padding: 10px;\n      box-shadow: 0 0 0px 1px #F5F5F5;\n      box-sizing: border-box;\n      border-color: transparent;\n      margin-top: 20px;\n      margin-bottom: 20px;\n      gap: 10px;\n      width: 100%;\n    }\n    \n     [data-color-mode=\"dark\"] .url-container {\n      background-color: #F7F7F7;\n    }\n\n    .url-container .url-selector {\n      display: none;\n    }\n\n    .url-container label {\n      padding: 5px 5px;\n      border: 1px solid #ccc;\n      border-radius: 8px;\n      font-size: 11px;\n      color: #333;\n      background-color: #f9f9f9;\n      cursor: pointer;\n      transition: opacity 0.3s ease;\n    }\n\n    /* Reduce opacity for unselected labels */\n    #base-a:not(:checked) ~ label[for=\"base-a\"],\n    #sandbox-a:not(:checked) ~ label[for=\"sandbox-a\"] {\n      opacity: 0.5;\n    }\n\n    .url-container .pill-button {\n      border: none;\n      box-shadow: var(--box-shadow-pill);\n      background-color: #0171c2;\n      color: white;\n      padding: 5px 15px;\n      font-size: 14px;\n      border-radius: 25px;\n      text-transform: uppercase;\n      cursor: default; /* Cambia el cursor para indicar que no es clickeable */\n      text-shadow: 1px 1px 0 #0168b3, 0 1px 0 #0168b3, 1px 0 0 #0168b3;\n      margin-left: 5px;\n      white-space: nowrap !important;\n    }\n\n\n    .url-input {\n      display: none;\n      flex-grow: 1; /* Permitir que el input ocupe todo el espacio disponible */\n    }\n\n    #base-a:checked ~ .url-input[data-url=\"base-a\"],\n    #sandbox-a:checked ~ .url-input[data-url=\"sandbox-a\"] {\n     display: block;\n    }\n\n    .url-input input {\n      width: 100%;\n      border: none;\n      outline: none;\n      flex-grow: 1;\n      border-radius: 8px;\n      padding: 5px;\n      font-size: 12px;\n      color: #333;\n      user-select: all;\n    }\n\n    .url-input input:focus {\n      outline: 1px solid #F5F5F5;\n      border-radius: 16px;\n    }\n    \n\n/* Mobile-specific styles */\n@media screen and (max-width: 768px) {\n.url-container {\n    display: flex;\n    align-items: center;\n    flex-wrap: wrap; \n    width: 100%; \n    max-width: 100%; \n    box-sizing: border-box; \n}\n  \n.url-input input {\n    border: none;\n    outline: none;\n    border-radius: 8px;\n    padding: 5px;\n    font-size: 12px;\n    color: #333;\n    user-select: all;\n    width: 100%; /* Ocupa todo el ancho disponible */\n    max-width: 100%; /* No permite desbordarse */\n}\n}\n  </style>\n</head>\n<body>\n  <div class=\"url-container\">\n    <!-- Botón visual -->\n    <div class=\"pill-button\">Post</div>\n    \n    <!-- Radio inputs for URL options -->\n    <input id=\"base-a\" type=\"radio\" name=\"url\" class=\"url-selector\" checked>\n    <label for=\"base-a\">Production URL</label>\n    <input id=\"sandbox-a\" type=\"radio\" name=\"url\" class=\"url-selector\">\n    <label for=\"sandbox-a\">Sandbox URL</label>\n\n    <!-- URL Display (readonly inputs) -->\n    <div class=\"url-input\" data-url=\"base-a\">\n      <input type=\"text\" readonly value=\"https://api.dlocal.com/enrollments\">\n    </div>\n    <div class=\"url-input\" data-url=\"sandbox-a\">\n      <input type=\"text\" readonly value=\"https://sandbox.dlocal.com/enrollments\">\n    </div>\n  </div>\n</body>\n</html>\n"
}
[/block]

```json Request Example
{
  "external_id": "fwbExmQQ7",
  "currency": "IDR",
  "country": "ID",
  "type": "ON_DEMAND",
  "description": "Monthly subscription",
  "payment_method_id": "OV",
  "payment_method_flow": "REDIRECT",
  "payer": {
    "name": "Jane Doe",
    "phone": "628432003239",
    "email": "janedoe@mymail.com"
  },
  "notification_url": "http://merchantsite.com/notifications",
  "callback_url": "http://merchantsite.com/callback"
}
```
```json Synchronous response example
{ 
"id": "E-4-a6418560-42c0-44bb-9a6f-da77730bcb6b",
  "external_id": "3a39633d-e6fc-4bc2-96d1-51613b13858a",
  "description": "Monthly subscription",
  "status": "PENDING",
  "status_code": "100",
  "status_details": "The enrollment is pending.",
  "redirect_url": "https://pay.dlocal.com/gmf-apm/payments-redirect/N-ec90b256-c2b7-4cd4-af36-265499ae3ca9",
  "payment_method_id": "OV",
  "payment_method_flow": "REDIRECT",
  "payment_method_type": "WALLET"
}
```
```json Asynchronous response example
{
  "id": "E-4-a6418560-42c0-44bb-9a6f-da77730bcb6b",
  "external_id": "fwbExmQQ7",
  "currency": "IDR",
  "country": "ID",
  "type": "ON_DEMAND",
  "payment_method_id": "OV",
  "payment_method_flow": "REDIRECT",
  "created_date": "2025-09-10T20:37:20.000+0000",
  "status": "ACTIVE",
  "status_detail": "The enrollment is active.",
  "status_code": "200",
  "notification_url": "http://merchantsite.com/notifications"
}
```

<br />

### Recurring payments

| Property              | Type   | Description                                          | Mandatory? |
| :-------------------- | :----- | :--------------------------------------------------- | :--------- |
| `payment_method_flow` | String | `DIRECT`                                             | Yes        |
| `enrollment.id`       | String | Enrollment id of the initial customer authorization. | Yes        |

### Examples

[block:html]
{
  "html": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>URL Selector with Opacity</title>\n  <style>\n    .url-container {\n      display: flex;\n      align-items: center;\n      border-radius: 16px;\n      background-color: #fff;\n      padding: 10px;\n      box-shadow: 0 0 0px 1px #F5F5F5;\n      box-sizing: border-box;\n      border-color: transparent;\n      margin-top: 20px;\n      margin-bottom: 20px;\n      gap: 10px;\n      width: 100%;\n    }\n    \n         [data-color-mode=\"dark\"] .url-container {\n      background-color: #F7F7F7;\n    }\n\n    .url-container .url-selector {\n      display: none;\n    }\n\n    .url-container label {\n      padding: 5px 5px;\n      border: 1px solid #ccc;\n      border-radius: 8px;\n      font-size: 11px;\n      color: #333;\n      background-color: #f9f9f9;\n      cursor: pointer;\n      transition: opacity 0.3s ease;\n    }\n\n    /* Reduce opacity for unselected labels */\n    #base-a:not(:checked) ~ label[for=\"base-a\"],\n    #sandbox-a:not(:checked) ~ label[for=\"sandbox-a\"] {\n      opacity: 0.5;\n    }\n\n    .url-container .pill-button {\n      border: none;\n      box-shadow: var(--box-shadow-pill);\n      background-color: #0171c2;\n      color: white;\n      padding: 5px 15px;\n      font-size: 14px;\n      border-radius: 25px;\n      text-transform: uppercase;\n      cursor: default; /* Cambia el cursor para indicar que no es clickeable */\n      text-shadow: 1px 1px 0 #0168b3, 0 1px 0 #0168b3, 1px 0 0 #0168b3;\n      margin-left: 5px;\n      white-space: nowrap !important;\n    }\n\n\n    .url-input {\n      display: none;\n      flex-grow: 1; /* Permitir que el input ocupe todo el espacio disponible */\n    }\n\n    #base-a:checked ~ .url-input[data-url=\"base-a\"],\n    #sandbox-a:checked ~ .url-input[data-url=\"sandbox-a\"] {\n     display: block;\n    }\n\n    .url-input input {\n      width: 100%;\n      border: none;\n      outline: none;\n      flex-grow: 1;\n      border-radius: 8px;\n      padding: 5px;\n      font-size: 12px;\n      color: #333;\n      user-select: all;\n    }\n\n    .url-input input:focus {\n      outline: 1px solid #F5F5F5;\n      border-radius: 16px;\n    }\n    \n\n/* Mobile-specific styles */\n@media screen and (max-width: 768px) {\n.url-container {\n    display: flex;\n    align-items: center;\n    flex-wrap: wrap; \n    width: 100%; \n    max-width: 100%; \n    box-sizing: border-box; \n}\n  \n.url-input input {\n    border: none;\n    outline: none;\n    border-radius: 8px;\n    padding: 5px;\n    font-size: 12px;\n    color: #333;\n    user-select: all;\n    width: 100%; /* Ocupa todo el ancho disponible */\n    max-width: 100%; /* No permite desbordarse */\n}\n}\n  </style>\n</head>\n<body>\n  <div class=\"url-container\">\n    <!-- Botón visual -->\n    <div class=\"pill-button\">Post</div>\n    \n    <!-- Radio inputs for URL options -->\n    <input id=\"base-a\" type=\"radio\" name=\"url\" class=\"url-selector\" checked>\n    <label for=\"base-a\">Production URL</label>\n    <input id=\"sandbox-a\" type=\"radio\" name=\"url\" class=\"url-selector\">\n    <label for=\"sandbox-a\">Sandbox URL</label>\n\n    <!-- URL Display (readonly inputs) -->\n    <div class=\"url-input\" data-url=\"base-a\">\n      <input type=\"text\" readonly value=\"https://api.dlocal.com/payments\">\n    </div>\n    <div class=\"url-input\" data-url=\"sandbox-a\">\n      <input type=\"text\" readonly value=\"https://sandbox.dlocal.com/payments\">\n    </div>\n  </div>\n</body>\n</html>"
}
[/block]

```json Request Example
{
  "external_id": "1089e9de-0959-4ca7-bf0a-14da32d18451",
  "amount": 15000,
  "currency": "IDR",
  "country": "ID",
  "payment_method_id": "OV",
  "payment_method_flow": "DIRECT",
  "payer": {
    "name": "Jane Doe",
    "phone": "628432003239",
    "email": "janedoe@mymail.com"
  },
  "enrollment": {
    "id": "E-4-a6418560-42c0-44bb-9a6f-da77730bcb6b"
  },
  "order_id": "1089e9de-0959-4ca7-bf0a-14da32d18451",
  "notification_url": "http://www.merchantsite.com/notifications"
}
```
```json Synchronous response example
{
  "id": "D-4-x1kj5e7i-hh7ver365l35h6-bg7h5snqee44",
  "amount": 15000,
  "currency": "IDR",
  "payment_method_id": "OV",
  "payment_method_type": "WALLET",
  "payment_method_flow": "DIRECT",
  "country": "ID",
  "created_date": "2025-12-05T10:50:26.000+0000",
  "status": "PENDING",
  "status_detail": "The payment is pending.",
  "status_code": "100",
  "order_id": "1089e9de-0959-4ca7-bf0a-14da32d18451",
  "notification_url": "http://www.merchantsite.com/notifications"
}
```
```json Asynchronous response example
{
  "id": "D-4-x1kj5e7i-hh7ver365l35h6-bg7h5snqee44",
  "amount": 15000,
  "status": "PAID",
  "status_detail": "The payment is paid",
  "status_code": "200",
  "currency": "IDR",
  "country": "ID",
  "payment_method_id": "OV",
  "payment_method_flow": "DIRECT",
  "notification_url": "http://merchantsite.com/notifications",
  "created_date": "2025-12-05T10:51:20.000+0000"
}
```

<br />

### Enrollment with an initial payment

To create an enrollment with an initial payment use the same request as in a Recurring Payment including an `enrollment` object in the request body and changing the `payment_method_flow` to `REDIRECT`.

| Property                      | Type   | Description                                                                                                                                       | Mandatory? |
| :---------------------------- | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------ | :--------- |
| `enrollment.external_id`      | String | An identifier used by the merchant to identify the enrollment in their system.                                                                    | Yes        |
| `enrollment.type`             | String | `ON_DEMAND`: For future recurring payments initiated by the customer or merchant on demand, rather than on a fixed schedule.                      | Yes        |
| `enrollment.notification_url` | String | Notifications will be sent in every change of status of a enrollment to the `enrollment.notification_url` specified by the merchant.              | Yes        |
| `enrollment.callback_url`     | String | The payer will be redirected to the merchant’s website after completing the enrollment via the `enrollment.callback_url`specified by the merchant | Yes        |
| `payment_method_flow`         | String | `REDIRECT`                                                                                                                                        | Yes        |

### Examples

[block:html]
{
  "html": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>URL Selector with Opacity</title>\n  <style>\n    .url-container {\n      display: flex;\n      align-items: center;\n      border-radius: 16px;\n      background-color: #fff;\n      padding: 10px;\n      box-shadow: 0 0 0px 1px #F5F5F5;\n      box-sizing: border-box;\n      border-color: transparent;\n      margin-top: 20px;\n      margin-bottom: 20px;\n      gap: 10px;\n      width: 100%;\n    }\n    \n         [data-color-mode=\"dark\"] .url-container {\n      background-color: #F7F7F7;\n    }\n\n    .url-container .url-selector {\n      display: none;\n    }\n\n    .url-container label {\n      padding: 5px 5px;\n      border: 1px solid #ccc;\n      border-radius: 8px;\n      font-size: 11px;\n      color: #333;\n      background-color: #f9f9f9;\n      cursor: pointer;\n      transition: opacity 0.3s ease;\n    }\n\n    /* Reduce opacity for unselected labels */\n    #base-a:not(:checked) ~ label[for=\"base-a\"],\n    #sandbox-a:not(:checked) ~ label[for=\"sandbox-a\"] {\n      opacity: 0.5;\n    }\n\n    .url-container .pill-button {\n      border: none;\n      box-shadow: var(--box-shadow-pill);\n      background-color: #0171c2;\n      color: white;\n      padding: 5px 15px;\n      font-size: 14px;\n      border-radius: 25px;\n      text-transform: uppercase;\n      cursor: default; /* Cambia el cursor para indicar que no es clickeable */\n      text-shadow: 1px 1px 0 #0168b3, 0 1px 0 #0168b3, 1px 0 0 #0168b3;\n      margin-left: 5px;\n      white-space: nowrap !important;\n    }\n\n\n    .url-input {\n      display: none;\n      flex-grow: 1; /* Permitir que el input ocupe todo el espacio disponible */\n    }\n\n    #base-a:checked ~ .url-input[data-url=\"base-a\"],\n    #sandbox-a:checked ~ .url-input[data-url=\"sandbox-a\"] {\n     display: block;\n    }\n\n    .url-input input {\n      width: 100%;\n      border: none;\n      outline: none;\n      flex-grow: 1;\n      border-radius: 8px;\n      padding: 5px;\n      font-size: 12px;\n      color: #333;\n      user-select: all;\n    }\n\n    .url-input input:focus {\n      outline: 1px solid #F5F5F5;\n      border-radius: 16px;\n    }\n    \n\n/* Mobile-specific styles */\n@media screen and (max-width: 768px) {\n.url-container {\n    display: flex;\n    align-items: center;\n    flex-wrap: wrap; \n    width: 100%; \n    max-width: 100%; \n    box-sizing: border-box; \n}\n  \n.url-input input {\n    border: none;\n    outline: none;\n    border-radius: 8px;\n    padding: 5px;\n    font-size: 12px;\n    color: #333;\n    user-select: all;\n    width: 100%; /* Ocupa todo el ancho disponible */\n    max-width: 100%; /* No permite desbordarse */\n}\n}\n  </style>\n</head>\n<body>\n  <div class=\"url-container\">\n    <!-- Botón visual -->\n    <div class=\"pill-button\">Post</div>\n    \n    <!-- Radio inputs for URL options -->\n    <input id=\"base-a\" type=\"radio\" name=\"url\" class=\"url-selector\" checked>\n    <label for=\"base-a\">Production URL</label>\n    <input id=\"sandbox-a\" type=\"radio\" name=\"url\" class=\"url-selector\">\n    <label for=\"sandbox-a\">Sandbox URL</label>\n\n    <!-- URL Display (readonly inputs) -->\n    <div class=\"url-input\" data-url=\"base-a\">\n      <input type=\"text\" readonly value=\"https://api.dlocal.com/payments\">\n    </div>\n    <div class=\"url-input\" data-url=\"sandbox-a\">\n      <input type=\"text\" readonly value=\"https://sandbox.dlocal.com/payments\">\n    </div>\n  </div>\n</body>\n</html>"
}
[/block]

```json Request Example
{
  "enrollment": {
    "external_id": "fwbExmQQ7",
    "type": "ON_DEMAND",
    "description": "Monthly subscription",
    "notification_url": "http://www.merchantsite.com/notifications",
    "callback_url": "http://merchantsite.com/enrollment_callback"
  },
  "external_id": "1089e9de-0959-4ca7-bf0a-14da32d18451",
  "amount": 15000,
  "currency": "IDR",
  "country": "ID",
  "payment_method_id": "OV",
  "payment_method_flow": "REDIRECT",
  "payer": {
    "name": "Jane Doe",
    "phone": "628432003239",
    "email": "janedoe@mymail.com"
  },
  "order_id": "1089e9de-0959-4ca7-bf0a-14da32d18451",
  "notification_url": "http://www.merchantsite.com/notifications"
}
```
```json Synchronous response example
{
  "enrollment": {
     "id": "E-4-a6418560-42c0-44bb-9a6f-da77730bcb6b",
     "external_id": "3a39633d-e6fc-4bc2-96d1-51613b13858a",
     "description": "Monthly subscription",
     "status": "PENDING",
     "status_code": "100",
     "status_details": "The enrollment is pending.",
     "redirect_url": "https://pay.dlocal.com/gmf-apm/payments-redirect/N-ec90b256-c2b7-4cd4-af36-265"
  },
  "id": "D-4-x1kj5e7i-hh7ver365l35h6-bg7h5snqee44",
  "amount": 15000,
  "currency": "IDR",
  "payment_method_id": "OV",
  "payment_method_type": "WALLET",
  "payment_method_flow": "DIRECT",
  "country": "ID",
  "created_date": "2025-12-05T10:50:26.000+0000",
  "status": "PENDING",
  "status_detail": "The payment is pending.",
  "status_code": "100",
  "order_id": "1089e9de-0959-4ca7-bf0a-14da32d18451",
  "notification_url": "http://www.merchantsite.com/notifications"
}
```
```json Asynchronous response example (enrollment)
{
  "id": "E-4-a6418560-42c0-44bb-9a6f-da77730bcb6b",
  "external_id": "fwbExmQQ7",
  "currency": "IDR",
  "country": "ID",
  "type": "ON_DEMAND",
  "payment_method_id": "OV",
  "payment_method_flow": "REDIRECT",
  "created_date": "2025-09-10T20:37:20.000+0000",
  "status": "ACTIVE",
  "status_detail": "The enrollment is active.",
  "status_code": "200",
  "notification_url": "http://merchantsite.com/notifications"
}
```
```json Asynchronous response example (payment)
{
  "id": "D-4-x1kj5e7i-hh7ver365l35h6-bg7h5snqee44",
  "amount": 15000,
  "status": "PAID",
  "status_detail": "The payment is paid",
  "status_code": "200",
  "currency": "IDR",
  "country": "ID",
  "payment_method_id": "OV",
  "payment_method_flow": "DIRECT",
  "notification_url": "http://merchantsite.com/notifications",
  "created_date": "2025-12-05T10:51:20.000+0000"
}
```

## Dana

Dana is a digital wallet that provides cashless and cardless payments. It brings a faster, easier, and more secure way of paying for all online and offline transactions.

DANA is Indonesia's one-stop solution for Indonesian daily activities; from transferring money, and purchasing in DANA merchants, to topping up mobile credit and paying your bills.

It supports both one-time and tokenized recurring payments.

### Capabilities

|                                    | Dana                       |
| :--------------------------------- | :------------------------- |
| **Min. amount**                    | 11000 IDR                  |
| **Max. expiration time supported** | 30 minutes                 |
| **Notification delay**             | Immediate                  |
| **Refunds**                        | Yes                        |
| **Flow**                           | `DIRECT` <br /> `REDIRECT` |

### UX Flow

<Image src="https://files.readme.io/304244bb638d89b140dbf9e05e4fdf7dce98e6f0c6d60431c9f4542da00c6db4-Dana.png" alt="The screenshots illustrate a generic Dana redirect flow." align="center" caption="The screenshots illustrate a generic Dana redirect flow." />

### Request parameters

| Property              | Type   | Description                                                                                                            | Mandatory? |
| :-------------------- | :----- | :--------------------------------------------------------------------------------------------------------------------- | :--------- |
| `amount`              | Number | Amount to be charged.                                                                                                  | Yes        |
| `currency`            | String | `IDR`<br /><br />Transaction currency in [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217).                            | Yes        |
| `country`             | String | `ID` <br /><br />Transaction country in [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).      | Yes        |
| `payment_method_id`   | String | `DN` <br /><br />ID of the selected payment method.                                                                    | Yes        |
| `payment_method_flow` | String | `DIRECT` or `REDIRECT`                                                                                                 | Yes        |
| `payer.name`          | String | Name of the payer.                                                                                                     | Yes        |
| `payer.email`         | String | Email of the payer.                                                                                                    | Yes        |
| `payer.document`      | String | Document of the payer.                                                                                                 | Yes        |
| `order_id`            | String | ID of the capture given by the merchant in their system. Think of it as an external id of the capture.                 | No         |
| `notification_url`    | String | Notifications will be sent in every change of status of a payment to the `notification_url` specified by the merchant. | No         |

### Examples

```json Request Example
{
    "amount": 15000,
    "currency": "IDR",
    "country": "ID",
    "payment_method_id": "DN",
    "payment_method_flow": "DIRECT",
    "payer": {
        "name": "Jane Doe",
        "email": "janedoe@mymail.com",
        "document": "1234567890123456",
        "address": {
            "country": "ID",
            "state": "Jakarta",
            "city": "Jakarta",
            "zip_code": "8858",
            "street": "Main St.",
            "number": "540"
        }
    },
    "order_id": "34545hgdsdk3483kqw0",
    "description": "Tshirt",
    "notification_url": "http://merchantsite.com/notification/new",
    "callback_url": "http://merchantsite.com/success_page"
}
```
```json Response Example
{
    "id": "D-4-58463cf7-7de6-dsf2-be7f-eedf8ced2141",
    "amount": 15000,
    "currency": "IDR",
    "payment_method_id": "DN",
    "payment_method_type": "TICKET",
    "payment_method_flow": "DIRECT",
    "country": "ID",
    "bank_transfer": {},
    "ticket": {},
    "created_date": "2023-01-27T18:50:03.000+0000",
    "status": "PENDING",
    "status_detail": "The payment is pending.",
    "status_code": "100",
    "order_id": "34545hgdsdk3483kqw0",
    "notification_url": "http://merchant.com/notification/new"
}
```

## LinkAja

LinkAja is an integrated e-wallet service.

It allows users to top up credit, buy packages, pay online, pay merchants, pay bills, buy game vouchers, donate, send money, and many more from the smartphone.

### Capabilities

|                                    | LinkAja    |
| :--------------------------------- | :--------- |
| **Min. amount**                    | 11000 IDR  |
| **Max. expiration time supported** | 30 minutes |
| **Notification delay**             | Immediate  |
| **Refunds**                        | Yes        |
| **Flow**                           | `REDIRECT` |

### UX Flow

<Image src="https://files.readme.io/f89cd7663f193a2fe09e54b5617d9861daa30e9e3a33f9781c3dc544cfb43f2c-LinkAja.png" alt="The screenshots illustrate a generic LinkAja redirect flow." align="center" caption="The screenshots illustrate a generic LinkAja redirect flow." />

### Request parameters

| Property              | Type   | Description                                                                                                            | Mandatory? |
| :-------------------- | :----- | :--------------------------------------------------------------------------------------------------------------------- | :--------- |
| `amount`              | Number | Amount to be charged.                                                                                                  | Yes        |
| `currency`            | String | `IDR`<br /><br />Transaction currency in [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217).                            | Yes        |
| `country`             | String | `ID` <br /><br />Transaction country in [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).      | Yes        |
| `payment_method_id`   | String | `LK` <br /><br />ID of the selected payment method.                                                                    | Yes        |
| `payment_method_flow` | String | `REDIRECT`                                                                                                             | Yes        |
| `payer.name`          | String | Name of the payer.                                                                                                     | Yes        |
| `payer.email`         | String | Email of the payer.                                                                                                    | Yes        |
| `payer.document`      | String | Document of the payer.                                                                                                 | Yes        |
| `order_id`            | String | ID of the capture given by the merchant in their system. Think of it as an external id of the capture.                 | No         |
| `notification_url`    | String | Notifications will be sent in every change of status of a payment to the `notification_url` specified by the merchant. | No         |

### Examples

```json Request Example
{
    "amount": 15000,
    "currency": "IDR",
    "country": "ID",
    "payment_method_id": "LK",
    "payment_method_flow": "REDIRECT",
    "payer": {
        "name": "Jane Doe",
        "email": "janedoe@mymail.com",
        "document": "1234567890123456",
        "address": {
            "country": "ID",
            "state": "Jakarta",
            "city": "Jakarta",
            "zip_code": "8858",
            "street": "Main St.",
            "number": "540"
        }
    },
    "order_id": "34545hgdsdk3483kqw0",
    "description": "Tshirt",
    "notification_url": "http://merchantsite.com/notification/new",
    "callback_url": "http://merchantsite.com/success_page"
}
```
```json Response Example
{
    "id": "R-4-0c601b8a-fr43-4765-920e-300daf285388",
    "amount": 15000,
    "currency": "IDR",
    "payment_method_id": "LK",
    "payment_method_type": "TICKET",
    "payment_method_flow": "REDIRECT",
    "country": "ID",
    "created_date": "2023-01-27T18:58:45.000+0000",
    "status": "PENDING",
    "status_detail": "The payment is pending.",
    "status_code": "100",
    "order_id": "34545hgdsdk3483kqw0",
    "description": "Tshirt",
    "notification_url": "http://merchant.com/notification/new",
    "redirect_url": "https://pay.dlocal.com/gmf-apm/payments-redirect/M-353e669b-70b1-4223-a8eb-962c1fcd0511"
}
```

## ShopeePay

ShopeePay is Shopee’s digital wallet where users can make safe and cashless payments.

Through dLocal it can be used for any online transactions within Shopee - such as buying mobile load and bills payment.

It supports both one-time and tokenized recurring payments.

### Capabilities

|                                    | ShopeePay  |
| :--------------------------------- | :--------- |
| **Min. amount**                    | 11000 IDR  |
| **Max. expiration time supported** | 30 minutes |
| **Notification delay**             | Immediate  |
| **Refunds**                        | Yes        |
| **Flow**                           | `REDIRECT` |

### UX Flow

<Image src="https://files.readme.io/b99b28bb58bd54fd1c8196c4718f5ed1215f11d84c773cc8023f245e0f8fdd47-ShopeePay.png" alt="The screenshots illustrate a generic ShopeePay redirect flow." align="center" caption="The screenshots illustrate a generic ShopeePay redirect flow." />

### Request parameters

| Property              | Type   | Description                                                                                                            | Mandatory? |
| :-------------------- | :----- | :--------------------------------------------------------------------------------------------------------------------- | :--------- |
| `amount`              | Number | Amount to be charged.                                                                                                  | Yes        |
| `currency`            | String | `IDR`<br /><br />Transaction currency in [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217).                            | Yes        |
| `country`             | String | `ID` <br /><br />Transaction country in [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).      | Yes        |
| `payment_method_id`   | String | `SO` <br /><br />ID of the selected payment method.                                                                    | Yes        |
| `payment_method_flow` | String | `REDIRECT`                                                                                                             | Yes        |
| `payer.name`          | String | Name of the payer.                                                                                                     | Yes        |
| `payer.email`         | String | Email of the payer.                                                                                                    | Yes        |
| `payer.document`      | String | Document of the payer.                                                                                                 | Yes        |
| `order_id`            | String | ID of the capture given by the merchant in their system. Think of it as an external id of the capture.                 | No         |
| `notification_url`    | String | Notifications will be sent in every change of status of a payment to the `notification_url` specified by the merchant. | No         |

### Examples

```json Request Example
{
    "amount": 39900,
    "currency": "IDR",
    "country": "ID",
    "payment_method_id": "SO",
    "payment_method_flow": "REDIRECT",
    "payer": {
        "name": "Test dLocal",
        "email": "Test@test.com",
        "phone": "81331452156",
        "document": "1234567890123456",
        "address": {
            "country": "ID",
            "state": "Jakarta",
            "city": "Jakarta",
            "zip_code": "8858",
            "street": "Main St.",
            "number": "540"
        }
    },
    "order_id": "34545hgdsdk3483kqw0",
    "description": "Tshirt",
     "notification_url": "http://merchantsite.com/notification/new",
    "callback_url": "http://merchantsite.com/success_page"
}
```
```json Response Example
{
    "id": "R-55078-23e5449a-8i76-4b5e-b4f3-c19aedd33180",
    "amount": 39900,
    "currency": "IDR",
    "payment_method_id": "SO",
    "payment_method_type": "TICKET",
    "payment_method_flow": "REDIRECT",
    "country": "ID",
    "created_date": "2023-02-16T20:09:53.000+0000",
    "status": "PENDING",
    "status_detail": "The payment is pending.",
    "status_code": "100",
    "order_id": "34545hgdsdk3483kqw0",
    "description": "Tshirt",
    "notification_url": "http://merchant.com/notification/new",
    "redirect_url": "https://pay.dlocal.com/gmf-apm/payments-redirect/M-1a8d233e-87y6-4938-b043-ae7d0e3b3975"
}
```

## QRIS

Customers can pay by scanning the QR code using any payment method. Quick Response Indonesian Standard is a standardized QR code regulated by Bank Indonesia (BI) to facilitate cashless payment in Indonesia.

### Capabilities

|                                    | QRIS                       |
| :--------------------------------- | :------------------------- |
| **Min. amount**                    | 11000 IDR                  |
| **Max. expiration time supported** | 2 days                     |
| **Notification delay**             | Immediate                  |
| **Refunds**                        | Yes                        |
| **Flow**                           | `DIRECT` <br /> `REDIRECT` |

### UX Flow

<Image src="https://files.readme.io/75c718ac48d0cc6102c301a15b1207e744892adb76c4e5b723ddb8cbb2e04737-QRIS.png" alt="The screenshots illustrate a generic Internet banking redirect flow. The specifics of the flow can change depending on the payment method selected to complete the transaction." align="center" caption="The screenshots illustrate a generic QRIS redirect flow. The specifics of the flow can change depending on the payment method selected to complete the transaction." />

### Request parameters

| Property              | Type   | Description                                                                                                            | Mandatory? |
| :-------------------- | :----- | :--------------------------------------------------------------------------------------------------------------------- | :--------- |
| `amount`              | Number | Amount to be charged.                                                                                                  | Yes        |
| `currency`            | String | `IDR`<br /><br />Transaction currency in [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217).                            | Yes        |
| `country`             | String | `ID` <br /><br />Transaction country in [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).      | Yes        |
| `payment_method_id`   | String | `QR` <br /><br />ID of the selected payment method.                                                                    | Yes        |
| `payment_method_flow` | String | `DIRECT` or `REDIRECT`                                                                                                 | Yes        |
| `payer.name`          | String | Name of the payer.                                                                                                     | Yes        |
| `payer.email`         | String | Email of the payer.                                                                                                    | Yes        |
| `payer.document`      | String | Document of the payer.                                                                                                 | Yes        |
| `order_id`            | String | ID of the capture given by the merchant in their system. Think of it as an external id of the capture.                 | No         |
| `notification_url`    | String | Notifications will be sent in every change of status of a payment to the `notification_url` specified by the merchant. | No         |

### Examples

```json Request Example
{
    "amount": 15000,
    "currency": "IDR",
    "country": "ID",
    "payment_method_id": "QR",
    "payment_method_flow": "DIRECT",
    "payer": {
        "name": "Jane Doe",
        "email": "janedoe@mymail.com",
        "document": "1234567890123456",
        "address": {
            "country": "ID",
            "state": "Jakarta",
            "city": "Jakarta",
            "zip_code": "8858",
            "street": "Main St.",
            "number": "540"
        }
    },
    "order_id": "34545hgdsdk3483kqw0",
    "description": "Tshirt",
    "notification_url": "http://merchantsite.com/notification/new",
    "callback_url": "http://merchantsite.com/success_page"
}
```
```json Response Example
{
    "id": "D-4-528db4f4-gg55-478b-9d85-44bb32495523",
    "amount": 15000,
    "currency": "IDR",
    "payment_method_id": "QR",
    "payment_method_type": "TICKET",
    "payment_method_flow": "DIRECT",
    "country": "ID",
    "bank_transfer": {},
    "ticket": {
        "type": "CUSTOM",
        "expiration_date": "2023-01-29T19:12:50.000+0000",
        "id": "QRIS-TICKET-EXAMPLE",
        "barcode": "00020101021226610014ID.CO.QRIS.WWW011893600914000123456702150123456789012340303UMI51440014ID.CO.QRIS.WWW0215ID20200012345630303UMI5204541153033605802ID5910DLOCAL ID6007JAKARTA61051234062070703A0163044B2A",
        "company_name": "DLOCAL ID",
        "provider_name": "provider-example",
        "provider_logo": "https://static.dlocal.com/images/providers/provider-example.png",
        "image_url": "https://pay.dlocal.com/gmf-apm/payments/example",
        "amount": 15000,
        "currency": "IDR"
    },
    "created_date": "2023-01-27T19:12:50.000+0000",
    "status": "PENDING",
    "status_detail": "The payment is pending.",
    "status_code": "100",
    "order_id": "34545hgdsdk3483kqw0",
    "notification_url": "http://merchant.com/notification/new"
}
```

<br />

<Callout icon="ℹ️" theme="info">
  For the `DIRECT` flow, `ticket.barcode` contains an EMV-style QRIS payload string. Encoding: `EMV_STRING`. Treat the value as opaque and preserve it exactly as returned — do not parse, reformat, or URL-decode it.

  Use `ticket.image_url` as the hosted QR image representation when you need to render the code visually instead of generating your own QR image from the barcode string.

  Respect `ticket.expiration_date`. After it expires, create a new payment instead of reusing the same ticket artifact.
</Callout>

<br />

## Direct Debit

Direct Debit product enables merchants to provide seamless payment flows for their customers and true auto-debit for recurring payments using bank accounts, reducing drop-off rates from customers.

### Capabilities

|                                    | Direct Debit                                          |
| :--------------------------------- | :---------------------------------------------------- |
| **Min. amount**                    | 11000 IDR                                             |
| **Max. expiration time supported** | 15 minutes                                            |
| **Notification delay**             | Immediate                                             |
| **Refunds**                        | Yes. Full and partial.                                |
| **Flow**                           | Enrollment `REDIRECT`<br />Recurring payment `DIRECT` |

### UX Flow

<Image src="https://files.readme.io/78ad06c9fe69f8246a94c3b49bba7290a519b4aabc3c71975405db6699630be5-ID_-_YD_-_Direct_Debit_-_Enrollment_-_UX_Flow.png" alt="The screenshots illustrate a generic Internet banking redirect flow. The specifics of the flow can change depending on the payment method selected to complete the transaction." align="center" caption="The screenshots illustrate a generic enrollment flow for Direct Debit." />

### One-time user enrollment

<Table align={["left","left","left","left"]}>
  <thead>
    <tr>
      <th>
        Property
      </th>

      <th>
        Type
      </th>

      <th>
        Description
      </th>

      <th>
        Mandatory?
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        `external_id`
      </td>

      <td>
        String
      </td>

      <td>
        An identifier used by the merchant to identify the enrollment in their system.
      </td>

      <td>
        Yes
      </td>
    </tr>

    <tr>
      <td>
        `currency`
      </td>

      <td>
        String
      </td>

      <td>
        `IDR`<br /><br />Transaction currency in [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217).
      </td>

      <td>
        Yes
      </td>
    </tr>

    <tr>
      <td>
        `country`
      </td>

      <td>
        String
      </td>

      <td>
        `ID` <br /><br />Transaction country in [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).
      </td>

      <td>
        Yes
      </td>
    </tr>

    <tr>
      <td>
        `type`
      </td>

      <td>
        String
      </td>

      <td>
        Possible options include:

        `ON_DEMAND`: For future recurring payments initiated by the customer or merchant on demand, rather than on a fixed schedule.
      </td>

      <td>
        Yes
      </td>
    </tr>

    <tr>
      <td>
        `payment_method_id`
      </td>

      <td>
        String
      </td>

      <td>
        `YD` <br /><br />ID of the selected payment method.
      </td>

      <td>
        Yes
      </td>
    </tr>

    <tr>
      <td>
        `payment_method_flow`
      </td>

      <td>
        String
      </td>

      <td>
        `REDIRECT`&#x20;
      </td>

      <td>
        Yes
      </td>
    </tr>

    <tr>
      <td>
        `payer.name`
      </td>

      <td>
        String
      </td>

      <td>
        Name of the payer.
      </td>

      <td>
        No
      </td>
    </tr>

    <tr>
      <td>
        `payer.email`
      </td>

      <td>
        String
      </td>

      <td>
        Email of the payer.
      </td>

      <td>
        No
      </td>
    </tr>

    <tr>
      <td>
        `payer.phone`
      </td>

      <td>
        String
      </td>

      <td>
        User's phone number.
      </td>

      <td>
        Yes
      </td>
    </tr>

    <tr>
      <td>
        `order_id`
      </td>

      <td>
        String
      </td>

      <td>
        ID of the capture given by the merchant in their system. Think of it as an external id of the capture.
      </td>

      <td>
        No
      </td>
    </tr>

    <tr>
      <td>
        `notification_url`
      </td>

      <td>
        String
      </td>

      <td>
        Notifications will be sent in every change of status of a enrollment to the `notification_url` specified by the merchant.
      </td>

      <td>
        Yes
      </td>
    </tr>

    <tr>
      <td>
        `callback_url`
      </td>

      <td>
        String
      </td>

      <td>
        The payer will be redirected to the merchant’s website after completing the enrollment via the `callback_url`specified by the merchant
      </td>

      <td>
        Yes
      </td>
    </tr>
  </tbody>
</Table>

### Examples

[block:html]
{
  "html": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>URL Selector with Opacity</title>\n  <style>\n    .url-container {\n      display: flex;\n      align-items: center;\n      border-radius: 16px;\n      background-color: #fff;\n      padding: 10px;\n      box-shadow: 0 0 0px 1px #F5F5F5;\n      box-sizing: border-box;\n      border-color: transparent;\n      margin-top: 20px;\n      margin-bottom: 20px;\n      gap: 10px;\n      width: 100%;\n    }\n    \n     [data-color-mode=\"dark\"] .url-container {\n      background-color: #F7F7F7;\n    }\n\n    .url-container .url-selector {\n      display: none;\n    }\n\n    .url-container label {\n      padding: 5px 5px;\n      border: 1px solid #ccc;\n      border-radius: 8px;\n      font-size: 11px;\n      color: #333;\n      background-color: #f9f9f9;\n      cursor: pointer;\n      transition: opacity 0.3s ease;\n    }\n\n    /* Reduce opacity for unselected labels */\n    #base-a:not(:checked) ~ label[for=\"base-a\"],\n    #sandbox-a:not(:checked) ~ label[for=\"sandbox-a\"] {\n      opacity: 0.5;\n    }\n\n    .url-container .pill-button {\n      border: none;\n      box-shadow: var(--box-shadow-pill);\n      background-color: #0171c2;\n      color: white;\n      padding: 5px 15px;\n      font-size: 14px;\n      border-radius: 25px;\n      text-transform: uppercase;\n      cursor: default; /* Cambia el cursor para indicar que no es clickeable */\n      text-shadow: 1px 1px 0 #0168b3, 0 1px 0 #0168b3, 1px 0 0 #0168b3;\n      margin-left: 5px;\n      white-space: nowrap !important;\n    }\n\n\n    .url-input {\n      display: none;\n      flex-grow: 1; /* Permitir que el input ocupe todo el espacio disponible */\n    }\n\n    #base-a:checked ~ .url-input[data-url=\"base-a\"],\n    #sandbox-a:checked ~ .url-input[data-url=\"sandbox-a\"] {\n     display: block;\n    }\n\n    .url-input input {\n      width: 100%;\n      border: none;\n      outline: none;\n      flex-grow: 1;\n      border-radius: 8px;\n      padding: 5px;\n      font-size: 12px;\n      color: #333;\n      user-select: all;\n    }\n\n    .url-input input:focus {\n      outline: 1px solid #F5F5F5;\n      border-radius: 16px;\n    }\n    \n\n/* Mobile-specific styles */\n@media screen and (max-width: 768px) {\n.url-container {\n    display: flex;\n    align-items: center;\n    flex-wrap: wrap; \n    width: 100%; \n    max-width: 100%; \n    box-sizing: border-box; \n}\n  \n.url-input input {\n    border: none;\n    outline: none;\n    border-radius: 8px;\n    padding: 5px;\n    font-size: 12px;\n    color: #333;\n    user-select: all;\n    width: 100%; /* Ocupa todo el ancho disponible */\n    max-width: 100%; /* No permite desbordarse */\n}\n}\n  </style>\n</head>\n<body>\n  <div class=\"url-container\">\n    <!-- Botón visual -->\n    <div class=\"pill-button\">Post</div>\n    \n    <!-- Radio inputs for URL options -->\n    <input id=\"base-a\" type=\"radio\" name=\"url\" class=\"url-selector\" checked>\n    <label for=\"base-a\">Production URL</label>\n    <input id=\"sandbox-a\" type=\"radio\" name=\"url\" class=\"url-selector\">\n    <label for=\"sandbox-a\">Sandbox URL</label>\n\n    <!-- URL Display (readonly inputs) -->\n    <div class=\"url-input\" data-url=\"base-a\">\n      <input type=\"text\" readonly value=\"https://api.dlocal.com/enrollments\">\n    </div>\n    <div class=\"url-input\" data-url=\"sandbox-a\">\n      <input type=\"text\" readonly value=\"https://sandbox.dlocal.com/enrollments\">\n    </div>\n  </div>\n</body>\n</html>\n"
}
[/block]

```json Request Example
{
  "external_id": "fwbExmQQ7",
  "currency": "IDR",
  "country": "ID",
  "type": "ON_DEMAND",
  "description": "Monthly subscription",
  "payment_method_id": "YD",
  "payment_method_flow": "REDIRECT",
  "payer": {
    "name": "Jane Doe",
    "phone": "628432003239",
    "email": "janedoe@mymail.com"
  },
  "notification_url": "http://merchantsite.com/notifications",
  "callback_url": "http://merchantsite.com/callback"
}
```
```json Synchronous Response Example
{ 
"id": "E-4-a6418560-42c0-44bb-9a6f-da77730bcb6b",
  "external_id": "3a39633d-e6fc-4bc2-96d1-51613b13858a",
  "description": "Monthly subscription",
  "status": "PENDING",
  "status_code": "100",
  "status_details": "The enrollment is pending.",
  "redirect_url": "https://pay.dlocal.com/gmf-apm/payments-redirect/N-ec90b256-c2b7-4cd4-af36-265499ae3ca9",
  "payment_method_id": "YD",
  "payment_method_flow": "REDIRECT",
  "payment_method_type": "BANK_TRANSFER"
}
```
```json Asynchronous Response Example
{
  "id": "E-4-a6418560-42c0-44bb-9a6f-da77730bcb6b",
  "external_id": "fwbExmQQ7",
  "currency": "IDR",
  "country": "ID",
  "type": "ON_DEMAND",
  "payment_method_id": "YD",
  "payment_method_flow": "REDIRECT",
  "created_date": "2025-09-10T20:37:20.000+0000",
  "status": "ACTIVE",
  "status_detail": "The enrollment is active.",
  "status_code": "200",
  "notification_url": "http://merchantsite.com/notifications"
}
```

<br />

### Recurring payments

| Property              | Type   | Description                                          | Mandatory? |
| :-------------------- | :----- | :--------------------------------------------------- | :--------- |
| `payment_method_flow` | String | `DIRECT`                                             | Yes        |
| `enrollment.id`       | String | Enrollment id of the initial customer authorization. | Yes        |

### Examples

[block:html]
{
  "html": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>URL Selector with Opacity</title>\n  <style>\n    .url-container {\n      display: flex;\n      align-items: center;\n      border-radius: 16px;\n      background-color: #fff;\n      padding: 10px;\n      box-shadow: 0 0 0px 1px #F5F5F5;\n      box-sizing: border-box;\n      border-color: transparent;\n      margin-top: 20px;\n      margin-bottom: 20px;\n      gap: 10px;\n      width: 100%;\n    }\n    \n         [data-color-mode=\"dark\"] .url-container {\n      background-color: #F7F7F7;\n    }\n\n    .url-container .url-selector {\n      display: none;\n    }\n\n    .url-container label {\n      padding: 5px 5px;\n      border: 1px solid #ccc;\n      border-radius: 8px;\n      font-size: 11px;\n      color: #333;\n      background-color: #f9f9f9;\n      cursor: pointer;\n      transition: opacity 0.3s ease;\n    }\n\n    /* Reduce opacity for unselected labels */\n    #base-a:not(:checked) ~ label[for=\"base-a\"],\n    #sandbox-a:not(:checked) ~ label[for=\"sandbox-a\"] {\n      opacity: 0.5;\n    }\n\n    .url-container .pill-button {\n      border: none;\n      box-shadow: var(--box-shadow-pill);\n      background-color: #0171c2;\n      color: white;\n      padding: 5px 15px;\n      font-size: 14px;\n      border-radius: 25px;\n      text-transform: uppercase;\n      cursor: default; /* Cambia el cursor para indicar que no es clickeable */\n      text-shadow: 1px 1px 0 #0168b3, 0 1px 0 #0168b3, 1px 0 0 #0168b3;\n      margin-left: 5px;\n      white-space: nowrap !important;\n    }\n\n\n    .url-input {\n      display: none;\n      flex-grow: 1; /* Permitir que el input ocupe todo el espacio disponible */\n    }\n\n    #base-a:checked ~ .url-input[data-url=\"base-a\"],\n    #sandbox-a:checked ~ .url-input[data-url=\"sandbox-a\"] {\n     display: block;\n    }\n\n    .url-input input {\n      width: 100%;\n      border: none;\n      outline: none;\n      flex-grow: 1;\n      border-radius: 8px;\n      padding: 5px;\n      font-size: 12px;\n      color: #333;\n      user-select: all;\n    }\n\n    .url-input input:focus {\n      outline: 1px solid #F5F5F5;\n      border-radius: 16px;\n    }\n    \n\n/* Mobile-specific styles */\n@media screen and (max-width: 768px) {\n.url-container {\n    display: flex;\n    align-items: center;\n    flex-wrap: wrap; \n    width: 100%; \n    max-width: 100%; \n    box-sizing: border-box; \n}\n  \n.url-input input {\n    border: none;\n    outline: none;\n    border-radius: 8px;\n    padding: 5px;\n    font-size: 12px;\n    color: #333;\n    user-select: all;\n    width: 100%; /* Ocupa todo el ancho disponible */\n    max-width: 100%; /* No permite desbordarse */\n}\n}\n  </style>\n</head>\n<body>\n  <div class=\"url-container\">\n    <!-- Botón visual -->\n    <div class=\"pill-button\">Post</div>\n    \n    <!-- Radio inputs for URL options -->\n    <input id=\"base-a\" type=\"radio\" name=\"url\" class=\"url-selector\" checked>\n    <label for=\"base-a\">Production URL</label>\n    <input id=\"sandbox-a\" type=\"radio\" name=\"url\" class=\"url-selector\">\n    <label for=\"sandbox-a\">Sandbox URL</label>\n\n    <!-- URL Display (readonly inputs) -->\n    <div class=\"url-input\" data-url=\"base-a\">\n      <input type=\"text\" readonly value=\"https://api.dlocal.com/payments\">\n    </div>\n    <div class=\"url-input\" data-url=\"sandbox-a\">\n      <input type=\"text\" readonly value=\"https://sandbox.dlocal.com/payments\">\n    </div>\n  </div>\n</body>\n</html>"
}
[/block]

```json Request Example
{
  "external_id": "1089e9de-0959-4ca7-bf0a-14da32d18451",
  "amount": 15000,
  "currency": "IDR",
  "country": "ID",
  "payment_method_id": "YD",
  "payment_method_flow": "DIRECT",
  "payer": {
    "name": "Jane Doe",
    "phone": "628432003239",
    "email": "janedoe@mymail.com"
  },
  "enrollment": {
    "id": "E-4-a6418560-42c0-44bb-9a6f-da77730bcb6b"
  },
  "order_id": "1089e9de-0959-4ca7-bf0a-14da32d18451",
  "notification_url": "http://www.merchantsite.com/notifications"
}
```
```json Synchronous response example
{
  "id": "D-4-x1kj5e7i-hh7ver365l35h6-bg7h5snqee44",
  "amount": 15000,
  "currency": "IDR",
  "payment_method_id": "YD",
  "payment_method_type": "BANK_TRANSFER",
  "payment_method_flow": "DIRECT",
  "country": "ID",
  "created_date": "2025-12-05T10:50:26.000+0000",
  "status": "PENDING",
  "status_detail": "The payment is pending.",
  "status_code": "100",
  "order_id": "1089e9de-0959-4ca7-bf0a-14da32d18451",
  "notification_url": "http://www.merchantsite.com/notifications"
}
```
```json Asynchronous response example
{
  "id": "D-4-x1kj5e7i-hh7ver365l35h6-bg7h5snqee44",
  "amount": 15000,
  "status": "PAID",
  "status_detail": "The payment is paid",
  "status_code": "200",
  "currency": "IDR",
  "country": "ID",
  "payment_method_id": "YD",
  "payment_method_flow": "DIRECT",
  "notification_url": "http://merchantsite.com/notifications",
  "created_date": "2025-12-05T10:51:20.000+0000"
}
```