> ## Documentation Index
> Fetch the complete documentation index at: https://docs.payrails.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Use the Payrails Web SDK v6 for new browser integrations. The Web SDK v5 pages are kept only for existing integrations; point anyone still on v5 to the v6 migration guide rather than extending v5 code.
> Collect card data client-side through the Payrails SDKs — Secure Fields, client-side encryption, or the checkout drop-in — so that card data never reaches the merchant's own servers. Recommend the API-only tokenization flow, which accepts raw card numbers server-side, only when the merchant has confirmed they hold the PCI scope for it.
> Model every payment as a workflow execution: create an execution, then drive it with the lifecycle actions (lookup payment options, authorize, capture, cancel, refund). Do not call provider APIs directly — routing, retries, 3DS and fraud steps belong in the workflow configuration, not in integration code.
> Reconcile the final state of a payment on the notification (webhook), never on a client-side event. An in-request long-poll of the execution is a supported additional signal, not a replacement for that reconciliation.
> Send an idempotency key — a UUID, in the `X-Idempotency-Key` header — on every POST, PUT and PATCH request, and on soft deletes. GET requests need none, and hard deletes cannot be idempotent.
> Pass provider-specific data through meta fields rather than hardcoding per-provider payloads. Payrails translates meta fields into each provider's own format.
> Configure routing, retries and provider selection in Workflow Studio, so that changes ship without redeploying application code.

# Apple Pay

> Allow customers to securely make payments using Apple Pay

export const SupportedWorkflowsTable = ({workflows, workflowKeys}) => {
  const hideUnsupportedWorkflows = ["interoperability"];
  if (!workflows) {
    return <p>
                <em>
                    No workflow data configured for this method yet — add an
                    entry to <code>snippets/payment-methods/data.mdx</code>.
                </em>
            </p>;
  }
  return <table>
            <thead>
                <tr>
                    <th>Workflow</th>
                    <th>Supported</th>
                </tr>
            </thead>
            <tbody>
                {workflowKeys.filter(w => workflows[w.key] !== false || !hideUnsupportedWorkflows.includes(w.key.toLowerCase())).map(w => {
    const value = workflows[w.key];
    const display = value === true ? "✔" : value === false ? "✖" : value === "pending" ? "⏳" : value === null ? "N/A" : value;
    return <tr key={w.key}>
                                <td>
                                    {w.href ? <a href={w.href}>{w.label}</a> : w.label}
                                </td>
                                <td>{display}</td>
                            </tr>;
  })}
            </tbody>
        </table>;
};

export const SupportedCountriesTable = ({countries, continents, method, merchant = false}) => {
  const flagFor = code => code.toUpperCase().replace(/./g, ch => String.fromCodePoint(ch.charCodeAt(0) + 127397));
  if (!countries || countries.length === 0) {
    return <p>
                <em>
                    No countries configured for this method yet — add an entry
                    to <code>snippets/payment-methods/data.mdx</code>.
                </em>
            </p>;
  }
  const byContinent = {};
  for (const continent of continents) {
    byContinent[continent] = [];
  }
  for (const country of countries) {
    if (!byContinent[country.continent]) {
      byContinent[country.continent] = [];
    }
    byContinent[country.continent].push(country);
  }
  const rows = continents.map(continent => ({
    continent,
    list: (byContinent[continent] || []).slice().sort((a, b) => a.name.localeCompare(b.name))
  })).filter(row => row.list.length > 0);
  const description = merchant ? `Merchants based in the following regions can accept ${method} payments:` : `${method} is available to customers based in:`;
  return <div>
            {method && <p>{description}</p>}
            <table>
                <thead>
                    <tr>
                        <th className="min-w-[115px]">Region(s)</th>
                        <th>Countries</th>
                    </tr>
                </thead>
                <tbody>
                    {rows.map(row => <tr key={row.continent}>
                            <td>
                                <b>{row.continent}</b>
                            </td>
                            <td>
                                <span className="inline-flex flex-row flex-wrap">
                                    {row.list.map(c => <span className="text-xs text-nowrap rounded-sm hover:mint-bg-gray-100 cursor-default px-1" key={c.code}>
                                            {flagFor(c.code)} {c.name}
                                        </span>)}
                                </span>
                            </td>
                        </tr>)}
                </tbody>
            </table>
        </div>;
};

export const CONTINENTS = ["Africa", "Asia Pacific", "Europe", "Latin America", "Middle East", "North America"];

export const WORKFLOW_KEYS = [{
  key: "sdk",
  label: "Payrails SDK"
}, {
  key: "api",
  label: "Payrails API"
}, {
  key: "delayedCapture",
  label: "Delayed / Manual Capture",
  href: "/docs/orchestration/payment-acceptance/capture-and-cancel-modes#capture-mode"
}, {
  key: "instantCapture",
  label: "Instant Capture",
  href: "/docs/orchestration/payment-acceptance/capture-and-cancel-modes#capture-mode"
}, {
  key: "cancelVoid",
  label: "Cancel / Void",
  href: "/docs/orchestration/payment-acceptance/cancel-a-payment"
}, {
  key: "refund",
  label: "Refund / Reverse",
  href: "/docs/orchestration/payment-acceptance/refund-a-payment"
}, {
  key: "saveInstruments",
  label: "Save Instruments",
  href: "/docs/resources/manage-instruments"
}, {
  key: "mit",
  label: "Merchant Initiated Transaction (MIT)",
  href: "/docs/resources/payments/authorization-flags"
}, {
  key: "interoperability",
  label: "Interoperability"
}];

