# Request an Apple Pay Card Payout The Apple Pay Card Payout solution enables you to perform payouts to eligible cards with Apple Pay on the following platforms and minimum OS versions: - iOS 17.0 - iPadOS 17.0 - Mac Catalyst 17.0 - visionOS 1.0 > **Note** > > You cannot perform Apple Pay card payouts using macOS or a browser. --- ## How it works To perform an Apple Pay card payout, follow these steps: 1. [Configure Apple Pay](#Configure_Apple_Pay). This step is only required once during your initial setup. 2. [Generate a Checkout.com card token](#Generate_a_card_token) using the Apple Pay token. 3. [Check the recipient card's eligibility](#Check_recipient_card_eligibility) to receive payouts. 4. [Check your sub-account balance](#Check_sub-account_balance) to ensure you have sufficient funds for the payout. 5. Perform a [direct funds disbursement](#Perform_a_direct_funds_disbursement), or [money transfer](#Perform_a_money_transfer). 6. [Check the payout's outcome](#Check_the_payout_outcome). --- ## Configure Apple Pay To perform payouts using Apple Pay, you must add your Apple merchant ID and generate your payment processing certificate. > **Note** > > If you've previously configured [Apple Pay](https://www.checkout.com/docs/payments/add-payment-methods/apple-pay.md) as a payment method, you can skip to [generating a card token](#Generate_a_card_token). ### Add your merchant ID In your Apple Developer account: 1. Go to the _Add Merchant IDs_ [section](https://developer.apple.com/account/resources/identifiers/add/merchant). 2. Select _Merchant IDs_, then _Continue_. 3. Add a description for the ID. For example, `Merchant ID for sandbox environment`. 4. Enter a merchant ID name in the _Identifier_ section. Use a descriptive name that matches the domain and environment you will use the ID in. For example, `merchant.com.mywebsite.sandbox`. To make it easier to test your integration, create separate merchant IDs for your sandbox and production environments. ### Generate a certificate signing request Call the [Generate Apple Pay signing request](https://api-reference.checkout.com/tag/Apple-Pay/#operation/generateApplePaySigningRequest) endpoint to create a certificate signing request (CSR). > **Information** > > Your base URL's `{prefix}` value is unique to your account and environment. To learn how to retrieve your base URLs for the sandbox and production environments, see [API endpoints](https://www.checkout.com/docs/developer-resources/api/api-endpoints.md). **Production** `POST` `https://{prefix}.api.checkout.com/applepay/signing-requests` **Sandbox** `POST` `https://{prefix}.api.sandbox.checkout.com/applepay/signing-requests` #### Request example ```bash curl --location --request POST 'https://{prefix}.api.checkout.com/applepay/signing-requests' \ --header 'Authorization: Bearer pk_xxxxxxxxxxxxxxxxxxxxxxxxxx' \ ``` #### Response example ```json { "content": "--- --BEGIN CERTIFICATE REQUEST--- --MIIBSTCB8AIBADCBjzELMAkGA1UEBhMCR0IxDzANBgNVBAgMBkxvbmRvbjEPMA0GA1UEBwwGTG9uZG9uMRUwEwYDVQQKDAxDaGVja291dC5jb20xCzAJBgNVBA8MAklUMRUwEwYDVQQDDAxjaGVja291dC5jb20xIzAhBgkqhkiG9w0BCQEWFHN1cHBvcnRAY2hlY2tvdXQuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwjiZ410yhHCkwa04OfrPb0e5bqt4FncefJwAbFpcqARTWefYZNvLyYkV68PmAKoO7cthfAFVfoVNqXBEGzjg1TAKBggqhkjOPQQDAgNIADBFAiAcgJLboQK3GBQX/K5ghNzbcw4mnVcVk/rUmkIxu0M28gIhALO01kH13CZzMkAhRhnkeCUPaP+IqUqQaDdZL8d5xgFc--- --END CERTIFICATE REQUEST--- --" } ``` The response returns a `.csr` file. You need to upload this to your Apple Developer account in the Create a payment processing certificate step. ### Create a payment processing certificate Sign in to your Apple Developer account: 1. Go to the _Merchant IDs_ list, and select the merchant ID you created in the Configure Apple Pay step. 2. In the _Apple Pay Payment Processing Certificate_ section, select _Create Certificate_. 3. If you're prompted about processing in China, select _No_, then select _Continue_. 4. Upload the `.csr` file you received in the Generate a CSR step, then select _Continue_. 5. Select _Download_ to retrieve your payment processing certificate. This will be a `.cer` file. ### Upload the signed payment processing certificate You must provide Checkout.com with the signed payment processing certificate. We use the certificate to decrypt Apple Pay tokens, which we then use to generate Checkout.com card tokens. You can use the card tokens to request a payment or payout. Before uploading the certificate, you must convert it to a base64-encoded string. In your terminal, run the following command: ```bash openssl x509 -inform der -in apple_pay.cer -out base64_converted.cer ``` Call the [Upload Apple Pay certificate](https://api-reference.checkout.com/tag/Apple-Pay/#operation/uploadApplePayCertificate) endpoint to upload the base64-encoded payment processing certificate. > **Information** > > Your base URL's `{prefix}` value is unique to your account and environment. To learn how to retrieve your base URLs for the sandbox and production environments, see [API endpoints](https://www.checkout.com/docs/developer-resources/api/api-endpoints.md). **Production** `POST` `https://{prefix}.api.checkout.com/applepay/certificates` **Sandbox** `POST` `https://{prefix}.api.sandbox.checkout.com/applepay/certificates` #### Request example ```bash curl --location --request POST 'https://{prefix}.api.sandbox.checkout.com/applepay/certificates' \ --header 'Authorization: Bearer pk_xxxxxxxxxxxxxxxxxxxxxxxxxx' \ --header 'Content-Type: application/json' \ --data-raw '{ "content": "MIIEfTCCBCOgAwIBAgIID/asezaWNycwCgYIKoZIzj0EAwIwgYAxNDAyBgNVBAMMK0FwcGxlIFdvcmxkd2lkZSBEZXZlbG9wZXIgUmVsYXRpb25zIENBIC0gRzIxJjAkBgNVBAsMHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRMwEQYDVQQKDApBcHBsZSBJbmMuMQswCQYDVQQGEwJVUzAeFw0yMTA2MTExMzQ0MjVaFw0yMzA3MTExMzQ0MjRaMIGuMS0wKwYKCZImiZPyLGQBAQwdbWVyY2hhbnQuY29tLmNoZWNrb3V0LnNhbmRib3gxQzBBBgNVBAMMOkFwcGxlIFBheSBQYXltZW50IFByb2Nlc3Npbmc6bWVyY2hhbnQuY29tLmNoZWNrb3V0LnNhbmRib3gxEzARBgNVBAsMCkUzMlhCUUs0UTUxFjAUBgNVBAoMDUNoZWNrb3V0IEx0ZC4xCzAJBgNVBAYTAkdCMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEsvyUM9D1cssldH+VPptEn4VAw/Q6ovJuHVlyBSRaPGLHFce04lCiT/xnXOWRkUxyCzQWKhfG2zo19u4s+evx7aOCAlUwggJRMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUhLaEzDqGYnIWWZToGqO9SN863wswRwYIKwYBBQUHAQEEOzA5MDcGCCsGAQUFBzABhitodHRwOi8vb2NzcC5hcHBsZS5jb20vb2NzcDA0LWFwcGxld3dkcmNhMjAxMIIBHQYDVR0gBIIBFDCCARAwggEMBgkqhkiG92NkBQEwgf4wgcMGCCsGAQUFBwICMIG2DIGzUmVsaWFuY2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2NlcHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wNgYIKwYBBQUHAgEWKmh0dHA6Ly93d3cuYXBwbGUuY29tL2NlcnRpZmljYXRlYXV0aG9yaXR5LzA2BgNVHR8ELzAtMCugKaAnhiVodHRwOi8vY3JsLmFwcGxlLmNvbS9hcHBsZXd3ZHJjYTIuY3JsMB0GA1UdDgQWBBRNhvr33NDuM4QxBZd16a+ACbHoEzAOBgNVHQ8BAf8EBAMCAygwTwYJKoZIhvdjZAYgBEIMQDdGRjg0REI5MDE5NkVGN0I5RTc4NDZEMjg4NzZCNkJGRDU2RjM4MDlCNzUyNjAzRDM4QzcxNUJFMTY2M0JENEMwCgYIKoZIzj0EAwIDSAAwRQIgTjywMwOrLX3TwDUrPn7yDGL/dhc+VNudv0uGBOWRyXACIQClFQFvgx+hfTwVdHt8klrswpgtZtbYjs74p9GYuc8Puw==" }' ``` #### Response example ```json { "id": "aplc_hefptsiydvkexnzzb35zrlqgfq", "public_key_hash": "tqYV+tmG9aMh+l/K6cicUnPqkb1gUiLjSTM9gEz6Nl0=", "valid_from": "2021-01-01T17:32:28.000Z", "valid_until": "2025-01-01T17:32:28.000Z" } ``` --- ## Generate a card token When a customer authenticates a transaction with biometrics on Apple Pay, Apple generates a unique payment token for the session. You can then do one of the following: - Use the Apple Pay token to generate a Checkout.com card token. - Decrypt the token in your back end. To generate a Checkout.com card token, call the [Request a token](https://api-reference.checkout.com/tag/Tokens/#operation/requestAToken) endpoint: > **Information** > > Your base URL's `{prefix}` value is unique to your account and environment. To learn how to retrieve your base URLs for the sandbox and production environments, see [API endpoints](https://www.checkout.com/docs/developer-resources/api/api-endpoints.md). **Production** `POST` `https://{prefix}.api.checkout.com/tokens` **Sandbox** `POST` `https://{prefix}.api.sandbox.checkout.com/tokens` ### Request example ```json { "type": "applepay", "token_data": { "version": "EC_v1", "data": "t7GeajLB9skXB6QSWfEpPA4WPhDqB7ekdd+F7588arLzvebKp3P0TekUslSQ8nkuacUgLdks2IKyCm7U3OL/PEYLXE7w60VkQ8WE6FXs/cqHkwtSW9vkzZNDxSLDg9slgLYxAH2/iztdipPpyIYKl0Kb6Rn9rboF+lwgRxM1B3n84miApwF5Pxl8ZOOXGY6F+3DsDo7sMCUTaJK74DUJJcjIXrigtINWKW6RFa/4qmPEC/Y+syg04x7B99mbLQQzWFm7z6HfRmynPM9/GA0kbsqd/Kn5Mkqssfhn/m6LuNKsqEmbKi85FF6kip+F17LRawG48bF/lT8wj/QEuDY0G7t/ryOnGLtKteXmAf0oJnwkelIyfyj2KI8GChBuTJonGlXKr5klPE89/ycmkgDl+T6Ms7PhiNZpuGEE2QE=", "signature": "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", "header": { "ephemeralPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEX1ievoT8DRB8T5zGkhHZHeDr0oBmYEgsDSxyT0MD0IZ2Mpfjz2LdWq6LUwSH9EmxdPEzMunsZKWMyOr3K/zlsw==", "publicKeyHash": "tqYV+tmG9aMh+l/K6cicUnPqkb1gUiLjSTM9gEz6Nl0=", "transactionId": "3cee89679130a4b2617c76118a1c62fd400cd45b49dc0916d5b951b560cd17b4" } } } ``` ### Response example ```json { "type": "applepay", "token": "tok_ymu4qlccztkedmd6b7c3hcf6ae", "expires_on": "2024-10-21T10:48:35Z", "expiry_month": 1, "expiry_year": 2025, "scheme": "VISA", "last4": "6222", "bin": "481891", "card_type": "DEBIT", "card_category": "CONSUMER", "issuer": "Test Bank", "issuer_country": "GB", "product_id": "F", "product_type": "CLASSIC" } ``` --- ## Check recipient card eligibility To be eligible to receive a payout, the issuer must have enabled Visa Direct or Mastercard Moneysend for the recipient card. > **Information** > > You can use the `supportsDisbursements()` method exposed by [Apple's PassKit API](https://developer.apple.com/documentation/passkit_apple_pay_and_wallet/pkpaymentauthorizationcontroller/4155670-supportsdisbursements) to verify if the user's device supports disbursement requests. This ensures that only relevant cards are displayed on the payment sheet. You can check whether a card is eligible for Visa Direct or Mastercard Moneysend by retrieving the card's metadata. Call the [Get card metadata](https://api-reference.checkout.com/tag/Card-metadata/#operation/requestCardMetadata) endpoint. **Production** `POST` `https://{prefix}.api.checkout.com/metadata/card` **Sandbox** `POST` `https://{prefix}.api.sandbox.checkout.com/metadata/card` ### Request example ```json { "source": { "type": "card", "number": "4921817844445119" }, "format": "card_payouts" } ``` ### Response example ```json { "bin": "481891", "scheme": "visa", "card_type": "DEBIT", "card_category": "CONSUMER", "currency": "GBP", "issuer": "Test Bank", "issuer_country": "GB", "issuer_country_name": "United Kingdom", "product_id": "F", "product_type": "Visa Classic", "card_payouts": { "domestic_non_money_transfer": "standard", "cross_border_non_money_transfer": "standard", "domestic_money_transfer": "fast_funds", "cross_border_money_transfer": "standard" } } ``` The response returns the card's eligibility for the various card payout types in the `card_payouts` object. For each card payout type, the value is one of the following: - `fast_funds` – The card is eligible and has Fast Funds enabled for this card payout type. - `standard` – The card is eligible for this card payout type, but does not have Fast Funds enabled. - `not_supported` – The card does not support this card payout type. - `unknown` – The card account or issuer details could not be found, or the card scheme could not determine if the card is eligible for this card payout type or for payouts in the specified region. With Fast Funds, funds from payouts are made available to the recipient card within 30 minutes. If Fast Funds is not enabled, funds may take up to 48 hours to become available. > **Note** > > There can be a delay in performing Fast Funds payouts if the issuer or Checkout.com has to conduct additional sanction and anti-money laundering checks. --- ## Check sub-account balance Before you perform a card payout, confirm that you have sufficient funds in your [sub-account balance](https://www.checkout.com/docs/funds-management/manage-funds/balances/view-balances.md) for the payout. Call the [Get entity balances](https://api-reference.checkout.com/tag/Balances/#operation/getEntityBalances) endpoint and provide your entity ID, prefixed with `ent_`, as the `{id}` path parameter. > **Information** > > Your base URL's `{prefix}` value is unique to your account and environment. To learn how to retrieve your base URLs for the sandbox and production environments, see [API endpoints](https://www.checkout.com/docs/developer-resources/api/api-endpoints.md). **Production** `GET` `https://balances.checkout.com/balances/{id}?withCurrencyAccountId=true` **Sandbox** `GET` `https://balances.sandbox.checkout.com/balances/{id}?withCurrencyAccountId=true` ### Response example ```json { "data": [ { "currency_account_id": "ca_ux6najg5mnqexjs2jezz6gwseu", "descriptor": "Test account", "holding_currency": "GBP", "balances": { "pending": 1000, "available": 50000, "payable": 0, "collateral": 0 } } ] } ``` If you have insufficient funds in your sub-account's _Available_ or _Pending_ balances to fund the transaction, you can [add funds to your account balance](https://www.checkout.com/docs/funds-management/move-funds/add-funds.md). --- ## Perform a direct funds disbursement A direct funds disbursement is a type of payout in which a merchant transfers money to either an individual or corporate cardholder. > **Information** > > For more information on the `PKDisbursementRequest` object from the PassKit API, see Apple Developer [PKDisbursementRequest](https://developer.apple.com/documentation/passkit/pkdisbursementrequest). To perform a direct funds disbursement, call the [Request a payment or payout](https://api-reference.checkout.com/tag/Payments/#operation/requestAPaymentOrPayout) endpoint. In the request body, you must provide: - `source` object - `amount` field – The amount to pay out, with the [value formatted](https://www.checkout.com/docs/payments/accept-payments/format-the-amount-value.md) according to the `currency` you specify in the request - `destination.type` field – Set to one of the following: - `id` – The payment instrument ID - `network_token` – The decrypted Apple Pay token - `token` – The Checkout.com card token from the Generate a card token step > **Information** > > Your base URL's `{prefix}` value is unique to your account and environment. To learn how to retrieve your base URLs for the sandbox and production environments, see [API endpoints](https://www.checkout.com/docs/developer-resources/api/api-endpoints.md). **Production** `POST` `https://{prefix}.api.checkout.com/payments` **Sandbox** `POST` `https://{prefix}.api.sandbox.checkout.com/payments` ### Request example **Payment instrument** ```json { "source": { "type": "currency_account", "id": "ca_ux6najg5mnqexjs2jezz6gwseu" }, "destination": { "type": "id", "id": "src_nwd3m4in3hkuddfpjsaevunhdy", "account_holder": { "type": "individual", "first_name": "Hannah", "last_name": "Bret" } }, "amount": 5000, "currency": "GBP", "sender": { "type": "individual", "first_name": "Ali", "last_name": "Farid", "address": { "address_line1": "123 High St.", "city": "London", "country": "GB" }, "reference": "012345", "reference_type": "other", "source_of_funds": "debit" }, "reference": "012345678901", "instruction": { "funds_transfer_type": "PP" }, "processing_channel_id": "pc_vxt6yftthv4e5flqak6w2i7rim" } ``` **Card token** ```json { "source": { "type": "currency_account", "id": "ca_y3aed6h4txweddznt2llxrprcu" }, "destination": { "type": "token", "token": "tok_ymu4qlccztkedmd6b7c3hcf6ae", "account_holder": { "type": "individual", "first_name": "Toby", "last_name": "Arden" } }, "amount": 100, "currency": "GBP", "reference": "Direct funds disbursement", "instruction": { "funds_transfer_type": "FD" }, "processing_channel_id": "pc_twbkelxnialexpqreoh5lmay2u" } ``` **Network token** ```json { "source": { "type": "currency_account", "id": "ca_ux6najg5mnqexjs2jezz6gwseu" }, "destination": { "type": "network_token", "token": "4242424242424242", "expiry_month": 12, "expiry_year": 30, "token_type": "applepay", "cryptogram": "AgAAAAAAAIR8CQrXcIhbQAAAAAA=", "eci": "05", "account_holder": { "type": "individual", "first_name": "Hannah", "last_name": "Bret" } }, "amount": 5000, "currency": "GBP", "sender": { "type": "individual", "first_name": "Ali", "last_name": "Farid", "address": { "address_line1": "123 High St.", "city": "London", "country": "GB" }, "reference": "012345", "reference_type": "other", "source_of_funds": "debit" }, "reference": "012345678901", "instruction": { "funds_transfer_type": "PP" }, "processing_channel_id": "pc_vxt6yftthv4e5flqak6w2i7rim" } ``` ### Response example ```json { "id": "pay_g7rpbnxfqyreraewiqvltp33ha", "status": "Accepted", "reference": "Direct funds disbursement", "destination": { "account_holder": { "id": "src_nwd3m4in3hkuddfpjsaevunhdy" } }, "_links": { "self": { "href": "https://{prefix}.api.sandbox.checkout.com/payments/pay_pay_g7rpbnxfqyreraewiqvltp33ha" } } } ``` > **Note** > > If you attempt a payout to an ineligible card, you receive a `422 Invalid data sent` error. If you have insufficient funds in your sub-account's _Available_ or _Pending_ balances to fund the transaction, you receive a [Payment declined](https://www.checkout.com/docs/developer-resources/event-notifications/event-types/payment_declined.md) and a `50003` [response code](https://www.checkout.com/docs/developer-resources/codes/api-response-codes.md#50xxx_Card_payout_declines). You can [add funds to your account balance](https://www.checkout.com/docs/funds-management/move-funds/add-funds.md) and attempt the payout again. --- ## Perform a money transfer A money transfer is a type of payout in which an individual consumer sends funds to another consumer, or to another of their own accounts. To perform a money transfer, call the [Request a payment or payout](https://api-reference.checkout.com/tag/Payments/#operation/requestAPaymentOrPayout) endpoint. In the request body, you must provide: - `source` object - `sender` object – The entity's details - `amount` field – The amount to pay out, with the [value formatted](https://www.checkout.com/docs/payments/accept-payments/format-the-amount-value.md) according to the `currency` you specify in the request - `destination.type` field – Set to one of the following: - `id` – The payment instrument ID - `network_token` – The decrypted Apple Pay token - `token` – The Checkout.com card token from the Generate a card token step > **Information** > > Your base URL's `{prefix}` value is unique to your account and environment. To learn how to retrieve your base URLs for the sandbox and production environments, see [API endpoints](https://www.checkout.com/docs/developer-resources/api/api-endpoints.md). **Production** `POST` `https://{prefix}.api.checkout.com/payments` **Sandbox** `POST` `https://{prefix}.api.sandbox.checkout.com/payments` ### Request example **Payment instrument** ```json { "source": { "type": "currency_account", "id": "ca_ux6najg5mnqexjs2jezz6gwseu" }, "destination": { "type": "id", "id": "src_nwd3m4in3hkuddfpjsaevunhdy", "account_holder": { "type": "individual", "first_name": "Hannah", "last_name": "Bret" } }, "amount": 5000, "currency": "GBP", "sender": { "type": "individual", "first_name": "Ali", "last_name": "Farid", "address": { "address_line1": "123 High St.", "city": "London", "country": "GB" }, "reference": "012345", "reference_type": "other", "source_of_funds": "debit" }, "reference": "012345678901", "instruction": { "funds_transfer_type": "PP" }, "processing_channel_id": "pc_vxt6yftthv4e5flqak6w2i7rim" } ``` **Card token** ```json { "source": { "type": "currency_account", "id": "ca_y3aed6h4txweddznt2llxrprcu" }, "destination": { "type": "token", "token": "tok_ymu4qlccztkedmd6b7c3hcf6ae", "account_holder": { "type": "individual", "first_name": "Toby", "last_name": "Arden" } }, "amount": 100, "currency": "GBP", "sender": { "type": "individual", "first_name": "Hannah", "last_name": "Bret", "address": { "address_line1": "123 High St.", "city": "London", "zip": "SW1A 1AA", "country": "GB" }, "reference": "012345", "reference_type": "other", "source_of_funds": "debit" }, "reference": "Money transfer", "instruction": { "funds_transfer_type": "PP" }, "processing_channel_id": "pc_fdfkfkvxuufexozs5nbvptqr74" } ``` **Network token** ```json { "source": { "type": "currency_account", "id": "ca_ux6najg5mnqexjs2jezz6gwseu" }, "destination": { "type": "network_token", "token": "4242424242424242", "expiry_month": 12, "expiry_year": 30, "token_type": "applepay", "cryptogram": "AgAAAAAAAIR8CQrXcIhbQAAAAAA=", "eci": "05", "account_holder": { "type": "individual", "first_name": "Hannah", "last_name": "Bret" } }, "amount": 5000, "currency": "GBP", "sender": { "type": "individual", "first_name": "Ali", "last_name": "Farid", "address": { "address_line1": "123 High St.", "city": "London", "country": "GB" }, "reference": "012345", "reference_type": "other", "source_of_funds": "debit" }, "reference": "012345678901", "instruction": { "funds_transfer_type": "PP" }, "processing_channel_id": "pc_vxt6yftthv4e5flqak6w2i7rim" } ``` ### Response example ```json { "id": "pay_g7rpbnxfqyreraewiqvltp33ha", "status": "Accepted", "reference": "Money transfer", "destination": { "account_holder": { "id": "src_nwd3m4in3hkuddfpjsaevunhdy" } }, "_links": { "self": { "href": "https://{prefix}.api.sandbox.checkout.com/payments/pay_g7rpbnxfqyreraewiqvltp33ha" } } } ``` If you attempt a payout to an ineligible card, you receive a `422 Unprocessable Content` error. If you have insufficient funds in your sub-account's _Available_ or _Pending_ balances to fund the transaction, you receive a [Payment declined](https://www.checkout.com/docs/developer-resources/event-notifications/event-types/payment_declined.md) and a `50003` [response code](https://www.checkout.com/docs/developer-resources/codes/api-response-codes.md#50xxx_Card_payout_declines) webhook. You can [add funds to your account balance](https://www.checkout.com/docs/funds-management/move-funds/add-funds.md) and attempt the payout again. --- ## Check the payout outcome If you [configure your webhook server](https://www.checkout.com/docs/developer-resources/event-notifications/receive-webhooks/configure-your-webhook-server.md), you're notified of the outcome of the card payout request through a webhook containing a [response code](https://www.checkout.com/docs/developer-resources/codes/api-response-codes.md). If the payout was successful, you receive a [Payment approved](https://www.checkout.com/docs/developer-resources/event-notifications/event-types/payment_approved.md) webhook with the following fields in the body: - `"response_code": "10000"` - `"response_summary": "Approved"` If the payout was declined, you receive a [Payment declined](https://www.checkout.com/docs/developer-resources/event-notifications/event-types/payment_declined.md) webhook with the following fields in the body: - `response_code` – A five-digit code between `50000 - 50399` - `response_summary` – A description of the decline reason If the payout was returned, you receive a [Payment returned](https://www.checkout.com/docs/developer-resources/event-notifications/event-types/payment_returned.md) webhook with the following fields in the body: - `response_code` – A five-digit code between `50401 - 50599` - `response_summary` – A description of the return reason