Peru


Market specifications

Do you want to know more information about the Peru market? Go to the Peru economy and eCommerce market article.

Country reference

country codecurrency codeamount decimalsdocument namedocument formatdocument required?
PEPEN2DNI or RUC8 digits for DNI and 11 digits for RUC.Yes

👍

Multi-currency support available

Supports charging in either USD or local currency. To charge in USD, use the currency_to_charge parameter with the value USD; otherwise, the transaction will be processed in local currency by default. Check availability by payment method below.


Cards supported

payment_method_idBrand IDNamepayment_method_typeDetailsAllowed FlowsLogo
CARDVIVisaCARDCredit Card ​DIRECT REDIRECTVisa logo
CARDVDVisa Debit ​CARDDebit Card ​DIRECT REDIRECTVisa Debit logo
CARDMCMastercardCARDCredit Card ​DIRECT REDIRECTMastercard logo
CARDMDMastercard Debit ​CARDDebit Card ​DIRECT REDIRECTMastercard Debit logo
CARDAEAmerican ExpressCARDCredit Card ​DIRECT REDIRECTAmerican Express logo
CARDDCDiners ClubCARDCredit Card ​DIRECT REDIRECTDiners Club logo
ℹ️

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_idNamepayment_method_typeDetailsAllowed FlowsLogo
EFPago EfectivoTICKETCash PaymentsDIRECT REDIRECTPago Efectivo logo
BCBCPBANK_TRANSFERBank TransferDIRECT REDIRECTBCP logo
IOPayvalidaBANK_TRANSFERBank TransferREDIRECTPayvalida logo
YPYape one-shotWALLETeWalletREDIRECTYape logo
YEYape Wallet recurringWALLETeWalletREDIRECTYape logo


Cards

Capabilities

Visa CreditVisa DebitMastercard CreditMastercard DebitAmerican ExpressDiners Club
Minimum amount5 PEN5 PEN5 PEN5 PEN5 PEN1 PEN
RefundsYesYesYesYesYesYes
RecurringYesYesYesYesYesYes
Chargeback optionYesYesYesYesYesYes
Chargeback Dispute optionYesYesYesYesYesYes
DescriptorCan be personalized, depending on the provider.Can be personalized, depending on the provider.Can be personalized, depending on the provider.Can be personalized, depending on the provider.Can be personalized, depending on the provider.Can be personalized, depending on the provider.

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

Pago Efectivo

Pago Efectivo was created with the aim to be the payment method to buy online and pay without a card. They created the CIP payment code to have the freedom to choose where and how to pay using the code.

Pago Efectivo is now widely used in Peru to pay their utility bills and purchases online, giving the user the ability to pay in cash, through bank transfers or with eWallets.

Capabilities

Pago Efectivo
Min. amount5 PEN
Max. expiration time supported5 days
Notification delayImmediate
RefundsYes
FlowDIRECT, REDIRECT

Request parameters

PropertyTypeDescriptionMandatory?
amountNumberAmount to be charged.Yes
currencyStringPEN. Transaction currency in ISO 4217.Yes
countryStringPE. Transaction country in ISO 3166.Yes
payment_method_idStringEF. ID of the selected payment method.Yes
payment_method_flowStringDIRECT or REDIRECTYes
payer.nameStringName of the payer.Yes
payer.emailStringEmail of the payer.Yes
payer.documentStringDocument of the payer.Yes
order_idStringID of the capture given by the merchant in their system. Think of it as an external ID of the capture.No
notification_urlStringdLocal sends notifications for every payment status change to the merchant's specified notification_url.No

Examples

