Search Overlay

Apple Pay Payouts

Apple Pay is widely recognized for its ability to simplify and enhance the payment experience for consumers during deposits and purchases. In addition to deposits, Apple Pay also supports payouts, allowing businesses to send funds directly to consumers—such as returning betting winnings in the iGaming sector.

This page outlines the key concepts and requirements for implementing Apple Pay payouts, focusing primarily on the closed loop flow, which is mandated in most regulated markets. We'll also briefly discuss the open-loop flow and how businesses should determine the correct model to adopt.

Payout Flow Models

There are two primary flows to consider when implementing Apple Pay payouts:

Open loop flow

In an open loop flow, a card can receive a payout even if it has not been used for a prior deposit.

  • Allowed only in select regions, depending on local regulations.

  • Offers greater flexibility, but with higher regulatory scrutiny.

Closed loop flow

In a closed loop flow, payouts are only permitted to cards that have previously been used for a deposit.

  • Required in most regulated markets due to AML (Anti-Money Laundering) compliance.
  • Ensures that funds are returned only to a verified funding source.
  • Supports traceability and risk mitigation.

If you are interested in payouts with an Apple Pay device token (closed or open loop), contact your Paysafe representative.

Regulatory Considerations

Before implementing Apple Pay payouts, it is essential to consult your local regulatory authorities to determine which flow (closed loop or open loop) is permissible for your business. Non-compliance with AML laws can result in severe penalties and reputational risk.

Open loop flow implementation

In this section, we describe how to technically implement the open loop flow when integrating Apple Pay payouts, ensuring alignment with both Apple’s requirements and regional compliance needs.

In order to implement open loop flow, you basically need to:

  1. Integrate to Apple Pay and show the Apple Pay button during the payout experience for the user to follow.
  2. Trigger the payout transaction via the /originalcredits (for the iGaming vertical) or with /standalonecredits (for non-iGaming verticals) endpoints

If you utilize Checkout, steps 1, 2 and 3 are handled by the Checkout.

Technical Guidance

You may execute step 1 above:

  • Using Paysafe Checkout which can show the Apple Pay button during the withdrawal/payout flow. There, we are using the standard Apple Pay payment sheet, but directed towards payment to the user.
    or
  • Using Apple Pay's Disbursement Request API to provide a tailored payout experience to your users.

Paysafe Checkout implementation

For Paysafe Checkout to provide the payout experience, you need to do the following:

  • Assuming Paysafe Checkout is in Withdrawal mode, set the type of Apple Pay to "continue"
  • For the label property, instead of the name of your company, set the name of the person that will receive the funds, for example "John Doe"
  1. Here is how a sample Paysafe Checkout's Apple Pay configuration snippet should look as follows:

var APIKEY = "yourPublicPaysafeAPIKey"
paysafe.checkout.setup(APIKEY, {
currency: "USD",
amount: 10000,
payout: true,
payoutConfig: {
maximumAmount: 100000,
},
merchantRefNum: dummyGenerateGuid(), // merchantRefNum should be unique and must keep changing every transaction
environment: "TEST",
threeDs: {
merchantUrl: "https://example.com",
deviceChannel: "BROWSER"
},
displayPaymentMethods: ["card", "applePay"],
paymentMethodDetails: {
card: {
accountId: "1002602570"
},
applePay: {
accountId: "1002602570",
label: "John Doe",
type: 'buy',
color: 'continue'
}
}
}, function (instance, error, result) {
if (result && result.paymentHandleToken) {
//passing the token to the server to complete the payment
dummyCallPayment(result.paymentHandleToken, instance);
} else {
instance.showFailureScreen("Payout was not successful. Please try with the same or another card.");
}
});

  2. The token produced by Paysafe Checkout should be processed via the /originalcredits (for the iGaming vertical) or with /standalonecredits (for non-iGaming verticals) endpoints to complete the payout transaction.

POST  https://api.test.paysafe.com/paymenthub/v1/originalcredits

 

{
"merchantRefNum": "693b4dc4-d65b-450f-9fa2-152d6b4a9104",
"amount": 12900,
"currencyCode": "USD",
"dupCheck": true,
"accountId": "1002602570",
"paymentHandleToken": "AEHC2uOdef1iGFZ",
"customerIp": "127.0.0.1",
"description": "Lottery X payout"
}

