Create a payment with wallet cryptogram (no 3DS required)
When the decrypted Apple Pay token contains a cryptogram, pass it along with the card data. The cryptogram serves as proof of cardholder authentication, so no additional 3DS authentication is needed.
Payment workflow
Scroll horizontally if the diagram is wider than your screen.
- 1Payer (Customer)Merchant
1. Initiates transaction
- 2MerchantPayer (Customer)
2. Displays Apple Pay button (merchant frontend)
- 3Payer (Customer)
Apple Pay
3. Clicks Apple Pay button
- 4
Apple PayPayer (Customer)
Apple Pay authentication (Face ID / Touch ID)
- 5Payer (Customer)
Apple Pay
Authenticates payment
- 6
Apple PayMerchant
4. Encrypted Apple Pay token (includes cryptogram)
- 7MerchantMerchant
5. Decrypts token and extracts card data + cryptogram
- 8MerchantOneAPI
6. Payment API request with card data + threeds_wallet_cryptogram
- OneAPI
Cryptogram proves cardholder authentication — OneAPI skips 3DS
- 9OneAPIMerchant
7. Payment result (success/declined)
- OneAPI
Payment processing occurs asynchronously
- 10OneAPIMerchant
8. Postback notification (payment status update)
- 11MerchantMerchant
9. Update order status
- 12MerchantPayer (Customer)
10. Display final confirmation
POST/rest/payment
/rest/paymentProduction URL
https://api.betterpayment.de/rest/paymentTest URL
https://testapi.betterpayment.de/rest/paymentpayment_typeStringrequiredapplepayorder_idStringrequiredamountFloatrequiredcurrencyStringrequiredpostback_urlStringrequiredsuccess_urlStringrequirederror_urlStringrequiredcard_numberStringrequiredcard_holderStringrequiredcard_expiry_monthStringrequiredcard_expiry_yearStringrequiredthreeds_wallet_cryptogramStringrequiredthreeds_wallet_cryptogram_eciStringPOST /rest/payment
Authorization: Basic <base64(api_key:api_password)>
Content-Type: application/json
{
"payment_type": "applepay",
"order_id": "APAY-67890",
"amount": "25.90",
"currency": "EUR",
"postback_url": "https://your-postback.url.com",
"success_url": "https://your-success.url.com",
"error_url": "https://your-error.url.com",
"card_number": "4761070000000509",
"card_holder": "John Doe",
"card_expiry_month": "12",
"card_expiry_year": "2026",
"threeds_wallet_cryptogram": "AgAAAAAABk4DWZ4C28yUQAAAAAA=",
"threeds_wallet_cryptogram_eci": "07"
}
Payment API Response
transaction_idStringpayment_typeStringstatus_codeIntegerstatusStringorder_idStringmessageStringincluded_feesStringerror_codeInteger{
"transaction_id": "a2c4e6f8-1234-5678-abcd-ef0123456789",
"payment_type": "applepay",
"status_code": 3,
"status": "completed",
"order_id": "APAY-67890",
"message": null,
"included_fees": "0.00",
"error_code": 0
}
Postbacks
For the full list of payment postback fields, see the Payment API. For retry policy and signature verification, see Postbacks.
Test Data
To learn how to add test cards for testing Apple Pay, please review the official Apple Pay sandbox testing documentation.
For testing Server-to-Server Apple Pay transactions with a wallet cryptogram, use the following test data.
The card data in Server-to-Server Apple Pay transactions is actually token data (DPAN), not the real card number — but it follows the same format. CVV is not required for wallet token transactions.
3DS is very rare for Apple Pay transactions since the wallet cryptogram typically provides sufficient authentication.
The transaction will go straight to completed status.
| Parameter | Test Value |
|---|---|
threeds_wallet_cryptogram | Af9x2zAAAAABBBCC1XYCMAABAAA= |
threeds_wallet_cryptogram_eci | 05 |
card_number | 5286940020000908 |
card_holder | Max Mustermann |
card_expiry_month | 12 |
card_expiry_year | 2026 |