{
  "amount": 1000,
  "currency": "PEN",
  "country": "PE",
  "payment_method_id": "EF",
  "payment_method_flow": "DIRECT",
  "payer": {
    "name": "Jane Doe",
    "email": "[email protected]",
    "document": "434518267",
    "address": {
      "country": "PE",
      "state": "Lima",
      "city": "Lima",
      "zip_code": "88058",
      "street": "Av. Principal",
      "number": "5940"
    }
  },
  "order_id": "34545sk3483kqw0",
  "description": "Tshirt",
  "notification_url": "http://merchantsite.com/notification/new",
  "callback_url": "http://merchantsite.com/success_page"
}
{
    "id": "D-4-8f95110c-4fac-43q1-b0b1-8078165a385f",
    "amount": 1000,
    "currency": "PEN",
    "payment_method_id": "EF",
    "payment_method_type": "TICKET",
    "payment_method_flow": "DIRECT",
    "country": "PE",
    "bank_transfer": {},
    "ticket": {
        "type": "CUSTOM",
        "number": "165816703",
        "expiration_date": "2023-06-17T11:59:00.000+0000",
        "id": "EF-144059474",
        "barcode": "",
        "company_name": "DEMERGE PERU SAC",
        "image_url": "https://pay.dlocal.com/gmf-apm/payments/M-76d9d7bb-d3f8-40fb-befc-1cf5609de3fd",
        "amount": 1000,
        "currency": "PEN"
    },
    "created_date": "2023-06-14T15:38:09.000+0000",
    "status": "PENDING",
    "status_detail": "The payment is pending.",
    "status_code": "100",
    "order_id": "34545sk3483kqw0",
    "notification_url": "http://merchantsite.com/notification/new"
}

Example ticket

Pago Efectivo UI built with the information in the example above.

User Interface Tips

Provider's voucher

We strongly recommend using the ticket on ticket.image_url. Peruvian users are very familiar with this ticket (example above) made by the provider itself, for every kind of purchase paid through Pago Efectivo. It includes:

  • Many payment options instructions.
  • Capability of sending the payment code through SMS.
  • Provider’s store locator.

If you still need to design your own ticket and you are using this payment method through a DIRECT integration, follow the tips below in order to make it easier for your customers to complete payments, boosting your conversion rates.

ElementTip
Ticket NumberName it as "Código de Pago (CIP)".
Provider's NameShow ticket.provider_name, as it is useful at the moment of paying through home banking.
Currency and AmountShould be relevant elements in the ticket. Users need to have that information very clearly.
Currency SymbolS/
Expiration dateDisplay this element clearly and visible enough. In Peru, the date format is DD/MM/YYYY.
Payment instructionsAlthough most users are familiarized with Pago Efectivo, it is a good practice to help those who are not. In the image above there is an example of instructions, but if needed, our team will be happy to help you with more personalized instructions.
Save buttonIt helps users to have their tickets always on their phones, making it needless to take notes or keep the browser open.
Print buttonIt is useful for some users who need to have their tickets printed.

BCP

BCP is the main bank in Peru with almost half of the market share. With this integration we allow users to make transfers with instant release.

Capabilities

BCP
Min. amount5 PEN
Max. expiration time supported5 days
Notification delayImmediate
RefundsYes
FlowDIRECT, REDIRECT
Charge in USD

Request parameters

PropertyTypeDescriptionMandatory?
amountNumberAmount to be charged.Yes
currencyStringPEN. Transaction currency in ISO 4217.Yes
countryStringPE. Transaction country in ISO 3166.Yes
payment_method_idStringBC. ID of the selected payment method.Yes
payment_method_flowStringDIRECT or REDIRECTYes
payer.nameStringName of the payer.Yes
payer.emailStringEmail of the payer.Yes
payer.documentStringDocument of the payer.Yes
order_idStringID of the capture given by the merchant in their system. Think of it as an external ID of the capture.No
notification_urlStringdLocal sends notifications for every payment status change to the merchant's specified notification_url.No

Examples

