---
updatedAt: 2026-07-24T16:49:21.000Z
agentTools:
  projectIndex: https://docs.dlocal.com/llms.txt
---

# South Africa

Learn about the dLocal supported payment methods in South Africa.

[block:html]
{
  "html": "<style>\n  \n  .main {\n    margin-left: auto;\n    margin-right: auto;\n    margin-bottom: 5px;\n    display: grid;\n    grid-template-columns: repeat(3, 1fr); /* Tres columnas */\n    width: 740px; /* Ancho máximo de la caja */\n}\n\n.overview-card1 {\n    position: relative; /* Asegúrate de que el contenedor sea relativo para posicionar el pseudoelemento */\n    width: 100%;\n    max-width: 233px;\n    box-sizing: border-box;\n    margin: 0;\n}\n\n.overview-card1::after {\n    content: '';\n    position: absolute;\n    right: 0; /* Pega la línea al borde derecho */\n    top: 30%; /* Ajusta la posición superior de la línea */\n    height: 70%; /* Establece el alto de la línea al 60% */\n    width: 1px; /* Grosor de la línea */\n    background-color: #D2D8EC; /* Color de la línea */\n}\n  \n.overview-card2 {\n    position: relative; /* Asegúrate de que el contenedor sea relativo para posicionar el pseudoelemento */\n    width: 100%;\n    max-width: 233px;\n    box-sizing: border-box;\n    margin: 0;\n}\n\n.overview-card-upper-side1 {\n    height: 105px;\n    padding: 20px;\n    background-color: transparent;\n    text-align: left;\n}\n\n.overview-card-bottom-side {\n    position: relative;\n    width: 100%;\n    height: 100%;\n    padding: 30px;\n    padding-right: 20px;\n    background-color: transparent;\n    border-radius: 16px;\n}\n\n.overview-card-title1 {\n    font-family: 'Plus Jakarta Sans', sans-serif;\n    font-size: 24px;\n    font-weight: 700;\n    line-height: 26.4px;\n}\n\n.overview-card-content1 {\n    font-size: 14px;\n    font-weight: 300;\n    margin-top: 20px;\n    line-height: 20px;\n    margin-bottom: 40px!important;\n}\n\n.overview-icon1 {\n    margin-bottom: -5px;\n    margin-top: 20px;\n}\n  \n.doc-link {\n        position: relative;\n        font-weight: 500;\n        color: #21A35B !important;\n        text-decoration: none;\n        display: block;\n    }\n  \n\ndiv:not(.markdown-body) .doc-link:hover {\n            text-decoration: none;\n            color: #1043FA !important;\n            transform: translateX(0.2em);\n        }\n\n.overview-card-title1:hover {\n    color: #2D59F5 !important;\n    cursor:pointer;\n    transform: none!important;\n}\n\n    div:not(.markdown-body) .doc-link_arrow {\n        display: inline-block;\n        height: 1em;\n        width: auto;\n        vertical-align: middle;\n        margin-left: 0.2em;\n        margin-top: -0.1em;\n    }\n  \n     div:not(.markdown-body) .doc-link:hover .doc-link_arrow-color {\n            fill: #1043FA !important;\n        }\n  \n      [data-color-mode=\"dark\"] .overview-icon1 img {\n  filter: brightness(0) invert(1);\n  transition: filter 0.3s ease;\n}\n  \n/* Media Queries para dispositivos móviles */\n@media (max-width: 768px) {\n  .main {\n    grid-template-columns: repeat(2, 1fr); /* Dos columnas en pantallas medianas */\n  }\n}\n\n@media (max-width: 480px) {\n  .main {\n    grid-template-columns: 1fr; /* Una columna en pantallas pequeñas */\n}\n</style>\n  \n    <div class=\"main\">\n\n     <!-- Market specifications -->\n      <div class=\"overview-card1\" onclick=\"parent.location='/docs/south-africa#market-specifications'\">\n     <div class=\"overview-card-bottom-side\">\n       <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>\n           <h3 class=\"overview-card-title1\">Market specifications</h3>\n          <p class=\"overview-card-content1\">\n            Take a look of all the payment methods available.   \n        </p>\n          <a href=\"#country-reference\" class=\"doc-link\">Country reference</a>\n          <a href=\"#cards-supported\" class=\"doc-link\">Cards supported</a>\n          <a href=\"#alternative-payment-method-supported\" class=\"doc-link\">APM supported</a>\n        </div>\n      </div>\n      \n      <!-- Cards -->\n      <div\n        class=\"overview-card1\" onclick=\"parent.location='/docs/south-africa#cards'\">\n        <div class=\"overview-card-bottom-side\">\n                  <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>\n           <h3 class=\"overview-card-title1\">Cards</h3><br>\n          <p class=\"overview-card-content1\">\n           Find all the information about the card supported capabilities.   \n          </p>\n          <a href=\"#capabilities\" class=\"doc-link\">Capabilities</a>\n          <a href=\"#how-to-process-card-payments\" class=\"doc-link\">Process Card Payments</a>\n        </div>\n      </div>  \n      \n      <!-- APM -->\n      <div class=\"overview-card2\" onclick=\"parent.location='/docs/south-africa#alternative-payment-method'\">\n    <div class=\"overview-card-bottom-side\">\n             <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>\n           <h3 class=\"overview-card-title1\">Alternative Payments</h3>\n          <p class=\"overview-card-content1\">\n             Learn how to integrate cash, bank transfer or wallet payment.  \n        </p>\n          <a href=\"#bank-transfer\" class=\"doc-link\">Bank Transfer</a>\n          <a href=\"#payflex\" class=\"doc-link\">Payflex</a>\n          <a href=\"#mobicred\" class=\"doc-link\">Mobicred</a>\n          <a href=\"#capitec-pay\" class=\"doc-link\">Capitec Pay</a>\n          <a href=\"#capitec-pay-recurring\" class=\"doc-link\">Capitec Pay Recurring</a>\n        </div>\n      </div> \n      \n    </div>"
}
[/block]

