Multiple payment

Antifraud — Multiple payment: CreditCard + Points

Create 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

  1. Put one object per payment method inside payments[].
  2. Sum of all payments[].amount.value must match transaction.total_amount.value.
  3. Currency must be consistent across payments and transaction (currency_code).
  4. Map loyalty / Premier Points spend to method: Points — not a separate loyalty object outside payments.

CreditCard — required fields

FieldTypeNotes
methodstringCreditCard
amountobjectcurrency_code + value (amount charged on the card)
installmentsintegerNumber of installments (Ecommerce)
payerobjectCardholder / payer identity
detailsobjectCard metadata when available (bin, last_digits, expiration, brand)

Optional: token, secure_token, subscription, id.

details (recommended)

FieldNotes
binFirst 6–8 digits
last_digitsLast 4 digits
expiration_month112
expiration_yearFull year (e.g. 2028)
brand_codee.g. VI
brand_namee.g. Visa

Points — required fields

FieldTypeNotes
methodstringPoints
quantityintegerNumber of points spent
amountobjectMonetary value covered by those points (currency_code + value)

Loyalty profile fields such as account number, tier, or points balance are not part of the Points payment schema. Only method, quantity, and amount are sent on this payment object.


Mapping from booking / loyalty payload

Source fieldPayment target
paymentDetails[] (card)payments[]method: CreditCard
loyalty.pointsUsedpayments[]Points.quantity
Monetary value paid with pointspayments[]Points.amount.value
Remaining amount on cardpayments[]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.