{
  "amount": 1000,
  "currency": "PEN",
  "country": "PE",
  "payment_method_id": "BC",
  "payment_method_flow": "DIRECT",
  "payer": {
    "name": "Jane Doe",
    "email": "[email protected]",
    "document": "434518267",
    "address": {
      "country": "PE",
      "state": "Lima",
      "city": "Lima",
      "zip_code": "88058",
      "street": "Av. Principal",
      "number": "5940"
    }
  },
  "order_id": "34545sk3483kqw0",
  "description": "Tshirt",
  "notification_url": "http://merchantsite.com/notification/new",
  "callback_url": "http://merchantsite.com/success_page"
}
{
    "id": "D-4-192c9fe0-df89-4652-9074-26c4ce246c9f",
    "amount": 1000,
    "currency": "PEN",
    "payment_method_id": "BC",
    "payment_method_type": "BANK_TRANSFER",
    "payment_method_flow": "DIRECT",
    "country": "PE",
    "bank_transfer": {},
    "ticket": {
        "type": "CUSTOM",
        "number": "234592",
        "expiration_date": "2023-06-17T04:59:00.000+0000",
        "provider_logo": "https://static.dlocal.com/images/providers/bcp.png",
        "image_url": "https://pay.dlocal.com/gmf-apm/payments/M-3d6a968f-4432-4a64-8c44-c1947de21ec6",
        "amount": 1000,
        "currency": "PEN"
    },
    "created_date": "2023-06-12T15:39:23.000+0000",
    "status": "PENDING",
    "status_detail": "The payment is pending.",
    "status_code": "100",
    "order_id": "34545sk3483kqw0",
    "notification_url": "http://merchantsite.com/notification/new"
}
{
  "id": "D-4-192c9fe0-df89-4652-9074-26c4ce246c9f",
  "amount": 1000,
  "status": "PAID",
  "status_detail": "The payment was paid.",
  "status_code": "200",
  "currency": "PEN",
  "country": "PE",
  "payment_method_id": "BC",
  "payment_method_type": "BANK_TRANSFER",
  "payment_method_flow": "DIRECT",
  "payer": {
    "name": "Jane Doe",
    "user_reference": "",
    "email": "[email protected]",
    "document": "434518267"
  },
  "order_id": "34545sk3483kqw0",
  "description": "Tshirt",
  "notification_url": "http://merchantsite.com/notification/new",
  "callback_url": "http://merchantsite.com/success_page",
  "created_date": "2023-06-12T15:39:23.000+0000"
}

Example ticket

BCP UI built with the information in the example above.

Payvalida

Payvalida is a platform specializing in collections and online payments. It has a wide collection agent network throughout the country.

Capabilities

Payvalida
Min. amount5 PEN
Max. expiration time supported5 days
Notification delayImmediate
RefundsYes
FlowREDIRECT

Request parameters

PropertyTypeDescriptionMandatory?
amountNumberAmount to be charged.Yes
currencyStringPEN. Transaction currency in ISO 4217.Yes
countryStringPE. Transaction country in ISO 3166.Yes
payment_method_idStringIO. ID of the selected payment method.Yes
payment_method_flowStringREDIRECTYes
payer.nameStringName of the payer.Yes
payer.emailStringEmail of the payer.Yes
payer.documentStringDocument of the payer.Yes
order_idStringID of the capture given by the merchant in their system. Think of it as an external ID of the capture.No
notification_urlStringdLocal sends notifications for every payment status change to the merchant's specified notification_url.No

Examples

{
  "amount": 1000,
  "currency": "PEN",
  "country": "PE",
  "payment_method_id": "IO",
  "payment_method_flow": "REDIRECT",
  "payer": {
    "name": "Jane Doe",
    "email": "[email protected]",
    "document": "434518267",
    "address": {
      "country": "PE",
      "state": "Lima",
      "city": "Lima",
      "zip_code": "88058",
      "street": "Av. Principal",
      "number": "5940"
    }
  },
  "order_id": "34545sk3483kqw0",
  "description": "Tshirt",
  "notification_url": "http://merchantsite.com/notification/new",
  "callback_url": "http://merchantsite.com/success_page"
}
{
    "id": "R-4-50733a71-49fe-494a-556t-60f702e1369b",
    "amount": 1000,
    "currency": "PEN",
    "payment_method_id": "IO",
    "payment_method_type": "BANK_TRANSFER",
    "payment_method_flow": "REDIRECT",
    "country": "PE",
    "created_date": "2023-07-10T19:33:11.000+0000",
    "status": "PENDING",
    "status_detail": "The payment is pending.",
    "status_code": "100",
    "order_id": "34545sk3483kqw0",
    "description": "Tshirt",
    "notification_url": "http://merchantsite.com/notification/new",
    "redirect_url": "https://pay.dlocal.com/gmf-apm/payments-redirect/M-8a290793-0afb-4946-er32-74f65baab83d"
}
{
  "id": "R-4-50733a71-49fe-494a-556t-60f702e1369b",
  "amount": 1000,
  "status": "PAID",
  "status_detail": "The payment was paid.",
  "status_code": "200",
  "currency": "PEN",
  "country": "PE",
  "payment_method_id": "IO",
  "payment_method_type": "BANK_TRANSFER",
  "payment_method_flow": "REDIRECT",
  "payer": {
    "name": "Jane Doe",
    "user_reference": "",
    "email": "[email protected]",
    "document": "434518267"
  },
  "order_id": "34545sk3483kqw0",
  "description": "Tshirt",
  "notification_url": "http://merchantsite.com/notification/new",
  "created_date": "2023-07-10T19:33:11.000+0000"
}

