Payouts
Google Pay is widely recognized for simplifying and enhancing the payment experience for consumers during deposits and purchases. In addition to deposits, Google Pay also supports payouts, allowing businesses to send funds directly to consumers—for example, returning betting winnings in the iGaming sector.
This page explains the key concepts and requirements for implementing closed loop Google Pay payouts.
Payout Flow Models
Only closed loop payouts are supported with Google Pay.
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.
NOTE: If you are interested in Google Pay payouts, please contact your Paysafe representative.
Closed Loop Flow Implementation
This section explains how to implement the closed loop flow for Google Pay payouts, ensuring alignment with both Google’s requirements and regional compliance needs.
To establish the closed loop, you need to:
-
Enable the consumer to make a deposit or payment using the Google Pay button.
-
Save the card provided by the Google Pay wallet in step 1 on file.
-
Display the saved card-on-file during the payout flow.
-
Trigger a payout using the saved card.
NOTE: If you use Paysafe Checkout, steps 1, 2, and 3 are handled by Checkout.
Technical Guidance
You can complete steps 1, 2, and 3 in one of the following ways:
- Using Paysafe Checkout entirely, as it provides UI support for both deposit and payout flows.
- Using your own custom UI, built on top of the data returned by the Payments API responses.
- Combining both approaches—for example, using Paysafe Checkout for deposits while building your own UI for payouts, or vice versa.
Next, we’ll explore how to implement the closed loop scenario first using Paysafe Checkout exclusively, and then using the Payments API, where you have full flexibility to build your own UI.
Implementation Using Paysafe Checkout
Deposit flow
-
Enable Google Pay in Paysafe Checkout’s deposit mode.
Follow the instructions on the Paysafe Checkout Google Pay page. -
Enable card saving for payouts.
By default, the Google Pay screen does not allow consumers to save the card provided by the Google Pay wallet. To support a closed loop scenario however, the card used for the deposit or payment must also be available for payouts.- Paysafe Checkout provides an option to display a checkbox informing consumers that their card will be saved.
- Since the card is required for payout purposes in compliance with AML regulations, this checkbox can be made mandatory.
- Contact your Paysafe representative to enable this feature for you.

