> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.mangopay.com/testing/mocks/recurring-card-payments/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.mangopay.com/_mcp/server. # Recurring card payments Recurring payments occur when the platform repeatedly charges the end user’s card at regular intervals for the goods and/or services provided. [Learn more about recurring payments](/guides/payment-methods/card/recurring) **→** The recurring card payments feature is testable in Sandbox, and Mangopay provides a specific set of mocks to simulate the errors that occur when working with recurring objects. ## 1. Select the pay-in to which the mock applies You can use the mock for a customer-initiated transaction (CIT) or a merchant-initiated transaction (MIT) . To do so, use the [POST Create a Recurring PayIn Registration](/api-reference/recurring-payin-registrations/create-recurring-payin-registration) endpoint with the `33501` value in one of the following `Amount` parameters in the body of the request: * `FirstTransactionDebitedFunds` to test a CIT * `NextTransactionDebitedFunds` to test an MIT ## 2. Choose the error to simulate in the recurring registration You can use the value below in the `AddressLine2` parameter of the `Billing` object in your recurring pay-in registration body.
`AddressLine2` value Simulated case Returned error code
01100 Failed pay-in [101101](/errors/codes/101101)
01116 Failed due to card limit reached [101199](/errors/codes/101199)
01125 Failed due to inactive card [101106](/errors/codes/101106)
01131 Reauthentication request from the bank (MIT only) [101305](/errors/codes/101305)
03022 Failed SCA (CIT only) [101301](/errors/codes/101301)
## 3. Make the recurring pay-in Make the pay-in (CIT or MIT) using the [POST Create a Recurring Card PayIn (CIT or MIT)](/api-reference/recurring-card-payins/create-recurring-card-payin) endpoint, with the amount of `33501` for the `DebitedFunds`. ## Example This example simulates a failed merchant-initiated transaction due to an inactive card, by following these steps: * Create a Recurring PayIn Registration with the mock values * Create an initial CIT for the authentication * Create an MIT, which fails and returns the 101106 error. > **Note** > > **Note – Mocks available in Postman Collection** > > The Mangopay API Postman Collection contains the full flow for the recurring mocks to help you test faster. ```json { "AuthorId": "{{USER_NATURAL_PAYER}}", "CardId": "{{CARD_CHALLENGE_FLOW_ID}}", "CreditedWalletId": "{{USER_LEGAL_OWNER_WALLET_ID}}", "FirstTransactionDebitedFunds": { "Currency": "EUR", "Amount": 10000 }, "FirstTransactionFees": { "Currency": "EUR", "Amount": 1000 }, "Billing": { "FirstName": "{{$randomFirstName}}", "LastName": "{{$randomLastName}}", "Address": { "AddressLine1": "{{$randomStreetAddress}}", "AddressLine2": "01116", "City": "Paris", "Region": "Île-de-France", "PostalCode": "75001", "Country": "FR" } }, "Frequency": "Monthly", "FixedNextAmount": true, "FractionedPayment": false, "Migration": false, "NextTransactionDebitedFunds": { "Currency": "EUR", "Amount": 33501 }, "NextTransactionFees": { "Currency": "EUR", "Amount": 1000 }, } ``` ```json { "RecurringPayinRegistrationId": "{{RECURRING_PAYIN_REGISTRATION_ID}}", "IpAddress": "{{$randomIPV6}}", "BrowserInfo": { "AcceptHeader": "text/html, application/xhtml+xml, application/xml;q=0.9, /;q=0.8", "JavaEnabled": true, "Language": "FR-FR", "ColorDepth": 4, "ScreenHeight": 1800, "ScreenWidth": 400, "TimeZoneOffset": 60, "UserAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148", "JavascriptEnabled": true }, "SecureModeReturnURL": "http://example.com", "StatementDescriptor": "Example123", "Tag": "Created using Mangopay API Postman Collection", "DebitedFunds": { "Currency": "{{CURRENCY}}", "Amount": 5000 }, "Fees": { "Currency": "{{CURRENCY}}", "Amount": 100 } } ``` ```json { "RecurringPayinRegistrationId": "{{RECURRING_PAYIN_REGISTRATION_ID}}", "StatementDescriptor": "Example123", "Tag": "Created using Mangopay API Postman Collection", "DebitedFunds": { "Currency": "{{CURRENCY}}", "Amount": 33501 }, "Fees": { "Currency": "{{CURRENCY}}", "Amount": 100 } } ``` **`Recurring pay-in response`** ```json Recurring pay-in response { "Id": "195780716", "Tag": "Created using Mangopay API Postman Collection", "CreationDate": 1688721801, "AuthorId": "195777863", "CreditedUserId": "195777905", "DebitedFunds": { "Currency": "EUR", "Amount": 33501 }, "CreditedFunds": { "Currency": "EUR", "Amount": 33401 }, "Fees": { "Currency": "EUR", "Amount": 100 }, "Status": "FAILED", "ResultCode": "101102", "ResultMessage": "Transaction refused by the bank (Amount limit)", "ExecutionDate": null, "Type": "PAYIN", "Nature": "REGULAR", "CreditedWalletId": "195777929", "DebitedWalletId": null, "PaymentType": "CARD", "ExecutionType": "DIRECT", "SecureMode": null, "CardId": "195778022", "SecureModeReturnURL": null, "SecureModeRedirectURL": null, "SecureModeNeeded": false, "Culture": "EN", "SecurityInfo": { "AVSResult": "NO_CHECK" }, "StatementDescriptor": "Example123", "BrowserInfo": null, "IpAddress": null, "Billing": { "FirstName": "Vernice", "LastName": "Prohaska", "Address": { "AddressLine1": "5819 Heidenreich Mount", "AddressLine2": "01116", "City": "Paris", "Region": "Île-de-France", "PostalCode": "75001", "Country": "FR" } }, "Shipping": { "FirstName": "Vernice", "LastName": "Prohaska", "Address": { "AddressLine1": "5819 Heidenreich Mount", "AddressLine2": "01116", "City": "Paris", "Region": "Île-de-France", "PostalCode": "75001", "Country": "FR" } }, "Requested3DSVersion": null, "Applied3DSVersion": null, "RecurringPayinRegistrationId": "195780242" } ```