Example ticket


Yape

Yape is a leading wallet in Peru, operated by Banco de Crédito del Perú (BCP). With this payment method, users can pay with their Yape's balance and dLocal offers two integration modes:

YP — Yape one-shot: A single redirect payment. No token is issued. Best for one-time purchases.
YE — Yape Recurring: A tokenized flow. The user enrolls once via redirect and all subsequent charges are processed directly with a token. Best for subscriptions.

Yape one-shot

Capabilities

Yape one-shot
Min. amount1 PEN
Max. amount2,000 PEN per transaction / 2,000 PEN per day
Max. expiration time supported20 minutes
Notification delayImmediate
RefundsYes - full and partial, up to 365 days
FlowREDIRECT
Payment method IDYP

How it works

  1. You create a payment with payment_method_id: "YP" and payment_method_flow: "REDIRECT".
  2. dLocal returns a redirect_url.
  3. You redirect the user to that URL.
    1. device.type: "MOBILE_APP" — The URL resolves to a deep link that opens the Yape app directly. The user approves with their PIN or biometric.
    2. device.type: "WEB" — The user lands on a dLocal-hosted page. dLocal sends a push notification to the user's Yape app using payer.phone. The user approves in the app.
  4. After approval, dLocal sends a PAID webhook to your notification_url.
📘

Mandatory fields for User Experience

device.type is mandatory and controls the entire UX. Sending the wrong value for the user's context will degrade conversion.

payer.phone is mandatory when device.type is "WEB" — it is used to send the push notification. Without it, the payment cannot be completed.


UX Flow Example

Yape one-shot UX flow

Request parameters

PropertyTypeDescriptionMandatory?
amountNumberAmount to be charged.Yes
currencyStringPEN. Transaction currency in ISO 4217.Yes
countryStringPE. Transaction country in ISO 3166.Yes
payment_method_idStringYP. ID of the selected payment method.Yes
payment_method_flowStringREDIRECTYes
payer.nameStringName of the payer.No
payer.emailStringEmail of the payer.No
payer.documentStringDocument of the payer.No
payer.phoneStringPhone number of the payer. This field is required for the desktop payment flow to send push notifications to the user's Yape app.Yes, when device.type: "WEB"
device.typeStringDevice from which the user creates the transaction. Controls the UX. Possible values: WEB and MOBILE_APP.Yes
order_idStringID of the capture given by the merchant in their system.No
notification_urlStringdLocal sends notifications for every status change to this URL.Yes
callback_urlStringOptional browser return URL after the hosted redirect flow. It does not create an automatic callback or deep link back from the Yape app after approval.No

Examples