***

# Market specifications

Do you want to know more information about South Africa's market? Go to the [South Africa’s economy and eCommerce market](https://dlocal.com/payment-processors-middle-east-africa/south-africa-payment-methods-processors-ecommerce-market/) article.

## Country reference

| `country` code | `currency` code | `amount` decimals |       `document` name       |        `document` format       | `document` required? |
| :------------: | :-------------: | :---------------: | :-------------------------: | :----------------------------: | :------------------: |
|      `ZA`      |      `ZAR`      |         2         | South African Identity Card | 13 digits with full validation |          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`              | `MC`     | Mastercard         | `CARD`                | Credit Card ​ | `DIRECT` `REDIRECT` | <img src="https://static.dlocal.com/images/providers/checkout/MC.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`              | `MD`     | Mastercard Debit ​ | `CARD`                | Debit Card ​  | `DIRECT` `REDIRECT` | <img src="https://static.dlocal.com/images/providers/checkout/MD.svg" width = 40px /> |
| `CARD`              | `AE`     | American Express   | `CARD`                | Credit Card ​ | `DIRECT`            | <img src="https://static.dlocal.com/images/providers/checkout/AE.svg" width = 40px /> |

> ℹ️
>
> To offer all the card options that may be available in your integration, send the `payment_method_id` as `CARD`.

## Alternative Payment Method supported

| `payment_method_id` | Name                  | `payment_method_type` | Details       | Allowed Flows      | Logo                                                                                  |
| :------------------ | :-------------------- | :-------------------- | :------------ | :----------------- | :------------------------------------------------------------------------------------ |
| `ZT`                | Stitch                | `BANK_TRANSFER`       | Bank Transfer | `REDIRECT`         | <img src="https://pay.dlocal.com/views/2.0/images/payments/IO.png" width = 40px />    |
| `IO`                | Ozow                  | `BANK_TRANSFER`       | Bank Transfer | `REDIRECT`         | <img src="https://pay.dlocal.com/views/2.0/images/payments/IO.png" width = 40px />    |
| `FX`                | Payflex               | `TICKET`              | Wallet        | `REDIRECT`         | <img src="https://static.dlocal.com/images/providers/FX.png" width = 40px />          |
| `DZ`                | Mobicred              | `TICKET`              | Wallet        | `REDIRECT`         | <img src="https://static.dlocal.com/images/providers/DZ.png" width = 40px />          |
| `ZC`                | Capitec Pay           | `BANK_TRANSFER`       | Bank Transfer | `REDIRECT`         | <img src="https://static.dlocal.com/images/providers/capitec_pay.png" width = 40px /> |
| `ZR`                | Capitec Pay Recurring | `BANK_TRANSFER`       | Bank Transfer | `REDIRECT  DIRECT` | <img src="https://static.dlocal.com/images/providers/capitec_pay.png" width = 40px /> |

***

# Cards

## Capabilities

