Payins
Let customers pay the way their market already does.
Accept cards, virtual accounts, Pix, PSE, Bre-B and QR in local currency where they are offered through one integration, and settle every collection to a single balance.
- Payins where they are offered
- One integration for every market
- Local currency, one balance
Delivering results for global businesses
- Pix · PSE
- Local payins on one API
- CLABE · CVU
- Local account formats
- AR · CO · MX
- Card acquiring where cards are offered
- Webhooks
- Real-time status on every payment
Why Localpayment
Collect more, integrate once, reconcile less
International cards are only part of the picture. Across the region people pay by bank transfer and QR — and every country does it differently.
The methods people already use
Pix, PSE, Bre-B, CVU, CLABE, QR and cards in one integration, so buyers who prefer bank transfers or QR don’t drop off.
One integration for every market
Each market has its own rails, documents, limits and rules. With Localpayment the request is the same everywhere, and new markets are enabled by configuration.
Confirmation in seconds
Card authorizations are real time, and real-time rails such as Pix, SPEI, TEF, CCE and Bre-B confirm in seconds, 24/7.
One balance, one report
Every collection is credited to your Localpayment account in your settlement currency, usually USD, and reconciled in the same reports — no manual matching across providers.
One balance, one report —
Talk to our sales team
Tell us your markets and volumes, and we’ll design the integration with you.
Use cases
Collection built for each industry
E-commerce & marketplaces
Cards, Pix, PSE and SPEI at checkout, with refunds from the same API.
E-commerce & marketplaces —Digital goods & streaming
Instant rails confirm in seconds so content unlocks right away.
Digital goods & streaming —SaaS
Collect subscriptions locally and settle in your hard currency.
SaaS —Travel
High tickets by bank transfer with real-time confirmation.
Travel —
Methods
Supported local methods, one endpoint.
Pick the methods each market prefers — your integration stays the same in every country.
Cards
- ar
- co
- mx
- pe
Visa and Mastercard in Argentina, Colombia, Mexico and Peru, plus American Express and Diners Club in Argentina and Colombia.
Cards —Virtual accounts
- ar
- br
- cl
- co
- cr
- mx
- pe
A dedicated CVU, Pix key, CLABE, CCI, IBAN, Bre-B key or Chilean account number per customer, invoice or order.
Virtual accounts —Local payment methods (APMs)
- ar
- bo
- br
- cl
- co
- gt
- pe
Pix in Brazil, PSE in Colombia, Debin and QR in Argentina, ETPAY in Chile, QR in Bolivia and Peru, and QR Fri and Wallet Fri in Guatemala.
Local payment methods (APMs) —Subscriptions
- co
- mx
- pe
Scheduled plans or on-demand charges with configurable retries.
Subscriptions —
How it works
From request to balance in four steps
- 01
Request
POST /api/payin/ with the country (ISO-3), currency, amount, paymentMethod and your unique externalId.
- 02
Customer pays
The customer gets a QR code, key, reference or redirect, depending on the method. Cards authorize in real time; virtual accounts and local payment methods confirm asynchronously.
- 03
Webhook
An HMAC-SHA256 signed webhook carries the result, your externalId and our internalId.
- 04
Balance credited
The collection is credited to your Localpayment account in your settlement currency, usually USD.
Coverage
Payin methods by country
Argentina
- Virtual accounts
- CVU
- Cards
- Yes
- Local methods
- QR · Debin
Bolivia
- Virtual accounts
- —
- Cards
- —
- Local methods
- QR
Brazil
- Virtual accounts
- Virtual account (Pix or TED)
- Cards
- —
- Local methods
- Pix
Chile
- Virtual accounts
- Bank account (TEF)
- Cards
- —
- Local methods
- ETPAY
Colombia
- Virtual accounts
- Bre-B key
- Cards
- Yes
- Local methods
- PSE
Costa Rica
- Virtual accounts
- IBAN (SINPE)
- Cards
- —
- Local methods
- —
Guatemala
- Virtual accounts
- —
- Cards
- —
- Local methods
- QR Fri · Wallet Fri
Mexico
- Virtual accounts
- CLABE
- Cards
- Yes
- Local methods
- —
Peru
- Virtual accounts
- CCI
- Cards
- Yes
- Local methods
- QR
Source: country guides at docs.localpayment.com. Availability is confirmed for each merchant during onboarding.
Lifecycle
Manage the full payment lifecycle
Everything that happens after the payment runs on the same platform, through the API or the Business Portal.
- Refunds for card, virtual-account and APM payments
- Chargeback management with evidence upload through the API
- Cancel pending APM payments before the payer approves
- Proof-of-payment downloads for refunds
- Dynamic checkouts with the Get Available Payment Methods endpoint
- FX on payment, with the rate locked by a quote token
- 09:41:02.11409:41:02PayIn100 INPROGRESS20084 ms
- 09:41:05.90209:41:05PayIn200 COMPLETED20091 ms
- 09:42:18.33009:42:18PayOut100 INPROGRESS20077 ms
- 09:42:40.01809:42:40PayOut200 COMPLETED20088 ms
- 09:43:00.55109:43:00VirtualAccount200 COMPLETED20080 ms
POST https://example-merchant.com/webhooks/localpayment
x-Signature: HMAC-SHA256 3f9a1c0e…b47e2b
{ "transactionType": "PayIn", "transactionFlow": "DIRECT",
"data": { "externalId": "order_8F2K-1043",
"status": { "code": "200", "description": "COMPLETED" } } }For developers
One endpoint, country-specific fields.
Authenticate with POST /api/token/, then call the same Create Payin endpoint for any country, adding the fields that country requires. This Pix example returns a QR code and confirms by webhook.
- Bearer tokens: 5-minute access token, 24-hour refresh token
- Your externalId on every request; duplicates return HTTP 409
- Stage mirrors production with no real money
# 1) Get an access token (Stage). Keep credentials in a secrets manager. curl -X POST https://api.stage.localpayment.com/api/token/ \ -H "Content-Type: application/json" \ -d '{ "username": "<api-user>", "password": "<from-your-secrets-manager>" }' # 2) Create a Pix payin (fictitious values) curl -X POST https://api.stage.localpayment.com/api/payin/ \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "paymentMethod": { "type": "BankTransfer", "code": "1314", "flow": "DIRECT" }, "externalId": "7c1e2f7a-0000-4000-8000-000000000001", "country": "BRA", "currency": "USD", "amount": 100, "accountNumber": "<your-account-number>", "conceptCode": "0003", "merchant": { "type": "COMPANY", "name": "Loja Exemplo Ltda" }, "payer": { "type": "INDIVIDUAL", "name": "Maria", "lastname": "Silva", "document": { "type": "CPF", "id": "000.000.000-00" } } }'
// Node.js 18+ (built-in fetch) · Stage · fictitious values const BASE_URL = 'https://api.stage.localpayment.com'; // 1) Get an access token (Stage). Keep credentials in a secrets manager. const tokenRes = await fetch(`${BASE_URL}/api/token/`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username: process.env.LP_API_USER, password: process.env.LP_API_PASSWORD, }), }); const { access } = await tokenRes.json(); // 2) Create a Pix payin (fictitious values) const res = await fetch(`${BASE_URL}/api/payin/`, { method: 'POST', headers: { Authorization: `Bearer ${access}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ paymentMethod: { type: 'BankTransfer', code: '1314', flow: 'DIRECT' }, externalId: crypto.randomUUID(), country: 'BRA', currency: 'USD', amount: 100, accountNumber: process.env.LP_ACCOUNT_NUMBER, conceptCode: '0003', merchant: { type: 'COMPANY', name: 'Loja Exemplo Ltda' }, payer: { type: 'INDIVIDUAL', name: 'Maria', lastname: 'Silva', document: { type: 'CPF', id: '000.000.000-00' }, }, }), }); const payin = await res.json(); // Show payin.qr.code (Pix Copia e Cola) to your customer; the final status arrives by webhook.
{ "transactionType": "PayIn", "externalId": "7c1e2f7a-0000-4000-8000-000000000001", "internalId": "b4c1d2e3-0000-4000-8000-00000000abcd", "paymentMethod": { "type": "BankTransfer", "code": "1314", "flow": "DIRECT" }, "country": "BRA", "currency": "USD", "amount": 100, "payment": { "currency": "BRL", "fxQuote": 5.0, "amount": 500.00 }, "status": { "code": "100", "description": "INPROGRESS", "detail": "The payin is pending the confirmation" }, "qr": { "code": "<pix-emv-code>", "expirationDate": "2026-10-01T12:00:00-03:00" }, "errors": [] }
Frequently asked questions
What is my settlement currency?
Usually USD. Local-currency collections are credited to your Localpayment account in your settlement currency. You can also convert local balances to other hard currencies, such as EUR or GBP, within local market hours.
Are payments confirmed in real time?
Card authorizations are real time. Real-time rails such as Pix, SPEI, COELSA, TEF, CCE and Bre-B confirm in seconds, 24/7. Other methods confirm asynchronously, and every final status arrives by webhook.
How do I know a payment completed?
You receive a webhook signed with HMAC-SHA256 in the X-Signature header. A status.code of 200 means COMPLETED. You can also query GET /api/transactions/{externalId}/status.
Can I refund a payment?
Yes. Card, virtual-account and APM payments can be refunded through the API or the Business Portal.
Do I need a separate integration per country?
No. The request shape is the same everywhere; new markets are enabled by configuration, without reintegrating.
How do I start testing?
Stage credentials are issued at the start of the partnership. Stage mirrors production with no real money, so you can test every flow before going live.
Which payment methods can I offer in each country?
Cards in Argentina, Colombia, Mexico and Peru, and virtual accounts and local payment methods (APMs) where documented per country. The payment methods directory lists every method, code and speed; your account team enables them by configuration.
Can I collect in US dollars?
In some markets, yes — for example USD virtual accounts in Costa Rica, Peru and Mexico (via SPID). In most countries the payer pays in local currency and the collection is credited to your account in your settlement currency.
Also on the same API
Start collecting locally
Get Stage credentials at the start of the partnership, go live in weeks and open new markets by configuration.

Payins where they are offered

