{
  "amount": 100,
  "currency": "PEN",
  "country": "PE",
  "payment_method_id": "YP",
  "payment_method_flow": "REDIRECT",
  "payer": {
    "name": "Castillo Gomes Vanessa Silvia",
    "email": "[email protected]",
    "document": "434518267"
  },
  "device": {
    "type": "MOBILE_APP"
  },
  "order_id": "f3e0621c-be65-4ed5-8f24-137fdcdbefde",
  "notification_url": "http://www.merchantsite.com/notifications",
  "callback_url": "http://merchantsite.com/callback"
}
{
  "id": "F-4-03c82e23-e068-41ec-865c-263de845c1ff",
  "amount": 100,
  "currency": "PEN",
  "payment_method_id": "YP",
  "payment_method_type": "TICKET",
  "payment_method_flow": "REDIRECT",
  "country": "PE",
  "created_date": "2025-04-03T20:16:52.000+0000",
  "status": "PENDING",
  "status_detail": "The payment is pending.",
  "status_code": "100",
  "order_id": "f3e0621c-be65-4ed5-8f24-137fdcdbefde",
  "notification_url": "http://merchantsite.com/notification",
  "redirect_url": "https://pay.dlocal.com/gmf-apm/payments-redirect/M-fd77f5b7-ca28-7u54-9ed8-ef89d374a80c"
}
{
  "id": "F-4-03c82e23-e068-41ec-865c-263de845c1ff",
  "amount": 100,
  "status": "PAID",
  "status_detail": "The payment was paid",
  "status_code": "200",
  "currency": "PEN",
  "country": "PE",
  "payment_method_id": "YP",
  "payment_method_type": "TICKET",
  "payment_method_flow": "REDIRECT",
  "payer": {
    "name": "Castillo Gomes Vanessa Silvia",
    "email": "[email protected]",
    "document": "434518267"
  },
  "order_id": "f3e0621c-be65-4ed5-8f24-137fdcdbefde",
  "notification_url": "http://www.merchantsite.com/notifications",
  "callback_url": "http://merchantsite.com/return",
  "created_date": "2025-04-03T20:16:52.000+0000"
}

Redirection using redirect_url

Mobile App: Deeplink behavior

The recommendation is to always redirect using a native/OS redirection which will always work, but if you are using a webView or open in a external browser you may face the following scenarios:

Android - WebView

If your app uses a WebView, it will not open the Yape app automatically — WebViews do not delegate deep links to the OS by default. Implement one of the following:

Option 1 (recommended): Override shouldOverrideUrlLoading to detect yape.com.pe links and open them via an Intent:

@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
    Uri url = request.getUrl();
    if (url.getHost().contains("yape.com.pe")) {
        Intent intent = new Intent(Intent.ACTION_VIEW, url);
        startActivity(intent);
        return true;
    }
    return false;
}

Option 2: Open the redirect_url in the device's default browser instead of a WebView.

iOS - non-Safari browsers

On iOS, Yape Universal Links only resolve correctly when opened from Safari or via a user-initiated tap (not through a redirect chain from another domain). If a user has a non-Safari browser set as default, the deep link will open the Yape website instead of the app.

Recommended mitigations:

ApproachUXReliabilityNotes
Enable ENABLE_MANUAL_REDIRECT on your MIDGood (1 extra tap)HighContact your dLocal TAM to enable. Shows an "Open Yape" button — user-initiated tap resolves the Universal Link across all browsers.
Send device.type: "WEB" for iOS usersModerateHighRequires payer.phone. User receives a push notification instead of a deep link.
Use SFSafariViewControllerBestMediumOnly works if your app opens the URL via the Safari rendering engine.
⚠️

Yape does not support automatic app callbacks

callback_url is only a browser return URL for the hosted redirect flow. There is no automatic callback deep link back to your app after the user approves in Yape — this is a BCP (Yape owner) policy restriction. The user must manually return to your app after approval.

Yape Recurring

dLocal supports recurring payments with Yape. The user completes a one-time enrollment redirect, and all future charges are made directly using a token — no redirect or re-authentication required.

Capabilities

Yape on-demand
Min. amount1 PEN
Max. amount2,000 PEN per transaction / 2,000 PEN per day
Max. expiration time supported15 minutes (for enrollment only, tokenized/recurrent charge is a user-not-present transaction)
Token expiryNone — valid until cancelled or revoked
Notification delayImmediate
RefundsYes — full and partial, up to 365 days
FlowREDIRECT (enrollment), DIRECT (recurring charges)
payment_method_idYE

How it works