{
"id": "7746f8d6-bf1a-47c1-a78c-2be8228ec390",
"paymentType": "CARD",
"paymentHandleToken": "AEHC2uOdef1iGFZ",
"merchantRefNum": "693b4dc4-d65b-450f-9fa2-152d6b4a9104",
"currencyCode": "USD",
"txnTime": "2025-08-14T12:37:12Z",
"customerIp": "127.0.0.1",
"status": "PENDING",
"amount": 12900,
"description": "Lottery X payout",
"merchantDescriptor": {},
"card": {
"status": "ACTIVE",
"lastDigits": "0492",
"cardCategory": "CREDIT",
"tokenType": "APPLE_PAY",
"applePay": {
"lastDigits": "0650",
"expiry": {
"month": "1",
"year": "2030"
},
"subtype": "DEVICE"
}
}
}

Custom UI with Disbursement Request API and Payments API

The Disbursement Request API provided by Apple offers fully tailored experience towards the payout scenario. It is useful if you are building your own UI for the payout flow instead of using the ready-made Paysafe Checkout.

The flow consists of the following steps:

  1. At the front-end, you should utilize the Disbursement Request API to show the Apple Pay button:

var PAYSAFEVALIDATEURL = "https://hosted.paysafe.com/request/api/v1/validate"
var MERCHANT_IDENTIFIER = "merchant.com.your.merchant.identifier";
var APIKEY = "yourPublicPaysafeAPIKey"
var CURRENCY_CODE = "USD";
var COUNTRY_CODE = "US";
var ARRAYBRANDS = ['masterCard', 'visa', "amex", "discover", "interac"]
var VERSION = 4;
var PRICE = 129.00;

const applePayMethod = {
supportedMethods: "https://apple.com/apple-pay",
data: {
version: VERSION,
merchantIdentifier: MERCHANT_IDENTIFIER,
merchantCapabilities: ["supports3DS", "supportsCredit", "supportsDebit"],
supportedNetworks: ARRAYBRANDS,
countryCode: COUNTRY_CODE,
},
};

const paymentDetails = {
total: {
label: "Disbursement Demo (Card is not charged)",
amount: {
value: PRICE,
currency: CURRENCY_CODE
}
},
modifiers: [
{
supportedMethods: "https://apple.com/apple-pay",
data: {
disbursementRequest: {},
additionalLineItems: [
{
label: "Total Amount",
amount: price
},
{
label: "Apple Pay Demo",
amount: price,
disbursementLineItemType: "disbursement"
}
]
}
}
]
};

const paymentOptions = {
requestPayerName: false,
requestPayerEmail: false,
requestBillingAddress: false,
requestPayerPhone: false,
requestShipping: false
};

async function applePayButtonClicked() {
// Consider other payout options if Disbursement Request API is not available on the browser/platform
if (!window.PaymentRequest)
return;
try {
const request = new PaymentRequest([applePayMethod], paymentDetails, paymentOptions);

request.onmerchantvalidation = function (event) {
const sessionPromise = getApplePaySession(event.validationURL);
event.complete(sessionPromise);
};

const response = await request.show();
console.log("Apple Pay response: " + JSON.stringify(response.details));
const status = "success";
await response.complete(status);
} catch (e) {
alert(e);
}
}

// Validating the session with Apple, sending the merchant domain from which the Apple Pay button is invoked
function getApplePaySession(url) {
return new Promise(function (resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.open('POST', PAYSAFEVALIDATEURL);
xhr.onload = function () {
if (this.status >= 200 && this.status < 300) {
resolve(JSON.parse(xhr.response));
} else {
reject({
status: this.status,
statusText: xhr.statusText
});
}
};
xhr.onerror = function () {
reject({
status: this.status,
statusText: xhr.statusText
});
};
xhr.setRequestHeader("Content-Type", "application/json");
xhr.setRequestHeader("X-Paysafe-Credentials", "Basic " + APIKEY);
xhr.send(JSON.stringify({
validationUrl: url,
domainName: window.location.host,
displayName: window.location.host
}));
});
}

     2.When the user authorizes the payment sheet, the standard Apple Pay encrypted payload is returned:
 

{
"token": {
"paymentData": {
"data": "redactedEncryptedPayload",
"signature": "redactedSignature",
"header": {
"publicKeyHash": "redactedPublicKeyHash",
"ephemeralPublicKey": "redactedEphemeralPublicKey",
"transactionId": "redactedTransactionId"
},
"version": "EC_v1"
},
"paymentMethod": {
"network": "Visa",
"displayName": "Visa 0492",
"type": "debit"
},
"transactionIdentifier": "redactedTransactionIdentifier"
}
}