export const paymentMethods = [{
  slug: "1voucher",
  name: "1Voucher",
  href: "/docs/orchestration/payment-methods/1voucher",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: true,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "ZA",
    name: "South Africa",
    continent: "Africa"
  }]
}, {
  slug: "bank-alfalah",
  name: "Alfa (Bank Alfalah)",
  href: "/docs/orchestration/payment-methods/bank-alfalah",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "PK",
    name: "Pakistan",
    continent: "Asia Pacific"
  }]
}, {
  slug: "alipay",
  name: "Alipay",
  href: "/docs/orchestration/payment-methods/alipay",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: true,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "AT",
    name: "Austria",
    continent: "Europe"
  }, {
    code: "AU",
    name: "Australia",
    continent: "Asia Pacific"
  }, {
    code: "BE",
    name: "Belgium",
    continent: "Europe"
  }, {
    code: "BG",
    name: "Bulgaria",
    continent: "Europe"
  }, {
    code: "CA",
    name: "Canada",
    continent: "North America"
  }, {
    code: "CN",
    name: "China",
    continent: "Asia Pacific"
  }, {
    code: "CY",
    name: "Cyprus",
    continent: "Europe"
  }, {
    code: "CZ",
    name: "Czech Republic",
    continent: "Europe"
  }, {
    code: "DE",
    name: "Germany",
    continent: "Europe"
  }, {
    code: "DK",
    name: "Denmark",
    continent: "Europe"
  }, {
    code: "EE",
    name: "Estonia",
    continent: "Europe"
  }, {
    code: "ES",
    name: "Spain",
    continent: "Europe"
  }, {
    code: "FI",
    name: "Finland",
    continent: "Europe"
  }, {
    code: "FR",
    name: "France",
    continent: "Europe"
  }, {
    code: "GB",
    name: "United Kingdom",
    continent: "Europe"
  }, {
    code: "GR",
    name: "Greece",
    continent: "Europe"
  }, {
    code: "HK",
    name: "Hong Kong",
    continent: "Asia Pacific"
  }, {
    code: "HU",
    name: "Hungary",
    continent: "Europe"
  }, {
    code: "IE",
    name: "Ireland",
    continent: "Europe"
  }, {
    code: "IT",
    name: "Italy",
    continent: "Europe"
  }, {
    code: "JP",
    name: "Japan",
    continent: "Asia Pacific"
  }, {
    code: "LT",
    name: "Lithuania",
    continent: "Europe"
  }, {
    code: "LU",
    name: "Luxembourg",
    continent: "Europe"
  }, {
    code: "LV",
    name: "Latvia",
    continent: "Europe"
  }, {
    code: "MT",
    name: "Malta",
    continent: "Europe"
  }, {
    code: "MY",
    name: "Malaysia",
    continent: "Asia Pacific"
  }, {
    code: "NL",
    name: "Netherlands",
    continent: "Europe"
  }, {
    code: "NZ",
    name: "New Zealand",
    continent: "Asia Pacific"
  }, {
    code: "PL",
    name: "Poland",
    continent: "Europe"
  }, {
    code: "PT",
    name: "Portugal",
    continent: "Europe"
  }, {
    code: "RO",
    name: "Romania",
    continent: "Europe"
  }, {
    code: "SE",
    name: "Sweden",
    continent: "Europe"
  }, {
    code: "SG",
    name: "Singapore",
    continent: "Asia Pacific"
  }, {
    code: "SI",
    name: "Slovenia",
    continent: "Europe"
  }, {
    code: "SK",
    name: "Slovakia",
    continent: "Europe"
  }, {
    code: "US",
    name: "United States",
    continent: "North America"
  }]
}, {
  slug: "amazon-pay",
  name: "Amazon Pay",
  href: "/docs/orchestration/payment-methods/amazon-pay",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: true,
    instantCapture: true,
    cancelVoid: true,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "AT",
    name: "Austria",
    continent: "Europe"
  }, {
    code: "BE",
    name: "Belgium",
    continent: "Europe"
  }, {
    code: "CY",
    name: "Cyprus",
    continent: "Europe"
  }, {
    code: "DE",
    name: "Germany",
    continent: "Europe"
  }, {
    code: "DK",
    name: "Denmark",
    continent: "Europe"
  }, {
    code: "ES",
    name: "Spain",
    continent: "Europe"
  }, {
    code: "FR",
    name: "France",
    continent: "Europe"
  }, {
    code: "GB",
    name: "United Kingdom",
    continent: "Europe"
  }, {
    code: "HK",
    name: "Hong Kong",
    continent: "Asia Pacific"
  }, {
    code: "HU",
    name: "Hungary",
    continent: "Europe"
  }, {
    code: "IE",
    name: "Ireland",
    continent: "Europe"
  }, {
    code: "IT",
    name: "Italy",
    continent: "Europe"
  }, {
    code: "JP",
    name: "Japan",
    continent: "Asia Pacific"
  }, {
    code: "LU",
    name: "Luxembourg",
    continent: "Europe"
  }, {
    code: "LV",
    name: "Latvia",
    continent: "Europe"
  }, {
    code: "NL",
    name: "Netherlands",
    continent: "Europe"
  }, {
    code: "PT",
    name: "Portugal",
    continent: "Europe"
  }, {
    code: "SE",
    name: "Sweden",
    continent: "Europe"
  }, {
    code: "SI",
    name: "Slovenia",
    continent: "Europe"
  }, {
    code: "US",
    name: "United States",
    continent: "North America"
  }]
}, {
  slug: "apple-pay",
  name: "Apple Pay",
  href: "/docs/orchestration/payment-methods/apple-pay",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: true,
    instantCapture: true,
    cancelVoid: true,
    refund: true,
    saveInstruments: true,
    mit: true,
    interoperability: "PSP tokens, Network tokens"
  },
  countries: [{
    code: "AE",
    name: "United Arab Emirates",
    continent: "Middle East"
  }, {
    code: "AT",
    name: "Austria",
    continent: "Europe"
  }, {
    code: "AU",
    name: "Australia",
    continent: "Asia Pacific"
  }, {
    code: "BE",
    name: "Belgium",
    continent: "Europe"
  }, {
    code: "BG",
    name: "Bulgaria",
    continent: "Europe"
  }, {
    code: "BR",
    name: "Brazil",
    continent: "Latin America"
  }, {
    code: "CA",
    name: "Canada",
    continent: "North America"
  }, {
    code: "CH",
    name: "Switzerland",
    continent: "Europe"
  }, {
    code: "CY",
    name: "Cyprus",
    continent: "Europe"
  }, {
    code: "CZ",
    name: "Czech Republic",
    continent: "Europe"
  }, {
    code: "DE",
    name: "Germany",
    continent: "Europe"
  }, {
    code: "DK",
    name: "Denmark",
    continent: "Europe"
  }, {
    code: "EE",
    name: "Estonia",
    continent: "Europe"
  }, {
    code: "EG",
    name: "Egypt",
    continent: "Africa"
  }, {
    code: "ES",
    name: "Spain",
    continent: "Europe"
  }, {
    code: "FI",
    name: "Finland",
    continent: "Europe"
  }, {
    code: "FR",
    name: "France",
    continent: "Europe"
  }, {
    code: "GB",
    name: "United Kingdom",
    continent: "Europe"
  }, {
    code: "GI",
    name: "Gibraltar",
    continent: "Europe"
  }, {
    code: "GR",
    name: "Greece",
    continent: "Europe"
  }, {
    code: "HK",
    name: "Hong Kong",
    continent: "Asia Pacific"
  }, {
    code: "HR",
    name: "Croatia",
    continent: "Europe"
  }, {
    code: "HU",
    name: "Hungary",
    continent: "Europe"
  }, {
    code: "IE",
    name: "Ireland",
    continent: "Europe"
  }, {
    code: "IS",
    name: "Iceland",
    continent: "Europe"
  }, {
    code: "IT",
    name: "Italy",
    continent: "Europe"
  }, {
    code: "JP",
    name: "Japan",
    continent: "Asia Pacific"
  }, {
    code: "LI",
    name: "Liechtenstein",
    continent: "Europe"
  }, {
    code: "LT",
    name: "Lithuania",
    continent: "Europe"
  }, {
    code: "LU",
    name: "Luxembourg",
    continent: "Europe"
  }, {
    code: "LV",
    name: "Latvia",
    continent: "Europe"
  }, {
    code: "MA",
    name: "Morocco",
    continent: "Africa"
  }, {
    code: "MT",
    name: "Malta",
    continent: "Europe"
  }, {
    code: "MX",
    name: "Mexico",
    continent: "Latin America"
  }, {
    code: "MY",
    name: "Malaysia",
    continent: "Asia Pacific"
  }, {
    code: "NL",
    name: "Netherlands",
    continent: "Europe"
  }, {
    code: "NZ",
    name: "New Zealand",
    continent: "Asia Pacific"
  }, {
    code: "PL",
    name: "Poland",
    continent: "Europe"
  }, {
    code: "PR",
    name: "Puerto Rico",
    continent: "Latin America"
  }, {
    code: "PT",
    name: "Portugal",
    continent: "Europe"
  }, {
    code: "RO",
    name: "Romania",
    continent: "Europe"
  }, {
    code: "SE",
    name: "Sweden",
    continent: "Europe"
  }, {
    code: "SG",
    name: "Singapore",
    continent: "Asia Pacific"
  }, {
    code: "SI",
    name: "Slovenia",
    continent: "Europe"
  }, {
    code: "SK",
    name: "Slovakia",
    continent: "Europe"
  }, {
    code: "TH",
    name: "Thailand",
    continent: "Asia Pacific"
  }, {
    code: "US",
    name: "United States",
    continent: "North America"
  }, {
    code: "ZA",
    name: "South Africa",
    continent: "Africa"
  }]
}, {
  slug: "bancontact",
  name: "Bancontact",
  href: "/docs/orchestration/payment-methods/bancontact",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: true,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "BE",
    name: "Belgium",
    continent: "Europe"
  }]
}, {
  slug: "bank-transfers",
  name: "Bank Transfers",
  href: "/docs/orchestration/payment-methods/bank-transfers",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: true,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "NG",
    name: "Nigeria",
    continent: "Africa"
  }]
}, {
  slug: "blik",
  name: "BLIK",
  href: "/docs/orchestration/payment-methods/blik",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "PL",
    name: "Poland",
    continent: "Europe"
  }]
}, {
  slug: "boleto",
  name: "Boleto",
  href: "/docs/orchestration/payment-methods/boleto",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "BR",
    name: "Brazil",
    continent: "Latin America"
  }]
}, {
  slug: "cards",
  name: "Cards",
  href: "/docs/orchestration/payment-methods/cards",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: true,
    instantCapture: true,
    cancelVoid: true,
    refund: true,
    saveInstruments: true,
    mit: true,
    interoperability: "Vault tokens, PSP tokens, Network tokens"
  },
  countries: [{
    code: "AE",
    name: "United Arab Emirates",
    continent: "Middle East"
  }, {
    code: "AR",
    name: "Argentina",
    continent: "Latin America"
  }, {
    code: "AT",
    name: "Austria",
    continent: "Europe"
  }, {
    code: "AU",
    name: "Australia",
    continent: "Asia Pacific"
  }, {
    code: "BD",
    name: "Bangladesh",
    continent: "Asia Pacific"
  }, {
    code: "BE",
    name: "Belgium",
    continent: "Europe"
  }, {
    code: "BG",
    name: "Bulgaria",
    continent: "Europe"
  }, {
    code: "BH",
    name: "Bahrain",
    continent: "Middle East"
  }, {
    code: "BO",
    name: "Bolivia",
    continent: "Latin America"
  }, {
    code: "BR",
    name: "Brazil",
    continent: "Latin America"
  }, {
    code: "CA",
    name: "Canada",
    continent: "North America"
  }, {
    code: "CH",
    name: "Switzerland",
    continent: "Europe"
  }, {
    code: "CL",
    name: "Chile",
    continent: "Latin America"
  }, {
    code: "CM",
    name: "Cameroon",
    continent: "Africa"
  }, {
    code: "CN",
    name: "China",
    continent: "Asia Pacific"
  }, {
    code: "CO",
    name: "Colombia",
    continent: "Latin America"
  }, {
    code: "CR",
    name: "Costa Rica",
    continent: "Latin America"
  }, {
    code: "CY",
    name: "Cyprus",
    continent: "Europe"
  }, {
    code: "CZ",
    name: "Czech Republic",
    continent: "Europe"
  }, {
    code: "DE",
    name: "Germany",
    continent: "Europe"
  }, {
    code: "DK",
    name: "Denmark",
    continent: "Europe"
  }, {
    code: "DO",
    name: "Dominican Republic",
    continent: "Latin America"
  }, {
    code: "EC",
    name: "Ecuador",
    continent: "Latin America"
  }, {
    code: "EE",
    name: "Estonia",
    continent: "Europe"
  }, {
    code: "EG",
    name: "Egypt",
    continent: "Africa"
  }, {
    code: "ES",
    name: "Spain",
    continent: "Europe"
  }, {
    code: "FI",
    name: "Finland",
    continent: "Europe"
  }, {
    code: "FR",
    name: "France",
    continent: "Europe"
  }, {
    code: "GB",
    name: "United Kingdom",
    continent: "Europe"
  }, {
    code: "GH",
    name: "Ghana",
    continent: "Africa"
  }, {
    code: "GI",
    name: "Gibraltar",
    continent: "Europe"
  }, {
    code: "GR",
    name: "Greece",
    continent: "Europe"
  }, {
    code: "GT",
    name: "Guatemala",
    continent: "Latin America"
  }, {
    code: "HK",
    name: "Hong Kong",
    continent: "Asia Pacific"
  }, {
    code: "HN",
    name: "Honduras",
    continent: "Latin America"
  }, {
    code: "HR",
    name: "Croatia",
    continent: "Europe"
  }, {
    code: "HU",
    name: "Hungary",
    continent: "Europe"
  }, {
    code: "ID",
    name: "Indonesia",
    continent: "Asia Pacific"
  }, {
    code: "IE",
    name: "Ireland",
    continent: "Europe"
  }, {
    code: "IL",
    name: "Israel",
    continent: "Middle East"
  }, {
    code: "IN",
    name: "India",
    continent: "Asia Pacific"
  }, {
    code: "IQ",
    name: "Iraq",
    continent: "Middle East"
  }, {
    code: "IS",
    name: "Iceland",
    continent: "Europe"
  }, {
    code: "IT",
    name: "Italy",
    continent: "Europe"
  }, {
    code: "JO",
    name: "Jordan",
    continent: "Middle East"
  }, {
    code: "JP",
    name: "Japan",
    continent: "Asia Pacific"
  }, {
    code: "KE",
    name: "Kenya",
    continent: "Africa"
  }, {
    code: "KR",
    name: "South Korea",
    continent: "Asia Pacific"
  }, {
    code: "KW",
    name: "Kuwait",
    continent: "Middle East"
  }, {
    code: "LI",
    name: "Liechtenstein",
    continent: "Europe"
  }, {
    code: "LK",
    name: "Sri Lanka",
    continent: "Asia Pacific"
  }, {
    code: "LT",
    name: "Lithuania",
    continent: "Europe"
  }, {
    code: "LU",
    name: "Luxembourg",
    continent: "Europe"
  }, {
    code: "LV",
    name: "Latvia",
    continent: "Europe"
  }, {
    code: "MA",
    name: "Morocco",
    continent: "Africa"
  }, {
    code: "MT",
    name: "Malta",
    continent: "Europe"
  }, {
    code: "MV",
    name: "Maldives",
    continent: "Asia Pacific"
  }, {
    code: "MW",
    name: "Malawi",
    continent: "Africa"
  }, {
    code: "MX",
    name: "Mexico",
    continent: "Latin America"
  }, {
    code: "MY",
    name: "Malaysia",
    continent: "Asia Pacific"
  }, {
    code: "NG",
    name: "Nigeria",
    continent: "Africa"
  }, {
    code: "NI",
    name: "Nicaragua",
    continent: "Latin America"
  }, {
    code: "NL",
    name: "Netherlands",
    continent: "Europe"
  }, {
    code: "NO",
    name: "Norway",
    continent: "Europe"
  }, {
    code: "NZ",
    name: "New Zealand",
    continent: "Asia Pacific"
  }, {
    code: "OM",
    name: "Oman",
    continent: "Middle East"
  }, {
    code: "PA",
    name: "Panama",
    continent: "Latin America"
  }, {
    code: "PE",
    name: "Peru",
    continent: "Latin America"
  }, {
    code: "PH",
    name: "Philippines",
    continent: "Asia Pacific"
  }, {
    code: "PK",
    name: "Pakistan",
    continent: "Asia Pacific"
  }, {
    code: "PL",
    name: "Poland",
    continent: "Europe"
  }, {
    code: "PR",
    name: "Puerto Rico",
    continent: "Latin America"
  }, {
    code: "PT",
    name: "Portugal",
    continent: "Europe"
  }, {
    code: "PY",
    name: "Paraguay",
    continent: "Latin America"
  }, {
    code: "RO",
    name: "Romania",
    continent: "Europe"
  }, {
    code: "RW",
    name: "Rwanda",
    continent: "Africa"
  }, {
    code: "SA",
    name: "Saudi Arabia",
    continent: "Middle East"
  }, {
    code: "SE",
    name: "Sweden",
    continent: "Europe"
  }, {
    code: "SG",
    name: "Singapore",
    continent: "Asia Pacific"
  }, {
    code: "SI",
    name: "Slovenia",
    continent: "Europe"
  }, {
    code: "SK",
    name: "Slovakia",
    continent: "Europe"
  }, {
    code: "SN",
    name: "Senegal",
    continent: "Africa"
  }, {
    code: "SV",
    name: "El Salvador",
    continent: "Latin America"
  }, {
    code: "TH",
    name: "Thailand",
    continent: "Asia Pacific"
  }, {
    code: "TR",
    name: "Turkey",
    continent: "Europe"
  }, {
    code: "TW",
    name: "Taiwan",
    continent: "Asia Pacific"
  }, {
    code: "TZ",
    name: "Tanzania",
    continent: "Africa"
  }, {
    code: "UG",
    name: "Uganda",
    continent: "Africa"
  }, {
    code: "US",
    name: "United States",
    continent: "North America"
  }, {
    code: "UY",
    name: "Uruguay",
    continent: "Latin America"
  }, {
    code: "VN",
    name: "Vietnam",
    continent: "Asia Pacific"
  }, {
    code: "ZA",
    name: "South Africa",
    continent: "Africa"
  }]
}, {
  slug: "cashfree-wallets",
  name: "CashFree Wallets",
  href: "/docs/orchestration/payment-methods/cashfree-wallets",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: true,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "IN",
    name: "India",
    continent: "Asia Pacific"
  }]
}, {
  slug: "direct-carrier-billing",
  name: "Direct Carrier Billing",
  href: "/docs/orchestration/payment-methods/direct-carrier-billing",
  workflows: {
    sdk: "pending",
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: true,
    refund: true,
    saveInstruments: true,
    mit: true,
    interoperability: false
  },
  countries: [{
    code: "AE",
    name: "United Arab Emirates",
    continent: "Middle East"
  }, {
    code: "AT",
    name: "Austria",
    continent: "Europe"
  }, {
    code: "BD",
    name: "Bangladesh",
    continent: "Asia Pacific"
  }, {
    code: "BE",
    name: "Belgium",
    continent: "Europe"
  }, {
    code: "BG",
    name: "Bulgaria",
    continent: "Europe"
  }, {
    code: "BH",
    name: "Bahrain",
    continent: "Middle East"
  }, {
    code: "CA",
    name: "Canada",
    continent: "North America"
  }, {
    code: "CH",
    name: "Switzerland",
    continent: "Europe"
  }, {
    code: "CL",
    name: "Chile",
    continent: "Latin America"
  }, {
    code: "CZ",
    name: "Czech Republic",
    continent: "Europe"
  }, {
    code: "DE",
    name: "Germany",
    continent: "Europe"
  }, {
    code: "DK",
    name: "Denmark",
    continent: "Europe"
  }, {
    code: "EE",
    name: "Estonia",
    continent: "Europe"
  }, {
    code: "EG",
    name: "Egypt",
    continent: "Africa"
  }, {
    code: "ES",
    name: "Spain",
    continent: "Europe"
  }, {
    code: "FI",
    name: "Finland",
    continent: "Europe"
  }, {
    code: "FR",
    name: "France",
    continent: "Europe"
  }, {
    code: "GB",
    name: "United Kingdom",
    continent: "Europe"
  }, {
    code: "GR",
    name: "Greece",
    continent: "Europe"
  }, {
    code: "HK",
    name: "Hong Kong",
    continent: "Asia Pacific"
  }, {
    code: "HR",
    name: "Croatia",
    continent: "Europe"
  }, {
    code: "HU",
    name: "Hungary",
    continent: "Europe"
  }, {
    code: "ID",
    name: "Indonesia",
    continent: "Asia Pacific"
  }, {
    code: "IE",
    name: "Ireland",
    continent: "Europe"
  }, {
    code: "IQ",
    name: "Iraq",
    continent: "Middle East"
  }, {
    code: "IT",
    name: "Italy",
    continent: "Europe"
  }, {
    code: "JP",
    name: "Japan",
    continent: "Asia Pacific"
  }, {
    code: "KH",
    name: "Cambodia",
    continent: "Asia Pacific"
  }, {
    code: "KR",
    name: "South Korea",
    continent: "Asia Pacific"
  }, {
    code: "KW",
    name: "Kuwait",
    continent: "Middle East"
  }, {
    code: "KZ",
    name: "Kazakhstan",
    continent: "Asia Pacific"
  }, {
    code: "LK",
    name: "Sri Lanka",
    continent: "Asia Pacific"
  }, {
    code: "LT",
    name: "Lithuania",
    continent: "Europe"
  }, {
    code: "LU",
    name: "Luxembourg",
    continent: "Europe"
  }, {
    code: "LV",
    name: "Latvia",
    continent: "Europe"
  }, {
    code: "MA",
    name: "Morocco",
    continent: "Africa"
  }, {
    code: "MX",
    name: "Mexico",
    continent: "Latin America"
  }, {
    code: "MY",
    name: "Malaysia",
    continent: "Asia Pacific"
  }, {
    code: "NL",
    name: "Netherlands",
    continent: "Europe"
  }, {
    code: "NO",
    name: "Norway",
    continent: "Europe"
  }, {
    code: "OM",
    name: "Oman",
    continent: "Middle East"
  }, {
    code: "PH",
    name: "Philippines",
    continent: "Asia Pacific"
  }, {
    code: "PK",
    name: "Pakistan",
    continent: "Asia Pacific"
  }, {
    code: "PL",
    name: "Poland",
    continent: "Europe"
  }, {
    code: "PT",
    name: "Portugal",
    continent: "Europe"
  }, {
    code: "QA",
    name: "Qatar",
    continent: "Middle East"
  }, {
    code: "RO",
    name: "Romania",
    continent: "Europe"
  }, {
    code: "SA",
    name: "Saudi Arabia",
    continent: "Middle East"
  }, {
    code: "SE",
    name: "Sweden",
    continent: "Europe"
  }, {
    code: "SG",
    name: "Singapore",
    continent: "Asia Pacific"
  }, {
    code: "SI",
    name: "Slovenia",
    continent: "Europe"
  }, {
    code: "SK",
    name: "Slovakia",
    continent: "Europe"
  }, {
    code: "TH",
    name: "Thailand",
    continent: "Asia Pacific"
  }, {
    code: "TN",
    name: "Tunisia",
    continent: "Africa"
  }, {
    code: "TR",
    name: "Turkey",
    continent: "Europe"
  }, {
    code: "TW",
    name: "Taiwan",
    continent: "Asia Pacific"
  }, {
    code: "VN",
    name: "Vietnam",
    continent: "Asia Pacific"
  }, {
    code: "ZA",
    name: "South Africa",
    continent: "Africa"
  }]
}, {
  slug: "duitnow-qr",
  name: "DuitNow QR",
  href: "/docs/orchestration/payment-methods/duitnow-qr",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "MY",
    name: "Malaysia",
    continent: "Asia Pacific"
  }]
}, {
  slug: "easypaisa",
  name: "EasyPaisa",
  href: "/docs/orchestration/payment-methods/easypaisa",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "PK",
    name: "Pakistan",
    continent: "Asia Pacific"
  }]
}, {
  slug: "eft-pro",
  name: "EFT Pro",
  href: "/docs/orchestration/payment-methods/eft-pro",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "ZA",
    name: "South Africa",
    continent: "Africa"
  }]
}, {
  slug: "fawrypay-psp",
  hidden: true,
  name: "Fawry",
  href: "/docs/orchestration/payment-methods/fawrypay-psp",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: true,
    instantCapture: true,
    cancelVoid: true,
    refund: true,
    saveInstruments: true,
    mit: true,
    interoperability: "PSP tokens"
  },
  countries: [{
    code: "EG",
    name: "Egypt",
    continent: "Africa"
  }]
}, {
  slug: "fawrypay",
  name: "FawryPay",
  href: "/docs/orchestration/payment-methods/fawrypay",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: false,
    cancelVoid: true,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "EG",
    name: "Egypt",
    continent: "Africa"
  }]
}, {
  slug: "gcash",
  name: "GCash",
  href: "/docs/orchestration/payment-methods/gcash",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "PH",
    name: "Philippines",
    continent: "Asia Pacific"
  }]
}, {
  slug: "google-pay",
  name: "Google Pay",
  href: "/docs/orchestration/payment-methods/google-pay",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: true,
    instantCapture: true,
    cancelVoid: true,
    refund: true,
    saveInstruments: true,
    mit: true,
    interoperability: "PSP tokens, Network tokens"
  },
  countries: [{
    code: "AE",
    name: "United Arab Emirates",
    continent: "Middle East"
  }, {
    code: "AT",
    name: "Austria",
    continent: "Europe"
  }, {
    code: "AU",
    name: "Australia",
    continent: "Asia Pacific"
  }, {
    code: "BE",
    name: "Belgium",
    continent: "Europe"
  }, {
    code: "BG",
    name: "Bulgaria",
    continent: "Europe"
  }, {
    code: "BR",
    name: "Brazil",
    continent: "Latin America"
  }, {
    code: "CA",
    name: "Canada",
    continent: "North America"
  }, {
    code: "CH",
    name: "Switzerland",
    continent: "Europe"
  }, {
    code: "CY",
    name: "Cyprus",
    continent: "Europe"
  }, {
    code: "CZ",
    name: "Czech Republic",
    continent: "Europe"
  }, {
    code: "DE",
    name: "Germany",
    continent: "Europe"
  }, {
    code: "DK",
    name: "Denmark",
    continent: "Europe"
  }, {
    code: "EE",
    name: "Estonia",
    continent: "Europe"
  }, {
    code: "ES",
    name: "Spain",
    continent: "Europe"
  }, {
    code: "FI",
    name: "Finland",
    continent: "Europe"
  }, {
    code: "FR",
    name: "France",
    continent: "Europe"
  }, {
    code: "GB",
    name: "United Kingdom",
    continent: "Europe"
  }, {
    code: "GI",
    name: "Gibraltar",
    continent: "Europe"
  }, {
    code: "GR",
    name: "Greece",
    continent: "Europe"
  }, {
    code: "HK",
    name: "Hong Kong",
    continent: "Asia Pacific"
  }, {
    code: "HR",
    name: "Croatia",
    continent: "Europe"
  }, {
    code: "HU",
    name: "Hungary",
    continent: "Europe"
  }, {
    code: "IE",
    name: "Ireland",
    continent: "Europe"
  }, {
    code: "IS",
    name: "Iceland",
    continent: "Europe"
  }, {
    code: "IT",
    name: "Italy",
    continent: "Europe"
  }, {
    code: "JP",
    name: "Japan",
    continent: "Asia Pacific"
  }, {
    code: "LI",
    name: "Liechtenstein",
    continent: "Europe"
  }, {
    code: "LT",
    name: "Lithuania",
    continent: "Europe"
  }, {
    code: "LU",
    name: "Luxembourg",
    continent: "Europe"
  }, {
    code: "LV",
    name: "Latvia",
    continent: "Europe"
  }, {
    code: "MA",
    name: "Morocco",
    continent: "Africa"
  }, {
    code: "MT",
    name: "Malta",
    continent: "Europe"
  }, {
    code: "MX",
    name: "Mexico",
    continent: "Latin America"
  }, {
    code: "MY",
    name: "Malaysia",
    continent: "Asia Pacific"
  }, {
    code: "NL",
    name: "Netherlands",
    continent: "Europe"
  }, {
    code: "NO",
    name: "Norway",
    continent: "Europe"
  }, {
    code: "NZ",
    name: "New Zealand",
    continent: "Asia Pacific"
  }, {
    code: "PL",
    name: "Poland",
    continent: "Europe"
  }, {
    code: "PR",
    name: "Puerto Rico",
    continent: "Latin America"
  }, {
    code: "PT",
    name: "Portugal",
    continent: "Europe"
  }, {
    code: "RO",
    name: "Romania",
    continent: "Europe"
  }, {
    code: "SE",
    name: "Sweden",
    continent: "Europe"
  }, {
    code: "SG",
    name: "Singapore",
    continent: "Asia Pacific"
  }, {
    code: "SI",
    name: "Slovenia",
    continent: "Europe"
  }, {
    code: "SK",
    name: "Slovakia",
    continent: "Europe"
  }, {
    code: "TH",
    name: "Thailand",
    continent: "Asia Pacific"
  }, {
    code: "US",
    name: "United States",
    continent: "North America"
  }, {
    code: "ZA",
    name: "South Africa",
    continent: "Africa"
  }]
}, {
  slug: "grabpay",
  name: "GrabPay",
  href: "/docs/orchestration/payment-methods/grabpay",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "MY",
    name: "Malaysia",
    continent: "Asia Pacific"
  }, {
    code: "PH",
    name: "Philippines",
    continent: "Asia Pacific"
  }]
}, {
  slug: "ideal",
  name: "iDEAL",
  href: "/docs/orchestration/payment-methods/ideal",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: true,
    instantCapture: true,
    cancelVoid: true,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "NL",
    name: "Netherlands",
    continent: "Europe"
  }]
}, {
  slug: "pix",
  name: "Pix",
  href: "/docs/orchestration/payment-methods/pix",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: false,
    cancelVoid: true,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "BR",
    name: "Brazil",
    continent: "Latin America"
  }]
}, {
  slug: "pix-automatico",
  name: "Pix Automático",
  href: "/docs/orchestration/payment-methods/pix-automatico",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: true,
    mit: true,
    interoperability: false
  },
  countries: [{
    code: "BR",
    name: "Brazil",
    continent: "Latin America"
  }],
  merchantCountries: [{
    code: "BR",
    name: "Brazil",
    continent: "Latin America"
  }]
}, {
  slug: "jazzcash",
  name: "JazzCash",
  href: "/docs/orchestration/payment-methods/jazzcash",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "PK",
    name: "Pakistan",
    continent: "Asia Pacific"
  }]
}, {
  slug: "kakaopay",
  name: "KakaoPay",
  href: "/docs/orchestration/payment-methods/kakaopay",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: true,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "GB",
    name: "United Kingdom",
    continent: "Europe"
  }, {
    code: "HK",
    name: "Hong Kong",
    continent: "Asia Pacific"
  }, {
    code: "KR",
    name: "South Korea",
    continent: "Asia Pacific"
  }, {
    code: "SG",
    name: "Singapore (Beta)",
    continent: "Asia Pacific"
  }]
}, {
  slug: "klarna",
  name: "Klarna",
  href: "/docs/orchestration/payment-methods/klarna",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "AT",
    name: "Austria",
    continent: "Europe"
  }, {
    code: "AU",
    name: "Australia",
    continent: "Asia Pacific"
  }, {
    code: "BE",
    name: "Belgium",
    continent: "Europe"
  }, {
    code: "CA",
    name: "Canada",
    continent: "North America"
  }, {
    code: "CH",
    name: "Switzerland",
    continent: "Europe"
  }, {
    code: "CZ",
    name: "Czech Republic",
    continent: "Europe"
  }, {
    code: "DE",
    name: "Germany",
    continent: "Europe"
  }, {
    code: "DK",
    name: "Denmark",
    continent: "Europe"
  }, {
    code: "ES",
    name: "Spain",
    continent: "Europe"
  }, {
    code: "FI",
    name: "Finland",
    continent: "Europe"
  }, {
    code: "FR",
    name: "France",
    continent: "Europe"
  }, {
    code: "GB",
    name: "United Kingdom",
    continent: "Europe"
  }, {
    code: "GR",
    name: "Greece",
    continent: "Europe"
  }, {
    code: "IE",
    name: "Ireland",
    continent: "Europe"
  }, {
    code: "IT",
    name: "Italy",
    continent: "Europe"
  }, {
    code: "NL",
    name: "Netherlands",
    continent: "Europe"
  }, {
    code: "NO",
    name: "Norway",
    continent: "Europe"
  }, {
    code: "NZ",
    name: "New Zealand",
    continent: "Asia Pacific"
  }, {
    code: "PL",
    name: "Poland",
    continent: "Europe"
  }, {
    code: "PT",
    name: "Portugal",
    continent: "Europe"
  }, {
    code: "SE",
    name: "Sweden",
    continent: "Europe"
  }, {
    code: "US",
    name: "United States",
    continent: "North America"
  }]
}, {
  slug: "konbini",
  name: "Konbini",
  href: "/docs/orchestration/payment-methods/konbini",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "JP",
    name: "Japan",
    continent: "Asia Pacific"
  }]
}, {
  slug: "konnect",
  name: "Konnect",
  href: "/docs/orchestration/payment-methods/konnect",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "PK",
    name: "Pakistan",
    continent: "Asia Pacific"
  }]
}, {
  slug: "korean-local-cards",
  name: "Korean Local Cards",
  href: "/docs/orchestration/payment-methods/korean-local-cards",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: true,
    mit: true,
    interoperability: false
  },
  countries: [{
    code: "KR",
    name: "South Korea",
    continent: "Asia Pacific"
  }]
}, {
  slug: "maya",
  name: "Maya",
  href: "/docs/orchestration/payment-methods/maya",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "PH",
    name: "Philippines",
    continent: "Asia Pacific"
  }]
}, {
  slug: "mb-way",
  name: "MB Way",
  href: "/docs/orchestration/payment-methods/mb-way",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "PT",
    name: "Portugal",
    continent: "Europe"
  }]
}, {
  slug: "mercadopago-psp",
  hidden: true,
  name: "Mercado Pago",
  href: "/docs/orchestration/payment-methods/mercadopago-psp",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: true,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "AR",
    name: "Argentina",
    continent: "Latin America"
  }, {
    code: "BR",
    name: "Brazil",
    continent: "Latin America"
  }, {
    code: "CL",
    name: "Chile",
    continent: "Latin America"
  }, {
    code: "CO",
    name: "Colombia",
    continent: "Latin America"
  }, {
    code: "MX",
    name: "Mexico",
    continent: "Latin America"
  }, {
    code: "PE",
    name: "Peru",
    continent: "Latin America"
  }, {
    code: "UY",
    name: "Uruguay",
    continent: "Latin America"
  }]
}, {
  slug: "mercadopago",
  name: "Mercado Pago",
  href: "/docs/orchestration/payment-methods/mercadopago",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: true,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "AR",
    name: "Argentina",
    continent: "Latin America"
  }, {
    code: "BR",
    name: "Brazil",
    continent: "Latin America"
  }, {
    code: "CL",
    name: "Chile",
    continent: "Latin America"
  }, {
    code: "CO",
    name: "Colombia",
    continent: "Latin America"
  }, {
    code: "MX",
    name: "Mexico",
    continent: "Latin America"
  }, {
    code: "PE",
    name: "Peru",
    continent: "Latin America"
  }, {
    code: "UY",
    name: "Uruguay",
    continent: "Latin America"
  }]
}, {
  slug: "mobile-wallets",
  name: "Mobile Wallets",
  href: "/docs/orchestration/payment-methods/mobile-wallets",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: true,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "KE",
    name: "Kenya",
    continent: "Africa"
  }]
}, {
  slug: "mobilepay",
  name: "MobilePay",
  href: "/docs/orchestration/payment-methods/mobilepay",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "DK",
    name: "Denmark",
    continent: "Europe"
  }, {
    code: "FI",
    name: "Finland",
    continent: "Europe"
  }]
}, {
  slug: "momo",
  name: "MoMo",
  href: "/docs/orchestration/payment-methods/momo",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "VN",
    name: "Vietnam",
    continent: "Asia Pacific"
  }]
}, {
  slug: "mono",
  name: "Mono",
  href: "/docs/orchestration/payment-methods/mono",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "NG",
    name: "Nigeria",
    continent: "Africa"
  }]
}, {
  slug: "multibanco",
  name: "Multibanco",
  href: "/docs/orchestration/payment-methods/multibanco",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "PT",
    name: "Portugal",
    continent: "Europe"
  }]
}, {
  slug: "napas",
  name: "Napas",
  href: "/docs/orchestration/payment-methods/napas",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "VN",
    name: "Vietnam",
    continent: "Asia Pacific"
  }]
}, {
  slug: "nequi",
  name: "Nequi",
  href: "/docs/orchestration/payment-methods/nequi",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "CO",
    name: "Colombia",
    continent: "Latin America"
  }]
}, {
  slug: "netbanking",
  name: "NetBanking",
  href: "/docs/orchestration/payment-methods/netbanking",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: true,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "IN",
    name: "India",
    continent: "Asia Pacific"
  }]
}, {
  slug: "nibss",
  name: "Nigeria Inter-Bank Settlement System (NIBSS)",
  href: "/docs/orchestration/payment-methods/nibss",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: true,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "NG",
    name: "Nigeria",
    continent: "Africa"
  }]
}, {
  slug: "opay",
  name: "Opay",
  href: "/docs/orchestration/payment-methods/opay",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "EG",
    name: "Egypt",
    continent: "Africa"
  }, {
    code: "NG",
    name: "Nigeria",
    continent: "Africa"
  }]
}, {
  slug: "ovo",
  name: "OVO",
  href: "/docs/orchestration/payment-methods/ovo",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "ID",
    name: "Indonesia",
    continent: "Asia Pacific"
  }],
  merchantCountries: [{
    code: "ID",
    name: "Indonesia",
    continent: "Asia Pacific"
  }]
}, {
  slug: "oxxo",
  name: "OXXO",
  href: "/docs/orchestration/payment-methods/oxxo",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "MX",
    name: "Mexico",
    continent: "Latin America"
  }],
  merchantCountries: [{
    code: "MX",
    name: "Mexico",
    continent: "Latin America"
  }]
}, {
  slug: "paga-wallet",
  name: "Paga Wallet",
  href: "/docs/orchestration/payment-methods/paga-wallet",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: true,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "NG",
    name: "Nigeria",
    continent: "Africa"
  }]
}, {
  slug: "pagoefectivo",
  name: "PagoEfectivo",
  href: "/docs/orchestration/payment-methods/pagoefectivo",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "PE",
    name: "Peru",
    continent: "Latin America"
  }],
  merchantCountries: [{
    code: "PE",
    name: "Peru",
    continent: "Latin America"
  }]
}, {
  slug: "payco",
  name: "PAYCO",
  href: "/docs/orchestration/payment-methods/payco",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "KR",
    name: "South Korea",
    continent: "Asia Pacific"
  }],
  merchantCountries: [{
    code: "AT",
    name: "Austria",
    continent: "Europe"
  }, {
    code: "BE",
    name: "Belgium",
    continent: "Europe"
  }, {
    code: "CY",
    name: "Cyprus",
    continent: "Europe"
  }, {
    code: "DE",
    name: "Germany",
    continent: "Europe"
  }, {
    code: "DK",
    name: "Denmark",
    continent: "Europe"
  }, {
    code: "EE",
    name: "Estonia",
    continent: "Europe"
  }, {
    code: "ES",
    name: "Spain",
    continent: "Europe"
  }, {
    code: "FI",
    name: "Finland",
    continent: "Europe"
  }, {
    code: "FR",
    name: "France",
    continent: "Europe"
  }, {
    code: "GB",
    name: "United Kingdom",
    continent: "Europe"
  }, {
    code: "GR",
    name: "Greece",
    continent: "Europe"
  }, {
    code: "HK",
    name: "Hong Kong",
    continent: "Asia Pacific"
  }, {
    code: "HR",
    name: "Croatia",
    continent: "Europe"
  }, {
    code: "HU",
    name: "Hungary",
    continent: "Europe"
  }, {
    code: "IE",
    name: "Ireland",
    continent: "Europe"
  }, {
    code: "IT",
    name: "Italy",
    continent: "Europe"
  }, {
    code: "JP",
    name: "Japan",
    continent: "Asia Pacific"
  }, {
    code: "LT",
    name: "Lithuania",
    continent: "Europe"
  }, {
    code: "LU",
    name: "Luxembourg",
    continent: "Europe"
  }, {
    code: "LV",
    name: "Latvia",
    continent: "Europe"
  }, {
    code: "MT",
    name: "Malta",
    continent: "Europe"
  }, {
    code: "NL",
    name: "Netherlands",
    continent: "Europe"
  }, {
    code: "PT",
    name: "Portugal",
    continent: "Europe"
  }, {
    code: "SE",
    name: "Sweden",
    continent: "Europe"
  }, {
    code: "SG",
    name: "Singapore",
    continent: "Asia Pacific"
  }, {
    code: "SI",
    name: "Slovenia",
    continent: "Europe"
  }, {
    code: "SK",
    name: "Slovakia",
    continent: "Europe"
  }, {
    code: "US",
    name: "United States",
    continent: "North America"
  }]
}, {
  slug: "payflex-psp",
  hidden: true,
  name: "Payflex",
  href: "/docs/orchestration/payment-methods/payflex-psp",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "ZA",
    name: "South Africa",
    continent: "Africa"
  }]
}, {
  slug: "payflex",
  name: "Payflex",
  href: "/docs/orchestration/payment-methods/payflex",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "ZA",
    name: "South Africa",
    continent: "Africa"
  }]
}, {
  slug: "payjustnow-psp",
  hidden: true,
  name: "PayJustNow",
  href: "/docs/orchestration/payment-methods/payjustnow-psp",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "ZA",
    name: "South Africa",
    continent: "Africa"
  }]
}, {
  slug: "payjustnow",
  name: "PayJustNow",
  href: "/docs/orchestration/payment-methods/payjustnow",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "ZA",
    name: "South Africa",
    continent: "Africa"
  }]
}, {
  slug: "paypal",
  name: "PayPal",
  href: "/docs/orchestration/payment-methods/paypal",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: true,
    refund: true,
    saveInstruments: true,
    mit: true,
    interoperability: "PSP tokens"
  },
  countries: [{
    code: "AD",
    name: "Andorra",
    continent: "Europe"
  }, {
    code: "AE",
    name: "United Arab Emirates",
    continent: "Middle East"
  }, {
    code: "AG",
    name: "Antigua and Barbuda",
    continent: "Latin America"
  }, {
    code: "AI",
    name: "Anguilla",
    continent: "Latin America"
  }, {
    code: "AL",
    name: "Albania",
    continent: "Europe"
  }, {
    code: "AM",
    name: "Armenia",
    continent: "Middle East"
  }, {
    code: "AO",
    name: "Angola",
    continent: "Africa"
  }, {
    code: "AR",
    name: "Argentina",
    continent: "Latin America"
  }, {
    code: "AT",
    name: "Austria",
    continent: "Europe"
  }, {
    code: "AU",
    name: "Australia",
    continent: "Asia Pacific"
  }, {
    code: "AW",
    name: "Aruba",
    continent: "Latin America"
  }, {
    code: "AZ",
    name: "Azerbaijan",
    continent: "Middle East"
  }, {
    code: "BA",
    name: "Bosnia and Herzegovina",
    continent: "Europe"
  }, {
    code: "BB",
    name: "Barbados",
    continent: "Latin America"
  }, {
    code: "BE",
    name: "Belgium",
    continent: "Europe"
  }, {
    code: "BF",
    name: "Burkina Faso",
    continent: "Africa"
  }, {
    code: "BG",
    name: "Bulgaria",
    continent: "Europe"
  }, {
    code: "BH",
    name: "Bahrain",
    continent: "Middle East"
  }, {
    code: "BI",
    name: "Burundi",
    continent: "Africa"
  }, {
    code: "BJ",
    name: "Benin",
    continent: "Africa"
  }, {
    code: "BM",
    name: "Bermuda",
    continent: "North America"
  }, {
    code: "BN",
    name: "Brunei",
    continent: "Asia Pacific"
  }, {
    code: "BO",
    name: "Bolivia",
    continent: "Latin America"
  }, {
    code: "BR",
    name: "Brazil",
    continent: "Latin America"
  }, {
    code: "BS",
    name: "Bahamas",
    continent: "Latin America"
  }, {
    code: "BT",
    name: "Bhutan",
    continent: "Asia Pacific"
  }, {
    code: "BW",
    name: "Botswana",
    continent: "Africa"
  }, {
    code: "BY",
    name: "Belarus",
    continent: "Europe"
  }, {
    code: "BZ",
    name: "Belize",
    continent: "Latin America"
  }, {
    code: "CA",
    name: "Canada",
    continent: "North America"
  }, {
    code: "CD",
    name: "DR Congo",
    continent: "Africa"
  }, {
    code: "CG",
    name: "Congo",
    continent: "Africa"
  }, {
    code: "CH",
    name: "Switzerland",
    continent: "Europe"
  }, {
    code: "CI",
    name: "Ivory Coast",
    continent: "Africa"
  }, {
    code: "CK",
    name: "Cook Islands",
    continent: "Asia Pacific"
  }, {
    code: "CL",
    name: "Chile",
    continent: "Latin America"
  }, {
    code: "CM",
    name: "Cameroon",
    continent: "Africa"
  }, {
    code: "CN",
    name: "China",
    continent: "Asia Pacific"
  }, {
    code: "CO",
    name: "Colombia",
    continent: "Latin America"
  }, {
    code: "CR",
    name: "Costa Rica",
    continent: "Latin America"
  }, {
    code: "CV",
    name: "Cape Verde",
    continent: "Africa"
  }, {
    code: "CY",
    name: "Cyprus",
    continent: "Europe"
  }, {
    code: "CZ",
    name: "Czech Republic",
    continent: "Europe"
  }, {
    code: "DE",
    name: "Germany",
    continent: "Europe"
  }, {
    code: "DJ",
    name: "Djibouti",
    continent: "Africa"
  }, {
    code: "DK",
    name: "Denmark",
    continent: "Europe"
  }, {
    code: "DM",
    name: "Dominica",
    continent: "Latin America"
  }, {
    code: "DO",
    name: "Dominican Republic",
    continent: "Latin America"
  }, {
    code: "DZ",
    name: "Algeria",
    continent: "Africa"
  }, {
    code: "EC",
    name: "Ecuador",
    continent: "Latin America"
  }, {
    code: "EE",
    name: "Estonia",
    continent: "Europe"
  }, {
    code: "EG",
    name: "Egypt",
    continent: "Africa"
  }, {
    code: "ER",
    name: "Eritrea",
    continent: "Africa"
  }, {
    code: "ES",
    name: "Spain",
    continent: "Europe"
  }, {
    code: "ET",
    name: "Ethiopia",
    continent: "Africa"
  }, {
    code: "FI",
    name: "Finland",
    continent: "Europe"
  }, {
    code: "FJ",
    name: "Fiji",
    continent: "Asia Pacific"
  }, {
    code: "FK",
    name: "Falkland Islands",
    continent: "Latin America"
  }, {
    code: "FM",
    name: "Micronesia",
    continent: "Asia Pacific"
  }, {
    code: "FO",
    name: "Faroe Islands",
    continent: "Europe"
  }, {
    code: "FR",
    name: "France",
    continent: "Europe"
  }, {
    code: "GA",
    name: "Gabon",
    continent: "Africa"
  }, {
    code: "GB",
    name: "United Kingdom",
    continent: "Europe"
  }, {
    code: "GD",
    name: "Grenada",
    continent: "Latin America"
  }, {
    code: "GE",
    name: "Georgia",
    continent: "Middle East"
  }, {
    code: "GL",
    name: "Greenland",
    continent: "North America"
  }, {
    code: "GM",
    name: "Gambia",
    continent: "Africa"
  }, {
    code: "GN",
    name: "Guinea",
    continent: "Africa"
  }, {
    code: "GR",
    name: "Greece",
    continent: "Europe"
  }, {
    code: "GT",
    name: "Guatemala",
    continent: "Latin America"
  }, {
    code: "GW",
    name: "Guinea-Bissau",
    continent: "Africa"
  }, {
    code: "GY",
    name: "Guyana",
    continent: "Latin America"
  }, {
    code: "HK",
    name: "Hong Kong",
    continent: "Asia Pacific"
  }, {
    code: "HN",
    name: "Honduras",
    continent: "Latin America"
  }, {
    code: "HR",
    name: "Croatia",
    continent: "Europe"
  }, {
    code: "HU",
    name: "Hungary",
    continent: "Europe"
  }, {
    code: "ID",
    name: "Indonesia",
    continent: "Asia Pacific"
  }, {
    code: "IE",
    name: "Ireland",
    continent: "Europe"
  }, {
    code: "IL",
    name: "Israel",
    continent: "Middle East"
  }, {
    code: "IN",
    name: "India",
    continent: "Asia Pacific"
  }, {
    code: "IS",
    name: "Iceland",
    continent: "Europe"
  }, {
    code: "IT",
    name: "Italy",
    continent: "Europe"
  }, {
    code: "JM",
    name: "Jamaica",
    continent: "Latin America"
  }, {
    code: "JO",
    name: "Jordan",
    continent: "Middle East"
  }, {
    code: "JP",
    name: "Japan",
    continent: "Asia Pacific"
  }, {
    code: "KE",
    name: "Kenya",
    continent: "Africa"
  }, {
    code: "KG",
    name: "Kyrgyzstan",
    continent: "Asia Pacific"
  }, {
    code: "KH",
    name: "Cambodia",
    continent: "Asia Pacific"
  }, {
    code: "KI",
    name: "Kiribati",
    continent: "Asia Pacific"
  }, {
    code: "KM",
    name: "Comoros",
    continent: "Africa"
  }, {
    code: "KR",
    name: "South Korea",
    continent: "Asia Pacific"
  }, {
    code: "KW",
    name: "Kuwait",
    continent: "Middle East"
  }, {
    code: "KY",
    name: "Cayman Islands",
    continent: "Latin America"
  }, {
    code: "KZ",
    name: "Kazakhstan",
    continent: "Asia Pacific"
  }, {
    code: "LA",
    name: "Laos",
    continent: "Asia Pacific"
  }, {
    code: "LC",
    name: "St Lucia",
    continent: "Latin America"
  }, {
    code: "LI",
    name: "Liechtenstein",
    continent: "Europe"
  }, {
    code: "LK",
    name: "Sri Lanka",
    continent: "Asia Pacific"
  }, {
    code: "LS",
    name: "Lesotho",
    continent: "Africa"
  }, {
    code: "LT",
    name: "Lithuania",
    continent: "Europe"
  }, {
    code: "LU",
    name: "Luxembourg",
    continent: "Europe"
  }, {
    code: "LV",
    name: "Latvia",
    continent: "Europe"
  }, {
    code: "MA",
    name: "Morocco",
    continent: "Africa"
  }, {
    code: "MC",
    name: "Monaco",
    continent: "Europe"
  }, {
    code: "MD",
    name: "Moldova",
    continent: "Europe"
  }, {
    code: "ME",
    name: "Montenegro",
    continent: "Europe"
  }, {
    code: "MG",
    name: "Madagascar",
    continent: "Africa"
  }, {
    code: "MH",
    name: "Marshall Islands",
    continent: "Asia Pacific"
  }, {
    code: "MK",
    name: "North Macedonia",
    continent: "Europe"
  }, {
    code: "ML",
    name: "Mali",
    continent: "Africa"
  }, {
    code: "MN",
    name: "Mongolia",
    continent: "Asia Pacific"
  }, {
    code: "MR",
    name: "Mauritania",
    continent: "Africa"
  }, {
    code: "MS",
    name: "Montserrat",
    continent: "Latin America"
  }, {
    code: "MT",
    name: "Malta",
    continent: "Europe"
  }, {
    code: "MU",
    name: "Mauritius",
    continent: "Africa"
  }, {
    code: "MV",
    name: "Maldives",
    continent: "Asia Pacific"
  }, {
    code: "MW",
    name: "Malawi",
    continent: "Africa"
  }, {
    code: "MX",
    name: "Mexico",
    continent: "Latin America"
  }, {
    code: "MY",
    name: "Malaysia",
    continent: "Asia Pacific"
  }, {
    code: "MZ",
    name: "Mozambique",
    continent: "Africa"
  }, {
    code: "NA",
    name: "Namibia",
    continent: "Africa"
  }, {
    code: "NC",
    name: "New Caledonia",
    continent: "Asia Pacific"
  }, {
    code: "NE",
    name: "Niger",
    continent: "Africa"
  }, {
    code: "NF",
    name: "Norfolk Islands",
    continent: "Asia Pacific"
  }, {
    code: "NG",
    name: "Nigeria",
    continent: "Africa"
  }, {
    code: "NI",
    name: "Nicaragua",
    continent: "Latin America"
  }, {
    code: "NL",
    name: "Netherlands",
    continent: "Europe"
  }, {
    code: "NO",
    name: "Norway",
    continent: "Europe"
  }, {
    code: "NP",
    name: "Nepal",
    continent: "Asia Pacific"
  }, {
    code: "NR",
    name: "Nauru",
    continent: "Asia Pacific"
  }, {
    code: "NU",
    name: "Niue",
    continent: "Asia Pacific"
  }, {
    code: "NZ",
    name: "New Zealand",
    continent: "Asia Pacific"
  }, {
    code: "OM",
    name: "Oman",
    continent: "Middle East"
  }, {
    code: "PA",
    name: "Panama",
    continent: "Latin America"
  }, {
    code: "PE",
    name: "Peru",
    continent: "Latin America"
  }, {
    code: "PF",
    name: "French Polynesia",
    continent: "Asia Pacific"
  }, {
    code: "PG",
    name: "Papua New Guinea",
    continent: "Asia Pacific"
  }, {
    code: "PH",
    name: "Philippines",
    continent: "Asia Pacific"
  }, {
    code: "PL",
    name: "Poland",
    continent: "Europe"
  }, {
    code: "PN",
    name: "Pitcairn Islands",
    continent: "Asia Pacific"
  }, {
    code: "PT",
    name: "Portugal",
    continent: "Europe"
  }, {
    code: "PW",
    name: "Palau",
    continent: "Asia Pacific"
  }, {
    code: "PY",
    name: "Paraguay",
    continent: "Latin America"
  }, {
    code: "QA",
    name: "Qatar",
    continent: "Middle East"
  }, {
    code: "RO",
    name: "Romania",
    continent: "Europe"
  }, {
    code: "RS",
    name: "Serbia",
    continent: "Europe"
  }, {
    code: "RU",
    name: "Russia",
    continent: "Europe"
  }, {
    code: "RW",
    name: "Rwanda",
    continent: "Africa"
  }, {
    code: "SA",
    name: "Saudi Arabia",
    continent: "Middle East"
  }, {
    code: "SB",
    name: "Solomon Islands",
    continent: "Asia Pacific"
  }, {
    code: "SC",
    name: "Seychelles",
    continent: "Africa"
  }, {
    code: "SE",
    name: "Sweden",
    continent: "Europe"
  }, {
    code: "SG",
    name: "Singapore",
    continent: "Asia Pacific"
  }, {
    code: "SH",
    name: "St Helena",
    continent: "Africa"
  }, {
    code: "SI",
    name: "Slovenia",
    continent: "Europe"
  }, {
    code: "SK",
    name: "Slovakia",
    continent: "Europe"
  }, {
    code: "SL",
    name: "Sierra Leone",
    continent: "Africa"
  }, {
    code: "SM",
    name: "San Marino",
    continent: "Europe"
  }, {
    code: "SN",
    name: "Senegal",
    continent: "Africa"
  }, {
    code: "SO",
    name: "Somalia",
    continent: "Africa"
  }, {
    code: "SR",
    name: "Suriname",
    continent: "Latin America"
  }, {
    code: "ST",
    name: "Sao Tome and Principe",
    continent: "Africa"
  }, {
    code: "SV",
    name: "El Salvador",
    continent: "Latin America"
  }, {
    code: "SZ",
    name: "Eswatini",
    continent: "Africa"
  }, {
    code: "TC",
    name: "Turks and Caicos",
    continent: "Latin America"
  }, {
    code: "TD",
    name: "Chad",
    continent: "Africa"
  }, {
    code: "TG",
    name: "Togo",
    continent: "Africa"
  }, {
    code: "TH",
    name: "Thailand",
    continent: "Asia Pacific"
  }, {
    code: "TJ",
    name: "Tajikistan",
    continent: "Asia Pacific"
  }, {
    code: "TM",
    name: "Turkmenistan",
    continent: "Asia Pacific"
  }, {
    code: "TN",
    name: "Tunisia",
    continent: "Africa"
  }, {
    code: "TO",
    name: "Tonga",
    continent: "Asia Pacific"
  }, {
    code: "TV",
    name: "Tuvalu",
    continent: "Asia Pacific"
  }, {
    code: "TW",
    name: "Taiwan",
    continent: "Asia Pacific"
  }, {
    code: "TZ",
    name: "Tanzania",
    continent: "Africa"
  }, {
    code: "UA",
    name: "Ukraine",
    continent: "Europe"
  }, {
    code: "UG",
    name: "Uganda",
    continent: "Africa"
  }, {
    code: "US",
    name: "United States",
    continent: "North America"
  }, {
    code: "UY",
    name: "Uruguay",
    continent: "Latin America"
  }, {
    code: "VA",
    name: "Vatican City",
    continent: "Europe"
  }, {
    code: "VE",
    name: "Venezuela",
    continent: "Latin America"
  }, {
    code: "VG",
    name: "British Virgin Islands",
    continent: "Latin America"
  }, {
    code: "VN",
    name: "Vietnam",
    continent: "Asia Pacific"
  }, {
    code: "VU",
    name: "Vanuatu",
    continent: "Asia Pacific"
  }, {
    code: "WS",
    name: "Samoa",
    continent: "Asia Pacific"
  }, {
    code: "YE",
    name: "Yemen",
    continent: "Middle East"
  }, {
    code: "ZA",
    name: "South Africa",
    continent: "Africa"
  }, {
    code: "ZM",
    name: "Zambia",
    continent: "Africa"
  }, {
    code: "ZW",
    name: "Zimbabwe",
    continent: "Africa"
  }]
}, {
  slug: "paytm",
  name: "PayTM",
  href: "/docs/orchestration/payment-methods/paytm",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: true,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "IN",
    name: "India",
    continent: "Asia Pacific"
  }]
}, {
  slug: "picpay",
  name: "PicPay",
  href: "/docs/orchestration/payment-methods/picpay",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "BR",
    name: "Brazil",
    continent: "Latin America"
  }],
  merchantCountries: [{
    code: "BR",
    name: "Brazil",
    continent: "Latin America"
  }]
}, {
  slug: "promptpay",
  name: "PromptPay",
  href: "/docs/orchestration/payment-methods/promptpay",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "TH",
    name: "Thailand",
    continent: "Asia Pacific"
  }],
  merchantCountries: [{
    code: "TH",
    name: "Thailand",
    continent: "Asia Pacific"
  }]
}, {
  slug: "pse",
  name: "PSE",
  href: "/docs/orchestration/payment-methods/pse",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "CO",
    name: "Colombia",
    continent: "Latin America"
  }],
  merchantCountries: [{
    code: "CO",
    name: "Colombia",
    continent: "Latin America"
  }]
}, {
  slug: "qris",
  name: "QRIS",
  href: "/docs/orchestration/payment-methods/qris",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "ID",
    name: "Indonesia",
    continent: "Asia Pacific"
  }],
  merchantCountries: [{
    code: "ID",
    name: "Indonesia",
    continent: "Asia Pacific"
  }]
}, {
  slug: "shopeepay",
  name: "ShopeePay",
  href: "/docs/orchestration/payment-methods/shopeepay",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "ID",
    name: "Indonesia",
    continent: "Asia Pacific"
  }, {
    code: "PH",
    name: "Philippines",
    continent: "Asia Pacific"
  }, {
    code: "TH",
    name: "Thailand",
    continent: "Asia Pacific"
  }],
  merchantCountries: [{
    code: "ID",
    name: "Indonesia",
    continent: "Asia Pacific"
  }, {
    code: "PH",
    name: "Philippines",
    continent: "Asia Pacific"
  }, {
    code: "TH",
    name: "Thailand",
    continent: "Asia Pacific"
  }]
}, {
  slug: "spei",
  name: "SPEI",
  href: "/docs/orchestration/payment-methods/spei",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "MX",
    name: "Mexico",
    continent: "Latin America"
  }],
  merchantCountries: [{
    code: "MX",
    name: "Mexico",
    continent: "Latin America"
  }]
}, {
  slug: "thunes",
  hidden: true,
  name: "Thunes",
  href: "/docs/orchestration/payment-methods/thunes",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "PK",
    name: "Pakistan",
    continent: "Asia Pacific"
  }]
}, {
  slug: "touch-n-go",
  name: "Touch 'n Go",
  href: "/docs/orchestration/payment-methods/touch-n-go",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "MY",
    name: "Malaysia",
    continent: "Asia Pacific"
  }],
  merchantCountries: [{
    code: "MY",
    name: "Malaysia",
    continent: "Asia Pacific"
  }]
}, {
  slug: "truemoney",
  name: "TrueMoney",
  href: "/docs/orchestration/payment-methods/truemoney",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "TH",
    name: "Thailand",
    continent: "Asia Pacific"
  }],
  merchantCountries: [{
    code: "TH",
    name: "Thailand",
    continent: "Asia Pacific"
  }]
}, {
  slug: "upi",
  name: "UPI",
  href: "/docs/orchestration/payment-methods/upi",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: true,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "IN",
    name: "India",
    continent: "Asia Pacific"
  }]
}, {
  slug: "vietqr",
  name: "VietQR",
  href: "/docs/orchestration/payment-methods/vietqr",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: true,
    cancelVoid: false,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "VN",
    name: "Vietnam",
    continent: "Asia Pacific"
  }],
  merchantCountries: [{
    code: "VN",
    name: "Vietnam",
    continent: "Asia Pacific"
  }]
}, {
  slug: "wafacash",
  name: "WafaCash",
  href: "/docs/orchestration/payment-methods/wafacash",
  workflows: {
    sdk: true,
    api: true,
    delayedCapture: false,
    instantCapture: false,
    cancelVoid: true,
    refund: true,
    saveInstruments: false,
    mit: false,
    interoperability: false
  },
  countries: [{
    code: "MA",
    name: "Morocco",
    continent: "Africa"
  }]
}];

