---
updatedAt: 2026-10-16T15:02:20.000Z
agentTools:
  projectIndex: https://docs.dlocal.com/llms.txt
---

# Malaysia

Learn about the dLocal supported payment methods in Malaysia.

<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; /* Asegúrate de que el contenedor sea relativo para posicionar el pseudoelemento */
    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: 45%; /* 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/malaysia#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/malaysia#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/malaysia#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="#7-eleven" class="doc-link">7-eleven</a>
          <a href="#maybank" class="doc-link">Maybank</a>
          <a href="#fpx" class="doc-link">FPX</a>
          <a href="#boost" class="doc-link">Boost</a>
          <a href="#grabpay" class="doc-link">GrabPay</a>
          <a href="#maybank-qr" class="doc-link">Maybank QR</a>
          <a href="#touch-n-go" class="doc-link">Touch 'n Go</a>
          <a href="#touch-n-go-recurring" class="doc-link">Touch 'n Go Recurring</a>
          <a href="#shopeepay" class="doc-link">Shopeepay</a>
          <a href="#duitnowqr" class="doc-link">DuitNowQR</a>
          <a href="#atome" class="doc-link">Atome</a>
        </div>
      </div> 
      
    </div>
`}</HTMLBlock>

<br />

***

# Market specifications

Do you want to know more information about Malaysia's market? Go to the [Accelerate Growth in Asia’s Leading eCommerce Hubs](https://dlocal.com/online-payment-processors-in-asia/) article.

## Country reference

| `country` code | `currency` code | `amount` decimals | `document` name | `document` format | `document` required? |
| :------------: | :-------------: | :---------------: | :-------------: | :---------------: | :------------------: |
|      `MY`      |      `MYR`      |         2         |       NRIC      |     12 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"> |

<Callout icon="ℹ️" theme="info">
  To offer all the card options that may be available in your integration, send the `payment_method_id` as `CARD`.
</Callout>

## Alternative Payment Method supported

| `payment_method_id` | Name                  | `payment_method_type` | Details          | Allowed Flows       | Logo                                                                              |
| :------------------ | :-------------------- | :-------------------- | :--------------- | :------------------ | :-------------------------------------------------------------------------------- |
| `SL`                | 7-eleven              | `TICKET`              | Cash Payments ​  | `REDIRECT`          | <img src="https://static.dlocal.com/images/providers/SL.png" width="40px">        |
| `FP`                | Maybank               | `BANK_TRANSFER`       | Bank Transfer ​  | `REDIRECT`          | <img src="https://static.dlocal.com/images/providers/FP.png" width="40px">        |
| `IO`                | FPX                   | `BANK_TRANSFER`       | Bank Transfer ​  | `REDIRECT`          | <img src="https://static.dlocal.com/images/providers/FPX.png" width="40px">       |
| `YB`                | Boost                 | `WALLET`              | Wallet ​         | `DIRECT` `REDIRECT` | <img src="https://static.dlocal.com/images/providers/Boost.png" width="40px">     |
| `GY`                | GrabPay               | `WALLET`              | Wallet ​         | `DIRECT` `REDIRECT` | <img src="https://static.dlocal.com/images/providers/GrabPay.png" width="40px">   |
| `MB`                | Maybank QR            | `WALLET`              | Wallet ​         | `DIRECT` `REDIRECT` | <img src="https://static.dlocal.com/images/providers/MaybankQR.png" width="40px"> |
| `TG`                | Touch 'n Go           | `WALLET`              | Wallet ​         | `REDIRECT`          | <img src="https://static.dlocal.com/images/providers/Touchngo.png" width="40px">  |
| `TF`                | Touch 'n Go Recurring | `TICKET`              | Wallet           | `DIRECT` `REDIRECT` | <img src="https://static.dlocal.com/images/providers/Touchngo.png" width="40px">  |
| `SO`                | Shopeepay             | `WALLET`              | Wallet ​         | `REDIRECT`          | <img src="https://static.dlocal.com/images/providers/SO.png" width="40px">        |
| `DQ`                | DuitNowQR             | `WALLET`              | Wallet ​         | `REDIRECT`          | <img src="https://static.dlocal.com/images/providers/DQ.png" width="40px">        |
| `TA`                | Atome                 | `TICKET`              | Installment Plan | `REDIRECT`          | <img src="https://static.dlocal.com/images/providers/TA.svg" width="40px">        |

<br />

***

# Cards

## Capabilities

|                               | Visa Credit   | Visa Debit    | Mastercard Credit | Mastercard Debit |
| :---------------------------- | :------------ | :------------ | :---------------- | :--------------- |
| **Minimum amount**            | 5 MYR         | 5 MYR         | 5 MYR             | 5 MYR            |
| **Refunds**                   | Yes           | Yes           | Yes               | Yes              |
| **Recurring**                 | Yes           | Yes           | Yes               | Yes              |
| **Chargeback option**         | Yes           | Yes           | Yes               | Yes              |
| **Chargeback Dispute option** | Yes           | Yes           | Yes               | Yes              |
| **Descriptor**                | Merchant name | Merchant name | Merchant name     | Merchant name    |

## 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.

<br />

***

# Alternative Payment Method

## 7-eleven

7-Eleven is a Cash payment method from the biggest convenience store chain in Malaysia.

It allows customers to make online purchases and pay using cash. With stores around the country, it has a wide coverage, reaching hundreds of customers per day.

### Capabilities

|                                    | 7-eleven   |
| :--------------------------------- | :--------- |
| **Min. amount**                    | 5 MYR      |
| **Max. expiration time supported** | 2 days     |
| **Notification delay**             | Immediate  |
| **Refunds**                        | Yes        |
| **Flow**                           | `REDIRECT` |

### Request parameters

| Property              | Type   | Description                                                                                                            | Mandatory? |
| :-------------------- | :----- | :--------------------------------------------------------------------------------------------------------------------- | :--------- |
| `amount`              | Number | Amount to be charged.                                                                                                  | Yes        |
| `currency`            | String | `MYR`<br /><br />Transaction currency in [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217).                            | Yes        |
| `country`             | String | `MY` <br /><br />Transaction country in [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).      | Yes        |
| `payment_method_id`   | String | `SL` <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": 20,
    "currency": "MYR",
    "country": "MY",
    "payment_method_id": "SL",
    "payment_method_flow": "REDIRECT",
    "payer": {
        "name": "Jane Doe",
        "email": "janedoe@mymail.com",
        "document": "123456789012",
        "address": {
            "country": "MY",
            "state": "Malacca",
            "city": "Malacca",
            "zip_code": "8858",
            "street": "Main St.",
            "number": "540"
        }
    },
    "order_id": "345453483kqws0",
    "description": "Tshirt",
    "notification_url": "http://merchantsite.com/notification/new",
    "callback_url": "http://merchantsite.com/success_page"
}
```
```json Response example
{
    "id": "R-4-069886a5-bde5-hy653-bae9-cb33e54f2397",
    "amount": 20,
    "currency": "MYR",
    "payment_method_id": "SL",
    "payment_method_type": "TICKET",
    "payment_method_flow": "REDIRECT",
    "country": "MY",
    "created_date": "2023-01-30T15:04:26.000+0000",
    "status": "PENDING",
    "status_detail": "The payment is pending.",
    "status_code": "100",
    "order_id": "345453483kqws0",
    "description": "Tshirt",
    "notification_url": "http://merchantsite.com/notification/new",
    "redirect_url": "https://pay.dlocal.com/gmf-apm/payments-redirect/M-3ab38f30-e279-h671-b47f-f31fa4ee0f99"
}
```

### Example ticket

<Image src="https://files.readme.io/13bfac242e2db48e5855b85accc49fb48591847f3afe43c22ee85308b57eaf36-APM_-_7-eleven.png" alt="Example 7-eleven built with the information in the example above." align="center" width="70% " caption="Example 7-eleven built with the information in the example above." />

## Maybank

Bank transfers are the most-used e-commerce payment method in Malaysia, with half of the e-commerce payment market.

### Capabilities

|                                    | Maybank    |
| :--------------------------------- | :--------- |
| **Min. amount**                    | 5 MYR      |
| **Max. expiration time supported** | 35 minutes |
| **Notification delay**             | Immediate  |
| **Refunds**                        | Yes        |
| **Flow**                           | `REDIRECT` |

### UX Flow

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

### Request parameters

| Property              | Type   | Description                                                                                                            | Mandatory? |
| :-------------------- | :----- | :--------------------------------------------------------------------------------------------------------------------- | :--------- |
| `amount`              | Number | Amount to be charged.                                                                                                  | Yes        |
| `currency`            | String | `MYR`<br /><br />Transaction currency in [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217).                            | Yes        |
| `country`             | String | `MY` <br /><br />Transaction country in [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).      | Yes        |
| `payment_method_id`   | String | `FP` <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": 50,
    "currency": "MYR",
    "country": "MY",
    "payment_method_id": "FP",
    "payment_method_flow": "REDIRECT",
    "payer": {
        "name": "Jane Doe",
        "email": "janedoe@mymail.com",
        "document": "123456789012",
        "address": {
            "country": "MY",
            "state": "Malacca",
            "city": "Malacca",
            "zip_code": "8858",
            "street": "Main St.",
            "number": "540"
        }
    },
    "order_id": "345453483kqws0",
    "description": "Tshirt",
    "notification_url": "http://merchantsite.com/notification/new",
    "callback_url": "http://merchantsite.com/success_page"
}
```
```json Response example
{
    "id": "R-4-c732e5b4-24b3-46a6-5433-cd86c70f6f35",
    "amount": 50,
    "currency": "MYR",
    "payment_method_id": "FP",
    "payment_method_type": "BANK_TRANSFER",
    "payment_method_flow": "REDIRECT",
    "country": "MY",
    "created_date": "2023-01-30T15:29:03.000+0000",
    "status": "PENDING",
    "status_detail": "The payment is pending.",
    "status_code": "100",
    "order_id": "345453483kqws0",
    "description": "Tshirt",
    "notification_url": "http://merchantsite.com/notification/new",
    "redirect_url": "https://pay.dlocal.com/gmf-apm/payments-redirect/M-872d8b37-la73-465a-a2cf-d3248c61c350"
}
```

## FPX

FPX is a reliable internet-based payment gateway that allows real-time payments for online purchases hassle-free or bill payments using your Savings / Current account or even Credit Card.

FPX is operated by Payments Network Malaysia Sdn Bhd (PayNet)

### Capabilities

|                                    | FPX        |
| :--------------------------------- | :--------- |
| **Min. amount**                    | 5 MYR      |
| **Max. expiration time supported** | 35 minutes |
| **Notification delay**             | Immediate  |
| **Refunds**                        | Yes        |
| **Flow**                           | `REDIRECT` |

### UX Flow

<Image src="https://files.readme.io/c7ea05b794fc10e6921ed93cdc5fa79161eee9bca512fbe72ea230c3246e3aa5-FPX.png" alt="The screenshots illustrate a generic FPX redirect flow. The specifics of the flow can change depending on the bank selected to complete the transaction." align="center" caption="The screenshots illustrate a generic FPX redirect flow. The specifics of the flow can change depending on the bank selected to complete the transaction." />

### Request parameters

| Property              | Type   | Description                                                                                                            | Mandatory? |
| :-------------------- | :----- | :--------------------------------------------------------------------------------------------------------------------- | :--------- |
| `amount`              | Number | Amount to be charged.                                                                                                  | Yes        |
| `currency`            | String | `MYR`<br /><br />Transaction currency in [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217).                            | Yes        |
| `country`             | String | `MY` <br /><br />Transaction country in [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).      | Yes        |
| `payment_method_id`   | String | `IO` <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": 50,
    "currency": "MYR",
    "country": "MY",
    "payment_method_id": "IO",
    "payment_method_flow": "REDIRECT",
    "payer": {
        "name": "Jane Doe",
        "email": "janedoe@mymail.com",
        "document": "123456789012",
        "address": {
            "country": "MY",
            "state": "Malacca",
            "city": "Malacca",
            "zip_code": "8858",
            "street": "Main St.",
            "number": "540"
        }
    },
    "order_id": "345453483kqws0",
    "description": "Tshirt",
    "notification_url": "http://merchantsite.com/notification/new",
    "callback_url": "http://merchantsite.com/success_page"
}
```
```json Response example
{
    "id": "R-4-101d40ab-g5ty-4735-8c97-a21c9427db91",
    "amount": 50,
    "currency": "MYR",
    "payment_method_id": "IO",
    "payment_method_type": "BANK_TRANSFER",
    "payment_method_flow": "REDIRECT",
    "country": "MY",
    "created_date": "2023-01-30T15:49:37.000+0000",
    "status": "PENDING",
    "status_detail": "The payment is pending.",
    "status_code": "100",
    "order_id": "345453483kqws0",
    "description": "Tshirt",
    "notification_url": "http://merchantsite.com/notification/new",
    "redirect_url": "https://pay.dlocal.com/gmf-apm/payments-continue/M-723a51dd-901w-4522-8905-453eaad7149a"
}
```

## Boost

Wallets are very popular in Malaysia, which is leading its Southeast Asian neighboring countries in terms of the usage of digital wallets.

In terms of competition, among the top e-wallets are Boost, Touch 'n Go, Maybank QR, ShopeePay, and GrabPay. All these wallets are constantly rising in popularity.

### Capabilities

|                                    | Boost                      |
| :--------------------------------- | :------------------------- |
| **Min. amount**                    | 5 MYR                      |
| **Max. expiration time supported** | 5 minutes                  |
| **Notification delay**             | Immediate                  |
| **Refunds**                        | Yes                        |
| **Flow**                           | `DIRECT` <br /> `REDIRECT` |

### UX Flow

#### QR code flow

<Image src="https://files.readme.io/88d6171b6bfe7e0efaf30cef646c998e8145acf451cffd552e3cb91ed9b924a1-Boost.png" alt="The screenshots illustrate a generic Boost redirect flow on a browser through QR Code." align="center" caption="The screenshots illustrate a generic Boost redirect flow on a browser through QR code." />

#### Payment in-app flow

<Image src="https://files.readme.io/29da2292ec9b579c6aa97fb8b6ea1c5b5c452f9701b7e328a262c4300f109f45-Boost.png" alt="The screenshots illustrate a generic Boost redirect flow on mobile choosing the Tap and Pay option to complete the payment in-app." align="center" caption="The screenshots illustrate a generic Boost redirect flow on mobile choosing the Tap and Pay option to complete the payment in-app." />

### Request parameters

| Property              | Type   | Description                                                                                                            | Mandatory? |
| :-------------------- | :----- | :--------------------------------------------------------------------------------------------------------------------- | :--------- |
| `amount`              | Number | Amount to be charged.                                                                                                  | Yes        |
| `currency`            | String | `MYR`<br /><br />Transaction currency in [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217).                            | Yes        |
| `country`             | String | `MY` <br /><br />Transaction country in [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).      | Yes        |
| `payment_method_id`   | String | `YB` <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": 50,
    "currency": "MYR",
    "country": "MY",
    "payment_method_id": "YB",
    "payment_method_flow": "REDIRECT",
    "payer": {
        "name": "Jane Doe",
        "email": "janedoe@mymail.com",
        "document": "123456789012",
        "address": {
            "country": "MY",
            "state": "Malacca",
            "city": "Malacca",
            "zip_code": "8858",
            "street": "Main St.",
            "number": "540"
        }
    },
    "order_id": "345453483kqws0",
    "description": "Tshirt",
    "notification_url": "http://merchantsite.com/notification/new",
    "callback_url": "http://merchantsite.com/success_page"
}
```
```json Response example
{
    "id": "R-4-b3721a18-7ff1-487c-fr43-d4637fc3a94d",
    "amount": 50,
    "currency": "MYR",
    "payment_method_id": "YB",
    "payment_method_type": "TICKET",
    "payment_method_flow": "REDIRECT",
    "country": "MY",
    "created_date": "2023-01-30T15:51:05.000+0000",
    "status": "PENDING",
    "status_detail": "The payment is pending.",
    "status_code": "100",
    "order_id": "345453483kqws0",
    "description": "Tshirt",
    "notification_url": "http://merchantsite.com/notification/new",
    "redirect_url": "https://pay.dlocal.com/gmf-apm/payments-redirect/M-3ecd987f-7a7d-4e32-a0ba-5aebabba732d"
}
```

## GrabPay

Wallets are very popular in Malaysia, which is leading its Southeast Asian neighboring countries in terms of the usage of digital wallets.

In terms of competition, among the top e-wallets are Boost, Touch 'n Go, Maybank QR, ShopeePay, and GrabPay. All these wallets are constantly rising in popularity.

### Capabilities

|                                    | GrabPay                    |
| :--------------------------------- | :------------------------- |
| **Min. amount**                    | 5 MYR                      |
| **Max. expiration time supported** | 5 minutes                  |
| **Notification delay**             | Immediate                  |
| **Refunds**                        | Yes                        |
| **Flow**                           | `DIRECT` <br /> `REDIRECT` |

### UX Flow

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

### Request parameters

| Property              | Type   | Description                                                                                                            | Mandatory? |
| :-------------------- | :----- | :--------------------------------------------------------------------------------------------------------------------- | :--------- |
| `amount`              | Number | Amount to be charged.                                                                                                  | Yes        |
| `currency`            | String | `MYR`<br /><br />Transaction currency in [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217).                            | Yes        |
| `country`             | String | `MY` <br /><br />Transaction country in [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).      | Yes        |
| `payment_method_id`   | String | `GY` <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": 50,
    "currency": "MYR",
    "country": "MY",
    "payment_method_id": "GY",
    "payment_method_flow": "REDIRECT",
    "payer": {
        "name": "Jane Doe",
        "email": "janedoe@mymail.com",
        "document": "123456789012",
        "address": {
            "country": "MY",
            "state": "Malacca",
            "city": "Malacca",
            "zip_code": "8858",
            "street": "Main St.",
            "number": "540"
        }
    },
    "order_id": "345453483kqws0",
    "description": "Tshirt",
    "notification_url": "http://merchantsite.com/notification/new",
    "callback_url": "http://merchantsite.com/success_page"
}
```
```json Response example
{
    "id": "R-4-ae9209f1-2f8e-4801-gfd3-4117cd888ce8",
    "amount": 50,
    "currency": "MYR",
    "payment_method_id": "GY",
    "payment_method_type": "TICKET",
    "payment_method_flow": "REDIRECT",
    "country": "MY",
    "created_date": "2023-01-30T15:53:00.000+0000",
    "status": "PENDING",
    "status_detail": "The payment is pending.",
    "status_code": "100",
    "order_id": "345453483kqws0",
    "description": "Tshirt",
    "notification_url": "http://merchantsite.com/notification/new",
    "redirect_url": "https://pay.dlocal.com/gmf-apm/payments-redirect/M-10b9a53f-3421-4373-bcd6-fe65304ee445"
}
```

## Maybank QR

Wallets are very popular in Malaysia, which is leading its Southeast Asian neighboring countries in terms of the usage of digital wallets.

In terms of competition, among the top e-wallets are Boost, Touch 'n Go, Maybank QR, ShopeePay, and GrabPay. All these wallets are constantly rising in popularity.

### Capabilities

|                                    | Maybank QR                 |
| :--------------------------------- | :------------------------- |
| **Min. amount**                    | 5 MYR                      |
| **Max. expiration time supported** | 5 minutes                  |
| **Notification delay**             | Immediate                  |
| **Refunds**                        | Yes                        |
| **Flow**                           | `DIRECT` <br /> `REDIRECT` |

### UX Flow

<Image src="https://files.readme.io/39f80d2bce949f42b11a436cf37c6b01cff2e9be1371ad1638b6706818a73f1c-Maybank_QR_Pay.png" alt="The screenshots illustrate a generic Maybank QR Pay redirect flow through a QR code." align="center" caption="The screenshots illustrate a generic Maybank QR Pay redirect flow through a QR code." />

### Request parameters

| Property              | Type   | Description                                                                                                            | Mandatory? |
| :-------------------- | :----- | :--------------------------------------------------------------------------------------------------------------------- | :--------- |
| `amount`              | Number | Amount to be charged.                                                                                                  | Yes        |
| `currency`            | String | `MYR`<br /><br />Transaction currency in [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217).                            | Yes        |
| `country`             | String | `MY` <br /><br />Transaction country in [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).      | Yes        |
| `payment_method_id`   | String | `MB` <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": 50,
    "currency": "MYR",
    "country": "MY",
    "payment_method_id": "MB",
    "payment_method_flow": "REDIRECT",
    "payer": {
        "name": "Jane Doe",
        "email": "janedoe@mymail.com",
        "document": "123456789876",
        "address": {
            "country": "MY",
            "state": "Malacca",
            "city": "Malacca",
            "zip_code": "8858",
            "street": "Main St.",
            "number": "540"
        }
    },
    "order_id": "345453483kqws0",
    "description": "Tshirt",
    "notification_url": "http://merchantsite.com/notification/new",
    "callback_url": "http://merchantsite.com/success_page"
}
```
```json Response example
{
    "id": "R-4-f9c65093-yt65-4c1f-bb29-b2fdaec47ccb",
    "amount": 50,
    "currency": "MYR",
    "payment_method_id": "MB",
    "payment_method_type": "TICKET",
    "payment_method_flow": "REDIRECT",
    "country": "MY",
    "created_date": "2023-03-10T13:15:40.000+0000",
    "status": "PENDING",
    "status_detail": "The payment is pending.",
    "status_code": "100",
    "order_id": "345453483kqws0",
    "description": "Tshirt",
    "notification_url": "http://merchantsite.com/notification/new",
    "redirect_url": "https://pay.dlocal.com/gmf-apm/payments-redirect/M-c9c43cac-e86b-4f31-6t65-57929d695b88"
}
```

## Touch 'n Go

Wallets are very popular in Malaysia, which is leading its Southeast Asian neighboring countries in terms of the usage of digital wallets.

In terms of competition, among the top e-wallets are Boost, Touch 'n Go, Maybank QR, ShopeePay, and GrabPay. All these wallets are constantly rising in popularity.

### Capabilities

|                                    | Touch 'n Go |
| :--------------------------------- | :---------- |
| **Min. amount**                    | 5 MYR       |
| **Max. expiration time supported** | 5 minutes   |
| **Notification delay**             | Immediate   |
| **Refunds**                        | Yes         |
| **Flow**                           | `REDIRECT`  |

### UX Flow

#### QR code flow

<Image src="https://files.readme.io/ae5c73adfdad266ff7e123298308cb4cc6f4947a533abc68cf8c172051a2ede1-Touch_n_go_-_QR.png" alt="The screenshots illustrate a generic Touch 'n go redirect flow through a QR code available for web and desktop views." align="center" caption="The screenshots illustrate a generic Touch 'n Go redirect flow through a QR code available for web and desktop views." />

#### Wallet flow

<Image src="https://files.readme.io/7d7ef855ed3ccf632356ee1f53d56ebc0198794a684e178a6a347229aef67a8f-Touch_n_go_-_Wallet.png" alt="The screenshots illustrate a generic Touch 'n go wallet redirect flow." align="center" caption="The screenshots illustrate a generic Touch 'n Go wallet redirect flow." />

### Request parameters

| Property              | Type   | Description                                                                                                            | Mandatory? |
| :-------------------- | :----- | :--------------------------------------------------------------------------------------------------------------------- | :--------- |
| `amount`              | Number | Amount to be charged.                                                                                                  | Yes        |
| `currency`            | String | `MYR`<br /><br />Transaction currency in [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217).                            | Yes        |
| `country`             | String | `MY` <br /><br />Transaction country in [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).      | Yes        |
| `payment_method_id`   | String | `TG` <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": 50,
    "currency": "MYR",
    "country": "MY",
    "payment_method_id": "TG",
    "payment_method_flow": "REDIRECT",
    "payer": {
        "name": "Jane Doe",
        "email": "janedoe@mymail.com",
        "document": "123456789012",
        "address": {
            "country": "MY",
            "state": "Malacca",
            "city": "Malacca",
            "zip_code": "8858",
            "street": "Main St.",
            "number": "540"
        }
    },
    "order_id": "345453483kqws0",
    "description": "Tshirt",
    "notification_url": "http://merchantsite.com/notification/new",
    "callback_url": "http://merchantsite.com/success_page"
}

```
```json Response example
{
    "id": "R-4-4678d8f3-bc63-5rt4-bb68-72f3d52d7ce9",
    "amount": 50,
    "currency": "MYR",
    "payment_method_id": "TG",
    "payment_method_type": "TICKET",
    "payment_method_flow": "REDIRECT",
    "country": "MY",
    "created_date": "2023-01-30T15:56:10.000+0000",
    "status": "PENDING",
    "status_detail": "The payment is pending.",
    "status_code": "100",
    "order_id": "345453483kqws0",
    "description": "Tshirt",
    "notification_url": "http://merchantsite.com/notification/new",
    "redirect_url": "https://pay.dlocal.com/gmf-apm/payments-redirect/M-c5731556-6554-408e-ad02-80d68d1c586c"
}
```

## Touch 'n Go Recurring

For recurring payments with Touch 'n GO, Customers only need to complete a verification once during the enrollment process, which grants the merchant authorization to execute subsequent payments on demand.

### Capabilities

|                                    | Touch 'n Go                                           |
| :--------------------------------- | :---------------------------------------------------- |
| **Min. amount**                    | 5 MYR                                                 |
| **Max. expiration time supported** | 15 minutes                                            |
| **Notification delay**             | Immediate                                             |
| **Refunds**                        | Yes. Full and partial.                                |
| **Flow**                           | Enrollment `REDIRECT`<br />Recurring payment `DIRECT` |

### 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>
        `MYR`<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>
        `MY` <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>
        `TF` <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": "MYR",
  "country": "MY",
  "type": "ON_DEMAND",
  "description": "Monthly subscription",
  "payment_method_id": "TF",
  "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": "TF",
  "payment_method_flow": "REDIRECT",
  "payment_method_type": "TICKET"
}
```
```json Asynchronous Response Example
{
  "id": "E-4-a6418560-42c0-44bb-9a6f-da77730bcb6b",
  "external_id": "fwbExmQQ7",
  "currency": "MYR",
  "country": "MY",
  "type": "ON_DEMAND",
  "payment_method_id": "TF",
  "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": "MYR",
  "country": "MY",
  "payment_method_id": "TF",
  "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": "MYR",
  "payment_method_id": "TF",
  "payment_method_type": "TICKET",
  "payment_method_flow": "DIRECT",
  "country": "MY",
  "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": "MYR",
  "country": "MY",
  "payment_method_id": "TF",
  "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": "MYR",
  "country": "MY",
  "payment_method_id": "TF",
  "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": "MYR",
  "payment_method_id": "TF",
  "payment_method_type": "TICKET",
  "payment_method_flow": "DIRECT",
  "country": "MY",
  "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": "MYR",
  "country": "MY",
  "type": "ON_DEMAND",
  "payment_method_id": "TF",
  "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": "MYR",
  "country": "MY",
  "payment_method_id": "TF",
  "payment_method_flow": "DIRECT",
  "notification_url": "http://merchantsite.com/notifications",
  "created_date": "2025-12-05T10:51:20.000+0000"
}
```

## Shopeepay

Wallets are very popular in Malaysia, which is leading its Southeast Asian neighboring countries in terms of the usage of digital wallets.

In terms of competition, among the top e-wallets are Boost, Touch 'n Go, Maybank QR, ShopeePay, and GrabPay. All these wallets are constantly rising in popularity.

### Capabilities

|                                    | Shopeepay  |
| :--------------------------------- | :--------- |
| **Min. amount**                    | 5 MYR      |
| **Max. expiration time supported** | 90 minutes |
| **Notification delay**             | Immediate  |
| **Refunds**                        | Yes        |
| **Flow**                           | `REDIRECT` |

### UX Flow

<Image src="https://files.readme.io/48fefd7935951f1ee3dd88b4ecdbb3ee0761f47913fdd0766b393f685d0e736c-ShopeePay2.png" alt="The screenshots illustrate a generic ShopeePay redirect flow through a QR code." align="center" caption="The screenshots illustrate a generic ShopeePay redirect flow through a QR code." />

### Request parameters

| Property              | Type   | Description                                                                                                            | Mandatory? |
| :-------------------- | :----- | :--------------------------------------------------------------------------------------------------------------------- | :--------- |
| `amount`              | Number | Amount to be charged.                                                                                                  | Yes        |
| `currency`            | String | `MYR`<br /><br />Transaction currency in [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217).                            | Yes        |
| `country`             | String | `MY` <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": 50,
    "currency": "MYR",
    "country": "MY",
    "payment_method_id": "SO",
    "payment_method_flow": "REDIRECT",
    "payer": {
        "name": "Jane Doe",
        "email": "janedoe@mymail.com",
        "document": "123456789012",
        "address": {
            "country": "MY",
            "state": "Malacca",
            "city": "Malacca",
            "zip_code": "8858",
            "street": "Main St.",
            "number": "540"
        }
    },
    "order_id": "345453483kqws",
    "description": "Tshirt",
    "notification_url": "http://merchantsite.com/notification/new",
    "callback_url": "http://merchantsite.com/success_page"
}
```
```json Response example
{
    "id": "R-4-5461d8a7-f565-4328-6ytf-95e541640584",
    "amount": 50,
    "currency": "MYR",
    "payment_method_id": "SO",
    "payment_method_type": "TICKET",
    "payment_method_flow": "REDIRECT",
    "country": "MY",
    "created_date": "2023-02-17T18:09:42.000+0000",
    "status": "PENDING",
    "status_detail": "The payment is pending.",
    "status_code": "100",
    "order_id": "345453483kqws0w",
    "description": "Tshirt",
    "notification_url": "http://merchantsite.com/notification/new",
    "redirect_url": "https://pay.dlocal.com/gmf-apm/payments-redirect/M-862004ff-6013-thy6-8432-e30b2f388beb"
}

```

## DuitNowQR

An interoperable QR standard that allows Malaysians to make payments and receive funds from any participating Bank and eWallet with just one QR code.

### Capabilities

|                                    | DuitNowQR                  |
| :--------------------------------- | :------------------------- |
| **Min. amount**                    | 5 MYR                      |
| **Max. expiration time supported** | 5 minutes                  |
| **Notification delay**             | Immediate                  |
| **Refunds**                        | Yes                        |
| **Flow**                           | `DIRECT` <br /> `REDIRECT` |

### UX Flow

<Image src="https://files.readme.io/663d87de6555c5ccb5a772de2d4c1f5b6cd9bbc3dc01147686f5b8c5e21aa7a1-DuitNow_Qr.png" alt="The screenshots illustrate a generic DuitNowQR redirect flow through a QR code. 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 DuitNowQR redirect flow through a QR code. 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 | `MYR`<br /><br />Transaction currency in [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217).                            | Yes        |
| `country`             | String | `MY` <br /><br />Transaction country in [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).      | Yes        |
| `payment_method_id`   | String | `DQ` <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": 50,
    "currency": "MYR",
    "country": "MY",
    "payment_method_id": "DQ",
    "payment_method_flow": "REDIRECT",
    "payer": {
        "name": "Jane Doe",
        "email": "janedoe@mymail.com",
        "phone": "+006286123456",
        "document": "123456789012",
        "address": {
            "country": "MY",
            "state": "Malacca",
            "city": "Malacca",
            "zip_code": "8858",
            "street": "Main St.",
            "number": "540"
        }
    },
    "order_id": "345453483kqws0",
    "description": "Tshirt",
    "notification_url": "http://merchantsite.com/notification/new",
    "callback_url": "http://merchantsite.com/success_page"
}
```
```json Response example
{
    "id": "R-4-d7c221a9-ab7b-48c9-4r56-c72e7d869d86",
    "amount": 50,
    "currency": "MYR",
    "payment_method_id": "DQ",
    "payment_method_type": "TICKET",
    "payment_method_flow": "REDIRECT",
    "country": "MY",
    "created_date": "2023-02-17T17:54:45.000+0000",
    "status": "PENDING",
    "status_detail": "The payment is pending.",
    "status_code": "100",
    "order_id": "345453483kqws0w",
    "description": "Tshirt",
    "notification_url": "http://merchantsite.com/notification/new",
    "redirect_url": "https://pay.dlocal.com/gmf-apm/payments-redirect/M-c650346a-c177-4d72-45tr-f4b98f6a2185"
}
```

### Direct

DuitNowQR can also be processed as a `DIRECT` payment method flow, returning the QR payload directly in the payment response instead of a redirect URL.

```json Request Example
{
    "amount": 50,
    "currency": "MYR",
    "country": "MY",
    "payment_method_id": "DQ",
    "payment_method_flow": "DIRECT",
    "payer": {
        "name": "Jane Doe",
        "email": "janedoe@mymail.com",
        "phone": "+006286123456",
        "document": "123456789012",
        "address": {
            "country": "MY",
            "state": "Malacca",
            "city": "Malacca",
            "zip_code": "8858",
            "street": "Main St.",
            "number": "540"
        }
    },
    "order_id": "QR-DIRECT-EXAMPLE",
    "description": "Tshirt",
    "notification_url": "https://merchant.example.com/notifications"
}
```
```json Response Example
{
    "id": "D-4-d7c221a9-ab7b-48c9-4r56-c72e7d869d86",
    "amount": 50,
    "currency": "MYR",
    "payment_method_id": "DQ",
    "payment_method_type": "TICKET",
    "payment_method_flow": "DIRECT",
    "country": "MY",
    "bank_transfer": {},
    "ticket": {
        "type": "CUSTOM",
        "expiration_date": "2023-02-17T18:24:45.000+0000",
        "number": "DQ2302171754450001",
        "id": "d7c221a9-ab7b-48c9-4r56-c72e7d869d86",
        "barcode": "00020101021226370016A00000067701011201150107536000315080214KB0000016689500320API1675101655190221631690016A00000067701011301030040214KB0000016689500420API1675101655190221653034585405050.005802MY5907D Local6011Kuala Lumpur6304ABCD",
        "provider_name": "provider-example",
        "provider_logo": "https://static.dlocal.com/images/providers/DQ.png",
        "provider_url": "https://provider-example.com/app/pay?ref=example",
        "image_url": "https://pay.dlocal.com/gmf-apm/payments/example",
        "amount": 50,
        "currency": "MYR"
    },
    "created_date": "2023-02-17T17:54:45.000+0000",
    "status": "PENDING",
    "status_detail": "The payment is pending.",
    "status_code": "100",
    "order_id": "QR-DIRECT-EXAMPLE",
    "notification_url": "https://merchant.example.com/notifications"
}
```

`ticket.provider_url` may be a payment-app deep link. Treat it as an optional app-entry point that can be offered alongside the QR code, not as a replacement for the `ticket.barcode` payload — the payer can always complete the payment by scanning the QR code even if the deep link is not used.

###

## Atome

Atome’s BNPL in Malaysia allows consumers to make purchases and pay them in installments. It offers flexible payment plans, often interest-free if paid on time, and is designed to cater to local consumers and merchants.

### Capabilities

|                                    | Atome      |
| :--------------------------------- | :--------- |
| **Min. amount**                    | 10 MYR     |
| **Max. expiration time supported** | 12 hours   |
| **Notification delay**             | Immediate  |
| **Refunds**                        | Yes        |
| **Flow**                           | `REDIRECT` |

### UX Flow

<Image src="https://files.readme.io/811483430a2dd78afa7d67c0572d6f1121e8ed8b1b400d5c889de636bd0b473b-Atome_BNPL.png" alt="The screenshots illustrate a generic Atome 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 Atome 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 | `MYR`<br /><br />Transaction currency in [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217).                            | Yes        |
| `country`             | String | `MY` <br /><br />Transaction country in [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).      | Yes        |
| `payment_method_id`   | String | `TA` <br /><br />ID of the selected payment method.                                                                    | Yes        |
| `payment_method_flow` | String | `REDIRECT`                                                                                                             | Yes        |
| `payer.phone`         | String | Phone number 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         |
| `description`         | String | Description of the items purchased.                                                                                    | 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         |
| `callback_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": 150,
  "currency": "MYR",
  "country": "MY",
  "payment_method_id": "TA",
  "payment_method_flow": "REDIRECT",
  "payer": {
    "phone": "+80000000011"
  },
  "order_id": "345453483kqws0",
  "description": "Tshirt",
  "notification_url": "https://merchantsite.com/notifications",
  "callback_url": "https://merchantsite.com/callback"
}
```
```json Response example
{
  "id": "R-4-d7c221a9-ab7b-48c9-4r56-c72e7d869d86",
  "amount": 150,
  "currency": "MYR",
  "payment_method_id": "TA",
  "payment_method_type": "TICKET",
  "payment_method_flow": "REDIRECT",
  "country": "MY",
  "created_date": "2025-11-12T12:34:56.000+0000",
  "status": "PENDING",
  "status_detail": "The payment is pending.",
  "status_code": "100",
  "order_id": "345453483kqws0w",
  "description": "Tshirt",
  "notification_url": "https://merchantsite.com/notifications",
  "redirect_url": "https://pay.dlocal.com/gmf-apm/payments/E-4-32e1218f-b6ec-3f21-13d5-50v12ere2ca4"
}
```
```json Asynchronous response (webhook)
{
  "id": "R-4-d7c221a9-ab7b-48c9-4r56-c72e7d869d86",
  "amount": 150,
  "status": "PAID",
  "status_detail": "The payment was paid.",
  "status_code": "200",
  "currency": "MYR",
  "country": "MY",
  "payment_method_id": "TA",
  "payment_method_type": "TICKET",
  "payment_method_flow": "REDIRECT",
  "payer": {
    "name": "Jane Doe",
    "email": "jane.doe@example.com",
    "document": "123456789012"
  },
  "order_id": "your-order-id-123",
  "description": "Tshirt",
  "notification_url": "https://merchantsite.com/notifications",
  "created_date": "2025-11-12T12:34:56.000+0000"
}
```