3. The encrypted payload should be passed to the /paymenthandles endpoint which in turn gives back the Paysafe Apple Pay token.

POST https://api.test.paysafe.com/paymenthub/v1/paymenthandles

{
"merchantRefNum": "c03a0965-2bd7-4f63-9227-e68e345a9b25",
"transactionType": "PAYMENT",
"amount": 12900,
"accountId": "1002602570",
"applePay": {
"applePayPaymentToken": {
"token": {
"paymentData": {
"data": "redactedPublicKeyHash",
"signature": "redactedSignature",
"header": {
"publicKeyHash": "redactedPublicKeyHash",
"ephemeralPublicKey": "redactedEphemeralPublicKey",
"transactionId": "redactedTransactionId"
},
"version": "EC_v1"
},
"paymentMethod": {
"network": "Visa",
"displayName": "Visa 0492",
"type": "debit"
},
"transactionIdentifier": "redactedTransactionIdentifier"
}
}
},
"paymentType": "CARD",
"currencyCode": "CAD"
}

{
"id": "c03a0965-2bd7-4f63-9227-e68e345a9b25",
"accountId": "1002602570",
"paymentType": "CARD",
"paymentHandleToken": "AEHC2uOdef1iGFZ",
"merchantRefNum": "0583d12d-42cb-483e-b9e4-9c6cc58954b8",
"currencyCode": "CAD",
"txnTime": "2025-08-12T14:19:59Z",
"customerIp": "127.0.0.1",
"status": "PAYABLE",
"amount": 150,
"action": "NONE",
"usage": "SINGLE_USE",
"timeToLiveSeconds": 899,
"transactionType": "PAYMENT",
"executionMode": "SYNCHRONOUS",
"card": {
"status": "ACTIVE",
"lastDigits": "0492",
"cardCategory": "CREDIT",
"tokenType": "APPLE_PAY",
"applePay": {
"lastDigits": "0650",
"expiry": {
"month": "1",
"year": "2030"
},
"subtype": "DEVICE"
}
},
"applePay": {
       "applePayPaymentToken": {
"token": {
"paymentData": {
"data": "redactedPublicKeyHash",
"signature": "redactedSignature",
"header": {
"publicKeyHash": "redactedPublicKeyHash",
"ephemeralPublicKey": "redactedEphemeralPublicKey",
"transactionId": "redactedTransactionId"
},
"version": "EC_v1"
},
"paymentMethod": {
"network": "Visa",
"displayName": "Visa 0492",
"type": "debit"
},
"transactionIdentifier": "redactedTransactionIdentifier"
}
}
},
"skip3ds": false
}

4. The token should be used with the /originalcredits (for the iGaming vertical) or with /standalonecredits (for non-iGaming verticals) to process the disbursement from the merchant account to the consumer card. 

POST https://api.test.paysafe.com/paymenthub/v1/originalcredits

{
"merchantRefNum": "693b4dc4-d65b-450f-9fa2-152d6b4a9104",
"amount": 12900,
"currencyCode": "USD",
"dupCheck": true,
"accountId": "1002602570",
"paymentHandleToken": "AEHC2uOdef1iGFZ",
"customerIp": "127.0.0.1",
"description": "Lottery X payout"
}

{
"id": "7746f8d6-bf1a-47c1-a78c-2be8228ec390",
"paymentType": "CARD",
"paymentHandleToken": "AEHC2uOdef1iGFZ",
"merchantRefNum": "693b4dc4-d65b-450f-9fa2-152d6b4a9104",
"currencyCode": "USD",
"txnTime": "2025-08-14T12:37:12Z",
"customerIp": "127.0.0.1",
"status": "PENDING",
"amount": 12900,
"description": "Lottery X payout",
"merchantDescriptor": {},
"card": {
"status": "ACTIVE",
"lastDigits": "0492",
"cardCategory": "CREDIT",
"tokenType": "APPLE_PAY",
"applePay": {
"lastDigits": "0650",
"expiry": {
"month": "1",
"year": "2030"
},
"subtype": "DEVICE"
}
}
}

Closed loop flow implementation

In this section, we describe how to technically implement the closed loop flow when integrating Apple Pay payouts, ensuring alignment with both Apple’s requirements and regional compliance needs.