When a deposit or payment is completed with the checkbox selected, the card provided by the Google Pay wallet can be saved on file, following the standard Paysafe Checkout and Payments API processes described on the Paysafe Checkout Save Cards and Addresses page.
Payout flow
To display saved cards in the Paysafe Checkout payout flow—including cards provided by Google Pay—follow these steps:
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 will include a singleUseCustomerToken, which is required for step 2.
{
"id": "9b724dd7-fd9c-4af7-945d-64aa41648ce2",
"timeToLiveSeconds": 899,
"status": "ACTIVE",
"singleUseCustomerToken": "SPAQRfLGWW22VxDu",
"locale": "en_US",
"firstName": "John",
"middleName": "James",
"lastName": "Doe",
"dateOfBirth": {
"day": 24,
"month": 10,
"year": 1981
},
"email": "john.doe@epaysafe.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": "add77202-7334-4426-be17-e9ab70c9a3f5",
"status": "INITIATED",
"usage": "SINGLE_USE",
"paymentType": "CARD",
"paymentHandleToken": "SCuQogbKxCdcGfLb",
"card": {
"id": "3a5714b3-e00f-4685-bb92-7dcc93d4bab1",
"lastDigits": "0010",
"cardExpiry": {
"month": "5",
"year": "2030"
},
"cardBin": "404801",
"cardType": "VI",
"holderName": "John Doe",
"status": "ACTIVE",
"cardCategory": "DEBIT",
"googlePay": {
"lastDigits": "0007",
"expiry": {
"month": "5",
"year": "2030"
}
},
"tokenType": "GOOGLE_PAY",
"issuingCountry": "GB"
},
"billingDetailsId": "079e8cfe-f09c-4173-b985-900dd3e2c971",
"multiUsePaymentHandleId": "dae9db00-f489-4335-a6a3-4394c89d3fb1"
}
],
"customerId": "c77c6c65-2c14-4a9c-95e2-a1d0f3ade5f5"
}
2. Use the singleUseCustomerToken to display the consumer’s saved cards when initiating Paysafe Checkout.
Example JavaScript configuration
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: "SPAQRfLGWW22VxDu"
threeDs: {
merchantUrl: "https://example.com",
deviceChannel: "BROWSER"
},
displayPaymentMethods: ["card"],
paymentMethodDetails: {
card: {
accountId: "1002602570"
}
}
}, 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.");
}
});
For more details see the Paysafe Checkout Save Cards and Addresses page.
3. Complete the payout transaction using the token returned by Paysafe Checkout with one of the following endpoints:
- /originalcredits (for iGaming sectors)
- /standalonecredits (for non-iGaming sectors)
e.g. POST https://api.test.paysafe.com/paymenthub/v1/originalcredits
Example payout request
{
"merchantRefNum": "a13295fa-9d44-4926-8cb2-a8ce7343cf3c",
"amount": 1500,
"currencyCode": "CAD",
"dupCheck": true,
"paymentHandleToken": "SCuOXTnQoIu8Jcbl",
"customerIp": "192.168.0.1",
"description": "iGaming Test",
"accountId": "1002788600"
}
Example payout response
{
"id": "a13295fa-9d44-4926-8cb2-a8ce7343cf3c",
"paymentType": "CARD",
"paymentHandleToken": "SCuOXTnQoIu8Jcbl",
"merchantRefNum": "7304a597-ebce-4d97-9c43-b1be22703e7b",
"currencyCode": "CAD",
"txnTime": "2025-12-03T14:20:06Z",
"billingDetails": {
"city": "Jacksonville",
"state": "FL",
"country": "US",
"zip": "32256",
"status": "ACTIVE",
"street": "5335 Gate Pkwy"
},
"customerIp": "192.168.0.1",
"status": "COMPLETED",
"amount": 1500,
"description": "iGaming Test",
"merchantDescriptor": {},
"gatewayResponse": {
"authCode": "596139",
"serializable": true
},
"card": {
"cardExpiry": {
"month": "5",
"year": "2030"
},
"holderName": "John Doe",
"status": "ACTIVE",
"cardType": "VI",
"cardBin": "404801",
"lastDigits": "0010",
"cardCategory": "DEBIT",
"issuingCountry": "GB",
"tokenType": "GOOGLE_PAY",
"googlePay": {
"lastDigits": "0007",
"expiry": {
"month": "5",
"year": "2030"
}
}
},
"profile": {
"firstName": "Joe",
"lastName": "Doe",
"email": "Joe.Doe@paysafe.com"
},
"cardSchemeTransactionId": "AGZZ2942730090"
}
Implementation Using Custom UI and Payments API
With this implementation, you build your own user interface on top of the data provided by the Payments API.
Deposit flow
-
Integrate Google Pay.
Follow the integration instructions on the Payments API Google Pay page. -
Request consumer consent to save the card.
Build a user interface that informs the consumer that their card will be saved for withdrawals.
To convert a single-use Paysafe payment handle token into a permanent one, refer to the Paysafe Checkout Save Cards and Addresses page.
Handling saved cards during deposit flow
If you display saved cards in your custom UI, you must check whether a saved card originates from a Google Pay deposit transaction.
- If a saved card originates from a Google Pay deposit, do NOT show that card during a deposit flow for returning consumers.
- Display Google Pay–provided cards only during the payout flow.
To identify cards originating from a Google Pay deposit transaction, look for tokenType set to GOOGLE_PAY in the API response to the following request:
GET https://api.test.paysafe.com/paymenthub/v1/customers/{{profileId}}?fields=paymenthandles,addresses
Example response
{
"id": "2852f076-bf15-47db-970a-eea40bc8b0df",
"status": "ACTIVE",
"merchantCustomerId": "00892623-04f1-4057-af9b-616fec9fa6e1",
"locale": "en_US",
"firstName": "John",
"middleName": "James",
"lastName": "Doe",
"dateOfBirth": {
"day": 24,
"month": 10,
"year": 1981
},
"gender": "M",
"email": "john.doe@epaysafe.com",
"phone": "777-444-8888",
"cellPhone": "777-444-8888",
"nationality": "Canadian",
"ip": "192.168.0.1",
"paymentToken": "Pof65IIaRWIZpaM",
"addresses": [
{
"id": "5b944470-08f9-4b73-9554-75368b45be9c",
"city": "Jacksonville",
"state": "FL",
"country": "US",
"zip": "32256",
"status": "ACTIVE",
"street": "5335 Gate Pkwy"
}
],
"paymentHandles": [
{
"id": "23d10911-e519-4135-8341-8c1bafb46edd",
"merchantRefNum": "26588b63-9b43-4a69-a906-a4da43ae16db",
"status": "PAYABLE",
"usage": "MULTI_USE",
"paymentType": "CARD",
"action": "NONE",
"executionMode": "SYNCHRONOUS",
"paymentHandleToken": "CIF0j7RWMgAZCkj",
"creationTime": "2025-12-03T10:08:58Z",
"card": {
"id": "ed38b897-75e0-47a8-8334-8ab4acdaa70d",
"lastDigits": "0010",
"cardExpiry": {
"month": "5",
"year": "2030"
},
"cardBin": "404801",
"cardType": "VI",
"holderName": "John Doe",
"status": "ACTIVE",
"cardCategory": "DEBIT",
"googlePay": {
"lastDigits": "0007",
"expiry": {
"month": "5",
"year": "2030"
}
},
"tokenType": "GOOGLE_PAY",
"issuingCountry": "GB"
},
"billingDetailsId": "8145dc7c-f60c-4722-b4a7-848ce1af5f16",
"customerId": "2852f076-bf15-47db-970a-eea40bc8b0df"
}
]
}
Payout flow
The final step is to display Google Pay–provided cards on your withdrawal/ payout screen and allow the consumer to complete the payment. The following example assumes there is one saved Google Pay card and one standard PAN card.
1. Retrieve saved cards.
Send a GET request to the /customers endpoint:
GET https://api.test.paysafe.com/paymenthub/v1/customers/{customerId}/?fields=paymenthandles,addresses
Example response
{
"id": "2852f076-bf15-47db-970a-eea40bc8b0df",
"status": "ACTIVE",
"merchantCustomerId": "00892623-04f1-4057-af9b-616fec9fa6e1",
"locale": "en_US",
"firstName": "John",
"middleName": "James",
"lastName": "Doe",
"dateOfBirth": {
"day": 24,
"month": 10,
"year": 1981
},
"gender": "M",
"email": "john.doe@epaysafe.com",
"phone": "777-444-8888",
"cellPhone": "777-444-8888",
"nationality": "Canadian",
"ip": "192.168.0.1",
"paymentToken": "Pof65IIaRWIZpaM",
"addresses": [
{
"id": "5b944470-08f9-4b73-9554-75368b45be9c",
"city": "Jacksonville",
"state": "FL",
"country": "US",
"zip": "32256",
"status": "ACTIVE",
"street": "5335 Gate Pkwy"
}
],
"paymentHandles": [
{
"id": "23d10911-e519-4135-8341-8c1bafb46edd",
"merchantRefNum": "26588b63-9b43-4a69-a906-a4da43ae16db",
"status": "PAYABLE",
"usage": "MULTI_USE",
"paymentType": "CARD",
"action": "NONE",
"executionMode": "SYNCHRONOUS",
"paymentHandleToken": "CIF0j7RWMgAZCkj",
"creationTime": "2025-12-03T10:08:58Z",
"card": {
"id": "ed38b897-75e0-47a8-8334-8ab4acdaa70d",
"lastDigits": "0010",
"cardExpiry": {
"month": "5",
"year": "2030"
},
"cardBin": "404801",
"cardType": "VI",
"holderName": "John Doe",
"status": "ACTIVE",
"cardCategory": "DEBIT",
"googlePay": {
"lastDigits": "0007",
"expiry": {
"month": "5",
"year": "2030"
}
},
"tokenType": "GOOGLE_PAY",
"issuingCountry": "GB"
},
"billingDetailsId": "8145dc7c-f60c-4722-b4a7-848ce1af5f16",
"customerId": "2852f076-bf15-47db-970a-eea40bc8b0df"
}
]
}
2. Display cards in your UI.
Use the card metadata to show the available cards so the consumer can choose one for the payout.
For a saved card originating from a Google Pay transaction (where tokenType = GOOGLE_PAY), keep the following in mind:
-
Do not display the expiry date next to the card in your user interface. The expiry date returned belongs to the Google Pay DPAN (Device PAN) and is different from the actual PAN card expiry. Showing it may confuse the consumer. We provide it only for backwards compatibility purposes.
-
Do not display the cardBin digits next to the card in your user interface. These first six digits belong to the DPAN and differ from the PAN card. Displaying them may confuse the consumer. We return cardBin only for backwards compatibility purposes.
-
Display the last four digits of the card from paymentHandles.card.lastDigits. We receive these digits from Google, and they are the last four digits of the actual PAN card. For example, in the response above, the real last four digits are 0010.
3. Complete the payout transaction.
Use the paymentHandleToken for the selected card and call:
- /originalcredits (for iGaming sectors)
- /standalonecredits (for non-iGaming sectors)
Example payout request
{
"merchantRefNum": "a13295fa-9d44-4926-8cb2-a8ce7343cf3c",
"amount": 1500,
"currencyCode": "CAD",
"dupCheck": true,
"paymentHandleToken": "CIF0j7RWMgAZCkj",
"customerIp": "192.168.0.1",
"description": "iGaming Test",
"accountId": "1002788600"
}
Example payout response
{
"id": "a13295fa-9d44-4926-8cb2-a8ce7343cf3c",
"paymentType": "CARD",
"paymentHandleToken": "CIF0j7RWMgAZCkj",
"merchantRefNum": "7304a597-ebce-4d97-9c43-b1be22703e7b",
"currencyCode": "CAD",
"txnTime": "2025-12-03T14:20:06Z",
"billingDetails": {
"city": "Jacksonville",
"state": "FL",
"country": "US",
"zip": "32256",
"status": "ACTIVE",
"street": "5335 Gate Pkwy"
},
"customerIp": "192.168.0.1",
"status": "COMPLETED",
"amount": 1500,
"description": "iGaming Test",
"merchantDescriptor": {},
"gatewayResponse": {
"authCode": "596139",
"serializable": true
},
"card": {
"cardExpiry": {
"month": "5",
"year": "2030"
},
"holderName": "John Doe",
"status": "ACTIVE",
"cardType": "VI",
"cardBin": "404801",
"lastDigits": "0010",
"cardCategory": "DEBIT",
"issuingCountry": "GB",
"tokenType": "GOOGLE_PAY",
"googlePay": {
"lastDigits": "0007",
"expiry": {
"month": "5",
"year": "2030"
}
}
},
"profile": {
"firstName": "Joe",
"lastName": "Doe",
"email": "Joe.Doe@cpaysafe.com"
},
"cardSchemeTransactionId": "AGZZ2942730090"
}
Important considerations
-
Google Pay–provided cards (DPAN cards) are device-bound.
If a device is reset, the associated DPAN may no longer be available for transactions, which could cause a payout to fail. Keep this in mind when designing your payout UI. -
Feature availability depends on your processor/ acquirer.
Please check with your Paysafe representative to confirm whether Google Pay payouts are supported in your region and by your acquirer.
Configure Webhooks
To learn how to set up your webhooks, see Configure Webhooks.
Test Cards
You can verify your Google Pay integration using our Google Pay test cards.
Further Testing
To simulate negative processing scenarios, use one of the predefined amounts from our fixed-amount simulator.
For more information, see Simulating Card Payments.