**Last updated**: 11 November 2025 | [**Change log**](/products/card-payments/changelog/) # Repeat wallet payments Use our [Customer Initiated Transactions](/products/card-payments/authorize-a-payment) endpoint to authorize a payment with a digital wallet, and store the payment information for future payments (i.e. subscriptions, installments, and unscheduled). Note You must [integrate with Google Pay or Apple Pay](/products/wallets) before you can submit repeat wallet payments to our Card Payments API. ### What are card on file payments? * The customer is actively participating in making a payment at the point of authorization using card details you have previously stored/ intend to store. * Does not follow a schedule. * Requires explicit permission from the customer to store the card on their account for use in a "one-click" model. * Sometimes referred to as Customer Initiated Transactions (CIT). Read more about card on file mandates [here](/products/articles/repeat-payments). ## Authorization request `POST` your initial payment request to our `https://try.access.worldpay.com/cardPayments/customerInitiatedTransactions` endpoint, ensuring you include the `customerAgreement` object to store payment details. ### Example request: `POST` `https://try.access.worldpay.com/cardPayments/customerInitiatedTransactions` Authorization request body: Apple Pay { "transactionReference": "Memory265-13/08/1876", "channel": "ecom", "merchant": { "entity": "default" }, "instruction": { "requestAutoSettlement": { "enabled": false }, "customerAgreement": { "type": "subscription", "storedCardUsage": "first" }, "narrative": { "line1": "Mind Palace" }, "value": { "currency": "GBP", "amount": 250 }, "paymentInstrument": { "type": "card/wallet+applepay", "walletToken": "{ \"version\": \"EC_v1\", \"data\": \"kdHd..GQ==\", \"signature\": \"MIAGCSqGSIb3DQEH...AAA\", \"header\": { \"transactionId\": \"d3b28af..f8\", \"ephemeralPublicKey\": \"MFkwE..Q==\", \"publicKeyHash\": \"dxCK..6o=\" } }" } } } Google Pay { "transactionReference": "Memory265-13/08/1876", "channel": "ecom", "merchant": { "entity": "default" }, "instruction": { "requestAutoSettlement": { "enabled": false }, "customerAgreement": { "type": "subscription", "storedCardUsage": "first" }, "narrative": { "line1": "Mind Palace" }, "value": { "currency": "GBP", "amount": 250 }, "paymentInstrument": { "type": "card/wallet+googlepay", "walletToken": "{\"protocolVersion\":\"ECv1\",\"signature\":\"MEQCIH6Q4OwQ0jAceFEkGF0JID6sJNXxOEi4r+mA7biRxqBQAiAondqoUpU/bdsrAOpZIsrHQS9nwiiNwOrr24RyPeHA0Q\\u003d\\u003d\",\"signedMessage\":\"{\\\"tag\\\":\\\"jpGz1F1Bcoi/fCNxI9n7Qrsw7i7KHrGtTf3NrRclt+U\\\\u003d\\\",\\\"ephemeralPublicKey\\\":\\\"BJatyFvFPPD21l8/uLP46Ta1hsKHndf8Z+tAgk+DEPQgYTkhHy19cF3h/bXs0tWTmZtnNm+vlVrKbRU9K8+7cZs\\\\u003d\\\",\\\"encryptedMessage\\\":\\\"mKOoXwi8OavZ\\\"}\"}" } } } See [Customer Initiated Transactions](/products/card-payments/authorize-a-payment#parameter-descriptions) for full descriptions of all request parameters. ## Response ### Successful response Along with our standard [response data](/products/card-payments/authorize-a-payment#successful-payment), you receive a token href for use in all subsequent payments in your repeat payment agreement. Refer to our [repeat payments](/products/card-payments/repeat-payments) documentation for how to send subsequent payments. #### Example response Successful { "outcome": "authorized", "paymentId": "paygN28d-s18ncZnsDL02n470", "commandId": "cmdWP_h29znMbajSr2-911U70", "riskFactors": [ { "risk": "notChecked", "detail": "postcode", "type": "avs" }, { "risk": "notChecked", "detail": "address", "type": "avs" } ], "scheme": { "reference": "schemeReference" }, "paymentInstrument": { "type": "card/network+masked", "cardBin": "444433", "lastFour": "1111", "tokenNumber": "444433******1111", "countryCode": "GB", "expiryDate": { "month": 2, "year": 2028 }, "cardBrand": "visa", "fundingType": "debit", "category": "consumer", "issuerName": "VALID_ISSUER", "paymentAccountReference": "somePAR" }, "_links": { "cardPayments:cancel": { "href": "https://try.access.worldpay.com/payments/authorizations/cancellations/eyJrIjoiazUyOTVhMSIsImxpbmtWZXJzaW9uIjoiMy4wLjAifQ==.7uyuNo1ShOgM5rTwStg86LXzb0a2wdLW1lwX:DIQ2Ecrp4gw65VLnHmjsAVqzpa2NcwixaBb2p8R2x5NPXdRpybJ2ndKlbkNOc9gj+ruN20iaTdYqv2FNgB3ZAw3g+yyUMUlQDFD8DU++ZswXpUQe8YTBHmTP8zHQUXrSORn9IaI6kzJnMu2HWwEJOqKnWLvRCMy:fr4ptatJJrmRVON8WTjisJL:sd3TJ9uDcO:gD+q+Q01y++Mzop0k8y3bDcnNBpsG:8xf4uKGGYO3EcAWA==" }, "cardPayments:partialCancel": { "href": "https://try.access.worldpay.com/payments/authorizations/cancellations/partials/eyJrIjoiazUyOTVhMSIsImxpbmtWZXJzaW9uIjoiMy4wLjAifQ==.7uyuNo1ShOgM5rTwStg86LXzb0a2wdLW1lwX:DIQ2Ecrp4gw65VLnHmjsAVqzpa2NcwixaBb2p8R2x5NPXdRpybJ2ndKlbkNOc9gj+ruN20iaTdYqv2FNgB3ZAw3g+yyUMUlQDFD8DU++ZswXpUQe8YTBHmTP8zHQUXrSORn9IaI6kzJnMu2HWwEJOqKnWLvRCMy:fr4ptatJJrmRVON8WTjisJL:sd3TJ9uDcO:gD+q+Q01y++Mzop0k8y3bDcnNBpsG:8xf4uKGGYO3EcAWA==" }, "cardPayments:settle": { "href": "https://try.access.worldpay.com/payments/settlements/full/eyJrIjoiazUyOTVhMSIsImxpbmtWZXJzaW9uIjoiMy4wLjAifQ==.7uyuNo1ShOgM5rTwStg86LXzb0a2wdLW1lwX:DIQ2Ecrp4gw65VLnHmjsAVqzpa2NcwixaBb2p8R2x5NPXdRpybJ2ndKlbkNOc9gj+ruN20iaTdYqv2FNgB3ZAw3g+yyUMUlQDFD8DU++ZswXpUQe8YTBHmTP8zHQUXrSORn9IaI6kzJnMu2HWwEJOqKnWLvRCMy:fr4ptatJJrmRVON8WTjisJL:sd3TJ9uDcO:gD+q+Q01y++Mzop0k8y3bDcnNBpsG:8xf4uKGGYO3EcAWA==" }, "cardPayments:partialSettle": { "href": "https://try.access.worldpay.com/payments/settlements/partials/eyJrIjoiazUyOTVhMSIsImxpbmtWZXJzaW9uIjoiMy4wLjAifQ==.7uyuNo1ShOgM5rTwStg86LXzb0a2wdLW1lwX:DIQ2Ecrp4gw65VLnHmjsAVqzpa2NcwixaBb2p8R2x5NPXdRpybJ2ndKlbkNOc9gj+ruN20iaTdYqv2FNgB3ZAw3g+yyUMUlQDFD8DU++ZswXpUQe8YTBHmTP8zHQUXrSORn9IaI6kzJnMu2HWwEJOqKnWLvRCMy:fr4ptatJJrmRVON8WTjisJL:sd3TJ9uDcO:gD+q+Q01y++Mzop0k8y3bDcnNBpsG:8xf4uKGGYO3EcAWA==" }, "cardPayments:events": { "href": "https://try.access.worldpay.com/payments/events/eyJrIjoiazUyOTVhMSIsImxpbmtWZXJzaW9uIjoiMy4wLjAifQ==.7uyuNo1ShOgM5rTwStg86LXzb0a2wdLW1lwX:DIQ2Ecrp4gw65VLnHmjsAVqzpa2NcwixaBb2p8R2x5NPXdRpybJ2ndKlbkNOc9gj+ruN20iaTdYqv2FNgB3ZAw3g+yyUMUlQDFD8DU++ZswXpUQe8YTBHmTP8zHQUXrSORn9IaI6kzJnMu2HWwEJOqKnWLvRCMy:fr4ptatJJrmRVON8WTjisJL:sd3TJ9uDcO:gD+q+Q01y++Mzop0k8y3bDcnNBpsG:8xf4uKGGYO3EcAWA==" }, "tokens:token": { "href": "https://access.worldpay.com/tokens/linkData" }, "curies": [{ "name": "cardPayments", "href": "https://try.access.worldpay.com/rels/payments/{rel}", "templated": true }] } } Refused { "outcome": "refused", "paymentId": "pay38Ndh3N-cS18i023-hksO0", "commandId": "cmd93Ng8_KvnwI9sK7dJakl90", "description": "Do not honor", "refusalCode": "83", "refusalDescription": "Fraud/Security related reasons", "riskFactors": [ { "risk": "notChecked", "detail": "postcode", "type": "avs" }, { "risk": "notChecked", "detail": "address", "type": "avs" } ], "paymentInstrument": { "type": "card/network+masked", "cardBin": "444433", "lastFour": "1111", "tokenNumber": "444433******1111", "countryCode": "GB", "expiryDate": { "month": 2, "year": 2028 }, "cardBrand": "visa", "fundingType": "debit", "category": "consumer", "issuerName": "VALID_ISSUER", "paymentAccountReference": "somePAR" } } You can use the `payments:settle` action link to [settle the payment](/products/card-payments/manage-payments#settle-an-authorization) straight away. Alternatively you can cache the response and use the link to settle the payment later. **Next steps** Take a subsequent [repeat payment with the token](/products/card-payments/repeat-payments) you have received in your [response](#successful-response).