To realize the closed loop, you need to:

  1. Allow the consumer to make a deposit/payment using the Apple Pay button.
  2. Save the card that the Apple Pay wallet provided in step 1 on file.
  3. Display the saved card-on-file during the payout flow.
  4. Trigger a payout with the saved card.

If you utilize Checkout, steps 1, 2 and 3 are handled by the Checkout.

Technical Guidance

You may execute steps 1,2 and 3 above:

  • Using entirely Paysafe Checkout, as Paysafe Checkout supports UI for both the deposit and the payout flows
    or
  • Using entirely your own custom UI built on top of the data which the Payments API responses provide
    or
  • A combination - using Paysafe Checkout for deposit, while building your own UI for payout, or vice versa. 

Let's analyze how to realize the closed loop scenario, first with Paysafe Checkout entirely, and then with Payments API entirely, where you can build your own UI.

Paysafe Checkout Implementation

Deposit flow

You can enable Apple Pay at Paysafe Checkout's deposit mode by following Paysafe Checkout's Apple Pay page. 

By default, the Apple Pay screen in Paysafe Checkout does not allow consumers the option to save the card provided by the Apple Pay wallet. To ensure a closed loop scenario however, the Apple Pay card used for the deposit or payment must also be available for a payout.

Therefore, Paysafe Checkout has the option to show a checkbox informing consumers that their card will be saved. Since the card is required for payout purposes in accordance with AML regulations, this checkbox can be made mandatory.

Consult your Paysafe representative to enable this feature for you.

When a deposit or payment is completed with the checkbox checked, the card provided by the Apple Pay wallet can be saved on file, following the usual Paysafe Checkout and Payments API processes as described in Paysafe Developer: Save Cards and Addresses

Payout flow

In order to display the saved cards in Paysafe Checkout payout flow, including Apple Pay provided cards, we need to do:

  1. Create a single-use customer token using the Paysafe id of the customer:

    POST https://api.test.paysafe.com/paymenthub/v1/customers/{customerId}/singleusecustomertokens

    The response is formatted as follows:

{
"id": "4513eb01-3a4e-48e3-9f97-6dcf1bc733af",
"timeToLiveSeconds": 899,
"status": "ACTIVE",
"singleUseCustomerToken": "SP6G4iiDkNEjYTSM",
"locale": "en_US",
"firstName": "John",
"middleName": "John",
"lastName": "Doe",
"dateOfBirth": {
"day": 1,
"month": 1,
"year": 1985
},
"email": "john.doe@paysafe.com,
"phone": "777-444-8888",
"ip": "192.168.0.1",
"nationality": "Canadian",
"addresses": [
{
"id": "5b944470-08f9-4b73-9554-75368b45be9c",
"city": "Jacksonville",
"state": "FL",
"country": "US",
"zip": "32256",
"status": "ACTIVE",
"street": "5335 Gate Pkwy"
}
],
"paymentHandles": [
{
"id": "8f630df2-1cbb-4c43-809b-dc7574486f64",
"status": "INITIATED",
"usage": "SINGLE_USE",
"paymentType": "CARD",
"paymentHandleToken": "SCM9TL8eM7WBNtQZ",
"card": {
"id": "ea60dcc3-4dfa-4f0e-b2ed-93f9f8785e7a",
"lastDigits": "1470",
"cardExpiry": {
"month": "11",
"year": "2027"
},
"cardBin": "450003",
"cardType": "VI",
"holderName": "John Doe",
"status": "ACTIVE",
"cardCategory": "CREDIT",
"applePay": {
"lastDigits": "0004",
"expiry": {
"month": "11",
"year": "2027"
},
"subtype": "DEVICE"
},
"tokenType": "APPLE_PAY",
"issuingCountry": "CA"
},
"billingDetailsId": "5b944470-08f9-4b73-9554-75368b45be9c",
"multiUsePaymentHandleId": "8dd4b31d-9129-4064-8358-be6c5ed689a8"
}
],
"customerId": "11bfcdb2-60ab-45fd-bae7-a83e40f5040a"
}

2. Use the singleUseCustomerToken to display the consumer's saved cards when initiating Paysafe Checkout. For more information, see Save Cards and Addresses.