|                               | Visa Credit                                            | Mastercard Credit                                      | Visa Debit                                             | Mastercard Debit                                       | American Express                                       |
| :---------------------------- | :----------------------------------------------------- | :----------------------------------------------------- | :----------------------------------------------------- | :----------------------------------------------------- | :----------------------------------------------------- |
| **Minimum amount**            | 1 ZAR                                                  | 1 ZAR                                                  | 1 ZAR                                                  | 1 ZAR                                                  | 1 ZAR                                                  |
| **Refunds**                   | Yes                                                    | Yes                                                    | Yes                                                    | Yes                                                    | Yes                                                    |
| **Recurring**                 | Yes                                                    | Yes                                                    | Yes                                                    | Yes                                                    | Yes                                                    |
| **Chargeback option**         | Yes                                                    | Yes                                                    | Yes                                                    | Yes                                                    | Yes                                                    |
| **Chargeback Dispute option** | Yes                                                    | Yes                                                    | Yes                                                    | Yes                                                    | Yes                                                    |
| **Descriptor**                | Merchant name or description provided by the merchant. | Merchant name or description provided by the merchant. | Merchant name or description provided by the merchant. | Merchant name or description provided by the merchant. | Merchant name or description provided by the merchant. |

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

## Bank Transfer

### Capabilities

|                                    | Bank Transfer |
| :--------------------------------- | :------------ |
| **Min. amount**                    | 1 ZAR         |
| **Max. expiration time supported** | 1 day         |
| **Notification delay**             | Immediate     |
| **Refunds**                        | Yes           |
| **Flow**                           | `REDIRECT`    |

### UX Flow

[block:image]
{
  "images": [
    {
      "image": [
        "https://files.readme.io/71e091805e6e1b0fe777e13728e55feab45e4d298265a75bfee7034a0c1a1c6f-Bank_transfer_-_ZA.png",
        null,
        ""
      ],
      "align": "center"
    }
  ]
}
[/block]

### Request parameters

[block:parameters]
{
  "data": {
    "h-0": "Property",
    "h-1": "Type",
    "h-2": "Description",
    "h-3": "Mandatory?",
    "0-0": "`amount`",
    "0-1": "Number",
    "0-2": "Amount to be charged.",
    "0-3": "Yes",
    "1-0": "`currency`",
    "1-1": "String",
    "1-2": "`ZAR`<br><br>Transaction currency in [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217).",
    "1-3": "Yes",
    "2-0": "`country`",
    "2-1": "String",
    "2-2": "`ZA` <br><br>Transaction country in [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).",
    "2-3": "Yes",
    "3-0": "`payment_method_id`",
    "3-1": "String",
    "3-2": "`ZT` <br><br>ID of the selected payment method.",
    "3-3": "Yes",
    "4-0": "`payment_method_flow`",
    "4-1": "String",
    "4-2": "`REDIRECT`",
    "4-3": "Yes",
    "5-0": "`payer.name`",
    "5-1": "String",
    "5-2": "Name of the payer.",
    "5-3": "Yes",
    "6-0": "`payer.email`",
    "6-1": "String",
    "6-2": "Email of the payer.",
    "6-3": "Yes",
    "7-0": "`payer.document`",
    "7-1": "String",
    "7-2": "Document of the payer.",
    "7-3": "Yes",
    "8-0": "`order_id`",
    "8-1": "String",
    "8-2": "ID of the capture given by the merchant in their system. Think of it as an external ID of the capture.",
    "8-3": "No",
    "9-0": "`notification_url`",
    "9-1": "String",
    "9-2": "Notifications will be sent in every change of status of a payment to the `notification_url` specified by the merchant.",
    "9-3": "No"
  },
  "cols": 4,
  "rows": 10,
  "align": [
    "left",
    "left",
    "left",
    "left"
  ]
}
[/block]

### Examples

```json Request example
{
    "amount": 1000,
    "currency": "ZAR",
    "country": "ZA",
    "payment_method_id": "ZT",
    "payment_method_flow": "REDIRECT",
    "payer": {
        "name": "Jane Doe",
        "email": "janedoe@mymail.com",
        "document": "1234567890123",
        "address": {
            "country": "ZA",
            "state": "Cape Province",
            "city": "Cape Town",
            "zip_code": "7100",
            "street": "Maine Street",
            "number": "9"
        }
    },
    "order_id": "34545sk3483kqw0",
    "description": "Tshirt",
    "notification_url": "http://merchantsite.com/notification/new",
    "callback_url": "http://merchantsite.com/success_page"
}
```
```json Response example
{
    "id": "R-4-ef95f10e-678e-423e-76ss-e574b98a9cbe",
    "amount": 1000,
    "currency": "ZAR",
    "payment_method_id": "ZT",
    "payment_method_type": "BANK_TRANSFER",
    "payment_method_flow": "REDIRECT",
    "country": "ZA",
    "created_date": "2023-01-23T19:02:09.000+0000",
    "status": "PENDING",
    "status_detail": "The payment is pending.",
    "status_code": "100",
    "order_id": "34545sk3483kqw0",
    "description": "Tshirt",
    "notification_url": "http://merchant.com/notification/new",
    "redirect_url": "https://pay.dlocal.com/gmf-apm/payments-redirect/M-69571584-70e8-41b2-a9f0-a33cb4ace4e7"
}
```

## Payflex

