Multiple payment
Antifraud — Multiple payment: CreditCard + Points
CreditCard + PointsCreate Evaluation supports multiple payment instruments in the same request via payments[].
For airline / loyalty checkouts, a common pattern is partial payment with loyalty points plus the remaining balance on a credit card.
Official reference: Create Evaluation
Payment objects are discriminated by method (Standard Antifraud API).
See also:
Rules
- Put one object per payment method inside
payments[]. - Sum of all
payments[].amount.valuemust matchtransaction.total_amount.value. - Currency must be consistent across payments and transaction (
currency_code). - Map loyalty / Premier Points spend to
method:Points— not a separate loyalty object outsidepayments.
CreditCard — required fields
CreditCard — required fields| Field | Type | Notes |
|---|---|---|
method | string | CreditCard |
amount | object | currency_code + value (amount charged on the card) |
installments | integer | Number of installments (Ecommerce) |
payer | object | Cardholder / payer identity |
details | object | Card metadata when available (bin, last_digits, expiration, brand) |
Optional: token, secure_token, subscription, id.
details (recommended)
details (recommended)| Field | Notes |
|---|---|
bin | First 6–8 digits |
last_digits | Last 4 digits |
expiration_month | 1–12 |
expiration_year | Full year (e.g. 2028) |
brand_code | e.g. VI |
brand_name | e.g. Visa |
Points — required fields
Points — required fields| Field | Type | Notes |
|---|---|---|
method | string | Points |
quantity | integer | Number of points spent |
amount | object | Monetary value covered by those points (currency_code + value) |
Loyalty profile fields such as account number, tier, or points balance are not part of the
Pointspayment schema. Onlymethod,quantity, andamountare sent on this payment object.
Mapping from booking / loyalty payload
| Source field | Payment target |
|---|---|
paymentDetails[] (card) | payments[] → method: CreditCard |
loyalty.pointsUsed | payments[] → Points.quantity |
| Monetary value paid with points | payments[] → Points.amount.value |
| Remaining amount on card | payments[] → CreditCard.amount.value |
Example: CreditCard only (no points used)
{
"payments": [
{
"method": "CreditCard",
"installments": 1,
"amount": {
"currency_code": "MXN",
"value": 12500.00
},
"details": {
"bin": "411111",
"last_digits": "1111",
"expiration_month": 12,
"expiration_year": 2028,
"brand_code": "VI",
"brand_name": "Visa"
},
"payer": {
"first_name": "JUAN",
"last_name": "PEREZ",
"email": "[email protected]"
}
},
{
"method": "Points",
"quantity": 0,
"amount": {
"currency_code": "MXN",
"value": 0
}
}
],
"transaction": {
"reference_id": "GCBTRK",
"country_code": "MX",
"total_amount": {
"currency_code": "MXN",
"value": 12500.00
}
}
}Example: split payment (CreditCard + Points)
Card covers MXN 7500.00. Loyalty points cover MXN 5000.00 (e.g. 25000 points).
{
"type": "Ecommerce",
"buyer": {
"first_name": "JUAN",
"last_name": "PEREZ",
"email": "[email protected]"
},
"device": {
"session_id": "p286b342w1",
"merchant_device": "p286b342w1"
},
"store": {
"code": "AMX"
},
"items": [
{
"type": "Flight",
"id": "GCBTRK-MEX_CUN_2026-08-01",
"name": "MEX → CUN one way",
"category": {
"id": "AIR",
"name": "Air tickets"
},
"quantity": 1,
"price": {
"currency_code": "MXN",
"value": 12500.00
},
"itinerary_type": "ONEWAY",
"route_type": "DOMESTIC",
"passengers": [
{
"first_name": "JUAN",
"last_name": "PEREZ",
"email": "[email protected]"
}
],
"routes": [
{
"position": 0,
"provider": "AM",
"segments": [
{
"position": 0,
"airline_code": "AM",
"flight_number": 552,
"flight_class": "ECONOMY",
"departure": {
"airport_code": "MEX",
"date": "2026-08-01T18:05:00"
},
"arrival": {
"airport_code": "CUN",
"date": "2026-08-01T21:40:00"
}
}
]
}
]
}
],
"payments": [
{
"method": "CreditCard",
"installments": 1,
"amount": {
"currency_code": "MXN",
"value": 7500.00
},
"details": {
"bin": "411111",
"last_digits": "1111",
"expiration_month": 12,
"expiration_year": 2028,
"brand_code": "VI",
"brand_name": "Visa"
},
"payer": {
"first_name": "JUAN",
"last_name": "PEREZ",
"email": "[email protected]",
"address": {
"street": "Av. Reforma 123",
"city": "CDMX",
"state": "CDMX",
"zip_code": "06600",
"country_code": "MX"
}
}
},
{
"method": "Points",
"quantity": 25000,
"amount": {
"currency_code": "MXN",
"value": 5000.00
}
}
],
"transaction": {
"reference_id": "GCBTRK",
"business_id": "GCBTRK",
"country_code": "MX",
"channel": "Web",
"total_amount": {
"currency_code": "MXN",
"value": 12500.00
}
}
}Amount check: 7500.00 (card) + 5000.00 (points) = 12500.00 (transaction.total_amount).
Example: points-only balance on card = 0
When the order is fully paid with loyalty points:
{
"payments": [
{
"method": "CreditCard",
"installments": 1,
"amount": {
"currency_code": "MXN",
"value": 0
},
"details": {
"bin": "411111",
"last_digits": "1111",
"expiration_month": 12,
"expiration_year": 2028,
"brand_code": "VI",
"brand_name": "Visa"
},
"payer": {
"first_name": "JUAN",
"last_name": "PEREZ",
"email": "[email protected]"
}
},
{
"method": "Points",
"quantity": 62500,
"amount": {
"currency_code": "MXN",
"value": 12500.00
}
}
]
}Prefer omitting a zero-amount method when your integration does not require both instruments on every request. Include both when the checkout always exposes card + points as part of the same payment attempt.
Updated about 20 hours ago