var APIKEY = "yourPublicPaysafeAPIKey"
paysafe.checkout.setup(APIKEY, {
currency: "USD",
amount: 10000,
payout: true,
payoutConfig: {
maximumAmount: 100000,
},
merchantRefNum: dummyGenerateGuid(), // merchantRefNum should be unique and must keep changing every transaction
environment: "TEST",
   singleUseCustomerToken: "SP6G4iiDkNEjYTSM"
threeDs: {
merchantUrl: "https://example.com",
deviceChannel: "BROWSER"
},
displayPaymentMethods: ["card", "applePay"],
paymentMethodDetails: {
card: {
accountId: "1002602570"
},
applePay: {
accountId: "1002602570",
label: "John Doe",
type: 'buy',
color: 'continue'
}
}
}, function (instance, error, result) {
if (result && result.paymentHandleToken) {
//passing the token to the server to complete the payment
dummyCallPayment(result.paymentHandleToken, instance);
} else {
instance.showFailureScreen("Payout was not successful. Please try with the same or another card.");
}
});

3. The token returned by Paysafe Checkout should be used with /originalcredits (for the iGaming vertical) or /standalonecredits (for non-iGaming verticals) endpoints to complete the payout transaction: 

POST https://api.test.paysafe.com/paymenthub/v1/originalcredits

{
"merchantRefNum": "693b4dc4-d65b-450f-9fa2-152d6b4a9104",
"amount": 10000,
"currencyCode": "USD",
"dupCheck": true,
"accountId": "1002602570",
"paymentHandleToken": "AEHC2uOdef1iGFZ",
"customerIp": "127.0.0.1",
"description": "Lottery X payout"
}

{
"id": "7746f8d6-bf1a-47c1-a78c-2be8228ec390",
"paymentType": "CARD",
"paymentHandleToken": "AEHC2uOdef1iGFZ",
"merchantRefNum": "693b4dc4-d65b-450f-9fa2-152d6b4a9104",
"currencyCode": "USD",
"txnTime": "2025-08-14T12:37:12Z",
"customerIp": "127.0.0.1",
"status": "PENDING",
"amount": 10000,
"description": "Lottery X payout",
"merchantDescriptor": {},
"card": {
"status": "ACTIVE",
"lastDigits": "0492",
"cardCategory": "CREDIT",
"tokenType": "APPLE_PAY",
"applePay": {
"lastDigits": "0650",
"expiry": {
"month": "1",
"year": "2030"
},
"subtype": "DEVICE"
}
}
}

Custom UI with Payments API

With this implementation, you are building your own user interface on top of what Payments API provisions as data points.

Deposit flow

For this step, you need to:

  • Create the Apple Pay button by integrating directly with the Apple Pay API. In this case, you need to process the Apple Pay payload through the /paymenthandles endpoint to get a Paysafe payment handle token, as described here: Paysafe Developer: ApplePay Token Processing
    or
  • Use our Paysafe.js library which offers creating the button for you. Paysafe.js automatically provides payment handle.

Also, you need to build the user interface to ask for consent or inform the user that the card will be saved for withdrawals. In order to save a single-use Paysafe payment handle token to a permanent one, consult with this article: Paysafe Developer: Save Cards and Addresses

Saved cards during deposit flow

It is important to note that if you are showing saved cards with your own user interface, you need to account for whether a saved card originates from an Apple Pay deposit transaction. If so, you should not display such a saved card during deposit flow for returning customers. When it comes to saved Apple Pay-provided cards, they should only be displayed during a payout flow.

In order to differentiate whether a saved card originates from an Apple Pay deposit transaction, for such cards we are returning tokenType as APPLE_PAY, like so:

GET https://api.test.paysafe.com/paymenthub/v1/customers/{{profileId}}?fields=paymenthandles,addresses