Payflex is a popular Buy Now Pay Later (BNPL) online payment method in South Africa. It allows shoppers to pay for their purchase in full or in four interest-free installments over six weeks.

Customers only need to pay 25% of the purchase price on the day they place their order.

### Capabilities

|                        | Payflex    |
| :--------------------- | :--------- |
| **Min. amount.**       | 1 ZAR      |
| **Expiration**         | 30 Minutes |
| **Notification delay** | Immediate  |
| **Refunds**            | Yes        |
| **Flow**               | `REDIRECT` |

### UX Flow

#### First-time user

[block:image]
{
  "images": [
    {
      "image": [
        "https://files.readme.io/f55e47c3e9976f7b3bcda8c8204074816d7729d5ee6d998cd4f110f624205191-Payflex-_ZA_-_First_time_user.png",
        "",
        "The screenshots illustrate a Payflex first-time user flow. The specifics of the flow may vary depending on the payment method selected to complete the payment."
      ],
      "align": "center",
      "caption": "The screenshots illustrate a Payflex first-time user flow. The specifics of the flow may vary depending on the payment method selected to complete the payment."
    }
  ]
}
[/block]

#### Existing user

[block:image]
{
  "images": [
    {
      "image": [
        "https://files.readme.io/79fbc6fb02bf92874a0d0dabb1d3ac41edb9254c4d393fecf3e5514a23d6b10f-Payflex-_ZA_-_existing_user.png",
        "",
        "The screenshots illustrate a Payflex existing user flow. The specifics of the flow may vary depending on the payment method chosen to complete the payment."
      ],
      "align": "center",
      "caption": "The screenshots illustrate a Payflex existing user flow. The specifics of the flow may vary depending on the payment method chosen to complete the payment."
    }
  ]
}
[/block]

### Request parameters

[block:parameters]
{
  "data": {
    "h-0": "Property",
    "h-1": "Type",
    "h-2": "Description",
    "h-3": "Mandatory?",
    "0-0": "`amount`",
    "0-1": "Number",
    "0-2": "Amount to be charged.",
    "0-3": "Yes",
    "1-0": "`currency`",
    "1-1": "String",
    "1-2": "`ZAR`<br><br>Transaction currency in [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217).",
    "1-3": "Yes",
    "2-0": "`country`",
    "2-1": "String",
    "2-2": "`ZA` <br><br>Transaction country in [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).",
    "2-3": "Yes",
    "3-0": "`payment_method_id`",
    "3-1": "String",
    "3-2": "`FX` <br><br>ID of the selected payment method.",
    "3-3": "Yes",
    "4-0": "`payment_method_flow`",
    "4-1": "String",
    "4-2": "`REDIRECT`",
    "4-3": "Yes",
    "5-0": "`payer.name`",
    "5-1": "String",
    "5-2": "Name of the payer.",
    "5-3": "Yes",
    "6-0": "`payer.email`",
    "6-1": "String",
    "6-2": "Email of the payer.",
    "6-3": "Yes",
    "7-0": "`payer.document`",
    "7-1": "String",
    "7-2": "Document of the payer. ",
    "7-3": "Yes",
    "8-0": "`address.country`",
    "8-1": "String",
    "8-2": "`ZA`<br><br>Country of the payer.",
    "8-3": "Yes",
    "9-0": "`address.state`",
    "9-1": "String",
    "9-2": "State of the payer.",
    "9-3": "Yes",
    "10-0": "`address.city`",
    "10-1": "String",
    "10-2": "City of the payer.",
    "10-3": "Yes",
    "11-0": "`address.zip_code`",
    "11-1": "String",
    "11-2": "ZIP code of the payer.",
    "11-3": "Yes",
    "12-0": "`address.street`",
    "12-1": "String",
    "12-2": "Street of the payer.",
    "12-3": "Yes",
    "13-0": "`address.number`",
    "13-1": "String",
    "13-2": "Street number of the payer.",
    "13-3": "Yes",
    "14-0": "`order_id`",
    "14-1": "String",
    "14-2": "ID of the capture given by the merchant in their system. Think of it as an external ID of the capture.",
    "14-3": "No",
    "15-0": "`notification_url`",
    "15-1": "String",
    "15-2": "Notifications will be sent in every change of status of a payment to the `notification_url` specified by the merchant.",
    "15-3": "Yes"
  },
  "cols": 4,
  "rows": 16,
  "align": [
    "left",
    "left",
    "left",
    "left"
  ]
}
[/block]

### Examples

