Apple Pay · Schema

Apple Pay Payment Request

Represents an ApplePayPaymentRequest used to configure an Apple Pay payment session, specifying the merchant capabilities, supported networks, payment amount, and optional shipping and billing requirements.

AppleContactless PaymentsDigital WalletE-CommerceMobile PaymentsPayments

Properties

Name Type Description
countryCode string The two-letter ISO 3166-1 alpha-2 country code for the merchant's country of operation
currencyCode string The three-letter ISO 4217 currency code for the payment
supportedNetworks array The payment networks the merchant supports
merchantCapabilities array The payment capabilities the merchant supports
total object The total amount for the payment, including the merchant name as the label
lineItems array A list of line items explaining the charges, such as subtotal, tax, discount, and shipping
requiredBillingContactFields array The billing contact fields required to process the payment
requiredShippingContactFields array The shipping contact fields required to fulfill the order
shippingMethods array Available shipping methods for the order
shippingType string The type of shipping used for this request, which determines the wording on the payment sheet
shippingContactEditingMode string Controls whether the shipping contact can be edited on the payment sheet
applicationData string Base64-encoded application-specific data that is included in the payment token hash for verification
supportedCountries array A list of ISO 3166-1 alpha-2 country codes for cards that can be used for payment. If not specified, all countries are supported
recurringPaymentRequest object
automaticReloadPaymentRequest object
multiTokenContexts array An array of payment token contexts for multi-merchant payments
View JSON Schema on GitHub

JSON Schema