{
"id": "529d3cd2-93ba-41bc-a324-7431e9bd9e22",
"status": "ACTIVE",
"merchantCustomerId": "691d6eb4-9a41-4a6b-8750-1549f263a427",
"locale": "en_US",
"paymentToken": "PsXFk4hYQP6Zlw2",
"addresses": [
{
"id": "06c0dabc-0321-4a81-9c78-d8a14c46e128",
"city": "Jacksonville",
"state": "FL",
"country": "US",
"zip": "32256",
"status": "ACTIVE",
"street": "5335 Gate Pkwy"
},
{
"id": "21f1957c-0697-4bd6-a630-7e3a107606af",
"city": "Jacksonville",
"state": "FL",
"country": "US",
"zip": "32256",
"status": "ACTIVE",
"street": "5335 Gate Pkwy"
}
],
"paymentHandles": [
{
"id": "0c253620-fdb4-4953-b6ff-c977ce814332",
"merchantRefNum": "7b915954-9c68-4773-9174-ad6daf266b1f",
"status": "PAYABLE",
"usage": "MULTI_USE",
"paymentType": "CARD",
"action": "NONE",
"paymentHandleToken": "CyYJ36SRMjZhWFw",
"creationTime": "2025-07-18T11:17:18Z",
"card": {
"id": "3676529c-3234-443d-8ca3-b9b3286f49b0",
"lastDigits": "2482",
"cardExpiry": {
"month": "1",
"year": "2027"
},
"cardBin": "520000",
"cardType": "MC",
"holderName": "John Doe",
"status": "ACTIVE",
"cardCategory": "CREDIT",
"issuingCountry": "US"
},
"billingDetailsId": "21f1957c-0697-4bd6-a630-7e3a107606af",
"customerId": "529d3cd2-93ba-41bc-a324-7431e9bd9e22"
},
{
"id": "cb9c4665-9e6e-40db-90c9-9f7abe7e5083",
"merchantRefNum": "4e54de29-e783-48ea-89e0-b51e792ae589",
"status": "PAYABLE",
"usage": "MULTI_USE",
"paymentType": "CARD",
"action": "NONE",
"executionMode": "SYNCHRONOUS",
"paymentHandleToken": "CqidOBIoW31GNnE",
"creationTime": "2025-07-18T11:17:11Z",
"card": {
"id": "1c26112a-3194-4a8b-a649-15d15b228544",
"lastDigits": "1028",
"cardExpiry": {
"month": "11",
"year": "2029"
},
"cardBin": "539107",
"cardType": "MC",
"holderName": "John Doe",
"status": "ACTIVE",
"cardCategory": "DEBIT",
"applePay": {
"lastDigits": "0008",
"expiry": {
"month": "11",
"year": "2029"
},
"subtype": "DEVICE"
},
"tokenType": "APPLE_PAY",
"issuingCountry": "US"
},
"billingDetailsId": "06c0dabc-0321-4a81-9c78-d8a14c46e128",
"customerId": "529d3cd2-93ba-41bc-a324-7431e9bd9e22"
}
]
}

Payout flow

The final step is to show the Apple Pay-provided cards on your withdrawal/payout screen and allow the consumer to execute the payment. This is illustrated with the steps below. The example assumes that we have one saved Apple Pay card and one standard PAN card.

  1. Send a GET request to the /customers endpoint.

GET https://api.test.paysafe.com/paymenthub/v1/customers/{customerId}/?fields=paymenthandles,addresses

{
"id": "529d3cd2-93ba-41bc-a324-7431e9bd9e22",
"status": "ACTIVE",
"merchantCustomerId": "691d6eb4-9a41-4a6b-8750-1549f263a427",
"locale": "en_US",
"paymentToken": "PsXFk4hYQP6Zlw2",
"addresses": [
{
"id": "06c0dabc-0321-4a81-9c78-d8a14c46e128",
"city": "Jacksonville",
"state": "FL",
"country": "US",
"zip": "32256",
"status": "ACTIVE",
"street": "5335 Gate Pkwy"
},
{
"id": "21f1957c-0697-4bd6-a630-7e3a107606af",
"city": "Jacksonville",
"state": "FL",
"country": "US",
"zip": "32256",
"status": "ACTIVE",
"street": "5335 Gate Pkwy"
}
],
"paymentHandles": [
{
"id": "0c253620-fdb4-4953-b6ff-c977ce814332",
"merchantRefNum": "7b915954-9c68-4773-9174-ad6daf266b1f",
"status": "PAYABLE",
"usage": "MULTI_USE",
"paymentType": "CARD",
"action": "NONE",
"paymentHandleToken": "CyYJ36SRMjZhWFw",
"creationTime": "2025-07-18T11:17:18Z",
"card": {
"id": "3676529c-3234-443d-8ca3-b9b3286f49b0",
"lastDigits": "2482",
"cardExpiry": {
"month": "1",
"year": "2027"
},
"cardBin": "520000",
"cardType": "MC",
"holderName": "John Doe",
"status": "ACTIVE",
"cardCategory": "CREDIT",
"issuingCountry": "US"
},
"billingDetailsId": "21f1957c-0697-4bd6-a630-7e3a107606af",
"customerId": "529d3cd2-93ba-41bc-a324-7431e9bd9e22"
},
{
"id": "cb9c4665-9e6e-40db-90c9-9f7abe7e5083",
"merchantRefNum": "4e54de29-e783-48ea-89e0-b51e792ae589",
"status": "PAYABLE",
"usage": "MULTI_USE",
"paymentType": "CARD",
"action": "NONE",
"executionMode": "SYNCHRONOUS",
"paymentHandleToken": "CqidOBIoW31GNnE",
"creationTime": "2025-07-18T11:17:11Z",
"card": {
"id": "1c26112a-3194-4a8b-a649-15d15b228544",
"lastDigits": "1028",
"cardExpiry": {
"month": "11",
"year": "2029"
},
"cardBin": "539107",
"cardType": "MC",
"holderName": "John Doe",
"status": "ACTIVE",
"cardCategory": "DEBIT",
"applePay": {
"lastDigits": "0008",
"expiry": {
"month": "11",
"year": "2029"
},
"subtype": "DEVICE"
},
"tokenType": "APPLE_PAY",
"issuingCountry": "US"
},
"billingDetailsId": "06c0dabc-0321-4a81-9c78-d8a14c46e128",
"customerId": "529d3cd2-93ba-41bc-a324-7431e9bd9e22"
}
]
}