```json Request example
{
    "amount": 1000,
    "currency": "ZAR",
    "country": "ZA",
    "payment_method_id": "FX",
    "payment_method_flow": "REDIRECT",
    "payer": {
        "name": "Jane Doe",
        "email": "janedoe@mymail.com",
        "document": "1234567890123",
        "address": {
            "country": "ZA",
            "state": "Cape Province",
            "city": "Cape Town",
            "zip_code": "7100",
            "street": "Maine Street",
            "number": "9"
        }
    },
    "order_id": "34545sk3483kqw0",
    "description": "Tshirt",
    "notification_url": "http://merchantsite.com/notification/new",
    "callback_url": "http://merchant.com/success_page"
}
```
```json Response example
{
    "id": "R-4-e98ed216-b10d-ty54-885f-eb7a751a3a12",
    "amount": 1000,
    "currency": "ZAR",
    "payment_method_id": "FX",
    "payment_method_type": "TICKET",
    "payment_method_flow": "REDIRECT",
    "country": "ZA",
    "created_date": "2023-01-23T19:02:09.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-6f5d5f37-67y5-48f2-9e6f-fb911ca4ba39"
}
```

## Mobicred

Mobicred is a digital credit payment method in South Africa that allows customers to make online purchases using a revolving credit line. Approved users receive a credit limit and can pay for their purchases in monthly installments, with interest applied.

Payments are processed through Mobicred at checkout, and users must make a minimum monthly repayment of 7.5% of the outstanding balance.

### Capabilities

|                        | Mobicred   |
| :--------------------- | :--------- |
| **Min. amount.**       | 1 ZAR      |
| **Expiration**         | 30 Minutes |
| **Notification delay** | Immediate  |
| **Refunds**            | Yes        |
| **Flow**               | `REDIRECT` |

### UX Flow

[block:image]
{
  "images": [
    {
      "image": [
        "https://files.readme.io/c0f6c11bcc80ca33914c9b3a7dfdb209ecd8768cd164899c1432a7a40d159597-Mobicred.png",
        "",
        ""
      ],
      "align": "center"
    }
  ]
}
[/block]

### Request parameters

[block:parameters]
{
  "data": {
    "h-0": "Property",
    "h-1": "Type",
    "h-2": "Description",
    "h-3": "Mandatory?",
    "0-0": "`amount`",
    "0-1": "Number",
    "0-2": "Amount to be charged.",
    "0-3": "Yes",
    "1-0": "`currency`",
    "1-1": "String",
    "1-2": "`ZAR`<br><br>Transaction currency in [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217).",
    "1-3": "Yes",
    "2-0": "`country`",
    "2-1": "String",
    "2-2": "`ZA` <br><br>Transaction country in [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).",
    "2-3": "Yes",
    "3-0": "`payment_method_id`",
    "3-1": "String",
    "3-2": "`DZ` <br><br>ID of the selected payment method.",
    "3-3": "Yes",
    "4-0": "`payment_method_flow`",
    "4-1": "String",
    "4-2": "`REDIRECT`",
    "4-3": "Yes",
    "5-0": "`payer.name`",
    "5-1": "String",
    "5-2": "Name of the payer.",
    "5-3": "Yes",
    "6-0": "`payer.email`",
    "6-1": "String",
    "6-2": "Email of the payer.",
    "6-3": "Yes",
    "7-0": "`payer.document`",
    "7-1": "String",
    "7-2": "Document of the payer. ",
    "7-3": "Yes",
    "8-0": "`address.country`",
    "8-1": "String",
    "8-2": "`ZA` <br><br>Country of the payer.",
    "8-3": "Yes",
    "9-0": "`address.state`",
    "9-1": "String",
    "9-2": "State of the payer.",
    "9-3": "Yes",
    "10-0": "`address.city`",
    "10-1": "String",
    "10-2": "City of the payer.",
    "10-3": "Yes",
    "11-0": "`address.zip_code`",
    "11-1": "String",
    "11-2": "ZIP Code of the payer.",
    "11-3": "Yes",
    "12-0": "`address.street`",
    "12-1": "String",
    "12-2": "Street of the payer.",
    "12-3": "Yes",
    "13-0": "`address.number`",
    "13-1": "String",
    "13-2": "Street number of the payer.",
    "13-3": "Yes",
    "14-0": "`order_id`",
    "14-1": "String",
    "14-2": "ID of the capture given by the merchant in their system. Think of it as an external ID of the capture.",
    "14-3": "No",
    "15-0": "`notification_url`",
    "15-1": "String",
    "15-2": "Notifications will be sent in every change of status of a payment to the `notification_url` specified by the merchant.",
    "15-3": "Yes"
  },
  "cols": 4,
  "rows": 16,
  "align": [
    "left",
    "left",
    "left",
    "left"
  ]
}
[/block]

### Examples

