Apple Pay™ Payments

apple pay logo

This document applies to the following country:

Brazil

Accept payments through Apple Pay™, Apple's digital wallet. The buyer pays on websites and apps with the cards saved on their device. They authenticate with Face ID, Touch ID, or passcode.

Your integration never receives the real card number. Instead, it receives an encrypted payment token that Apple generates.

This guide walks you through a single Web Checkout API integration. You create a payment intent, validate the Apple Pay merchant session, get the token, and submit the payment.

How it works

Use Apple Pay to offer a secure checkout to buyers on Apple devices. Buyers don't have to type in card details. Key characteristics:

  • No card entry: the buyer pays with the cards already saved on their Apple device.
  • Encrypted token: the app/site gets a payment token from Apple and forwards it to Getnet. The real card number never travels.
  • Native authentication: device biometrics/passcode (Face ID / Touch ID). Bypasses the 3DS flow.
  • Synchronous processing: submitting the payment returns the result (status / authorization_code) in the same call.
  • Merchant session validation: unlike Google Pay, Apple Pay requires an extra merchant session validation step before the frontend can get the token. This step requires a domain registered with Apple.

The end-to-end flow involves the buyer, your frontend, your backend, and the Getnet Web Checkout API:

Before you start

Before you integrate, make sure you have the following in place:

  • The seller (x-seller-id) has Apple Pay enabled.
  • Domain onboarding is complete for your integration type (see below).
  • You have generated your token by following the Authentication document.

Technical onboarding by integration type

Domain registration depends on your integration type:

Integration typeDomain registration
Link & Redirect APIUses the Getnet domain. No merchant domain registration is required.
Iframe & LightboxThe merchant domain differs from the Getnet domain. You must provide your domain in the Web Checkout configuration so Getnet can register it with Apple. You must also download the Domain verification file and host it on your server.

Step 1: Create the payment intent

Call the Web Checkout API to create a payment intent. It returns a payment_intent_id and a redirect_url.
Endpoint
POST /payment-intent
Required fields
FieldTypeDescriptionExample
payment.currencyStringCurrency code.BRL
payment.amountIntegerPurchase amount in integer format, where the last 2 digits represent the cents. For countries where cents do not apply, fill in the amount with 2 zeros to the right.92500
customer.customer_idStringWe recommend using the customer's document number. Use only letters and numbers, without special characters, separators or spaces.12345678912
customer.first_nameStringCustomer's first name.John
customer.last_nameStringCustomer's last name.Doe Smith
customer.nameStringCustomer's full name.John Doe Smith
customer.emailStringCustomer's email address.customer@email.com.br
customer.document_typeStringType of the document used to identify the customer.CPF
customer.document_numberStringDocument number used to identify the customer.12345678912
customer.billing_address.streetStringName of a street.Av. Brasil
customer.billing_address.numberStringNumber that identifies the position of a building on a street.1000
customer.billing_address.countryStringCountry code.BR
customer.billing_address.postal_codeStringPostal or ZIP code.90230060
Optional fields
FieldTypeDescriptionExample
configurations.3dsbooleanControls 3D Secure authentication.true or false
configurations.preauthorizationbooleanIndicates if the payment is a pre-authorization.true or false
configurations.card_verificationbooleanIndicates if this is a card verification flow.true or false
configurations.success_urlstringRedirect URL in case of successful payment.https://www.mystore.com/checkout/success
configurations.error_urlstringRedirect URL in case of an error during payment.https://www.mystore.com/checkout/error
productarrayLine items.---
soft_descriptorstringPayment description that appears on the customer's receipt.Loja BR
expires_atstringPayment intent expiration.3d4h15m

Field filling rules

Follow these rules when you fill in the optional fields:

  • The expires_at field accepts a duration value (for example: 15m, 2h, 7d, or 1d12h30m). The API applies this duration regardless of your timezone. The expiration timestamp returned by the API is always formatted in GMT+0 (UTC). If you provide no value, the payment intent does not expire.
  • When you provide success_url and error_url in the payment intent request, they override the values set in the seller's technical configuration.

Example request

The following example shows a payment intent request with the required and optional fields.

JSON
{ "mode": "instant", "order_id": "ORDER_APAY_BR_0001", "configurations": { "3ds": true, "preauthorization": false, "card_verification": false, "success_url": "https://www.mystore.com/checkout/success", "error_url": "https://www.mystore.com/checkout/error" }, "payment": { "currency": "BRL", "amount": 92500 }, "product": [ { "product_type": "service", "title": "Plano Pro", "description": "Assinatura 1 mes", "value": 92500, "quantity": 1 } ], "customer": { "customer_id": "customer_br_006", "first_name": "Jose", "last_name": "da Silva", "name": "Jose da Silva", "email": "customer@email.com", "document_type": "CPF", "document_number": "12345678909", "phone_number": "5511999998888", "checked_email": true, "billing_address": { "street": "Av. Paulista", "number": "1000", "complement": "Cj 101", "district": "Bela Vista", "city": "Sao Paulo", "state": "SP", "country": "BR", "postal_code": "01310100" } }, "soft_descriptor": "Loja BR", "expires_at": "1h" }

Step 2: Confirm the result

Apple Pay is synchronous: the call returns status and authorization_code. Before you release the order, also confirm the result through the webhook sent to notification.url.
information icon
Webhook status can be Authorized or Denied.

Example approved webhook response

When the payment is approved, the webhook returns the status Authorized and an authorization_code.
JSON
{ "payment_intent_id": "aa1c69fe-87ee-6dbf-c629-2039fb1c4g4e", "checkout_id": "6bc26e2f-fb9c-4671-95e3-0c4e13280648", "order_id": "ORDER_APAY_BR_0001", "mode": "instant", "seller": { "id": "716d899e-9091-4577-a12f-8a77ec4d1e0b", "trade_name": "GetNet Shop", "merchant_document": "00000000000", "settings": { "notification_url_configured": true } }, "customer": { "customer_id": "customer_br_006", "name": "Jose da Silva", "email": "customer@email.com", "document_type": "CPF", "document_number": "12345678909" }, "payment": { "method": "apple_pay", "amount": 92500, "currency": "BRL", "result": { "payment_id": "7d5e2b1a-3c4f-5a6e-9b8f-1d2e0c9b8a7f", "status": "Authorized", "authorization_code": "654321", "transaction_datetime": "2026-07-08T12:05:00.000Z" } }, "created_at": "2026-07-08T12:04:30.000Z", "updated_at": "2026-07-08T12:05:00.000Z" }

Example denied webhook response

When the payment is denied, the webhook returns the status Denied and a return_message with the reason.
JSON
{ "payment_intent_id": "aa1c69fe-87ee-6dbf-c629-2039fb1c4g4e", "checkout_id": "6bc26e2f-fb9c-4671-95e3-0c4e13280648", "order_id": "ORDER_APAY_BR_0001", "mode": "instant", "payment": { "method": "apple_pay", "amount": 92500, "currency": "BRL", "result": { "payment_id": "7d5e2b1a-3c4f-5a6e-9b8f-1d2e0c9b8a7f", "status": "Denied", "transaction_datetime": "2026-07-08T12:06:00.000Z", "return_message": "Card not accepted for this operation" } }, "created_at": "2026-07-08T12:04:30.000Z", "updated_at": "2026-07-08T12:06:00.000Z" }