Create charge
Quick Reference
/api/v1/bank/wallet/charge/Bearer TokenCreate a new chargeWhen to use this endpoint
| Scenario | How create charge helps |
|---|---|
| Accept a credit card payment | Set type_charge: "credit_card" with card fields or let SDK/Checkout handle them |
| Offer PIX instant payment | Set type_charge: "pix" — response includes QR code and copy-paste code |
| Generate a Boleto bank slip | Set type_charge: "boleto" — response includes barcode and due date |
| Accept Apple Pay / Google Pay | Set type_charge: "applepay" or "googlepay" with token data |
| Set up recurring billing | Add a subscription object to create a charge + subscription in one call |
| Authorization-only flow | Set capture: false for hotels, car rentals, pre-auth patterns |
Choose your payment method
Select a method below. The page will show only the fields, code, and response relevant to that method.
Request parameters (all methods)
These fields are required for every payment method:
| Field | Type | Required | Description |
|---|---|---|---|
wallet_uuid | string (UUID) | Yes | Wallet that receives the funds |
merchant_id | string | Yes | Merchant identifier |
payer_name | string | Yes | Payer full name |
payer_email | string | Yes | Payer email address |
payer_tax_id | string | Yes | Tax ID (CPF in Brazil, RFC in Mexico, RUT in Chile, CUIT in Argentina) |
payer_cell_phone | string | Yes | Payer mobile phone with country code |
installment_value | number | Yes | Charge amount per installment. For zero-decimal currencies (CLP, COP), use integers — see currency rules below |
installment_count | integer | Yes | Number of installments (use 1 for single payment) |
currency | string | Yes | ISO 4217 currency code: BRL, MXN, CLP, COP, PEN, ARS, USD |
due_date | string | Yes | Due date in YYYY-MM-DD format |
description | string | Yes | Charge description shown to the payer |
type_charge | string | Yes | Payment method — see selector above |
payer_address | object | Yes | Billing address (see below) |
Payer address object
| Field | Type | Required | Description |
|---|---|---|---|
street | string | Yes | Street name |
address_number | string | Yes | Street number |
complement | string | Yes | Apartment, suite, floor |
neighborhood | string | Yes | Neighborhood or district |
city | string | Yes | City |
state | string | Yes | State code (e.g., SP, CDMX) |
postal_code | string | Yes | Postal / ZIP code |
country | string | No | ISO 3166-1 alpha-2 (e.g., BR). Defaults to wallet country |
Currency-specific amount rules
| Currency | Decimals | Amount format | Example | Backend behavior |
|---|---|---|---|---|
| BRL | 2 | 150.00 | "installment_value": 150.00 | Stored as Numeric(11,2) |
| MXN | 2 | 2500.00 | "installment_value": 2500.00 | Stored as Numeric(11,2) |
| USD | 2 | 100.00 | "installment_value": 100.00 | Stored as Numeric(11,2) |
| PEN | 2 | 350.00 | "installment_value": 350.00 | Stored as Numeric(11,2) |
| ARS | 2 | 85000.00 | "installment_value": 85000.00 | Stored as Numeric(11,2) |
| CLP | 0 | 50000 | "installment_value": 50000 | Truncated to integer before sending to acquirer |
| COP | 0 | 200000 | "installment_value": 200000 | Truncated to integer before sending to acquirer |
CLP (Chilean Peso) and COP (Colombian Peso) have no fractional units. The backend converts amounts to integers before sending to acquirers. Sending 50000.50 for CLP results in 50000. Always send whole numbers for these currencies to avoid unexpected truncation.
Optional fields (all methods)
| Field | Type | Default | Description |
|---|---|---|---|
webhook_url | string | — | Override the default webhook URL for this charge |
redirect_url | string | — | Return URL after checkout page or 3DS challenge |
reference_external_id | string | — | Your internal order ID for reconciliation |
is_async | boolean | false | Async processing where supported |
shipping_address | object | — | Shipping address (same structure as payer_address) |
Card-specific fields
| Field | Type | Required | Description |
|---|---|---|---|
card_number | string | H2H only | Card PAN (SDK and Checkout handle this) |
card_name | string | H2H only | Name printed on the card |
card_expiry_month | string | H2H only | Expiry month MM |
card_expiry_year | string | H2H only | Expiry year YYYY |
card_cvv | string | H2H only | Card verification value |
capture | boolean | No | true (default) = auto-capture; false = authorize only |
threeds_authentication | boolean | No | true to force 3DS authentication |
device_info | object | 3DS | Browser/device fingerprint for 3DS (see below) |
antifraud_info | object | No | Behavioral data for anti-fraud scoring |
subscription | object | No | Creates a recurring subscription with this charge |
- H2H integration: You send
card_number,card_name,card_expiry_month,card_expiry_year,card_cvvdirectly. - SDK integration: The SDK collects card data in the browser. You only send the universal fields.
- Checkout Page: A55's hosted page collects everything. You only send universal fields +
redirect_url.
Device info object (3DS)
Required when threeds_authentication: true in H2H flows:
| Field | Type | Description |
|---|---|---|
ip_address | string | Payer's IP address |
user_agent | string | Browser user-agent string |
device_id | string | SDK-generated device fingerprint |
session_id | string | DDC session ID from issuer |
http_accept_content | string | Browser Accept header |
http_browser_language | string | Browser language (e.g., en-US) |
http_browser_java_enabled | boolean | Java enabled in browser |
http_browser_javascript_enabled | boolean | JavaScript enabled |
http_browser_color_depth | string | Color depth (e.g., 24) |
http_browser_screen_height | string | Screen height in pixels |
http_browser_screen_width | string | Screen width in pixels |
http_browser_time_difference | string | UTC offset (e.g., -3) |
Antifraud info object
Improves fraud scoring and approval rates:
| Field | Type | Description |
|---|---|---|
sales_channel | string | web, app, pos, marketplace, link, subscription, api |
cardholder_logged_in | boolean | Whether payer was logged in |
cardholder_since_days | integer | Days since account creation |
purchase_history | integer | Total past purchases |
days_since_last_purchase_merchant | integer | Days since last purchase with you |
Subscription object
Creates a recurring subscription attached to this charge:
| Field | Type | Required | Description |
|---|---|---|---|
cycle | string | Yes | weekly, biweekly, monthly, quarterly, semiannually, yearly |
end_date | string | No | Subscription end date YYYY-MM-DD (omit for indefinite) |
Code examples
Credit card charge
- cURL
- Python
- JavaScript
curl -s -X POST https://core-manager.a55.tech/api/v1/bank/wallet/charge/ \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"wallet_uuid": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"merchant_id": "11111111-1111-1111-1111-111111111111",
"payer_name": "Maria Silva",
"payer_email": "maria@example.com",
"payer_tax_id": "123.456.789-09",
"payer_cell_phone": "+5511999999999",
"installment_value": 150.00,
"installment_count": 3,
"currency": "BRL",
"due_date": "2026-12-31",
"description": "Order #42 — 3x installments",
"type_charge": "credit_card",
"card_number": "4024007153763191",
"card_name": "MARIA SILVA",
"card_expiry_month": "12",
"card_expiry_year": "2030",
"card_cvv": "123",
"capture": true,
"webhook_url": "https://your-app.com/webhooks/a55",
"payer_address": {
"street": "Av. Paulista",
"address_number": "1000",
"complement": "Sala 101",
"neighborhood": "Bela Vista",
"city": "São Paulo",
"state": "SP",
"postal_code": "01310-100",
"country": "BR"
}
}'
import requests
charge = requests.post(
"https://core-manager.a55.tech/api/v1/bank/wallet/charge/",
json={
"wallet_uuid": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"merchant_id": "11111111-1111-1111-1111-111111111111",
"payer_name": "Maria Silva",
"payer_email": "maria@example.com",
"payer_tax_id": "123.456.789-09",
"payer_cell_phone": "+5511999999999",
"installment_value": 150.00,
"installment_count": 3,
"currency": "BRL",
"due_date": "2026-12-31",
"description": "Order #42 — 3x installments",
"type_charge": "credit_card",
"card_number": "4024007153763191",
"card_name": "MARIA SILVA",
"card_expiry_month": "12",
"card_expiry_year": "2030",
"card_cvv": "123",
"capture": True,
"webhook_url": "https://your-app.com/webhooks/a55",
"payer_address": {
"street": "Av. Paulista",
"address_number": "1000",
"complement": "Sala 101",
"neighborhood": "Bela Vista",
"city": "São Paulo",
"state": "SP",
"postal_code": "01310-100",
"country": "BR",
},
},
headers={
"Authorization": f"Bearer {token}",
"Content-Type": "application/json",
},
).json()
print(f"Charge: {charge['charge_uuid']} — Status: {charge['status']}")
print(f"Total: {charge['installment_count']}x R$ {charge['installments'][0]['local_currency']}")
const charge = await fetch(
"https://core-manager.a55.tech/api/v1/bank/wallet/charge/",
{
method: "POST",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
wallet_uuid: "f47ac10b-58cc-4372-a567-0e02b2c3d479",
merchant_id: "11111111-1111-1111-1111-111111111111",
payer_name: "Maria Silva",
payer_email: "maria@example.com",
payer_tax_id: "123.456.789-09",
payer_cell_phone: "+5511999999999",
installment_value: 150.0,
installment_count: 3,
currency: "BRL",
due_date: "2026-12-31",
description: "Order #42 — 3x installments",
type_charge: "credit_card",
card_number: "4024007153763191",
card_name: "MARIA SILVA",
card_expiry_month: "12",
card_expiry_year: "2030",
card_cvv: "123",
capture: true,
webhook_url: "https://your-app.com/webhooks/a55",
payer_address: {
street: "Av. Paulista",
address_number: "1000",
complement: "Sala 101",
neighborhood: "Bela Vista",
city: "São Paulo",
state: "SP",
postal_code: "01310-100",
country: "BR",
},
}),
}
).then(r => r.json());
console.log(`Charge: ${charge.charge_uuid} — Status: ${charge.status}`);
console.log(`Total: ${charge.installment_count}x R$ ${charge.installments[0].local_currency}`);
Response
Charge lifecycle
Response fields
| Field | Type | Description |
|---|---|---|
charge_uuid | string | Unique charge identifier |
status | string | issued, pending, confirmed, paid, error, canceled, refunded |
local_currency | number | Amount in the wallet's settlement currency |
currency | string | ISO 4217 currency code |
usd_currency | number | Equivalent amount in USD |
eur_currency | number | Equivalent amount in EUR |
type | string | Payment method used |
date | string | Charge creation date |
description | string | Charge description |
due_date | string | Payment due date |
installment_count | integer | Number of installments |
installments | array | Per-installment breakdown |
charge_payment_url | string | Checkout/SDK payment URL (when applicable) |
url_3ds | string | 3DS challenge redirect URL (H2H only) |
message | array/null | Error details when status: "error" |
subscription | object | Subscription details (when subscription was included) |
Card response example
{
"charge_uuid": "51dcca6e-7310-4b73-a94c-90835408f2ff",
"local_currency": 150.00,
"currency": "BRL",
"usd_currency": 26.90,
"eur_currency": 23.58,
"type": "credit_card",
"date": "2026-03-20",
"description": "Order #42 — 3x installments",
"due_date": "2026-12-31",
"status": "confirmed",
"message": null,
"installment_count": 3,
"installments": [
{
"local_currency": 50.00,
"currency": "BRL",
"usd_currency": 8.97,
"eur_currency": 7.86,
"due_date": "2026-12-31",
"status": "confirmed",
"installment_number": 1
},
{
"local_currency": 50.00,
"currency": "BRL",
"usd_currency": 8.97,
"eur_currency": 7.86,
"due_date": "2027-01-31",
"status": "confirmed",
"installment_number": 2
},
{
"local_currency": 50.00,
"currency": "BRL",
"usd_currency": 8.97,
"eur_currency": 7.86,
"due_date": "2027-02-28",
"status": "confirmed",
"installment_number": 3
}
]
}
Error response
{
"charge_uuid": "51dcca6e-7310-4b73-a94c-90835408f2ff",
"status": "error",
"message": [
{
"code": "error_threeds_authentication",
"source": "authentication",
"description": "Issuing bank declined the authentication"
}
]
}
Error codes
| Code | Meaning | What to do |
|---|---|---|
INVALID_TYPE_CHARGE | Unsupported type_charge value | Check the allowed values in the selector above |
errors.wallet.not_found | Wallet UUID does not exist | Verify wallet_uuid |
errors.unexpected | Internal server error | Retry with exponential backoff; contact support if persistent |
error_threeds_authentication | 3DS authentication failed | Ask the payer to retry or use a different card |
Never rely on the synchronous response alone for final payment status. The charge may move through several states asynchronously. Set webhook_url and treat the webhook as the source of truth.
Set data_only: true on your credit card charges to share enriched transaction data with issuers through 3DS rails — without any cardholder challenge. Merchants have seen up to +646 basis points approval rate improvement.
Works with Visa and Mastercard. Requires device_info with browser/device signals.