```json Request example
{
    "amount": 10,
    "currency": "ZAR",
    "country": "ZA",
    "payment_method_id": "DZ",
    "payment_method_flow": "REDIRECT",
    "payer": {
        "name": "Jane Doe",
        "email": "janedoe@mymail.com",
        "phone": "0234567898",
        "document": "0465687962",
        "document_type": "CI",
        "account_number": "933303352683680",
        "address": {
            "country": "ZA",
            "state": "Cape Province",
            "city": "Cape Town",
            "zip_code": "7100",
            "street": "Maine Street",
            "number": "9"
        }
    },
    "order_id": "8ec2da8b-11d5-4a11-8c55-86006f2f93e6",
    "description": "Tshirt",
    "notification_url": "http://merchantsite.com/notification/new",
    "callback_url": "http://merchantsite.com/success_page"
}
```
```json Response example
{
    "id": "R-4-6729cb7d-a9af-41fd-ba95-1c6bf56356b5",
    "amount": 10,
    "currency": "ZAR",
    "payment_method_id": "DZ",
    "payment_method_type": "TICKET",
    "payment_method_flow": "REDIRECT",
    "country": "ZA",
    "created_date": "2025-03-26T16:19:10.000+0000",
    "status": "PENDING",
    "status_detail": "The payment is pending.",
    "status_code": "100",
    "order_id": "8ec2da8b-11d5-4a11-8c55-86006f2f93e6",
    "description": "Tshirt",
    "notification_url": "http://merchantsite.com/notification/new",
    "redirect_url": "https://pay.dlocal.com/gmf-apm/payments-continue/M-f7830a9d-5e46-4230-903f-8b7ad39c037d"
}
```

## Capitec Pay

Capitec Pay is a secure, convenient, and popular online payment method in South Africa that allows customers to pay directly from their Capitec bank account using their banking app; no need to enter card details.

During checkout, customers simply select Capitec Pay, enter their mobile number, and approve the payment via the Capitec app.

### Capabilities

|                        | Capitec Pay |
| :--------------------- | :---------- |
| **Min. amount.**       | 1 ZAR       |
| **Expiration time**    | 2 minutes   |
| **Notification delay** | Immediate   |
| **Refunds**            | Yes         |
| **Flow**               | `REDIRECT`  |

### UX Flow

[block:image]
{
  "images": [
    {
      "image": [
        "https://files.readme.io/cd1d394b7f0c22c0c499b282d35ce015fc865d4ed5dc1309ba629a84571e170c-Capitec-pay-ux-flow.png",
        "",
        ""
      ],
      "align": "center"
    }
  ]
}
[/block]

### Request Parameters

[block:parameters]
{
  "data": {
    "h-0": "Property",
    "h-1": "Type",
    "h-2": "Description",
    "h-3": "Mandatory?",
    "0-0": "`amount`",
    "0-1": "Number",
    "0-2": "Amount to be charged.",
    "0-3": "Yes",
    "1-0": "`currency`",
    "1-1": "String",
    "1-2": "`ZAR`<br><br>Transaction currency in [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217).",
    "1-3": "Yes",
    "2-0": "`country`",
    "2-1": "String",
    "2-2": "`ZA` <br><br>Transaction country in [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes).",
    "2-3": "Yes",
    "3-0": "`payment_method_id`",
    "3-1": "String",
    "3-2": "`ZC` <br><br>ID of the selected payment method.",
    "3-3": "Yes",
    "4-0": "`payment_method_flow`",
    "4-1": "String",
    "4-2": "`REDIRECT`",
    "4-3": "Yes",
    "5-0": "`payer.name`",
    "5-1": "String",
    "5-2": "Name of the payer.",
    "5-3": "Yes",
    "6-0": "`payer.phone`",
    "6-1": "String",
    "6-2": "Phone number of the payer.",
    "6-3": "Yes",
    "7-0": "`order_id`",
    "7-1": "String",
    "7-2": "ID of the capture given by the merchant in their system. Think of it as an external ID of the capture.",
    "7-3": "No",
    "8-0": "`notification_url`",
    "8-1": "String",
    "8-2": "Notifications will be sent in every change of status of a payment to the `notification_url` specified by the merchant.",
    "8-3": "Yes",
    "9-0": "`callback_url`",
    "9-1": "String",
    "9-2": "The payer will be redirected to the merchant’s website after completing the payment via the `callback_url` specified by the merchant.",
    "9-3": "Yes"
  },
  "cols": 4,
  "rows": 10,
  "align": [
    "left",
    "left",
    "left",
    "left"
  ]
}
[/block]

### Examples

