Credit card
Quick Reference
Why accept cards with A55
| Without A55 | With A55 |
|---|---|
| Integrate each acquirer separately | Single endpoint covers 8 card brands and 29 acquirers |
| Build your own 3DS and antifraud pipeline | Built-in 3DS 2.2 and risk engine — toggle with one field |
| Handle installment math per issuer | Send installment_count; A55 manages split and settlement |
| Monitor chargebacks across dashboards | Unified webhook lifecycle from auth to chargeback resolution |
Key concepts
| Concept | Role |
|---|---|
| 3DS / Antifraud | 3-D Secure verifies the cardholder; AF scores risk before the acquirer. |
| Authorization / Capture | Auth reserves or approves funds; capture: true completes in one step, capture: false is pre-auth. |
| Installments / Refund / Chargeback | installment_count drives splits; refund returns funds; chargeback is issuer dispute handling. |
Brands and installments
| Segment | Installments |
|---|---|
| Visa, Mastercard, Amex, Elo, Aura | Yes |
| Diners, Discover | No |
| JCB | Not supported |
installment_count 1 pays in full; 2–6 and 7–12 use monthly splits (higher rates may apply for longer plans). Rules follow your acquirer agreement.
Transaction flow
Create a credit card charge
- cURL
- Python
- JavaScript
curl -X POST https://core-manager.a55.tech/api/v1/bank/wallet/charge/ \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"wallet_uuid": "00000000-0000-0000-0000-000000000000",
"merchant_id": "11111111-1111-1111-1111-111111111111",
"payer_name": "John Doe",
"payer_email": "johndoe@example.com",
"payer_tax_id": "12345678901",
"payer_cell_phone": "+5511999999999",
"items": [{"name":"Product","quantity":1,"total_amount":100,"unit_amount":100,"sku":"SKU-001","code":"P001"}],
"payer_address": {"street":"Sample St","address_number":"123","complement":"","neighborhood":"Centro","city":"São Paulo","state":"SP","postal_code":"01000-000","country":"BR"},
"currency": "BRL",
"installment_value": 100,
"installment_count": 1,
"due_date": "2026-12-31",
"description": "Order #1234",
"type_charge": "credit_card",
"card_name": "John Doe",
"card_number": "4111111111111111",
"card_expiry_month": "12",
"card_expiry_year": "2030",
"card_cvv": "123",
"capture": true,
"threeds_authentication": false,
"webhook_url": "https://yoursite.com/webhook",
"redirect_url": "https://yoursite.com/return"
}'
import requests
charge = requests.post(
"https://core-manager.a55.tech/api/v1/bank/wallet/charge/",
headers={"Authorization": f"Bearer {access_token}", "Content-Type": "application/json"},
json={
"wallet_uuid": "00000000-0000-0000-0000-000000000000",
"merchant_id": "11111111-1111-1111-1111-111111111111",
"payer_name": "John Doe",
"payer_email": "johndoe@example.com",
"payer_tax_id": "12345678901",
"payer_cell_phone": "+5511999999999",
"items": [{"name": "Product", "quantity": 1, "total_amount": 100, "unit_amount": 100, "sku": "SKU-001", "code": "P001"}],
"payer_address": {"street": "Sample St", "address_number": "123", "complement": "", "neighborhood": "Centro", "city": "São Paulo", "state": "SP", "postal_code": "01000-000", "country": "BR"},
"currency": "BRL",
"installment_value": 100,
"installment_count": 1,
"due_date": "2026-12-31",
"description": "Order #1234",
"type_charge": "credit_card",
"card_name": "John Doe",
"card_number": "4111111111111111",
"card_expiry_month": "12",
"card_expiry_year": "2030",
"card_cvv": "123",
"capture": True,
"threeds_authentication": False,
"webhook_url": "https://yoursite.com/webhook",
"redirect_url": "https://yoursite.com/return",
},
)
print(charge.json())
const response = await fetch(
"https://core-manager.a55.tech/api/v1/bank/wallet/charge/",
{
method: "POST",
headers: {
Authorization: `Bearer ${accessToken}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
wallet_uuid: "00000000-0000-0000-0000-000000000000",
merchant_id: "11111111-1111-1111-1111-111111111111",
payer_name: "John Doe",
payer_email: "johndoe@example.com",
payer_tax_id: "12345678901",
payer_cell_phone: "+5511999999999",
items: [{ name: "Product", quantity: 1, total_amount: 100, unit_amount: 100, sku: "SKU-001", code: "P001" }],
payer_address: { street: "Sample St", address_number: "123", complement: "", neighborhood: "Centro", city: "São Paulo", state: "SP", postal_code: "01000-000", country: "BR" },
currency: "BRL",
installment_value: 100,
installment_count: 1,
due_date: "2026-12-31",
description: "Order #1234",
type_charge: "credit_card",
card_name: "John Doe",
card_number: "4111111111111111",
card_expiry_month: "12",
card_expiry_year: "2030",
card_cvv: "123",
capture: true,
threeds_authentication: false,
webhook_url: "https://yoursite.com/webhook",
redirect_url: "https://yoursite.com/return",
}),
}
);
console.log(await response.json());
If threeds_authentication: true and the issuer requires a challenge, the response returns status: "pending" with url_3ds. Final status arrives via webhook.
Response example
{
"charge_uuid": "51dcca6e-7310-4b73-a94c-90835408f2ff",
"local_currency": 100,
"currency": "BRL",
"type": "credit_card",
"status": "confirmed",
"installment_count": 1,
"installments": [{ "installment_number": 1, "status": "confirmed", "local_currency": 100, "currency": "BRL" }]
}
Status lifecycle
| Status | Meaning |
|---|---|
pending | 3DS or async step in progress |
confirmed / paid | Authorized or captured successfully |
error | Declined or failed |
canceled | Voided before completion |
refunded | Refund processed |
For cross-border transactions, confirm currency, card brand, and payment method availability. Contact support to enable the desired setup.
Visa Data Only sends enriched transaction data to issuers through 3DS rails — without any challenge redirect. Merchants in Square's pilot saw up to +646 basis points improvement across 6 million transactions. No friction. No cart abandonment.
A55 supports this today with one flag: data_only: true. For Visa and Mastercard credit card transactions in LATAM, this is the most effective approval rate optimization available.