Enrollment (one-time)/ First time user:

  1. You create a payment with payment_method_id: "YE", payment_method_flow: "REDIRECT", and wallet.save: true.
  2. dLocal returns a redirect_url.
  3. You redirect the user.
    1. device.type: "MOBILE_APP": The URL opens the Yape app for direct approval.
    2. device.type: "WEB": The user lands on a dLocal-hosted page and receives a push notification in the Yape app. payer.phone is mandatory.
  4. The user approves. dLocal sends a webhook with status: VERIFIED (700) or status: PAID (200) containing wallet.token.
  5. Persist wallet.token. Use it for all future charges.

UX Flow

First time user
Yape recurring first-time user UX flow

How it works

Recurring charges

  1. For each renewal or on-demand payment, you create a payment with payment_method_id: "YE", payment_method_flow: "DIRECT", and wallet.token.
  2. The synchronous response is always PENDING. This is not the final status.
  3. dLocal sends a webhook within seconds with PAID (200) or REJECTED (300+).
  4. Grant entitlement only on the PAID webhook.
⚠️

Token model

Each user has one active token at a time. If a user re-enrolls, the new token replaces the previous one — any charge against the old token will return status_code 328. Stop using a token immediately upon receiving 328 and trigger a new enrollment.

UX Flow

Tokenized user
Yape recurring tokenized user UX flow

Request parameters

PropertyTypeDescriptionMandatory?
amountNumberAmount to be charged.Yes
currencyStringPEN. Transaction currency in ISO 4217.Yes
countryStringPE. Transaction country in ISO 3166.Yes
payment_method_idStringYE. ID of the selected payment method.Yes
payment_method_flowStringREDIRECT (enrollment) or DIRECT (token charge)Yes
payer.nameStringName of the payer.No
payer.emailStringEmail of the payer.No
payer.documentStringDocument of the payer. DNI (8 digits) or RUC (11 digits).No
payer.phoneStringPhone number of the payer. This field is required for the desktop payment flow to send push notifications to the user's Yape app.Yes, when device.type: "WEB"
wallet.saveBooleanDetermines whether you want to receive a wallet token for future payments.Yes, for enrollment
wallet.captureBooleanDetermines if you want to capture the payment funds or not. Set to true to charge the user. Set to false for verify-only enrollment.Yes, for enrollment
wallet.verifyBooleanSet to true for verify-only enrollment (amount: 0).Yes, for enrollment
wallet.usernameStringUsername of the payer's wallet account.Yes, if wallet.capture is true. If you don't know this info you can send an empty string ""
wallet.emailStringEmail of the payer's wallet account.Yes, if wallet.capture is true. If you don't know this info you can send an empty string ""
wallet.tokenStringToken of a previous payment from the same wallet.For tokenized payments, yes.
device.typeStringDevice from which the user creates the transaction. Controls the UX flow. Possible values: WEB and MOBILE_APP.Yes
order_idStringID of the capture given by the merchant in their system.No
notification_urlStringdLocal sends notifications for every status change to this URL.Yes
callback_urlStringOptional browser return URL after enrollment. It does not create an automatic callback or deep link back from the Yape app after approval.No

Examples

{
  "amount": 0,
  "currency": "PEN",
  "country": "PE",
  "payment_method_id": "YE",
  "payment_method_flow": "REDIRECT",
  "payer": {
    "name": "Castillo Gomes Vanessa Silvia",
    "email": "[email protected]",
    "document": "43451826"
  },
  "wallet": {
    "save": true,
    "verify": true,
    "capture": false
  },
  "device": {
    "type": "MOBILE_APP"
  },
  "order_id": "f3e0621c-be65-4ed5-8f24-137fdcdbefde",
  "notification_url": "http://merchantsite.com/notifications",
  "callback_url": "http://merchantsite.com/return"
}
{
  "id": "F-4-03c82e23-e068-41ec-865c-263de845c1ff",
  "amount": 0,
  "currency": "PEN",
  "payment_method_id": "YE",
  "payment_method_type": "WALLET",
  "payment_method_flow": "REDIRECT",
  "country": "PE",
  "created_date": "2025-04-03T20:16:52.000+0000",
  "status": "PENDING",
  "status_detail": "The payment is pending.",
  "status_code": "100",
  "order_id": "f3e0621c-be65-4ed5-8f24-137fdcdbefde",
  "notification_url": "http://merchantsite.com/notifications",
  "redirect_url": "https://pay.dlocal.com/gmf-apm/payments-redirect/M-fd77f5b7-..."
}