```json Request example
{
  "amount": 10,
  "currency": "ZAR",
  "country": "ZA",
  "payment_method_id": "ZC",
  "payment_method_flow": "REDIRECT",
  "payer": {
    "name": "Jane Doe",
    "phone": "0823778084"
  },
  "order_id": "34545sk3483kqw0",
  "notification_url": "http://merchantsite.com/notification/new",
  "callback_url": "http://merchant.com/success_page"
}
```
```json Response example
{
  "id": "R-4-3973393c-3ac9-4443-8fb3-ab78d6fb0bef",
  "amount": 10,
  "currency": "ZAR",
  "payment_method_id": "ZC",
  "payment_method_type": "BANK_TRANSFER",
  "payment_method_flow": "REDIRECT",
  "country": "ZA",
  "created_date": "2025-04-15T16:22:08.000+0000",
  "status": "PENDING",
  "status_detail": "The payment is pending.",
  "status_code": "100",
  "order_id": "1b3e5d5e-d31b-4113-b35a-32b30959862d",
  "description": "Tshirt",
  "notification_url": "http://merchantsite.com/notification/new",
  "redirect_url": "https://pay.dlocal.com/gmf-apm/payments-redirect/M-6f5d5f37-67y5-48f2-9e6f-fb911ca4ba39"
}
```

## Capitec Pay Recurring

Capitec Pay Recurring is Capitec’s solution to support scheduled payments with weekly, monthly, semi-annual (six-month), or annual frequency. It also allows setting whether the amount to be charged is fixed or variable, depending on the merchant’s specific case.

### Capabilities

|                        | Capitec Pay Recurring                                                                                                                          |
| :--------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------- |
| **Min. Amount.**       | 1 ZAR                                                                                                                                          |
| **Expiration**         | 3 minutes                                                                                                                                      |
| **Notification delay** | Immediate                                                                                                                                      |
| **Refunds**            | Yes                                                                                                                                            |
| **Flow**               | One-Time User Enrollment: `REDIRECT`                                                                               Recurring Payment: `DIRECT` |

### UX Flow

[block:image]
{
  "images": [
    {
      "image": [
        "https://files.readme.io/cd1d394b7f0c22c0c499b282d35ce015fc865d4ed5dc1309ba629a84571e170c-Capitec-pay-ux-flow.png",
        "",
        ""
      ],
      "align": "center"
    }
  ]
}
[/block]

### One-time user enrollment

This is the API request that is used to create the recurring payment mandate with Capitec Pay.

#### Request parameters

[block:parameters]
{
  "data": {
    "h-0": "Property",
    "h-1": "Type",
    "h-2": "Description",
    "h-3": "Mandatory?",
    "0-0": "`external_id`",
    "0-1": "String",
    "0-2": "Identifier used by the merchant to identify the enrollment in their system.",
    "0-3": "Yes",
    "1-0": "`currency`",
    "1-1": "String",
    "1-2": "`ZAR` <br><br>Transaction currency in [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217).",
    "1-3": "Yes",
    "2-0": "`country`",
    "2-1": "String",
    "2-2": "`ZA` <br><br>Transaction country in [ISO 3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes) .",
    "2-3": "Yes",
    "3-0": "`type`",
    "3-1": "String",
    "3-2": "`MERCHANT_SUBSCRIPTION` <br><br>For subscriptions with future recurring payments initiated by the merchant.",
    "3-3": "Yes",
    "4-0": "`payment_method_id`",
    "4-1": "String",
    "4-2": "`ZR` <br><br>ID of the selected payment method.",
    "4-3": "Yes",
    "5-0": "`payment_method_flow`",
    "5-1": "String",
    "5-2": "`REDIRECT`",
    "5-3": "Yes",
    "6-0": "`payer.name`",
    "6-1": "String",
    "6-2": "Name of the payer.",
    "6-3": "Yes",
    "7-0": "`description`",
    "7-1": "String",
    "7-2": "Enrollment description.",
    "7-3": "No",
    "8-0": "`payer.email`",
    "8-1": "String",
    "8-2": "Email of the payer.",
    "8-3": "No",
    "9-0": "`payer.document`",
    "9-1": "Number",
    "9-2": "Document of the payer.",
    "9-3": "No",
    "10-0": "`payer.phone`",
    "10-1": "String",
    "10-2": "Phone number of the payer.",
    "10-3": "Yes",
    "11-0": "`subscription.start_date`",
    "11-1": "String (YYYY-MM-DD)",
    "11-2": "Subscription start date. The default is the current date. To be used only for subscriptions.",
    "11-3": "Yes",
    "12-0": "`subscription.end_date`",
    "12-1": "String (YYYY-MM-DD)",
    "12-2": "Subscription expiration date. If not provided, the subscription will not expire.",
    "12-3": "No",
    "13-0": "`subscription.frequency`",
    "13-1": "String",
    "13-2": "Possible values: `WEEKLY`, `MONTHLY`, `SEMI_ANNUAL`, or `ANNUAL`.",
    "13-3": "Yes",
    "14-0": "`subscription.amount.type`",
    "14-1": "String",
    "14-2": "Possible values:<br>• `FIXED`: For fixed amount subscription<br>• `VARIABLE`: For variable amount subscriptions",
    "14-3": "Yes",
    "15-0": "`subscription.amount.value`",
    "15-1": "Number (10,2)",
    "15-2": "Fixed subscription amount in local currency. Required only for fixed amount subscriptions depending on the payment method.",
    "15-3": "Conditional",
    "16-0": "`subscription.amount.max_value`",
    "16-1": "Number (10,2)",
    "16-2": "Maximum subscription amount that can be charged in local currency. Required only for variable amount subscriptions depending on the payment method.",
    "16-3": "Conditional",
    "17-0": "`notification_url`",
    "17-1": "String",
    "17-2": "Notifications will be sent in every change of status of a payment to the `notification_url` specified by the merchant.",
    "17-3": "Yes",
    "18-0": "`callback_url`",
    "18-1": "String",
    "18-2": "The payer will be redirected to the merchant’s website after completing the payment via the `callback_url` specified by the merchant.",
    "18-3": "Yes"
  },
  "cols": 4,
  "rows": 19,
  "align": [
    null,
    null,
    null,
    null
  ]
}
[/block]

