South Africa
Learn about the dLocal supported payment methods in South Africa.
Market specifications
Take a look of all the payment methods available.
Country reference Cards supported APM supportedCards
Find all the information about the card supported capabilities.
Capabilities Process Card PaymentsAlternative Payments
Learn how to integrate cash, bank transfer or wallet payment.
Bank Transfer Payflex Mobicred Capitec Pay Capitec Pay RecurringMarket specifications
Do you want to know more information about South Africa's market? Go to the South Africa’s economy and 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 | |
CARD | MC | Mastercard | CARD | Credit Card | DIRECT REDIRECT | |
CARD | VD | Visa Debit | CARD | Debit Card | DIRECT REDIRECT | |
CARD | MD | Mastercard Debit | CARD | Debit Card | DIRECT REDIRECT | |
CARD | AE | American Express | CARD | Credit Card | DIRECT |
To offer all the card options that may be available in your integration, send the
payment_method_idasCARD.
Alternative Payment Method supported
payment_method_id | Name | payment_method_type | Details | Allowed Flows | Logo |
|---|---|---|---|---|---|
ZT | Stitch | BANK_TRANSFER | Bank Transfer | REDIRECT | ![]() |
FX | Payflex | TICKET | Wallet | REDIRECT | ![]() |
DZ | Mobicred | TICKET | Wallet | REDIRECT | ![]() |
ZC | Capitec Pay | BANK_TRANSFER | Bank Transfer | REDIRECT | ![]() |
ZR | Capitec Pay Recurring | BANK_TRANSFER | Bank Transfer | REDIRECT | ![]() |
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 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
Request parameters
| Property | Type | Description | Mandatory? |
|---|---|---|---|
amount | Number | Amount to be charged. | Yes |
currency | String | ZARTransaction currency in ISO 4217. | Yes |
country | String | ZA Transaction country in ISO 3166. | Yes |
payment_method_id | String | ZT 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
{
"amount": 1000,
"currency": "ZAR",
"country": "ZA",
"payment_method_id": "ZT",
"payment_method_flow": "REDIRECT",
"payer": {
"name": "Jane Doe",
"email": "[email protected]",
"document": "1234567890123",
"address": {
"country": "ZA",
"state": "Cape Province",
"city": "Cape Town",
"zip_code": "88058",
"street": "Rodovia Armando Calil Bulos",
"number": "5940"
}
},
"order_id": "34545sk3483kqw0",
"description": "Tshirt",
"notification_url": "http://merchantsite.com/notification/new",
"callback_url": "http://merchantsite.com/success_page"
}
{
"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

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.
Existing user

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.
Request parameters
| Property | Type | Description | Mandatory? |
|---|---|---|---|
amount | Number | Amount to be charged. | Yes |
currency | String | ZARTransaction currency in ISO 4217. | Yes |
country | String | ZA Transaction country in ISO 3166. | Yes |
payment_method_id | String | FX 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 |
address.country | String | ZACountry of the payer. | Yes |
address.state | String | State of the payer. | Yes |
address.city | String | City of the payer. | Yes |
address.zip_code | String | ZIP code of the payer. | Yes |
address.street | String | Street of the payer. | Yes |
address.number | String | Street 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 |
notification_url | String | Notifications will be sent in every change of status of a payment to the notification_url specified by the merchant. | Yes |
Examples
{
"amount": 1000,
"currency": "ZAR",
"country": "ZA",
"payment_method_id": "FX",
"payment_method_flow": "REDIRECT",
"payer": {
"name": "Jane Doe",
"email": "[email protected]",
"document": "1234567890123",
"address": {
"country": "ZA",
"state": "Cape Province",
"city": "Cape Town",
"zip_code": "88058",
"street": "Rodovia Armando Calil Bulos",
"number": "5940"
}
},
"order_id": "34545sk3483kqw0",
"description": "Tshirt",
"notification_url": "http://merchantsite.com/notification/new",
"callback_url": "http://merchant.com/success_page"
}
{
"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
Request parameters
| Property | Type | Description | Mandatory? |
|---|---|---|---|
amount | Number | Amount to be charged. | Yes |
currency | String | ZARTransaction currency in ISO 4217. | Yes |
country | String | ZA Transaction country in ISO 3166. | Yes |
payment_method_id | String | DZ 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 |
address.country | String | ZA Country of the payer. | Yes |
address.state | String | State of the payer. | Yes |
address.city | String | City of the payer. | Yes |
address.zip_code | String | ZIP Code of the payer. | Yes |
address.street | String | Street of the payer. | Yes |
address.number | String | Street 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 |
notification_url | String | Notifications will be sent in every change of status of a payment to the notification_url specified by the merchant. | Yes |
Examples
{
"amount": 10,
"currency": "ZAR",
"country": "ZA",
"payment_method_id": "DZ",
"payment_method_flow": "REDIRECT",
"payer": {
"name": "Jane Doe",
"email": "[email protected]",
"phone": "0234567898",
"document": "0465687962",
"document_type": "CI",
"account_number": "933303352683680",
"address": {
"country": "ZA",
"state": "Cape Province",
"city": "Cape Town",
"zip_code": "88058",
"street": "Rodovia Armando Calil Bulos",
"number": "5940"
}
},
"order_id": "8ec2da8b-11d5-4a11-8c55-86006f2f93e6",
"description": "Tshirt",
"notification_url": "http://merchantsite.com/notification/new",
"callback_url": "http://merchantsite.com/success_page"
}
{
"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
Request Parameters
| Property | Type | Description | Mandatory? |
|---|---|---|---|
amount | Number | Amount to be charged. | Yes |
currency | String | ZARTransaction currency in ISO 4217. | Yes |
country | String | ZA Transaction country in ISO 3166. | Yes |
payment_method_id | String | ZC 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 |
payer.phone | String | Phone number of the payer. | Yes |
address.country | String | ZA Country of the payer. | Yes |
address.state | String | State of the payer. | Yes |
address.city | String | City of the payer. | Yes |
address.zip_code | String | ZIP Code of the payer | Yes |
address.street | String | Street of the payer. | Yes |
address.number | String | Street 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 |
notification_url | String | Notifications will be sent in every change of status of a payment to the notification_url specified by the merchant. | Yes |
callback_url | String | The payer will be redirected to the merchant’s website after completing the payment via the callback_url specified by the merchant. | Yes |
Examples
{
"amount": 10,
"currency": "ZAR",
"country": "ZA",
"payment_method_id": "ZC",
"payment_method_flow": "REDIRECT",
"payer": {
"name": "Jane Doe",
"email": "[email protected]",
"phone": "0823778084",
"document": "0465687962",
"address": {
"country": "ZA",
"state": "Cape Province",
"city": "Cape Town",
"zip_code": "88058",
"street": "Rodovia Armando Calil Bulos",
"number": "5940"
}
},
"order_id": "34545sk3483kqw0",
"notification_url": "http://merchantsite.com/notification/new",
"callback_url": "http://merchant.com/success_page"
}
{
"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 | REDIRECT |
UX Flow
One-time user enrollment
This is the API request that is used to create the recurring payment mandate with Capitec Pay.
Request parameters
| Property | Type | Description | Mandatory? |
|---|---|---|---|
external_id | String | Identifier used by the merchant to identify the enrollment in their system. | Yes |
currency | String | ZAR Transaction currency in ISO 4217. | Yes |
country | String | ZA Transaction country in ISO 3166 . | Yes |
type | String | MERCHANT_SUBSCRIPTION For subscriptions with future recurring payments initiated by the merchant. | Yes |
payment_method_id | String | ZR ID of the selected payment method. | Yes |
payment_method_flow | String | REDIRECT | Yes |
payer.name | String | Name of the payer. | Yes |
description | String | Enrollment description. | No |
payer.email | String | Email of the payer. | Yes |
payer.document | Number | Document of the payer. | Yes |
payer.phone | String | Phone number of the payer. | Yes |
subscription.start_date | String (YYYY-MM-DD) | Subscription start date. The default is the current date. To be used only for subscriptions. | Yes |
subscription.end_date | String (YYYY-MM-DD) | Subscription expiration date. If not provided, the subscription will not expire. | No |
subscription.frequency | String | Possible values: WEEKLY, MONTHLY, SEMI_ANNUAL, or ANNUAL. | Yes |
subscription.amount.type | String | Possible values: • FIXED: For fixed amount subscription• VARIABLE: For variable amount subscriptions | Yes |
subscription.amount.value | Number (10,2) | Fixed subscription amount in local currency. Required only for fixed amount subscriptions depending on the payment method. | Conditional |
notification_url | String | Notifications will be sent in every change of status of a payment to the notification_url specified by the merchant. | Yes |
callback_url | String | The payer will be redirected to the merchant’s website after completing the payment via the callback_url specified by the merchant. | Yes |
Enrollment Example
curl -X POST \
-H 'X-Date: {X-Date}' \
-H 'X-Login: {X-Login}' \
-H 'X-Trans-Key: {X-Trans-Key}' \
-H 'Content-Type: application/json' \
-H 'X-Version: 2.1' \
-H 'User-Agent: MerchantTest / 1.0 ' \
-H 'Authorization: V2-HMAC-SHA256, Signature: {Signature}' \
-d '{body}'
https://api.dlocal.com/enrollments
{
"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",
"document": "0465687962",
"email": "[email protected]"
},
"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"
}
{
"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"
}
{
"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-10 T20: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. The main difference is that it requires the enrollment.id to reference the initial customer authorization.
Payment examples
curl -X POST \
-H 'X-Date: {X-Date}' \
-H 'X-Login: {X-Login}' \
-H 'X-Trans-Key: {X-Trans-Key}' \
-H 'Content-Type: application/json' \
-H 'X-Version: 2.1' \
-H 'User-Agent: MerchantTest / 1.0 ' \
-H 'Authorization: V2-HMAC-SHA256, Signature: {Signature}' \
-d '{body}'
https://api.dlocal.com/payments
{
"amount": 200,
"external_id": "fwbExmQQ7",
"currency": "ZAR",
"country": "ZA",
"payment_method_id": "ZR",
"payment_method_flow": "REDIRECT",
"payer": {
"phone": "0823778084",
"name": "Jane Doe",
"document": "0465687962",
"email": "[email protected]"
},
"enrollment": {
"id": "E-4-3a8bcc85-d86e-4c9a-bbc4-8393b5fb488e"
},
"notification_url": "http://merchantsite.com/notifications",
"callback_url": "http://merchantsite.com/callback"
}
{
"id": "E-4-3a8bcc85-d86e-4c9a-bbc4-8393b5fb488e",
"amount": 200,
"currency": "ZAR",
"payment_method_id": "ZR",
"payment_method_flow": "REDIRECT",
"country": "ZA",
"created_date": "2025-09-10 T20:39:20.000+0000",
"status": "PENDING",
"status_details": "The payment is pending.",
"status_code": "100",
"notification_url": "http://merchantsite.com/notifications"
}
{
"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": "REDIRECT",
"payer": {
"phone": "0823778084",
"name": "Jane Doe",
"document": "0465687962",
"email": "[email protected]"
},
"notification_url": "http://merchantsite.com/notifications",
"callback_url": "http://merchantsite.com/callback",
"created_date": "2024-09-10 T20:37:20.000+0000"
}
Updated 18 days ago




