openapi: 3.1.0 servers: - url: https://pal-test.adyen.com/pal/servlet/Recurring/v30 info: version: '30' x-publicVersion: true title: Adyen Recurring API (deprecated) description: "> **The Recurring API is deprecated**. Use the [Checkout API recurring\ \ endpoints](https://docs.adyen.com/api-explorer/Checkout/71/post/storedPaymentMethods)\ \ instead.The Recurring APIs allow you to manage and remove your tokens or saved\ \ payment details. Tokens should be created with validation during a payment request.\n\ \nFor more information, refer to our [Tokenization documentation](https://docs.adyen.com/online-payments/tokenization).\n\ ## Authentication\nYou need an [API credential](https://docs.adyen.com/development-resources/api-credentials)\ \ to authenticate to the API.\n\nIf using an API key, add an `X-API-Key` header\ \ with the API key as the value, for example:\n\n ```\ncurl\n-H \"Content-Type:\ \ application/json\" \\\n-H \"X-API-Key: YOUR_API_KEY\" \\\n...\n```\n\nAlternatively,\ \ you can use the username and password to connect to the API using basic authentication,\ \ for example:\n\n```\ncurl\n-U \"ws@Company.YOUR_COMPANY_ACCOUNT\":\"YOUR_BASIC_AUTHENTICATION_PASSWORD\"\ \ \\\n-H \"Content-Type: application/json\" \\\n...\n```\n\n## Versioning\nRecurring\ \ API supports [versioning](https://docs.adyen.com/development-resources/versioning)\ \ using a version suffix in the endpoint URL. This suffix has the following format:\ \ \"vXX\", where XX is the version number.\n\nFor example:\n```\nhttps://pal-test.adyen.com/pal/servlet/Recurring/v30/disable\n\ ```\n\n## Going live\n\nTo authenticate to the live endpoints, you need an [API\ \ credential](https://docs.adyen.com/development-resources/api-credentials) from\ \ your live Customer Area.\n\nThe live endpoint URLs contain a prefix which is\ \ unique to your company account:\n```\n\nhttps://{PREFIX}-pal-live.adyenpayments.com/pal/servlet/Recurring/v30/disable\n\ ```\n\nGet your `{PREFIX}` from your live Customer Area under **Developers** >\ \ **API URLs** > **Prefix**." termsOfService: https://www.adyen.com/legal/terms-and-conditions contact: name: Adyen Developer Experience team url: https://github.com/Adyen/adyen-openapi tags: - name: General paths: /disable: post: tags: - General summary: Disable stored payment details description: 'Disables stored payment details to stop charging a shopper with this particular recurring detail ID. For more information, refer to [Disable stored details](https://docs.adyen.com/classic-integration/recurring-payments/disable-stored-details/).' operationId: post-disable x-sortIndex: 2 x-methodName: disable security: - BasicAuth: [] - ApiKeyAuth: [] requestBody: content: application/json: examples: disableARecurringContract: $ref: '#/components/examples/post-disable-disableARecurringContract' schema: $ref: '#/components/schemas/DisableRequest' responses: '200': content: application/json: schema: $ref: '#/components/schemas/DisableResult' description: OK - the request has succeeded. '400': content: application/json: schema: $ref: '#/components/schemas/ServiceError' description: Bad Request - a problem reading or understanding the request. '401': content: application/json: schema: $ref: '#/components/schemas/ServiceError' description: Unauthorized - authentication required. '403': content: application/json: schema: $ref: '#/components/schemas/ServiceError' description: Forbidden - insufficient permissions to process the request. '422': content: application/json: schema: $ref: '#/components/schemas/ServiceError' description: Unprocessable Entity - a request validation error. '500': content: application/json: schema: $ref: '#/components/schemas/ServiceError' description: Internal Server Error - the server could not process the request. /listRecurringDetails: post: tags: - General summary: Get stored payment details description: 'Lists the stored payment details for a shopper, if there are any available. The recurring detail ID can be used with a regular authorisation request to charge the shopper. A summary of the payment detail is returned for presentation to the shopper. For more information, refer to [Retrieve stored details](https://docs.adyen.com/classic-integration/recurring-payments/retrieve-stored-details/).' operationId: post-listRecurringDetails x-sortIndex: 1 x-methodName: listRecurringDetails security: - BasicAuth: [] - ApiKeyAuth: [] requestBody: content: application/json: examples: listAllRecurringDetails: $ref: '#/components/examples/post-listRecurringDetails-listAllRecurringDetails' schema: $ref: '#/components/schemas/RecurringDetailsRequest' responses: '200': content: application/json: schema: $ref: '#/components/schemas/RecurringDetailsResult' description: OK - the request has succeeded. '400': content: application/json: schema: $ref: '#/components/schemas/ServiceError' description: Bad Request - a problem reading or understanding the request. '401': content: application/json: schema: $ref: '#/components/schemas/ServiceError' description: Unauthorized - authentication required. '403': content: application/json: schema: $ref: '#/components/schemas/ServiceError' description: Forbidden - insufficient permissions to process the request. '422': content: application/json: schema: $ref: '#/components/schemas/ServiceError' description: Unprocessable Entity - a request validation error. '500': content: application/json: schema: $ref: '#/components/schemas/ServiceError' description: Internal Server Error - the server could not process the request. /notifyShopper: post: tags: - General summary: Ask issuer to notify the shopper description: Sends a request to the issuer so they can inform the shopper about the upcoming recurring payment. This endpoint is used only for local acquiring in India. For more information, refer to [Recurring card payments in India](https://docs.adyen.com/payment-methods/cards/cards-recurring-india). operationId: post-notifyShopper x-sortIndex: 4 x-methodName: notifyShopper security: - BasicAuth: [] - ApiKeyAuth: [] requestBody: content: application/json: examples: notifyShopperOfUpcomingRecurringPayment: $ref: '#/components/examples/post-notifyShopper-notifyShopperOfUpcomingRecurringPayment' schema: $ref: '#/components/schemas/NotifyShopperRequest' responses: '200': content: application/json: examples: notifyShopperOfUpcomingRecurringPayment: $ref: '#/components/examples/post-notifyShopper-notifyShopperOfUpcomingRecurringPayment-200' schema: $ref: '#/components/schemas/NotifyShopperResult' description: OK - the request has succeeded. '400': content: application/json: schema: $ref: '#/components/schemas/ServiceError' description: Bad Request - a problem reading or understanding the request. '401': content: application/json: schema: $ref: '#/components/schemas/ServiceError' description: Unauthorized - authentication required. '403': content: application/json: schema: $ref: '#/components/schemas/ServiceError' description: Forbidden - insufficient permissions to process the request. '422': content: application/json: schema: $ref: '#/components/schemas/ServiceError' description: Unprocessable Entity - a request validation error. '500': content: application/json: schema: $ref: '#/components/schemas/ServiceError' description: Internal Server Error - the server could not process the request. /scheduleAccountUpdater: post: tags: - General summary: Schedule running the Account Updater description: 'When making the API call, you can submit either the credit card information, or the recurring detail reference and the shopper reference: * If the card information is provided, all the sub-fields for `card` are mandatory. * If the recurring detail reference is provided, the fields for `shopperReference` and `selectedRecurringDetailReference` are mandatory.' x-addedInVersion: '4' operationId: post-scheduleAccountUpdater x-sortIndex: 3 x-methodName: scheduleAccountUpdater security: - BasicAuth: [] - ApiKeyAuth: [] requestBody: content: application/json: examples: scheduleAccountUpdaterWithCardData: $ref: '#/components/examples/post-scheduleAccountUpdater-scheduleAccountUpdaterWithCardData' scheduleAccountUpdaterWithTokenData: $ref: '#/components/examples/post-scheduleAccountUpdater-scheduleAccountUpdaterWithTokenData' schema: $ref: '#/components/schemas/ScheduleAccountUpdaterRequest' responses: '200': content: application/json: examples: scheduleAccountUpdaterWithCardData: $ref: '#/components/examples/post-scheduleAccountUpdater-scheduleAccountUpdaterWithCardData-200' scheduleAccountUpdaterWithTokenData: $ref: '#/components/examples/post-scheduleAccountUpdater-scheduleAccountUpdaterWithTokenData-200' schema: $ref: '#/components/schemas/ScheduleAccountUpdaterResult' description: OK - the request has succeeded. '400': content: application/json: schema: $ref: '#/components/schemas/ServiceError' description: Bad Request - a problem reading or understanding the request. '401': content: application/json: schema: $ref: '#/components/schemas/ServiceError' description: Unauthorized - authentication required. '403': content: application/json: schema: $ref: '#/components/schemas/ServiceError' description: Forbidden - insufficient permissions to process the request. '422': content: application/json: examples: scheduleAccountUpdaterWithTokenData: $ref: '#/components/examples/post-scheduleAccountUpdater-scheduleAccountUpdaterWithTokenData-422' schema: $ref: '#/components/schemas/ServiceError' description: Unprocessable Entity - a request validation error. '500': content: application/json: schema: $ref: '#/components/schemas/ServiceError' description: Internal Server Error - the server could not process the request. components: schemas: Address: additionalProperties: false properties: city: description: 'The name of the city. Maximum length: 3000 characters.' maxLength: 3000 type: string country: description: 'The two-character ISO-3166-1 alpha-2 country code. For example, **US**. > If you don''t know the country or are not collecting the country from the shopper, provide `country` as `ZZ`.' type: string houseNumberOrName: description: 'The number or name of the house. Maximum length: 3000 characters.' maxLength: 3000 type: string postalCode: description: A maximum of five digits for an address in the US, or a maximum of ten characters for an address in all other countries. type: string stateOrProvince: description: 'The two-character ISO 3166-2 state or province code. For example, **CA** in the US or **ON** in Canada. > Required for the US and Canada.' type: string street: description: 'The name of the street. Maximum length: 3000 characters. > The house number should not be included in this field; it should be separately provided via `houseNumberOrName`.' maxLength: 3000 type: string required: - street - houseNumberOrName - city - postalCode - country type: object Amount: additionalProperties: false properties: currency: description: The three-character [ISO currency code](https://docs.adyen.com/development-resources/currency-codes#currency-codes). maxLength: 3 minLength: 3 type: string value: description: The amount of the transaction, in [minor units](https://docs.adyen.com/development-resources/currency-codes#minor-units). format: int64 type: integer required: - value - currency type: object BankAccount: additionalProperties: false properties: bankAccountNumber: description: The bank account number (without separators). type: string bankCity: x-addedInVersion: '18' description: The bank city. type: string bankLocationId: description: The location id of the bank. The field value is `nil` in most cases. type: string bankName: description: The name of the bank. type: string bic: description: The [Business Identifier Code](https://en.wikipedia.org/wiki/ISO_9362) (BIC) is the SWIFT address assigned to a bank. The field value is `nil` in most cases. type: string countryCode: description: 'Country code where the bank is located. A valid value is an ISO two-character country code (e.g. ''NL'').' type: string iban: description: The [International Bank Account Number](https://en.wikipedia.org/wiki/International_Bank_Account_Number) (IBAN). type: string ownerName: description: "The name of the bank account holder.\nIf you submit a name\ \ with non-Latin characters, we automatically replace some of them with\ \ corresponding Latin characters to meet the FATF recommendations. For\ \ example:\n* \u03C712 is converted to ch12.\n* \xFCA is converted to\ \ euA.\n* Peter M\xF8ller is converted to Peter Mller, because banks don't\ \ accept '\xF8'.\nAfter replacement, the ownerName must have at least\ \ three alphanumeric characters (A-Z, a-z, 0-9), and at least one of them\ \ must be a valid Latin character (A-Z, a-z). For example:\n* John17 -\ \ allowed.\n* J17 - allowed.\n* 171 - not allowed.\n* John-7 - allowed.\n\ > If provided details don't match the required format, the response returns\ \ the error message: 203 'Invalid bank account holder name'." type: string taxId: x-addedInVersion: '18' description: The bank account holder's tax ID. type: string type: object Card: additionalProperties: false properties: cvc: description: "The [card verification code](https://docs.adyen.com/payments-fundamentals/payment-glossary#card-security-code-cvc-cvv-cid)\ \ (1-20 characters). Depending on the card brand, it is known also as:\n\ * CVV2/CVC2 \u2013 length: 3 digits\n* CID \u2013 length: 4 digits\n>\ \ If you are using [Client-Side Encryption](https://docs.adyen.com/classic-integration/cse-integration-ecommerce),\ \ the CVC code is present in the encrypted data. You must never post the\ \ card details to the server.\n> This field must be always present in\ \ a [one-click payment request](https://docs.adyen.com/classic-integration/recurring-payments).\n\ > When this value is returned in a response, it is always empty because\ \ it is not stored." maxLength: 20 minLength: 1 type: string expiryMonth: description: 'The card expiry month. Format: 2 digits, zero-padded for single digits. For example: * 03 = March * 11 = November' maxLength: 2 minLength: 1 type: string expiryYear: description: 'The card expiry year. Format: 4 digits. For example: 2020' maxLength: 4 minLength: 4 type: string holderName: description: The name of the cardholder, as printed on the card. maxLength: 50 minLength: 1 type: string issueNumber: description: The issue number of the card (for some UK debit cards only). maxLength: 2 minLength: 1 type: string number: description: 'The card number (4-19 characters). Do not use any separators. When this value is returned in a response, only the last 4 digits of the card number are returned.' maxLength: 19 minLength: 4 type: string startMonth: description: The month component of the start date (for some UK debit cards only). maxLength: 2 minLength: 1 type: string startYear: description: The year component of the start date (for some UK debit cards only). maxLength: 4 minLength: 4 type: string type: object DisableRequest: additionalProperties: false properties: contract: x-addedInVersion: '3' description: 'Specify the contract if you only want to disable a specific use. This field can be set to one of the following values, or to their combination (comma-separated): * ONECLICK * RECURRING * PAYOUT' type: string merchantAccount: description: The merchant account identifier with which you want to process the transaction. type: string recurringDetailReference: description: 'The ID that uniquely identifies the recurring detail reference. If it is not provided, the whole recurring contract of the `shopperReference` will be disabled, which includes all recurring details.' type: string shopperReference: description: 'The ID that uniquely identifies the shopper. This `shopperReference` must be the same as the `shopperReference` used in the initial payment.' type: string required: - merchantAccount - shopperReference type: object DisableResult: additionalProperties: false properties: response: description: Depending on whether a specific recurring detail was in the request, result is either [detail-successfully-disabled] or [all-details-successfully-disabled]. type: string type: object Name: additionalProperties: false properties: firstName: description: The first name. maxLength: 80 type: string lastName: description: The last name. maxLength: 80 type: string required: - firstName - lastName type: object NotifyShopperRequest: additionalProperties: false properties: amount: description: The amount of the upcoming payment. $ref: '#/components/schemas/Amount' billingDate: description: Date on which the subscription amount will be debited from the shopper. In YYYY-MM-DD format type: string billingSequenceNumber: description: Sequence of the debit. Depends on Frequency and Billing Attempts Rule. type: string displayedReference: description: Reference of Pre-debit notification that is displayed to the shopper. Optional field. Maps to reference if missing type: string merchantAccount: description: The merchant account identifier with which you want to process the transaction. type: string recurringDetailReference: description: This is the `recurringDetailReference` returned in the response when you created the token. type: string reference: description: Pre-debit notification reference sent by the merchant. This is a mandatory field type: string shopperReference: description: 'The ID that uniquely identifies the shopper. This `shopperReference` must be the same as the `shopperReference` used in the initial payment.' type: string storedPaymentMethodId: description: This is the `recurringDetailReference` returned in the response when you created the token. type: string required: - merchantAccount - shopperReference - amount - reference type: object NotifyShopperResult: additionalProperties: false properties: displayedReference: description: Reference of Pre-debit notification that is displayed to the shopper type: string message: description: A simple description of the `resultCode`. type: string pspReference: description: The unique reference that is associated with the request. type: string reference: description: Reference of Pre-debit notification sent in my the merchant type: string resultCode: description: The code indicating the status of notification. type: string shopperNotificationReference: description: The unique reference for the request sent downstream. type: string storedPaymentMethodId: description: This is the recurringDetailReference returned in the response when token was created type: string type: object Recurring: additionalProperties: false properties: contract: description: "The type of recurring contract to be used.\nPossible values:\n\ * `ONECLICK` \u2013 Payment details can be used to initiate a one-click\ \ payment, where the shopper enters the [card security code (CVC/CVV)](https://docs.adyen.com/payments-fundamentals/payment-glossary#card-security-code-cvc-cvv-cid).\n\ * `RECURRING` \u2013 Payment details can be used without the card security\ \ code to initiate [card-not-present transactions](https://docs.adyen.com/payments-fundamentals/payment-glossary#card-not-present-cnp).\n\ * `ONECLICK,RECURRING` \u2013 Payment details can be used regardless of\ \ whether the shopper is on your site or not.\n* `PAYOUT` \u2013 Payment\ \ details can be used to [make a payout](https://docs.adyen.com/online-payments/online-payouts)." enum: - ONECLICK - RECURRING - PAYOUT type: string recurringDetailName: description: A descriptive name for this detail. type: string tokenService: x-addedInVersion: '25' description: The name of the token service. enum: - VISATOKENSERVICE - MCTOKENSERVICE - AMEXTOKENSERVICE - TOKEN_SHARING type: string type: object RecurringDetail: additionalProperties: false properties: additionalData: x-addedInVersion: '5' additionalProperties: type: string description: 'This field contains additional data, which may be returned in a particular response. The additionalData object consists of entries, each of which includes the key and value.' type: object alias: x-addedInVersion: '4' description: 'The alias of the credit card number. Applies only to recurring contracts storing credit card details' type: string aliasType: x-addedInVersion: '4' description: 'The alias type of the credit card number. Applies only to recurring contracts storing credit card details.' type: string bank: description: A container for bank account data. $ref: '#/components/schemas/BankAccount' billingAddress: x-addedInVersion: '4' description: The billing address. $ref: '#/components/schemas/Address' card: description: A container for card data. $ref: '#/components/schemas/Card' contractTypes: x-addedInVersion: '12' description: Types of recurring contracts. items: type: string type: array creationDate: description: The date when the recurring details were created. format: date-time type: string firstPspReference: x-addedInVersion: '4' description: The `pspReference` of the first recurring payment that created the recurring detail. type: string name: description: An optional descriptive name for this recurring detail. type: string paymentMethodVariant: x-addedInVersion: '2' description: The type or sub-brand of a payment method used, e.g. Visa Debit, Visa Corporate, etc. For more information, refer to [PaymentMethodVariant](https://docs.adyen.com/development-resources/paymentmethodvariant). type: string recurringDetailReference: description: The reference that uniquely identifies the recurring detail. type: string shopperName: x-addedInVersion: '4' description: The name of the shopper. $ref: '#/components/schemas/Name' socialSecurityNumber: x-addedInVersion: '4' description: A shopper's social security number (only in countries where it is legal to collect). type: string tokenDetails: x-addedInVersion: '2' $ref: '#/components/schemas/TokenDetails' variant: description: "The payment method, such as \u201Cmc\", \"visa\", \"ideal\"\ , \"paypal\"." type: string required: - recurringDetailReference - variant type: object RecurringDetailWrapper: properties: RecurringDetail: $ref: '#/components/schemas/RecurringDetail' RecurringDetailsRequest: additionalProperties: false properties: merchantAccount: description: The merchant account identifier you want to process the (transaction) request with. type: string recurring: description: 'A container for the type of a recurring contract to be retrieved. The contract value needs to match the contract value submitted in the payment transaction used to create a recurring contract. However, if `ONECLICK,RECURRING` is the original contract definition in the initial payment, then `contract` should take either `ONECLICK` or `RECURRING`, depending on whether or not you want the shopper to enter their card''s security code when they finalize their purchase.' $ref: '#/components/schemas/Recurring' shopperReference: description: The reference you use to uniquely identify the shopper (e.g. user ID or account ID). type: string required: - merchantAccount - shopperReference type: object RecurringDetailsResult: additionalProperties: false properties: creationDate: description: The date when the recurring details were created. format: date-time type: string details: description: Payment details stored for recurring payments. items: $ref: '#/components/schemas/RecurringDetailWrapper' type: array lastKnownShopperEmail: description: The most recent email for this shopper (if available). type: string shopperReference: description: The reference you use to uniquely identify the shopper (e.g. user ID or account ID). type: string type: object ScheduleAccountUpdaterRequest: additionalProperties: false properties: additionalData: additionalProperties: type: string description: This field contains additional data, which may be required for a particular request. type: object card: description: 'Credit card data. Optional if `shopperReference` and `selectedRecurringDetailReference` are provided.' $ref: '#/components/schemas/Card' merchantAccount: description: Account of the merchant. type: string reference: description: A reference that merchants can apply for the call. type: string selectedRecurringDetailReference: description: 'The selected detail recurring reference. Optional if `card` is provided.' type: string shopperReference: description: 'The reference of the shopper that owns the recurring contract. Optional if `card` is provided.' type: string required: - merchantAccount - reference type: object ScheduleAccountUpdaterResult: additionalProperties: false properties: pspReference: description: Adyen's 16-character unique reference associated with the transaction. This value is globally unique; quote it when communicating with us about this request. type: string result: description: The result of scheduling an Account Updater. If scheduling was successful, this field returns **Success**; otherwise it contains the error message. type: string required: - pspReference - result type: object ServiceError: additionalProperties: false properties: errorCode: description: The error code mapped to the error message. type: string errorType: description: The category of the error. type: string message: description: A short explanation of the issue. type: string pspReference: description: The PSP reference of the payment. type: string status: description: The HTTP response status. format: int32 type: integer type: object TokenDetails: additionalProperties: false properties: tokenData: additionalProperties: type: string type: object tokenDataType: type: string type: object securitySchemes: ApiKeyAuth: in: header name: X-API-Key type: apiKey BasicAuth: scheme: basic type: http examples: post-disable-disableARecurringContract: summary: Disable a recurring contract value: shopperReference: YOUR_SHOPPER_REFERENCE recurringDetailReference: '8314442372419167' merchantAccount: YOUR_MERCHANT_ACCOUNT post-listRecurringDetails-listAllRecurringDetails: summary: List recurring details of the specified contract value value: recurring: contract: RECURRING shopperReference: YOUR_SHOPPER_REFERENCE merchantAccount: YOUR_MERCHANT_ACCOUNT post-notifyShopper-notifyShopperOfUpcomingRecurringPayment: summary: Request issuer to notify shopper of upcoming recurring payment value: merchantAccount: YOUR_MERCHANT_ACCOUNT storedPaymentMethodId: '8415995487234100' shopperReference: YOUR_SHOPPER_REFERENCE amount: currency: INR value: 1000 billingDate: '2021-03-16' reference: Example reference displayedReference: exampleDisplayedReference post-notifyShopper-notifyShopperOfUpcomingRecurringPayment-200: summary: Example response for request 'notifyShopper' value: message: Request Processed Successfully resultCode: Success shopperNotificationReference: '9915003646742627' storedPaymentMethodId: '8415995487234100' pspReference: M5N7TQ4TG5PFWR50 reference: Example reference displayedReference: exampleDisplayedReference post-scheduleAccountUpdater-scheduleAccountUpdaterWithCardData: summary: Schedule AccountUpdater with card data value: merchantAccount: YOUR_MERCHANT_ACCOUNT reference: YOUR_REFERENCE card: expiryMonth: '03' expiryYear: '2030' holderName: Adyen Test number: '4111111111111111' post-scheduleAccountUpdater-scheduleAccountUpdaterWithCardData-200: summary: Scheduled Account Updater with card data value: pspReference: QFQTPCQ8HXSKGK82 result: Success post-scheduleAccountUpdater-scheduleAccountUpdaterWithTokenData: summary: Schedule AccountUpdater with token data value: merchantAccount: YOUR_MERCHANT_ACCOUNT reference: YOUR_REFERENCE shopperReference: YOUR_SHOPPER_REFERENCE selectedRecurringDetailReference: '8814232895168272' post-scheduleAccountUpdater-scheduleAccountUpdaterWithTokenData-200: summary: Scheduled Account Updater with token data value: pspReference: JLCMPCQ8HXSKGK82 result: Success post-scheduleAccountUpdater-scheduleAccountUpdaterWithTokenData-422: summary: Error response for RecurringShopper not found value: status: 422 errorCode: '000' message: RecurringShopper not found errorType: validation