#### Enrollment Example

[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": "ZAR",
  "country": "ZA",
  "type": "MERCHANT_SUBSCRIPTION",
  "description": "Capitec Recurriug - Monthly",
  "payment_method_id": "ZR",
  "payment_method_flow": "REDIRECT",
  "payer": {
    "phone": "0823778084",
    "name": "Jane Doe"
  },
  "subscription": {
    "start_date": "2025-09-10",
    "end_date": "2025-10-10",
    "frequency": "MONTHLY",
    "amount": {
      "type": "FIXED",
      "value": 588
    }
  },
  "notification_url": "http://merchantsite.com/notifications",
  "callback_url": "http://merchantsite.com/callback"
}
```
```json Response example

{
  "id": "E-4-3a8bcc85-d86e-4c9a-bbc4-8393b5fb488e",
  "external_id": "fwbExmQQ7",
  "status": "PENDING",
  "status_code": "100",
  "status_details": "The enrollment is pending.",
  "redirect_url": "https://pay.dlocal.com/gmf-apm/payments-redirect/M-6f5d5f37-67y5-48f2-9e6f-fb911ca4ba39"
}
```
```json Asynchronous response (webhook)

{
  "id": "E-4-3a8bcc85-d86e-4c9a-bbc4-8393b5fb488e",
  "external_id": "fwbExmQQ7",
  "currency": "ZAR",
  "country": "ZA",
  "type": "MERCHANT_SUBSCRIPTION",
  "payment_method_id": "ZR",
  "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": "https://merchant.com/enrollment_notifications"
}
```

### How to process Capitec Pay recurring payments?

Once the subscription has been set up, a payment request must be sent within each period. Payments cannot be scheduled in advance; instead, the merchant must send the request on the day the payment is due.

This flow is similar to a [Capitec Pay one-time payment](https://docs.dlocal.com/docs/#capitec-pay). The main difference is that it requires the `enrollment.id` to reference the initial customer authorization.

#### Payment 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
{
  "amount": 200,
  "external_id": "fwbExmQQ7",
  "currency": "ZAR",
  "country": "ZA",
  "payment_method_id": "ZR",
  "payment_method_flow": "DIRECT",
  "payer": {
    "phone": "0823778084"
  },
  "enrollment": {
    "id": "E-4-3a8bcc85-d86e-4c9a-bbc4-8393b5fb488e"
  },
  "notification_url": "http://merchantsite.com/notifications"
}
```
```json Response example

{
  "id": "E-4-3a8bcc85-d86e-4c9a-bbc4-8393b5fb488e",
  "amount": 200,
  "currency": "ZAR",
  "payment_method_id": "ZR",
  "payment_method_flow": "DIRECT",
  "country": "ZA",
  "created_date": "2025-09-10T20:39:20.000+0000",
  "status": "PENDING",
  "status_details": "The payment is pending.",
  "status_code": "100",
  "notification_url": "http://merchantsite.com/notifications"
}
```
```json Asynchronous response (webhook)

{
  "id": "E-4-3a8bcc85-d86e-4c9a-bbc4-8393b5fb488e",
  "amount": 200,
  "status": "PAID",
  "status_detail": "The payment is paid",
  "status_code": "200",
  "currency": "ZAR",
  "country": "ZA",
  "payment_method_id": "ZR",
  "payment_method_flow": "DIRECT",
  "payer": {
    "phone": "0823778084",
    "name": "Jane Doe",
    "document": "0465687962",
    "email": "janedoe@mymail.com"
  },
  "notification_url": "http://merchantsite.com/notifications",
  "created_date": "2024-09-10T20:37:20.000+0000"
}
```