2. Using the card metadata, display the cards to the consumer so that they can choose a card for the payout.

For the saved card originating from an Apple Pay transaction (i.e. where the tokenType is APPLE_PAY), you should be mindful of the following:

  • Do not display the expiry date next to the card in your user interface. The expiry date that we return belongs to the Apple Pay DPAN (Device PAN) and the user can't know this details from anywhere else. Displaying the expiry date of the DPAN (which differs from the expiry date of the PAN card) may confuse the consumer. We only return expiry date for backwards compatibility purposes in this case.
  • Do not display the cardBin digits next to the card in your user interface. These first six digits of the card belong to the DPAN (and they are different from the first six digits of the PAN card). Displaying cardBin in this case will confuse the consumer. We only return cardBin for backwards compatibility purposes in this case.
  • Freely display the last four digits of the card that are given in the paymentHandles.card.lastDigits . We are receiving those from Apple and these are the last four digits of the actual PAN card. In the example above, the real last four digits are 1028 . 

3. Using the paymentHandleToken that corresponds to the chosen card, call /originalcredits (for the iGaming vertical) or /standalonecredits (for non-iGaming verticals) endpoints to complete the payout transaction: 

POST https://api.test.paysafe.com/paymenthub/v1/originalcredits

{
"merchantRefNum": "693b4dc4-d65b-450f-9fa2-152d6b4a9104",
"amount": 10000,
"currencyCode": "USD",
"dupCheck": true,
"accountId": "1002602570",
"paymentHandleToken": "AEHC2uOdef1iGFZ",
"customerIp": "127.0.0.1",
"description": "Lottery X payout"
}

{
"id": "7746f8d6-bf1a-47c1-a78c-2be8228ec390",
"paymentType": "CARD",
"paymentHandleToken": "AEHC2uOdef1iGFZ",
"merchantRefNum": "693b4dc4-d65b-450f-9fa2-152d6b4a9104",
"currencyCode": "USD",
"txnTime": "2025-08-14T12:37:12Z",
"customerIp": "127.0.0.1",
"status": "PENDING",
"amount": 10000,
"description": "Lottery X payout",
"merchantDescriptor": {},
"card": {
"status": "ACTIVE",
"lastDigits": "0492",
"cardCategory": "CREDIT",
"tokenType": "APPLE_PAY",
"applePay": {
"lastDigits": "0650",
"expiry": {
"month": "1",
"year": "2030"
},
"subtype": "DEVICE"
}
}
}
  • Apple Pay-provided cards (known as DPAN cards, or Device PANs) are device-bound. This means that once a device gets reset, related DPAN may no longer be available for transactions, hence a payout may not be successful. Take this into consideration when building user interface for payouts, which includes Apple Pay provided cards.
  • Processor/Acquirer availability of the Apple Pay payouts feature applies. Consult your Paysafe representative if the feature is available in your region and for your acquirer.

Configure Webhooks

To learn how to configure your webhooks, see Configure Webhooks.

Further testing and considerations

You can simulate negative processing cases by using one of the predefined amounts from our fixed-amount simulator: Paysafe Developer: Simulating Card Payments.