{
  "id": "F-4-03c82e23-e068-41ec-865c-263de845c1ff",
  "amount": 0,
  "status": "VERIFIED",
  "status_detail": "The wallet was verified.",
  "status_code": "700",
  "currency": "PEN",
  "country": "PE",
  "payment_method_id": "YE",
  "payment_method_type": "WALLET",
  "payment_method_flow": "REDIRECT",
  "payer": {
    "name": "Castillo Gomes Vanessa Silvia",
    "email": "[email protected]",
    "document": "43451826"
  },
  "wallet": {
    "token": "WALLET_TOKEN_FROM_WEBHOOK"
  },
  "order_id": "f3e0621c-be65-4ed5-8f24-137fdcdbefde",
  "notification_url": "http://merchantsite.com/notifications",
  "callback_url": "http://merchantsite.com/return",
  "created_date": "2025-04-03T20:16:52.000+0000"
}
{
  "amount": 1000,
  "currency": "PEN",
  "country": "PE",
  "payment_method_id": "YE",
  "payment_method_flow": "REDIRECT",
  "payer": {
    "name": "Castillo Gomes Vanessa Silvia",
    "email": "[email protected]",
    "document": "43451826"
  },
  "wallet": {
    "save": true,
    "verify": false,
    "capture": true,
    "username": "",
    "email": ""
  },
  "device": {
    "type": "MOBILE_APP"
  },
  "order_id": "f3e0621c-be65-4ed5-8f24-137fdcdbefde",
  "notification_url": "http://merchantsite.com/notifications",
  "callback_url": "http://merchantsite.com/return"
}
{
  "id": "F-4-03c82e23-e068-41ec-865c-263de845c1ff",
  "amount": 0,
  "currency": "PEN",
  "payment_method_id": "YE",
  "payment_method_type": "WALLET",
  "payment_method_flow": "REDIRECT",
  "country": "PE",
  "created_date": "2025-04-03T20:16:52.000+0000",
  "status": "PENDING",
  "status_detail": "The payment is pending.",
  "status_code": "100",
  "order_id": "f3e0621c-be65-4ed5-8f24-137fdcdbefde",
  "notification_url": "http://merchantsite.com/notifications",
  "redirect_url": "https://pay.dlocal.com/gmf-apm/payments-redirect/M-fd77f5b7-..."
}

{
  "id": "F-4-03c82e23-e068-41ec-865c-263de845c1ff",
  "amount": 1000,
  "status": "PAID",
  "status_detail": "The payment was paid.",
  "status_code": "200",
  "currency": "PEN",
  "country": "PE",
  "payment_method_id": "YE",
  "payment_method_type": "WALLET",
  "payment_method_flow": "REDIRECT",
  "payer": {
    "name": "Castillo Gomes Vanessa Silvia",
    "email": "[email protected]",
    "document": "43451826"
  },
  "wallet": {
    "token": "WALLET_TOKEN_FROM_WEBHOOK",
    "username": "",
    "email": ""
  },
  "order_id": "f3e0621c-be65-4ed5-8f24-137fdcdbefde",
  "notification_url": "http://merchantsite.com/notifications",
  "callback_url": "http://merchantsite.com/return",
  "created_date": "2025-04-03T20:16:52.000+0000"
}
{
  "amount": 26.90,
  "currency": "PEN",
  "country": "PE",
  "payment_method_id": "YE",
  "payment_method_flow": "DIRECT",
  "payer": {
    "name": "Castillo Gomes Vanessa Silvia",
    "document": "43451826",
    "phone": "912345678"
  },
  "wallet": {
    "token": "WALLET_TOKEN_FROM_WEBHOOK"
  },
  "order_id": "sub-pe-001-2026-07",
  "notification_url": "http://merchantsite.com/notifications"
}