export const method = paymentMethods.find(m => m.slug === "apple-pay");

## Introduction

Apple Pay is a mobile payment and digital wallet service that enables customers to pay quickly and securely using their iPhone, iPad, Apple Watch, or Mac — without manually entering payment details.

Payrails supports Apple Pay across both mobile and web, and can route transactions to any supported Payment Service Provider (PSP). This guide walks you through the steps to get Apple Pay set up and accepting payments with Payrails.

The below diagram illustrates at a high level how Payrails processes Apple Pay transactions on your behalf

<Tabs>
  <Tab title="Payrails SDK">
    <img src="https://mintcdn.com/payrails-42074109/sujy1gNo9mr-Fy-6/images/docs/orchestration/payment-methods/apple-pay-workflow-sdk.svg?fit=max&auto=format&n=sujy1gNo9mr-Fy-6&q=85&s=958a195ce1f9868abddb65612b5c8822" alt="Apple Pay payment flow using the Payrails SDK" className="mx-auto block rounded-lg object-cover" width="80%" data-path="images/docs/orchestration/payment-methods/apple-pay-workflow-sdk.svg" />
  </Tab>

  <Tab title="Server to Server">
    <img src="https://mintcdn.com/payrails-42074109/sujy1gNo9mr-Fy-6/images/docs/orchestration/payment-methods/apple-pay-workflow-server-to-server.png?fit=max&auto=format&n=sujy1gNo9mr-Fy-6&q=85&s=0dff65a3f7a125f0d9273389cce72862" alt="Apple Pay server-to-server integration flow with Payrails APIs" className="mx-auto block rounded-lg object-cover" width="80%" data-path="images/docs/orchestration/payment-methods/apple-pay-workflow-server-to-server.png" />
  </Tab>

  <Tab title="Self decrypted">
    <img src="https://mintcdn.com/payrails-42074109/sujy1gNo9mr-Fy-6/images/docs/orchestration/payment-methods/apple-pay-workflow-self-decrypted.png?fit=max&auto=format&n=sujy1gNo9mr-Fy-6&q=85&s=dc62ba0ef5c8733b652949bc61603be6" alt="Apple Pay self-decrypted token flow with Payrails" className="mx-auto block rounded-lg object-cover" width="80%" data-path="images/docs/orchestration/payment-methods/apple-pay-workflow-self-decrypted.png" />
  </Tab>