apple-pay-payment-request-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://developer.apple.com/schemas/apple-pay/payment-request.json",
  "title": "Apple Pay Payment Request",
  "description": "Represents an ApplePayPaymentRequest used to configure an Apple Pay payment session, specifying the merchant capabilities, supported networks, payment amount, and optional shipping and billing requirements.",
  "type": "object",
  "required": [
    "countryCode",
    "currencyCode",
    "supportedNetworks",
    "merchantCapabilities",
    "total"
  ],
  "properties": {
    "countryCode": {
      "type": "string",
      "description": "The two-letter ISO 3166-1 alpha-2 country code for the merchant's country of operation",
      "pattern": "^[A-Z]{2}$",
      "examples": ["US", "GB", "CA"]
    },
    "currencyCode": {
      "type": "string",
      "description": "The three-letter ISO 4217 currency code for the payment",
      "pattern": "^[A-Z]{3}$",
      "examples": ["USD", "GBP", "EUR"]
    },
    "supportedNetworks": {
      "type": "array",
      "description": "The payment networks the merchant supports",
      "items": {
        "type": "string",
        "enum": [
          "visa",
          "masterCard",
          "amex",
          "discover",
          "jcb",
          "chinaUnionPay",
          "interac",
          "privateLabel",
          "eftpos",
          "cartesBancaires",
          "iD",
          "quicPay",
          "suica",
          "mada",
          "bancomat",
          "bancontact",
          "girocard"
        ]
      },
      "minItems": 1
    },
    "merchantCapabilities": {
      "type": "array",
      "description": "The payment capabilities the merchant supports",
      "items": {
        "type": "string",
        "enum": [
          "supports3DS",
          "supportsEMV",
          "supportsCredit",
          "supportsDebit"
        ]
      },
      "minItems": 1
    },
    "total": {
      "$ref": "#/$defs/LineItem",
      "description": "The total amount for the payment, including the merchant name as the label"
    },
    "lineItems": {
      "type": "array",
      "description": "A list of line items explaining the charges, such as subtotal, tax, discount, and shipping",
      "items": {
        "$ref": "#/$defs/LineItem"
      }
    },
    "requiredBillingContactFields": {
      "type": "array",
      "description": "The billing contact fields required to process the payment",
      "items": {
        "$ref": "#/$defs/ContactField"
      }
    },
    "requiredShippingContactFields": {
      "type": "array",
      "description": "The shipping contact fields required to fulfill the order",
      "items": {
        "$ref": "#/$defs/ContactField"
      }
    },
    "shippingMethods": {
      "type": "array",
      "description": "Available shipping methods for the order",
      "items": {
        "$ref": "#/$defs/ShippingMethod"
      }
    },
    "shippingType": {
      "type": "string",
      "description": "The type of shipping used for this request, which determines the wording on the payment sheet",
      "enum": [
        "shipping",
        "delivery",
        "storePickup",
        "servicePickup"
      ],
      "default": "shipping"
    },
    "shippingContactEditingMode": {
      "type": "string",
      "description": "Controls whether the shipping contact can be edited on the payment sheet",
      "enum": [
        "enabled",
        "storePickup"
      ]
    },
    "applicationData": {
      "type": "string",
      "description": "Base64-encoded application-specific data that is included in the payment token hash for verification"
    },
    "supportedCountries": {
      "type": "array",
      "description": "A list of ISO 3166-1 alpha-2 country codes for cards that can be used for payment. If not specified, all countries are supported",
      "items": {
        "type": "string",
        "pattern": "^[A-Z]{2}$"
      }
    },
    "recurringPaymentRequest": {
      "$ref": "#/$defs/RecurringPaymentRequest"
    },
    "automaticReloadPaymentRequest": {
      "$ref": "#/$defs/AutomaticReloadPaymentRequest"
    },
    "multiTokenContexts": {
      "type": "array",
      "description": "An array of payment token contexts for multi-merchant payments",
      "items": {
        "$ref": "#/$defs/PaymentTokenContext"
      }
    }
  },
  "$defs": {
    "LineItem": {
      "type": "object",
      "required": ["label", "amount"],
      "properties": {
        "label": {
          "type": "string",
          "description": "A short, localized description of the line item"
        },
        "amount": {
          "type": "string",
          "description": "The monetary amount of the line item as a string with decimal notation",
          "pattern": "^-?\\d+\\.\\d{2}$"
        },
        "type": {
          "type": "string",
          "enum": ["final", "pending"],
          "default": "final",
          "description": "Whether this is a final or pending amount"
        },
        "paymentTiming": {
          "type": "string",
          "enum": [
            "immediate",
            "recurring",
            "deferred",
            "automaticReload"
          ],
          "description": "When the payment will be taken"
        },
        "recurringPaymentStartDate": {
          "type": "string",
          "format": "date-time",
          "description": "The start date for recurring payments"
        },
        "recurringPaymentIntervalUnit": {
          "type": "string",
          "enum": ["year", "month", "day", "hour", "minute"],
          "description": "The interval unit for recurring payments"
        },
        "recurringPaymentIntervalCount": {
          "type": "integer",
          "minimum": 1,
          "description": "The number of interval units between recurring payments"
        },
        "recurringPaymentEndDate": {
          "type": "string",
          "format": "date-time",
          "description": "The end date for recurring payments"
        },
        "deferredPaymentDate": {
          "type": "string",
          "format": "date-time",
          "description": "The date for a deferred payment"
        },
        "automaticReloadPaymentThresholdAmount": {
          "type": "string",
          "description": "The balance threshold that triggers an automatic reload"
        }
      }
    },
    "ContactField": {
      "type": "string",
      "enum": [
        "email",
        "name",
        "phone",
        "postalAddress",
        "phoneticName"
      ],
      "description": "A contact field that can be requested from the user"
    },
    "ShippingMethod": {
      "type": "object",
      "required": ["label", "detail", "amount", "identifier"],
      "properties": {
        "label": {
          "type": "string",
          "description": "A short description of the shipping method"
        },
        "detail": {
          "type": "string",
          "description": "A longer description of the shipping method"
        },
        "amount": {
          "type": "string",
          "description": "The cost of the shipping method",
          "pattern": "^-?\\d+\\.\\d{2}$"
        },
        "identifier": {
          "type": "string",
          "description": "A unique identifier for the shipping method"
        },
        "dateComponentsRange": {
          "type": "object",
          "description": "Estimated delivery date range",
          "properties": {
            "startDateComponents": {
              "$ref": "#/$defs/DateComponents"
            },
            "endDateComponents": {
              "$ref": "#/$defs/DateComponents"
            }
          }
        }
      }
    },
    "DateComponents": {
      "type": "object",
      "properties": {
        "era": { "type": "integer" },
        "year": { "type": "integer" },
        "month": { "type": "integer" },
        "day": { "type": "integer" },
        "hours": { "type": "integer" },
        "minutes": { "type": "integer" },
        "seconds": { "type": "integer" },
        "calendar": { "type": "string" }
      }
    },
    "RecurringPaymentRequest": {
      "type": "object",
      "required": [
        "paymentDescription",
        "regularBilling",
        "managementURL"
      ],
      "description": "Configuration for recurring payments",
      "properties": {
        "paymentDescription": {
          "type": "string",
          "description": "A description of the recurring payment"
        },
        "regularBilling": {
          "$ref": "#/$defs/LineItem",
          "description": "The regular billing amount and interval"
        },
        "trialBilling": {
          "$ref": "#/$defs/LineItem",
          "description": "The trial billing amount and interval, if applicable"
        },
        "billingAgreement": {
          "type": "string",
          "description": "A localized billing agreement for display to the user"
        },
        "managementURL": {
          "type": "string",
          "format": "uri",
          "description": "A URL to manage the recurring payment"
        },
        "tokenNotificationURL": {
          "type": "string",
          "format": "uri",
          "description": "A URL for receiving lifecycle notifications for the merchant token"
        }
      }
    },
    "AutomaticReloadPaymentRequest": {
      "type": "object",
      "required": [
        "paymentDescription",
        "automaticReloadBilling",
        "managementURL"
      ],
      "description": "Configuration for automatic reload payments (e.g., store cards)",
      "properties": {
        "paymentDescription": {
          "type": "string",
          "description": "A description of the automatic reload payment"
        },
        "automaticReloadBilling": {
          "$ref": "#/$defs/LineItem",
          "description": "The automatic reload billing amount"
        },
        "billingAgreement": {
          "type": "string",
          "description": "A localized billing agreement for display"
        },
        "managementURL": {
          "type": "string",
          "format": "uri",
          "description": "A URL to manage the automatic reload"
        },
        "tokenNotificationURL": {
          "type": "string",
          "format": "uri",
          "description": "A URL for receiving lifecycle notifications"
        }
      }
    },
    "PaymentTokenContext": {
      "type": "object",
      "required": [
        "merchantIdentifier",
        "externalIdentifier",
        "merchantName",
        "merchantDomain",
        "amount"
      ],
      "description": "Context for multi-merchant payment tokens",
      "properties": {
        "merchantIdentifier": {
          "type": "string",
          "description": "The merchant identifier for this context"
        },
        "externalIdentifier": {
          "type": "string",
          "description": "An external identifier for the merchant"
        },
        "merchantName": {
          "type": "string",
          "description": "The merchant's display name"
        },
        "merchantDomain": {
          "type": "string",
          "description": "The merchant's domain"
        },
        "amount": {
          "type": "string",
          "description": "The amount for this merchant's portion"
        }
      }
    }
  }
}