--- title: "Import payment details for recurring payments" description: "Learn how to migrate your payment data." url: "https://docs.adyen.com/development-resources/migrating-payment-data/import-payment-details-for-recurring-payments" source_url: "https://docs.adyen.com/development-resources/migrating-payment-data/import-payment-details-for-recurring-payments.md" canonical: "https://docs.adyen.com/development-resources/migrating-payment-data/import-payment-details-for-recurring-payments" last_modified: "2026-02-04T17:01:00+01:00" language: "en" --- # Import payment details for recurring payments Learn how to migrate your payment data. [View source](/development-resources/migrating-payment-data/import-payment-details-for-recurring-payments.md) To migrate recurring payment contracts from another payment service provider to the Adyen payments platform, you need to provide us with a CSV file containing the recurring payment details. We will then import this file. After importing, we will send you an output file with the migration results. ## Input file format The files containing the data to be imported should be formatted as follows: 1. Create a file in CSV (Comma Separated Values) format as per RFC 4180, in accordance with the following requirements: * The first line contains the [names of the fields](#input-file-reference). You do not have to use all field names and you do not have to use them in the same order as listed on this page. * Each subsequent line contains the fields for a single recurring contract. In other words: Each recurring contract is on a separate line. * If a field doesn't apply to the recurring contract that the line describes, specifying a value is skipped. * Field names and values are case-sensitive. * Multi-line fields are not allowed. * The maximum file length is 1,000,000 lines. * The maximum file size is 1 GB. 2. Save the file in [UTF-8](https://en.wikipedia.org/wiki/UTF-8) format (to support non-western characters). 3. Encrypt the file using the PGP public key provided to you by either our [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other), or your Adyen contact. For more information, see our [PGP encryption documentation](/development-resources/migrating-payment-data/pgp). 4. Send the file to Adyen. The following is an example input file with four recurring contracts: ```csv MerchantAccount,ShopperEmail,ShopperReference,RecurringContract,EchoData,OwnerName,ExpiryMonth,ExpiryYear,ExpiryYYMM,ExpiryMMYY,ExpiryMMYYYY,ExpiryYYYYMM,CardNumber,Iban,CountryCode,BankLocation,BankName,BankLocationId,BankAccountNumber,BillingAgreementId,PayerId,BillingStreet,BillingCity,BillingStateOrProvince,BillingPostalCode,BillingCountry TestMerchant,mark1test@adyen.com,mark1,RECURRING,MasterCard Bijenkorf NL,D.N. Mater,8,2018,,,,,5100081112223332,,,,,,,,,,,,, TestMerchant,mark30test@adyen.com,mark30,"RECURRING,ONECLICK,PAYOUT",,P.Pal,,,,,,,,,,,,,,B-2308952346426,AK5HCWWRUV2KL,,,,, TestMerchant,mark75test@adyen.com,mark78,RECURRING,,B.Dalby,,,,,,,,NO6012341234561,NO,,,,,,,,,,, TestMerchant,mark2test@adyen.com,mark2,RECURRING,,B.Dalby,,,,,,,,,US,,,121000358,123456789,,,123 Test Street,San Francisco,CA,94000,US ``` ## Input file fields The fields for recurring contracts are: | Field | Required | Description | | -------------------------- | ------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `MerchantAccount` | ![-x-](/user/data/smileys/emoji/x.png "-x-") | The merchant account you want to process payments with. If you are unable to provide this information in your CSV file, contact our [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other). | | `ShopperEmail` | ![-x-](/user/data/smileys/emoji/x.png "-x-") | The email address of the shopper. | | `ShopperReference` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | An ID that refers uniquely to the shopper. For example, a customer ID in a shopping cart system. Minimum length: three characters. Note that the value is case-sensitive. Do not include personally identifiable information (PII), such as name or email address. | | `RecurringContract` | ![-x-](/user/data/smileys/emoji/x.png "-x-") | The type of recurring contract. Possible values:- **ONECLICK** – Payment details can be used to initiate a one-click payment, where the shopper enters the [card security code (CVC/CVV)](/get-started-with-adyen/adyen-glossary/#card-security-code-cvc-cvv-cid). - **RECURRING** – Payment details can be used without the card security code to initiate [card-not-present transactions](/get-started-with-adyen/adyen-glossary/#card-not-present-cnp). - **PAYOUT** – Payment details can be used to [make a payout](/online-payments/online-payouts).Values can also be concatenated with a comma. But when doing so, the combined value needs to be enclosed in double quotes, for example **"RECURRING,ONECLICK"**.If you are unable to provide this information in your CSV file, contact the [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other). | | `OwnerName` | ![-x-](/user/data/smileys/emoji/x.png "-x-") | Name of the account holder. | | `OwnerNamePostfix` | ![-x-](/user/data/smileys/emoji/x.png "-x-") | The surname of the account holder. Use this if you want to pass the First Name and Surname in two separate fields. | | `IsPreferredPaymentMethod` | ![-x-](/user/data/smileys/emoji/x.png "-x-") | In this field you can specify if a payment method represents the preferred payment method for a shopper. | | `EchoData` | ![-x-](/user/data/smileys/emoji/x.png "-x-") | In this field you can specify data you want to be echoed back in the output file, such as previous tokens for credit card data. The Adyen payments platform does not use this data. | | `AuxEchoData` | ![-x-](/user/data/smileys/emoji/x.png "-x-") | Same as `EchoData` , for use when you need more than one data field to be echoed back in the output file. You can ask our [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other) to configure and enable this for the import result file. | Apart from the above fields, the CSV file can have fields for: * [Card data](#cards) * [Address data](#address) * [SEPA recurring payments](#sepa) * [ACH recurring payments](#ach) * [PayPal recurring payments](#paypal) * [Klarna recurring payments](#klarna) * [Shopper reference re-mapping (optional auxiliary file)](#shopper-alterations) The order of fields is not mandatory and fields can be skipped depending on the payment method. Use the first line of your CSV file to define the field names and their order on other lines. ### Card fields When specifying card data, you need to provide: * Card number. * Expiry date: month and year of expiry.\ You can use either a combination of fields (`ExpiryMonth` and `ExpiryYear`), or a single field to specify both month and year: `ExpiryMMYY`, `ExpiryMMYYYY`, `ExpiryYYMM` or `ExpiryYYYYMM`. | Data | Required | Description | | --------------------------------------------- | ------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `CardNumber` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The card number. | | Expiry date | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Either a single field or a combination of fields is required. Choose from the following fields.* `ExpiryMMYY`: The month and year of expiry, written as a 4-digit string. For example, **0618** for June 2018. * `ExpiryMMYYYY` :The month and year of expiry, written as a 6-digit string. For example, **062018** for June 2018. `ExpiryYYMM`: The year and month of expiry, written as a 4-digit string. For example, **1806** for June 2018. * `ExpiryYYYYMM`The year and month of expiry, written as a 6-digit string. For example, **201806** for June 2018. * `ExpiryMonth`The month of expiry, written as a 1 or 2-digit string. For example, **6** or **06** for June. Use in combination with `ExpiryYear`. * `ExpiryYear`The year of expiry, written as a 4-digit string. For example, **2018**. Use this in combination with `ExpiryMonth`. | | `networkTxReference` (for Visa) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The Visa Transaction ID from the initial transaction where the shopper signed up for a series of **Subscription** or **UnscheduledCardOnFile** payments. Visa won't support the static value (Interim Transaction ID) after 31 October 2022. Not providing the Visa Transaction ID might result in soft declines and non-compliance assessment fees. | | `networkTxReference` (for Mastercard) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The Mastercard Trace ID from the initial transaction where the shopper signed up for a series of **Subscription** or **UnscheduledCardOnFile** payments. Mastercard won't support the static value (dummy Trace ID) after 19 October 2024. Not providing the Mastercard Trace ID might result in soft declines and non-compliance assessment fees. | | `transactionLinkId` (for Mastercard) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The [Mastercard Transaction Link ID](https://help.adyen.com/updates/mastercard-transaction-link-identifier-tlid). Mastercard is migrating from Trace ID to Transaction Link ID. We are required to store the Mastercard Transaction Link ID together with the TRACE ID. This means that `transactionLinkId` will only be imported if `networkTxReference` is also provided. | | `networkTxReference` (for other card schemes) | ![-x-](/user/data/smileys/emoji/x.png "-x-") | For other card schemes besides Visa and Mastercard, we *recommend* that you send the `networkTxReference` from the initial transaction where the shopper signed up for a series of **Subscription** or **UnscheduledCardOnFile** payments. However, if you do not have the `networkTxReference`, we will insert a card scheme-compliant static value on your behalf. We will do that until the schemes no longer allow static values. | ### Address fields Using the following fields, you can specify a physical address. If one field below is provided, then all other fields from this section are also required. | Field | Required | Description | | -------------------------- | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `BillingHouseNumberOrName` | ![-x-](/user/data/smileys/emoji/x.png "-x-") | The number or name of the house. You can omit this and include the data in `BillingStreet`. | | `BillingStreet` | ![-x-](/user/data/smileys/emoji/x.png "-x-") | The street name. | | `BillingCity` | ![-x-](/user/data/smileys/emoji/x.png "-x-") | The city name. | | `BillingStateOrProvince` | ![-x-](/user/data/smileys/emoji/x.png "-x-") | For USA or Canada, a valid 2-character abbreviation for the state or province respectively. For other countries/regions any abbreviation with maximum 3 characters for the state or province. | | `BillingPostalCode` | ![-x-](/user/data/smileys/emoji/x.png "-x-") | The postal code with a maximum of 5 characters for USA and a maximum of 10 characters for any other country/region. | | `BillingCountry` | ![-x-](/user/data/smileys/emoji/x.png "-x-") | A valid value is an 2-character ISO country/region code. | ### Recurring SEPA payment fields When specifying SEPA payment details, you always need to provide the IBAN of the bank account and the account holder name. For third-party payouts, you need to provide all fields listed below, except for the fields `SepaMandateId` and `SepaMandateDateOfSignature`. For more information, refer to [Payouts to a bank account](/online-payments/online-payouts/payouts-to-a-bank-account). To optionally import SEPA Direct Debit mandates, include the mandate identifier, and the date of the mandate signature. | Field | Required | Description | | ---------------------------- | ------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `Iban` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The IBAN of the bank account. | | `OwnerName` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The name of the account holder. | | `CountryCode` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The code for the country/region where the bank (branch) is located. Format: the two-letter [ISO-3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) country code. Exception: **QZ** (Kosovo). | | `BankLocation` | ![-x-](/user/data/smileys/emoji/x.png "-x-") | The location of the shopper's bank. | | `BankName` | ![-x-](/user/data/smileys/emoji/x.png "-x-") | The name of the shopper's bank. | | `BankLocationId` | ![-x-](/user/data/smileys/emoji/x.png "-x-") | The ID of the bank location of the shopper. | | `BankAccountNumber` | ![-x-](/user/data/smileys/emoji/x.png "-x-") | The account number of the bank. | | `ShopperReference` | ![-x-](/user/data/smileys/emoji/x.png "-x-") | An ID that refers uniquely to the shopper. For example, a customer ID in a shopping cart system. | | `SepaMandateId` | ![-x-](/user/data/smileys/emoji/x.png "-x-") | The SEPA Direct Debit mandate identifier. | | `SepaMandateDateOfSignature` | Required if `SepaMandateId` is included | The date of the SEPA Direct Debit mandate signature. Format: YYYY-MM-DD. For example: **2019-02-22** | ### Recurring ACH payment fields When specifying ACH payment details, you need to provide all of the following fields: | Field | Required | Description | | -------------------------- | ------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | | `BankLocationId` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The [ABA routing transit number](https://en.wikipedia.org/wiki/ABA_routing_transit_number) of the account. | | `BankAccountNumber` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The US bank account number from which the payment will be debited. | | `OwnerName` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Name on the bank account. | | `CountryCode` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **US** | | `BillingHouseNumberOrName` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The number or name of the house. You can omit this and include the data in `BillingStreet`. | | `BillingStreet` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The street name. | | `BillingCity` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The city name. | | `BillingStateOrProvince` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | A valid 2-character abbreviation for the state. | | `BillingPostalCode` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The postal code. | | `BillingCountry` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **US** | ### Recurring PayPal payment fields For third-party payouts, you need to provide all of the following fields. | Field | Required | Description | | -------------------- | ------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `BillingAgreementId` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ID of the billing agreement. Required for recurring payments and must start with 'B-'. The value depends on the type of recurring contract. If not used, should be identified as null. | | `PayPalBuyerEmailId` | ![-x-](/user/data/smileys/emoji/x.png "-x-") | The email address of the Paypal account that set up the billing agreement ID with Paypal. | | `PayerId` | ![-x-](/user/data/smileys/emoji/x.png "-x-") | ID of PayPal account. The value depends on the type of recurring contract. If not used, should be identified as null. | ### Recurring Klarna payment fields Not all Klarna payment methods or countries/regions support recurring payments. When specifying Klarna payment details, provide all the following fields. Make sure that you enter a supported combination in the fields `KlarnaVariant` and `KlarnaCountry`. | Field | Required | Description | | --------------- | ------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `KlarnaTokenId` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ID of the shopper's Klarna customer token. For more information, see [Klarna's documentation](https://docs.klarna.com/klarna-payments/in-depth-knowledge/customer-token/). | | `KlarnaVariant` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The Klarna payment method variant. Possible values:- **klarna\_paynow** (for Klarna - Pay Now) - **klarna** (for Klarna - Pay later) - **klarna\_account** (for Klarna - Pay over time) | | `KlarnaCountry` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | A valid 2-character ISO country code. | ### Shopper reference re-mapping (optional auxiliary file) If you want to change the shopper references upon importing, you can send an auxiliary shopper reference re-mapping file, in addition to the payment detail file.\ The format of the re-mapping file should include both of the following columns. | Field | Required | Description | | --------------------- | ------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | | `oldShopperReference` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The old or existing shopper reference which is present in the CSV file, from your other payments vendor. | | `newShopperReference` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The shopper reference under which the tokens will be stored, after they are imported into the Adyen payments platform. | For example, the file might look like this: ```csv oldShopperReference,newShopperReference ref_1,new_ref_1 ref_2,new_ref_2 ... ``` ## Output file When we have imported your CSV file, we'll send you an output file with the migration results. If you need an encrypted output file, provide your public key to our [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other). To provide more information about the migration, we will start adding new fields to the output file. Make sure that your parsing logic can handle changes such as new headers. The output file has the following fields: | Field | Description | | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `status` | The status of the migration. Possible values:- **Success** No issues. Line is imported correctly. - **Skipped** This typically happens if there is essential data missing in the line. For example CardNumber or ExpiryYear is missing. | | `paymentMethodVariant` | Type of payment method. See more information about this field [here](/development-resources/paymentmethodvariant). | | `shopperReference` | An ID that refers uniquely to the shopper. For example, a customer ID in a shopping cart system. | | `recurringDetailReference` | The reference that uniquely identifies the recurring detail. | | `alias` | The Adyen alias of the card. Example: H167852639363479 | | `expiryMonth` | The card expiry month. Format: 1 or 2 digits. For example:- 3 = March - 11 = November | | `expiryYear` | The card expiry year. Format: 4 digits. For example: 2018. | | `bin` | The Bank Identification Number (BIN) of a card, which is the first six digits of a card number. Example: 521234 | | `cardSummary` | The last four digits of a card number. | | `issuerCountryCode` | The country/region of the issuer. Format: 2-letter ISO code. | | `echodata` | Data that you specified in the `EchoData` field of your CSV file, such as previous tokens for credit card data. | | `statusMessage` | If the card could not be imported, the reason why the import failed. | | `fundingSource` | The funding source of the card. Example: **DEBIT**, **CREDIT**, or **PREPAID******. | You can also include the following fields in the output file. To receive these fields, contact our [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other). | Field | Description | | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `auxEchodata` | Data that you specified in the `AuxEchoData` field of your CSV file. | | `isPreferredPaymentDetail` | Based on the field `IsPreferredPaymentDetail` of your CSV file. | | `networkTxReferenceStatus` | Import status of the `networkTxReference` specified in your CSV file. Possible values: **NOT\_PROVIDED**, **IMPORTED**, **NOT\_VALID** | | `transactionLinkIdStatus` | Import status of the `transactionLinkId` specified in your CSV file. Possible values: **NOT\_PROVIDED**, **IMPORTED**, **NOT\_VALID**, **NOT\_APPLICABLE\_FOR\_VARIANT**, **NETWORK\_TX\_REFERENCE\_MISSING** | | `billingAddressStatus` | Import status of the `Address fields` specified in your CSV file. Possible values: **NOT\_PROVIDED**, **IMPORTED**, **NOT\_VALID** | | `paymentDetailDifference` | The storage status of the payment details. Possible values: **created**, **updated**, **alreadyExisting** | The following is an example output file, without additional fields, with four payment details successfully migrated: ```csv status,paymentMethodVariant,shopperReference,recurringDetailReference,alias,expiryMonth,expiryYear,bin,cardSummary,issuerCountryCode,echodata,statusMessage,fundingSource Success,amex,HENSHAP,2914485358484074,H116006232956221,2,2017,374291,1002,,,,, Success,amex,LOCKL1,2914546007913217,E167970689307238,2,2020,374293,1006,,,,, Success,amex,HICKMAGP,2714583830042296,M212359999703856,8,2017,374290,1009,,,,, Success,amex,SUTHM1,2714583830042304,A129651585108480,7,2016,374297,1005,,,,, ```