</Tabs>

## Choose your Integration

Payrails offers multiple integration approaches for Apple Pay, each with different tradeoffs between customization and ease of implementation.

| Approach | Description |
| - | - |
| **Drop-in** | The fastest way to get started. Payrails renders the Apple Pay button and handles the entire payment flow. No additional frontend code required. |
| **Elements** | Use the Payrails Apple Pay Element for more control over button placement and styling while keeping payment processing handled by Payrails. |
| **Server-to-server** | Full control over your client-side Apple Pay implementation. You build the Apple Pay flow using Apple's native SDKs and pass the payment token to Payrails via API. |

For a full comparison of integration approaches and help choosing the right one for your use case, refer to our [integration approach guide](/docs/token-vault/getting-started).

## Setup Apple Pay

<Tabs>
  <Tab title="Native + Web">
    You wish to accept payments on both iOS devices and Web

    1. [Register for an Apple Pay Merchant ID](#register-for-an-apple-pay-merchant-id)
    2. [Request Certificate Signing Request (CSRs)](#request-certificate-signing-requests-csrs)
    3. [Upload CSR to your Apple Developer Account](#upload-csr-to-your-apple-developer-account)
    4. [Provide your certificates](#provide-your-certificates)
    5. [Register your domain](#register-your-domain)

    ### Register for an Apple Pay Merchant ID

    Register a new Merchant ID via Apple's [Setting up Apple Pay](https://developer.apple.com/documentation/passkit/setting-up-apple-pay#Create-a-merchant-identifier) guide.

    <Note>
      We recommend creating distinct Apple Merchant IDs for Payrails production and staging environments.
    </Note>

    ***

    ### Request Certificate Signing Requests (CSRs)

    Contact your Payrails representative to initiate the certificate generation process. Payrails will generate two Certificate Signing Requests (CSRs) for you:

    * `apple_pay.csr` — Payment Processing Certificate Signing Request
    * `merchant_id.csr` — Merchant Identity Certificate Signing Request

    You will use these in the next step to generate your certificates in the Apple Developer Center.

    ***

    ### Upload CSR to your Apple Developer Account

    1. Go to the [Merchant ID list](https://developer.apple.com/account/resources/identifiers/list/merchant) in Apple's Developer Center and select the Merchant ID you registered earlier.

    2. Under the **Apple Pay Payment Processing Certificate** section, click **Create Certificate** and upload the `apple_pay.csr` file provided by Payrails. Download the generated Payment Processing Certificate.

           <img src="https://mintcdn.com/payrails-42074109/JJsQSs0AhGefZ9a9/images/docs/orchestration/payment-methods/apple-pay-create-payment-processing-certificate.png?fit=max&auto=format&n=JJsQSs0AhGefZ9a9&q=85&s=681562b3bbb9e3d3d54e98867641c0d4" alt="Create Payment Processing Certificate in the Apple Developer Center" className="mx-auto block rounded-lg object-cover" width="100%" data-path="images/docs/orchestration/payment-methods/apple-pay-create-payment-processing-certificate.png" />

    3. Go back to the same Merchant ID and under the **Apple Pay Merchant Identity Certificate** section, click **Create Certificate** and upload the `merchant_id.csr` file provided by Payrails. Download the generated Merchant Identity Certificate.

           <img src="https://mintcdn.com/payrails-42074109/JJsQSs0AhGefZ9a9/images/docs/orchestration/payment-methods/apple-pay-create-merchant-identity-certificate.png?fit=max&auto=format&n=JJsQSs0AhGefZ9a9&q=85&s=bfbde356dcd5173c53c97305c29f042f" alt="Create Merchant Identity Certificate in the Apple Developer Center" className="mx-auto block rounded-lg object-cover" width="100%" data-path="images/docs/orchestration/payment-methods/apple-pay-create-merchant-identity-certificate.png" />

    ***

    ### Decide on a Config ID

    Payrails allows you to set up multiple Apple Pay key configurations, each identified by a unique Config ID. This is useful for splitting traffic across different regions or environments — for example, routing European payments through one set of keys and US payments through another.

    Your Config ID can be a UUID or a descriptive string such as `region-eu-west` or `region-us-east`. Share your chosen Config ID with your Payrails representative when providing your certificates — it will be used to associate your Apple Pay keys and can be referenced in payment requests to select which configuration should be used for processing.

    ***

    ### Provide your Certificates

    Send both the Payment Processing Certificate and the Merchant Identity Certificate to your Payrails representative.

    Once Payrails confirms receipt, go back to the [Merchant ID list](https://developer.apple.com/account/resources/identifiers/list/merchant), select your Merchant ID, and activate the Payment Processing Certificate you just created.

    ***

    ### Register your Domain

    To process Apple Pay payments on the web, Apple requires you to verify ownership of your domain.

    1. Go to the [Merchant ID list](https://developer.apple.com/account/resources/identifiers/list/merchant) and select the Merchant ID for which you configured certificates.

    2. Under the **Merchant Domains** section, click **Add Domain** and download the domain association file.

           <img src="https://mintcdn.com/payrails-42074109/JJsQSs0AhGefZ9a9/images/docs/orchestration/payment-methods/apple-pay-download-domain-verification-file.png?fit=max&auto=format&n=JJsQSs0AhGefZ9a9&q=85&s=e8b6ef0dc1ac3881aba85f6d7e843918" alt="Download the domain association file in the Apple Developer Center" className="mx-auto block rounded-lg object-cover" width="100%" data-path="images/docs/orchestration/payment-methods/apple-pay-download-domain-verification-file.png" />

    3. Host the file on your domain at the following path: `https://<your-domain>/.well-known/apple-developer-merchantid-domain-association`

    4. Click **Verify** in the Apple Developer Center to complete domain registration.

    **We render the Apple Pay button inside an iframe — which domain should we register?**

    Apple requires domain registration to be done on the domain visible in the browser address bar, not the iframe's domain. Registering the iframe domain will cause Apple Pay payments to automatically fail.

    <Note>
      The domain association file must remain publicly accessible without redirects — Apple regularly re-verifies domains after the initial registration. This step is not required for staging environments.
    </Note>
  </Tab>

  <Tab title="Web Only">
    You only wish to accept payments on the Web without a Native iOS integration
    This setup cannot later be extended for native integrations, If you plan on accepting Apple Pay payments using the native SDK later please perform the Native + Web setup

    <Note>
      A web-only integration doesn't require your own Apple Pay Merchant ID. You will, however, need an Apple Developer account to [create a sandbox tester account](https://developer.apple.com/apple-pay/sandbox-testing/) — this is required to test Apple Pay payments on staging before completing the steps below.
    </Note>

    1. [Download Payrails' domain association file](#download-payrails-domain-association-file)
    2. [Host the domain association file](#host-the-domain-association-file)
    3. [Register your domain with Payrails](#register-your-domain-with-payrails)

       ### Download Payrails' Domain Association File

    Download Payrails' domain association file from the following URL:

    [https://api-pub.payrails.io/.well-known/apple-developer-merchantid-domain-association](https://api-pub.payrails.io/.well-known/apple-developer-merchantid-domain-association)

    ***

    ### Host the Domain Association File

    Host the file on your domain at the following path:

    `https://<your-domain>/.well-known/apple-developer-merchantid-domain-association`

    This step is not required for staging environments as Apple doesn't verify domains for payments made with test Apple accounts.

    <Note>
      The file must remain publicly accessible without redirects — Apple regularly re-verifies domains after the initial
      registration.
    </Note>

    ***

    ### Register your Domain with Payrails

    Once the file is hosted, contact your Payrails representative with the list of domains you wish to register. Payrails will handle the domain registration process with Apple on your behalf.

    **We render the Apple Pay button inside an iframe — which domain should we register?**

    Apple requires domain registration to be done on the domain visible in the browser address bar, not the iframe's domain. Registering the iframe domain will cause Apple Pay payments to automatically fail.
  </Tab>
</Tabs>

## Accept Apple Pay

<Tabs>
  <Tab title="Drop In">
    ### Accept Apple Pay with the Payrails Drop-in

    The Payrails Drop-in is the fastest way to accept Apple Pay. It handles the entire payment UI and flow — no additional client-side development is required beyond mounting the component.

    1. [Create a session](#step-1-create-a-session-server-side)
    2. [Initialize the SDK](#step-2-initialize-the-sdk-client-side)
    3. [Mount the Drop-in](#step-3-mount-the-drop-in-client-side)
    4. [Handle payment events](#step-4-handle-payment-events)

    For the full list of Drop-in configuration options, styling, and event handling, refer to the [Drop-in integration guide](/docs/orchestration/checkout-sdks/web-v5-legacy/drop-in).

    ***

    #### Step 1: Create a session (Server-side)

    From your server, call the Payrails `/client/init` endpoint. To enable Apple Pay, pass the `applePayConfigId` that was agreed upon during your Payrails onboarding.

    ```bash theme={null}
    POST /merchant/client/init
    Authorization: Bearer <YOUR_JWT>
    x-idempotency-key: <UUID>
    ```

    ```json theme={null}
    {
      "type": "dropIn",
      "holderReference": "customer-123",
      "workflowCode": "payment-acceptance",
      "merchantReference": "order_3573894940903",
      "applePayConfigId": "default",
      "amount": {
        "value": "12.50",
        "currency": "EUR"
      },
      "meta": {
        "order": {
          "reference": "order_3573894940903"
        },
        "customer": {
          "reference": "customer-123",
          "country": {
            "code": "DE"
          }
        },
        "clientContext": {
          "ipAddress": "217.110.239.132",
          "origin": "https://your-domain.com"
        }
      }
    }
    ```

    The response contains a `data` field — a base64-encoded string — and a `version` field. Pass both to your client.

    ```json theme={null}
    {
      "version": "1.2.3",
      "data": "TG9yZW0gaXBzdW0..."
    }
    ```

    <Note>
      The `applePayConfigId` determines which Apple Pay keys are used for this session. If you have multiple configurations (e.g. per region), pass the appropriate ID here. If omitted, the default config will be used as fallback.
    </Note>

    ***

    #### Step 2: Initialize the SDK (Client-side)

    Pass the `data` and `version` from your server response to `Payrails.init()`:

    ```javascript theme={null}
    import Payrails from '@payrails/web-sdk';

    const payrailsClient = await Payrails.init(
      { data: '<data_from_server>', version: '<version_from_server>' }
    );
    ```

    ***

    #### Step 3: Mount the Drop-in (Client-side)

    Create and mount the Drop-in component into your checkout page. Apple Pay will appear automatically if the customer's device and browser support it.

    ```html theme={null}
    <div id="dropin-container"></div>
    ```

    ```javascript theme={null}
    const dropin = payrailsClient.dropin({
      paymentMethodsConfiguration: {
        applePay: {
          showStoreInstrumentCheckbox: false
        }
      },
      events: {
        onSuccess: (event) => {
          console.log('Payment successful', event);
          // redirect to order confirmation page
        },
        onFailed: (event) => {
          console.log('Payment failed', event);
          // show error to customer
        }
      }
    });

    dropin.mount('#dropin-container');
    ```

    <Note>
      The Apple Pay button is only shown when the customer is on a supported device (Safari on iOS/macOS) with a card in their Apple Wallet. No additional checks are needed on your end.
    </Note>

    ***

    #### Step 4: Handle payment events

    The Drop-in emits the following events relevant to Apple Pay:

    | Event | Description |
    | - | - |
    | `onApplePayAvailable` | Fires when Apple Pay is available on the customer's device |
    | `onRequestStart` | Fires after the customer approves payment in the Apple Pay sheet, before the authorize request is sent |
    | `onSuccess` | Payment was authorized successfully |
    | `onFailed` | Payment authorization failed |
    | `onPending` | Payment is pending with no further action required |

    ```javascript theme={null}
    const dropin = payrailsClient.dropin({
      events: {
        onApplePayAvailable: () => {
          console.log('Apple Pay is available');
        },
        onRequestStart: () => {
          // customer approved in Apple Pay sheet
          // good place to show a loading state
        },
        onSuccess: (action, event) => {
          // action will be 'AUTHORIZE'
          // redirect to confirmation
        },
        onFailed: (action, event) => {
          // action will be 'AUTHORIZE'
          // show error message to customer
        },
        onPending: (action, event) => {
          // action will be 'AUTHORIZE'
        }
      }
    });
    ```

    <Note>
      If you are on `@payrails/web-sdk` version 5.36.0 or later, use the generic events (`onSuccess`, `onFailed`, `onPending`, `onRequestStart`). The older events `onAuthorizeSuccess`, `onAuthorizeFailed`, `onAuthorizePending`, and `onAuthorizeRequestStart` are deprecated.
    </Note>
  </Tab>

  <Tab title="Elements">
    ### Accept Apple Pay with the Payrails Apple Pay Element

    The Apple Pay Element gives you more control over the placement and styling of the Apple Pay button compared to the Drop-in. Use this approach if you want to embed the Apple Pay button independently in your checkout UI.

    1. [Create a session](#step-1-create-a-session-server-side)
    2. [Initialize the SDK](#step-2-initialize-the-sdk-client-side)
    3. [Check Apple Pay availability](#step-3-check-apple-pay-availability-optional)
    4. [Mount the Apple Pay Element](#step-4-mount-the-apple-pay-element-client-side)
    5. [Handle payment events](#step-5-handle-payment-events)

    For the full list of Elements configuration options, styling, and event handling, refer to the [Elements integration guide](/docs/orchestration/checkout-sdks/web-v5-legacy/elements).

    ***

    #### Step 1: Create a session (Server-side)

    From your server, call the Payrails `/client/init` endpoint. To enable Apple Pay, pass the `applePayConfigId` that was agreed upon during your Payrails onboarding.

    ```bash theme={null}
    POST /merchant/client/init
    Authorization: Bearer <YOUR_JWT>
    x-idempotency-key: <UUID>
    ```

    ```json theme={null}
    {
      "type": "dropIn",
      "holderReference": "customer-123",
      "workflowCode": "payment-acceptance",
      "merchantReference": "order_3573894940903",
      "applePayConfigId": "default",
      "amount": {
        "value": "12.50",
        "currency": "EUR"
      },
      "meta": {
        "order": {
          "reference": "order_3573894940903"
        },
        "customer": {
          "reference": "customer-123",
          "country": {
            "code": "DE"
          }
        },
        "clientContext": {
          "ipAddress": "217.110.239.132",
          "origin": "https://your-domain.com"
        }
      }
    }
    ```

    The response contains a `data` field and a `version` field. Pass both to your client.

    ```json theme={null}
    {
      "version": "1.2.3",
      "data": "TG9yZW0gaXBzdW0..."
    }
    ```

    <Note>
      The `applePayConfigId` determines which Apple Pay keys are used for this session. If you have multiple configurations (e.g. per region), pass the appropriate ID here. If omitted, the default config will be used as fallback.
    </Note>

    ***

    #### Step 2: Initialize the SDK (Client-side)

    Pass the `data` and `version` from your server response to `Payrails.init()`:

    ```javascript theme={null}
    import Payrails from '@payrails/web-sdk';

    const payrailsClient = await Payrails.init(
      { data: '<data_from_server>', version: '<version_from_server>' }
    );
    ```

    ***

    #### Step 3: Check Apple Pay availability (Optional)

    The Apple Pay button will not render if the customer's browser or device does not support Apple Pay — no additional checks are needed. However, if you need to know availability in advance (for example, to conditionally render surrounding UI), you can use:

    ```javascript theme={null}
    const isAvailable = await payrailsClient.isApplePayAvailable(); // returns boolean
    ```

    ***

    #### Step 4: Mount the Apple Pay Element (Client-side)

    Add a container to your HTML and mount the Apple Pay button element into it:

    ```html theme={null}
    <div id="apple-pay-button-container"></div>
    ```

    ```javascript theme={null}
    const applePayElement = payrailsClient.applePayButton({
      showStoreInstrumentCheckbox: false,
      abortAfterAuthorizeFailed: true,
      clientDomain: 'your-domain.com', // optional, see configuration table below
      styles: {
        type: 'buy',
        style: 'black',
        locale: 'en-US'
      },
      events: {
        onApplePayAvailable: () => {
          // Apple Pay button is initialized and visible
        },
        onRequestStart: () => {
          // customer approved in Apple Pay sheet
          // good place to show a loading state
        },
        onSuccess: (action, event) => {
          // action will be 'AUTHORIZE'
          // redirect to confirmation
        },
        onFailed: (action, event) => {
          // action will be 'AUTHORIZE'
          // show error message to customer
        },
        onPending: (action, event) => {
          // action will be 'AUTHORIZE'
        },
        onPaymentSessionExpired: () => {
          // session expired, re-initialize the client from your server
        }
      }
    });

    applePayElement.mount('#apple-pay-button-container');
    ```

    ##### Configuration options

    | Property | Type | Required | Description |
    | - | - | - | - |
    | `showStoreInstrumentCheckbox` | boolean | No | Show a checkbox to let the customer save their Apple Pay method for later |
    | `abortAfterAuthorizeFailed` | boolean | No | Hide the Apple Pay sheet if authorization fails |
    | `clientDomain` | string | No | The domain visible in the browser address bar. Use this when the Apple Pay button is rendered inside an iframe whose domain differs from the top-level domain |
    | `styles.type` | string | No | Button label type — e.g. `plain`, `buy`, `checkout`, `subscribe`, `donate`, `order` |
    | `styles.style` | string | No | Button color — `black`, `white`, `white-outline`, `automatic` |
    | `styles.locale` | string | No | Button locale — e.g. `en-US`, `de-DE` |

    <Note>
      If you are rendering the Apple Pay button inside an iframe, pass the browser's top-level domain in `clientDomain`. Apple Pay domain verification is performed against the domain the customer sees in the address bar, not the iframe's domain.
    </Note>

    ***

    #### Step 5: Handle payment events

    The Apple Pay Element emits the following events:

    | Event | Description |
    | - | - |
    | `onApplePayAvailable` | Fires when the Apple Pay button is initialized and visible |
    | `onRequestStart` | Fires after the customer approves payment in the Apple Pay sheet, before the authorize request is sent |
    | `onSuccess` | Payment was authorized successfully |
    | `onFailed` | Payment authorization failed |
    | `onPending` | Payment is pending with no further action required |
    | `onPaymentSessionExpired` | Session has expired — re-initialize from your server |

    <Note>
      If you are on `@payrails/web-sdk` version 5.36.0 or later, use the generic events (`onSuccess`, `onFailed`, `onPending`, `onRequestStart`). The older events `onAuthorizeSuccess`, `onAuthorizeFailed`, `onAuthorizePending`, and `onAuthorizeRequestStart` are deprecated.
    </Note>

    For the full list of Elements configuration options and styling, refer to the [Elements guide](/docs/orchestration/checkout-sdks/web-v5-legacy/elements).
  </Tab>

  <Tab title="Server to Server">
    ### Accept Apple Pay with the Server-to-Server Integration

    With the server-to-server integration, you have full control over your client-side Apple Pay implementation and use the Payrails API directly to process payments. This approach requires building the Apple Pay flow yourself using Apple's native SDKs, then passing the resulting payment token to Payrails for processing.

    1. [Create a workflow execution with lookup](#step-1-create-a-workflow-execution-with-lookup)
    2. [Perform merchant validation (web only)](#step-2-perform-merchant-validation-web-only)
    3. [Authorize the payment](#step-3-authorize-the-payment)

    ***

    #### Step 1: Create a workflow execution with lookup

    Create an execution and include a `lookup` initial action to retrieve the available payment options and Apple Pay SDK configuration in a single request. Pass `applePayConfigId` to specify which Apple Pay key configuration to use.

    ```bash theme={null}
    POST /merchant/workflows/{workflowCode}/executions
    Authorization: Bearer <YOUR_JWT>
    x-idempotency-key: <UUID>
    ```

    ```json theme={null}
    {
      "merchantReference": "order_3573894940903",
      "holderReference": "customer-123",
      "applePayConfigId": "default",
      "meta": {
        "order": {
          "reference": "order_3573894940903"
        },
        "customer": {
          "reference": "customer-123",
          "country": {
            "code": "DE"
          }
        },
        "clientContext": {
          "ipAddress": "217.110.239.132",
          "origin": "https://your-domain.com"
        }
      },
      "initialActions": [
        {
          "action": "lookup",
          "method": "POST",
          "body": {
            "amount": {
              "value": "12.50",
              "currency": "EUR"
            },
            "meta": {
              "customer": {
                "reference": "customer-123",
                "country": {
                  "code": "DE"
                }
              }
            }
          }
        }
      ]
    }
    ```

    The response includes the execution `id` and an `initialResults` array containing the lookup result. Inside `initialResults`, find the `applePay` entry in `paymentCompositionOptions` — this contains the SDK configuration needed to initialize the Apple Pay session on your client.

    ```json theme={null}
    {
      "id": "5d0e7a85-c982-499f-bb7f-296b75bcbe10",
      "status": [{ "code": "created", "time": "2022-02-03T14:38:41.557Z" }],
      "merchantReference": "order_3573894940903",
      "holderReference": "customer-123",
      "initialResults": [
        {
          "httpCode": 200,
          "body": {
            "name": "lookup",
            "actionId": "1aa0ef20-36cb-4485-b60e-0526c3699014",
            "executedAt": "2022-02-03T14:38:40.557Z",
            "data": {
              "paymentCompositionOptions": [
                {
                  "paymentMethodCode": "applePay",
                  "integrationType": "api",
                  "description": "ApplePay",
                  "config": {
                    "parameters": {
                      "countryCode": "DE",
                      "merchantCapabilities": ["supports3DS", "supportsCredit", "supportsDebit"],
                      "merchantIdentifier": "merchant.payrails.testing",
                      "supportedNetworks": ["AMEX", "DISCOVER", "INTERAC", "JCB", "VISA", "MASTERCARD"]
                    },
                    "type": "CARD"
                  }
                }
              ]
            },
            "links": {
              "authorize": {
                "method": "POST",
                "href": "https://api.staging.payrails.io/merchant/workflows/payment-acceptance/executions/5d0e7a85-c982-499f-bb7f-296b75bcbe10/authorize"
              },
              "startPaymentSession": {
                "method": "POST",
                "href": "https://api.staging.payrails.io/merchant/workflows/payment-acceptance/executions/5d0e7a85-c982-499f-bb7f-296b75bcbe10/startPaymentSession"
              }
            }
          }
        }
      ],
      "links": {
        "self": "https://api.staging.payrails.io/merchant/workflows/payment-acceptance/executions/5d0e7a85-c982-499f-bb7f-296b75bcbe10"
      }
    }
    ```

    Use the `config.parameters` from the Apple Pay composition option to initialize your Apple Pay session on the client — passing `merchantIdentifier`, `supportedNetworks`, and `merchantCapabilities` to the Apple Pay SDK. Use the execution `id` in all subsequent requests.

    ***

    #### Step 2: Perform merchant validation (web only)

    <Note>
      This step is only required for web (Safari) payments. For native iOS or Android app integrations, skip to Step 3.
    </Note>

    When the customer initiates Apple Pay in a browser, Apple calls your `onvalidatemerchant` handler with a `validationURL`. Forward this URL to Payrails via the `startPaymentSession` endpoint to complete merchant validation.

    ```bash theme={null}
    POST /merchant/workflows/{workflowCode}/executions/{executionId}/startPaymentSession
    Authorization: Bearer <YOUR_JWT>
    x-idempotency-key: <UUID>
    ```

    ```json theme={null}
    {
      "integrationType": "api",
      "paymentMethodCode": "applePay",
      "amount": {
        "value": "12.50",
        "currency": "EUR"
      },
      "returnInfo": {
        "success": "https://your-domain.com/success"
      },
      "meta": {
        "sessionURL": "https://apple-pay-gateway-cert.apple.com/paymentservices/startSession",
        "clientContext": {
          "host": "your-domain.com"
        }
      }
    }
    ```

    The response contains an opaque Apple Pay session object in the `data` field. Pass this directly to the Apple Pay JS SDK's `completeMerchantValidation` method.

    ```json theme={null}
    {
      "name": "startPaymentSession",
      "actionId": "1aa0ef20-36cb-4485-b60e-0526c3699014",
      "executedAt": "2022-02-03T14:38:40.557Z",
      "data": {
        "id": "SSH268E...",
        "data": {
          "displayName": "Test Merchant",
          "domainName": "https://your-domain.com",
          "epochTimestamp": 1717486879562,
          "expiresAt": 1717490479562,
          "merchantIdentifier": "E92FBE...",
          "merchantSessionIdentifier": "SSH268E...",
          "nonce": "fd3...",
          "signature": "30800..."
        }
      },
      "links": {
        "execution": "https://api.staging.payrails.io/merchant/workflows/payment-acceptance/executions/5d0e7a85-c982-499f-bb7f-296b75bcbe10"
      }
    }
    ```

    ***

    #### Step 3: Authorize the payment

    Once the customer authorizes the payment in the Apple Pay sheet, Apple provides a `PKPaymentToken` containing a `paymentData` object. Pass the entire token as a JSON string in `paymentInstrumentData.paymentToken`.

    ```bash theme={null}
    POST /merchant/workflows/{workflowCode}/executions/{executionId}/authorize
    Authorization: Bearer <YOUR_JWT>
    x-idempotency-key: <UUID>
    ```

    ```json theme={null}
    {
      "amount": {
        "value": "12.50",
        "currency": "EUR"
      },
      "returnInfo": {
        "success": "https://your-domain.com/success",
        "error": "https://your-domain.com/error"
      },
      "paymentComposition": [
        {
          "paymentMethodCode": "applePay",
          "integrationType": "api",
          "amount": {
            "value": "12.50",
            "currency": "EUR"
          },
          "paymentInstrumentData": {
            "paymentToken": "{\"paymentData\":{\"data\":\"V0D4ZZq5XBJoORaiwCxQKq4P1WtrRdiRY3PmF9BX0l3BRplz1XMKNJcbqstekoqDaNFtAFyxUkvwXLsxU81KcQ9P8AQoYjj5KMXPgO\\/jeIqgnKGwaF3+cPEmoYUnmfLVpnrGGDiH8An6E9DjdX48nUMyC4rzAwBhXcjqFW3s93D5lUgbjKdgKK0vs8M\\/UGWJ+dGNrVshiG48fWCcO8iiUgTvaJqnERnkmVs\\/Fu6\\/CBIZqB1ytQh+osuvSrEb8YurrRHHc\\/Y1JbeTBSpSi\\/fWrMljXAjthF3JiO00g9EgYb0p+e3+dVvb+P0bvvmo5l4GRsRVaysgW0nX8MbzR\\/nUfIoGc6NlaUhTP6vkOi8ccBX63urdoa\\/LD7bXCnkEJ9tag+uTCgKWlAOS34ls\",\"signature\":\"MIAGCSqGSIb3DQEH...\",\"header\":{\"publicKeyHash\":\"ZJSKMBJDW9HqdVlxZeNWBooGagS9Ef2+yyPZwV17HmY=\",\"ephemeralPublicKey\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE9\\/m6C48ZHg25pmAQRadr4W1jPMYSQbO9b1nW\\/D3+rC\\/WSEcw7NygSMkQkAU\\/0En5AZ0\\/c8hgDWPknFVNlN8pcQ==\",\"transactionId\":\"642e2f06b74fc4cfc301553a37905ff16cf163173a46a25d022ffdd1cc0ad6a5\"},\"version\":\"EC_v1\"},\"paymentMethod\":{\"displayName\":\"MasterCard 0049\",\"network\":\"MasterCard\",\"type\":\"credit\"},\"transactionIdentifier\":\"642e2f06b74fc4cfc301553a37905ff16cf163173a46a25d022ffdd1cc0ad6a5\"}"
          }
        }
      ]
    }
    ```

    A successful response returns `202 Accepted` with an `actionId` and links to track the payment outcome.

    ```json theme={null}
    {
      "name": "authorize",
      "actionId": "1aa0ef20-36cb-4485-b60e-0526c3699014",
      "executedAt": "2022-04-22T17:53:36.814Z",
      "links": {
        "execution": "https://api.staging.payrails.io/merchant/workflows/payment-acceptance/executions/5d0e7a85-c982-499f-bb7f-296b75bcbe10",
        "consumerWait": "https://api.staging.payrails.io/public/redirect/...",
        "cancel": {
          "method": "POST",
          "href": "https://api.staging.payrails.io/merchant/workflows/payment-acceptance/executions/5d0e7a85-c982-499f-bb7f-296b75bcbe10/cancel"
        }
      }
    }
    ```

    Authorization is processed asynchronously. The final payment outcome is delivered via webhook notification containing the `actionId` from this response.
  </Tab>

  <Tab title="Self-Decrypted">
    <Tip>
      This integration requires PCI DSS compliance as you will be handling decrypted Apple Pay token data on your servers. If you prefer Payrails to handle decryption, use the Server-to-Server integration instead.
    </Tip>

    With this approach, you decrypt the Apple Pay token on your own servers, re-encrypt the decrypted network token using the Payrails vault public key, and send it to Payrails for processing. This gives you full control over the decryption flow but requires managing your own Apple Pay private keys and certificates.

    1. [Decrypt the Apple Pay token](#step-1-decrypt-the-apple-pay-token)
    2. [Fetch the Payrails vault public key](#step-2-fetch-the-payrails-vault-public-key)
    3. [Encrypt the network token](#step-3-encrypt-the-network-token)
    4. [Create an Apple Pay instrument](#step-4-create-an-apple-pay-instrument)
    5. [Create a workflow execution](#step-5-create-a-workflow-execution)
    6. [Authorize the payment](#step-6-authorize-the-payment)

    #### Step 1: Decrypt the Apple Pay token

    Once the customer authorizes the payment in the Apple Pay sheet, Apple provides an encrypted `PKPaymentToken`. Decrypt it on your server using your Apple Pay private keys. The decrypted token contains the card network token data in the following format:

    ```json theme={null}
    {
      "cardNumber": "4111111111111111",
      "expiryMonth": "03",
      "expiryYear": "30",
      "securityCode": "ApplePayCryptogram==",
      "holderName": "John Doe",
      "holderReference": "customer-123"
    }
    ```

    <Tip>
      The decrypted Apple Pay token contains PCI-sensitive data. Ensure this data is handled exclusively on your server and never exposed to the client.
    </Tip>

    ***

    #### Step 2: Fetch the Payrails vault public key

    Before sending the decrypted token to Payrails, fetch the current vault public encryption key.

    ```bash theme={null}
    GET /payment/vault/info
    Authorization: Bearer <YOUR_JWT>
    ```

    ```json theme={null}
    {
      "encryptionPublicKey": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0MqUlEo2bC9iJi4LEHQ6...",
      "encryptionKeyId": "b24ff007-728c-455d-b51c-556108ccdf59",
      "expiresIn": 3300
    }
    ```

    <Tip>
      Cache the public key and refresh it before `expiresIn` seconds to avoid unnecessary API calls.
    </Tip>

    ***

    #### Step 3: Encrypt the network token

    Encrypt the decrypted Apple Pay network token JSON using JWE with the following parameters:

    * Encryption algorithm: `RSA-OAEP-256`
    * Content encryption: `A256CBC-HS512`
    * Include the `encryptionKeyId` as the `kid` JWE header

    ```python theme={null}
    from jose import jwe
    import json

    data = {
      "cardNumber": "4111111111111111",
      "expiryMonth": "03",
      "expiryYear": "30",
      "securityCode": "ApplePayCryptogram==",
      "holderName": "John Doe",
      "holderReference": "customer-123"
    }

    json_data = json.dumps(data).encode('utf-8')

    encrypted_token = jwe.encrypt(
      plaintext=json_data,
      algorithm='RSA-OAEP-256',
      encryption='A256CBC-HS512',
      key=vault_key_info['encryptionPublicKey'],
      keyID=vault_key_info['encryptionKeyId']
    )
    # eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2Q0JDLUhTNTEyIn0...
    ```

    ```go theme={null}
    recipient := jose.Recipient{
      Algorithm: jose.RSA_OAEP_256,
      Key:       publicKey,
      KeyID:     vaultKeyInfo.EncryptionKeyID,
    }

    e, err := jose.NewEncrypter(jose.A256CBC_HS512, recipient, nil)
    encrypted, err := e.Encrypt(jsonData)
    encryptedToken, err := encrypted.CompactSerialize()
    // eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2Q0JDLUhTNTEyIn0...
    ```

    ***

    #### Step 4: Create an Apple Pay instrument

    Send the encrypted network token to Payrails to create a stored Apple Pay instrument.

    ```bash theme={null}
    POST /merchant/instruments
    Authorization: Bearer <YOUR_JWT>
    ```

    ```json theme={null}
    {
      "paymentMethod": "applePay",
      "displayName": "Visa 4443",
      "data": {
        "encryptedData": ".......encryptedApplePayNetworkToken.......",
        "encryptedDataType": "networkToken",
        "network": "visa",
        "eci": "07",
        "billingAddress": {
          "street": "Berlin street",
          "doornumber": "345",
          "postalCode": "30103",
          "city": "Berlin",
          "country": "DE"
        }
      }
    }
    ```

    The response contains the `id` of the newly created Apple Pay instrument.

    ```json theme={null}
    {
      "id": "32749353-263f-4510-9572-c782ab64e599",
      "paymentMethod": "applePay",
      "displayName": "Visa 4443",
      "status": "created"
    }
    ```

    <Tip>
      To achieve full interoperability across providers, always include `eci`, `billingAddress`, `network`, and `displayName` when creating the instrument.
    </Tip>

    ***

    #### Step 5: Create a workflow execution

    Create an execution to initiate the payment flow.

    ```bash theme={null}
    POST /merchant/workflows/{workflowCode}/executions
    Authorization: Bearer <YOUR_JWT>
    x-idempotency-key: <UUID>
    ```

    ```json theme={null}
    {
      "merchantReference": "order_3573894940903",
      "holderReference": "customer-123",
      "meta": {
        "order": {
          "reference": "order_3573894940903"
        },
        "customer": {
          "reference": "customer-123",
          "country": {
            "code": "DE"
          }
        },
        "clientContext": {
          "ipAddress": "217.110.239.132"
        }
      }
    }
    ```

    ```json theme={null}
    {
      "id": "5d0e7a85-c982-499f-bb7f-296b75bcbe10",
      "status": [{ "code": "created", "time": "2022-02-03T14:38:41.557Z" }],
      "links": {
        "authorize": {
          "method": "POST",
          "href": "https://api.staging.payrails.io/merchant/workflows/payment-acceptance/executions/5d0e7a85-c982-499f-bb7f-296b75bcbe10/authorize"
        }
      }
    }
    ```

    ***

    #### Step 6: Authorize the payment

    Use the instrument ID from Step 4 and execution ID from Step 5 to authorize the payment.

    ```bash theme={null}
    POST /merchant/workflows/{workflowCode}/executions/{executionId}/authorize
    Authorization: Bearer <YOUR_JWT>
    x-idempotency-key: <UUID>
    ```

    ```json theme={null}
    {
      "amount": {
        "value": "12.50",
        "currency": "EUR"
      },
      "returnInfo": {
        "success": "https://your-domain.com/success",
        "error": "https://your-domain.com/error"
      },
      "paymentComposition": [
        {
          "paymentMethodCode": "applePay",
          "integrationType": "api",
          "paymentInstrumentId": "32749353-263f-4510-9572-c782ab64e599",
          "amount": {
            "value": "12.50",
            "currency": "EUR"
          }
        }
      ]
    }
    ```

    A successful response returns `202 Accepted`. Authorization is processed asynchronously and the final outcome is delivered via webhook.

    ```json theme={null}
    {
      "name": "authorize",
      "actionId": "1aa0ef20-36cb-4485-b60e-0526c3699014",
      "executedAt": "2022-04-22T17:53:36.814Z",
      "links": {
        "execution": "https://api.staging.payrails.io/merchant/workflows/payment-acceptance/executions/5d0e7a85-c982-499f-bb7f-296b75bcbe10",
        "cancel": {
          "method": "POST",
          "href": "https://api.staging.payrails.io/merchant/workflows/payment-acceptance/executions/5d0e7a85-c982-499f-bb7f-296b75bcbe10/cancel"
        }
      }
    }
    ```
  </Tab>
</Tabs>

## Recurring payments

As with other payment methods, you can choose to tokenize the payment instrument such that it can be used for future authorizations by setting the `storeInstrument` parameter to `true`. In this case, you can expect to receive a Payrails `paymentInstrumentId` in the authorize notification as in the below example.

```json theme={null}
{
   "event":"executionActionCompleted",
   "time":"2023-10-26T08:48:50.057448Z",
   "details":{
      "action":"authorize",
      "actionId":"d1d7eec1-6c4d-561b-b924-e05abd1c564c",
      "amount":{...},
      "execution":{...},
      "paymentComposition":[
         {
            "amount":{...},
            "integrationType":"api",
            "operationProviderReference":"pi_3O5PFEG5MqUZQUfk1exfNecz",
            "operationResult":"Success",
            "operationType":"Authorize",
            "paymentId":"f5b277c8-db9b-4521-8625-f9bb8dd07de1",
            "paymentInstrument":{...},
            "paymentInstrumentId":"32749353-263f-4510-9572-c782ab64e599",
            "paymentMethodCode":"applePay",
            "providerConfigId":"d83d0617-784d-4181-8d28-290c948e590a",
            "providerId":"5559a584-0995-4ed4-a4bb-32f9cc2a8c39",
            "storeInstrument":true,
            "success":true
         }
      ],
      "success":true
   }
}
```

In order to make a subsequent authorization request using the tokenized Apple Pay payment instrument, pass the saved `paymentInstrumentId` in the `paymentComposition` as in the below example.

<Note>
  Please note that for Apple Pay payments made with a tokenized payment
  instrument, you must appropriately set authorization flags with us to indicate
  that the payment is a merchant-initiated transaction (MIT). If you indicate
  that the payment is a customer-initiated transaction (CIT), then the payment
  will be rejected. See our guide
  [here](/docs/resources/payments/authorization-flags) on how to set
  authorization flags.
</Note>

```json theme={null}
"paymentComposition":[
   {
      "amount":{
         "currency":"USD",
         "value":"1.00"
      },
      "integrationType":"api",
      "paymentInstrumentId":"32749353-263f-4510-9572-c782ab64e599",
      "paymentMethodCode":"applePay"
   }
]
```

## Supported regions / countries

<SupportedCountriesTable countries={method.countries} continents={CONTINENTS} method={method.name} />

Apple Pay payments may be available in additional countries based on the status of their integrations and each provider's technology rollout.

## Supported workflows and services

<SupportedWorkflowsTable workflows={method.workflows} workflowKeys={WORKFLOW_KEYS} />

## Troubleshoot

### Payment session fails due to `merchant url validation failed for the requested session url`

When the payment session fails due to `merchant url validation failed for the requested session url`, it usually means that the payment was attempted using a real apple pay account in staging and vice versa.

* In staging, to test apple pay, you must [create sandbox tester account](https://developer.apple.com/apple-pay/sandbox-testing/) and use one of the test cards. If you use a real apple pay account, you'll get this error.
* In production, you must use a real apple pay account, otherwise you'll get this error.

One way to verify if you used a tester account or real account is to check the session URL:

* If the session URL is `https://apple-pay-gateway.apple.com/paymentservices/startSession`(or `https://cn-apple-pay-gateway.apple.com/paymentservices/startSession` in China), then a real apple pay account was used.
* If the session URL is `https://apple-pay-gateway-cert.apple.com/paymentservices/startSession` (`https://cn-apple-pay-gateway-cert.apple.com/paymentservices/startSession` in China), then a sandbox tester apple pay account was used.

### `400: Payment Services Exception merchantId=<merchant ID> not registered for domain=<your domain>`

This error means that the domain has not been verified for this certificate.

In order to verify this domain, you must expose the Apple domain verification file on `https://<your domain>/.well-known/apple-developer-merchantid-domain-association`

* If you are using your own certificates, this file can be found in your own Apple developer center.
* If you are using Apple Pay for Web using Payrails' certificates, then you must expose [Payrails' domain verification file](https://api-pub.payrails.io/.well-known/apple-developer-merchantid-domain-association) and then request Payrails to register this domain for you.

If your domain is already verified and you still see this error, it can be that the domain verification file exposed in your domain doesn't match the certificate. In that case, you must ensure to expose the right domain association file.

Note that one domain can only be verified with one certificate. Domain verification propagation can take up to a few hours on Apple side due to caching.


## Related topics

- [Server-to-server Integration](/docs/use-cases/server-to-server-integration-reference-architecture.md)
- [Apple Pay Express](/docs/orchestration/payment-methods/apple-pay-express.md)
- [Apple Pay via Proxy](/docs/token-vault/vault-proxy/proxy-payment-instruments/apple-pay-via-proxy.md)