{
  "id": "F-4-03c82e23-e068-41ec-865c-263de845c1ff",
  "amount": 26.90,
  "currency": "PEN",
  "payment_method_id": "YE",
  "payment_method_type": "WALLET",
  "payment_method_flow": "DIRECT",
  "country": "PE",
  "created_date": "2026-07-01T10:00:00.000+0000",
  "status": "PENDING",
  "status_detail": "The payment is pending.",
  "status_code": "100",
  "order_id": "sub-pe-001-2026-07",
  "notification_url": "http://merchantsite.com/notifications"
}
{
  "id": "F-4-03c82e23-e068-41ec-865c-263de845c1ff",
  "amount": 26.90,
  "status": "PAID",
  "status_detail": "The payment was paid.",
  "status_code": "200",
  "currency": "PEN",
  "country": "PE",
  "payment_method_id": "YE",
  "payment_method_type": "WALLET",
  "payment_method_flow": "DIRECT",
  "payer": {
    "name": "Castillo Gomes Vanessa Silvia",
    "document": "43451826"
  },
  "order_id": "sub-pe-001-2026-07",
  "notification_url": "http://merchantsite.com/notifications",
  "created_date": "2026-07-01T10:00:00.000+0000"
}

Redirection using redirect_url

  1. Mobile app flow with standard automatic redirect

If you send device.type = "MOBILE_APP", dLocal returns a hosted redirect_url that normally resolves to the Yape deeplink. In the simplest case, the user opens the dLocal URL, dLocal redirects to Yape, and the user approves in the Yape app.

This is the simplest integration shape, but it is not the most reliable one across all mobile surfaces. The known issues are iOS non-Safari contexts and Android WebViews, where automatic 302 deeplink handoff may fail or behave inconsistently.

  1. Mobile app flow with manual redirect

If you send device.type = "MOBILE_APP" but cannot reliably support automatic deeplinking, dLocal can use ENABLE_MANUAL_REDIRECT and show an intermediate page with an “Abrir Yape” button. The user taps the button and the OS opens Yape through a user-initiated action, which is much more reliable than an automatic redirect.

This is the right fallback for merchants using WebViews or for iOS-heavy traffic, because user-initiated taps are handled better by the operating system than automatic redirects.

  1. Desktop or web flow

If the merchant sends device.type = "WEB", dLocal does not try to deep link directly into Yape. Instead, the redirect_url points to a dLocal instruction page, and dLocal sends a push notification to the user’s Yape app using payer.phone, which is mandatory for this scenario.

This flow is designed for desktop checkout. It should not be used as a workaround for mobile deeplink limitations, because the mobile experience is worse than the dedicated mobile flow.

Recommended implementation

The best implementation for YE is native URL interception in the merchant’s mobile app. You should open the dLocal redirect_url, detect when navigation reaches a yape.com.pe URL, and then open that URL natively through the operating system instead of leaving the handoff to the WebView or browser wrapper.

This is the strongest recommendation because it avoids the extra hosted step, minimizes friction, bypasses the known iOS/WebView deeplink limitations.

If native interception is not possible, the next best option is to keep using the standard dLocal redirect_url and enable ENABLE_MANUAL_REDIRECTso the user opens Yape from a button click instead of relying on automatic redirection. Contact your dLocal account team to enable it.

For desktop, the recommended path is always device.type = "WEB" plus payer.phone, with the understanding that the user will approve from their Yape app after receiving the push or opening the app manually.


Rejection codes

status_codeDescriptionRetriable?
302Insufficient funds in Yape walletNo — user must top up
305Max PIN/OTP attempts reachedNo — user must wait
319Amount exceeds per-transaction or daily limitTry next day
321Acquirer technical errorYes
322Wallet blocked or frozenNo
323Yape user not foundNo
325Frequency limit exceededNo — wait before retrying
327External network errorYes
328Invalid token — the token has been cancelled or replaced by a new enrollmentNo — stop using this token. Trigger a new enrollment.
340Payment expired — user did not approve in timeNo — create a new payment

Descriptor

The merchant name shown in the Yape app is configured at onboarding (tied to your MID) and cannot be changed per transaction. To update it, contact your dLocal account team.

Learn how to process with wallets (one-shot payments and wallet tokenization) with dLocal in our Wallets Payment section.