---
title: "Update stored details"
url: "https://docs.adyen.com/online-payments/classic-integrations/classic-api-integration/tokenization/update-stored-details"
source_url: "https://docs.adyen.com/online-payments/classic-integrations/classic-api-integration/tokenization/update-stored-details.md"
canonical: "https://docs.adyen.com/online-payments/classic-integrations/classic-api-integration/tokenization/update-stored-details"
last_modified: "2026-05-24T12:54:31+02:00"
language: "en"
---
# Update stored details
[View source](/online-payments/classic-integrations/classic-api-integration/tokenization/update-stored-details.md)
**Adyen is no longer developing the Classic API integration**
This page is for the Classic API (`/authorise`) integration, which we no longer accept new integrations with.
We strongly recommend migrating to the newer [Manage tokens](/online-payments/tokenization/managing-tokens#update-stored-details) integration. To use this newer integration, you must also [migrate to the Checkout API](/online-payments/upgrade-your-integration/migrate-to-checkout-api).
For credit cards, you can update the [previously stored payment details](/online-payments/classic-integrations/classic-api-integration/tokenization/store-payment-details). This may be required, for example, when the card expiry date or the billing/delivery address changes.
## Request
You can update stored payment details when you initiate a new recurring payment. For this, pass new payment details along with an `/authorise` call and specify the `selectedRecurringDetailReference` value of the details that you want to update.
The details will only update if the `/authorise` request is successful.
For information on all available fields, see [PaymentRequest](https://docs.adyen.com/api-explorer/#/Payment/latest/authorise).
The following example demonstrates how to update the expiry month and year for the previously stored card details with an `/authorise` call:
#### JSON
```json
{
"amount":{
"value":"100",
"currency":"EUR"
},
"card":{
"expiryMonth":"11",
"expiryYear":"2018"
},
"merchantAccount":"TestMerchant",
"recurring":{
"contract":"RECURRING"
},
"recurringProcessingModel": "Subscription",
"reference":"RecurringPayment-0001",
"shopperEmail":"gras.shopper77@somewhere.org",
"shopperIP":"1.1.1.1",
"shopperInteraction":"ContAuth",
"shopperReference":"YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j",
"selectedRecurringDetailReference":"RecurringDetailReference1"
}
```
#### Soap
```xml
EUR
100
11
2018
TestMerchant
RECURRING
Subscription
RecurringPayment-0001
gras.shopper77@somewhere.org
1.1.1.1
ContAuth
YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j
RecurringDetailReference1
```
#### curl
```bash
curl https://pal-test.adyen.com/pal/servlet/Payment/v46/authorise \
-H 'x-api-key: ADYEN_API_KEY' \
-H 'content-type: application/json' \
-d '{
"amount": {
"value": 10,
"currency": "EUR"
},
"card": {
"expiryMonth": 11,
"expiryYear": 2018
},
"merchantAccount": "TestMerchant",
"recurring": {
"contract": "RECURRING"
},
"recurringProcessingModel": "Subscription",
"reference": "RecurringPayment-0001",
"shopperEmail": "gras.shopper77@somewhere.org",
"shopperIP": "1.1.1.1",
"shopperInteraction": "ContAuth",
"shopperReference": "YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j",
"selectedRecurringDetailReference": "RecurringDetailReference1"
}'
```
#### Java
```java
// Adyen Java API Library v25.0.0
import com.adyen.Client;
import com.adyen.enums.Environment;
import com.adyen.model.payment.*;
import java.time.OffsetDateTime;
import java.util.*;
import com.adyen.service.*;
Client client = new Client("ADYEN_API_KEY", Environment.TEST);
// Create the request object(s)
Amount amount = new Amount()
.currency("EUR")
.value(10L);
Recurring recurring = new Recurring()
.contract(Recurring.ContractEnum.RECURRING);
Card card = new Card()
.expiryMonth("11")
.expiryYear("2018");
PaymentRequest paymentRequest = new PaymentRequest()
.reference("RecurringPayment-0001")
.amount(amount)
.merchantAccount("TestMerchant")
.recurring(recurring)
.recurringProcessingModel(PaymentRequest.RecurringProcessingModelEnum.SUBSCRIPTION)
.shopperInteraction(PaymentRequest.ShopperInteractionEnum.CONTAUTH)
.selectedRecurringDetailReference("RecurringDetailReference1")
.shopperEmail("gras.shopper77@somewhere.org")
.shopperIP("1.1.1.1")
.card(card)
.shopperReference("YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j");
// Make the API call
paymentApi service = new paymentApi(client);
PaymentResult response = service.authorise(paymentRequest, null);
```
#### PHP
```php
// Adyen PHP API Library v17.4.0
use Adyen\Client;
use Adyen\Environment;
use Adyen\Model\Payments\Amount;
use Adyen\Model\Payments\Recurring;
use Adyen\Model\Payments\Card;
use Adyen\Model\Payments\PaymentRequest;
use Adyen\Service\Payments\PaymentsApi;
$client = new Client();
$client->setXApiKey("ADYEN_API_KEY");
$client->setEnvironment(Environment::TEST);
// Create the request object(s)
$amount = new Amount();
$amount
->setCurrency("EUR")
->setValue(10);
$recurring = new Recurring();
$recurring
->setContract("RECURRING");
$card = new Card();
$card
->setExpiryMonth("11")
->setExpiryYear("2018");
$paymentRequest = new PaymentRequest();
$paymentRequest
->setReference("RecurringPayment-0001")
->setAmount($amount)
->setMerchantAccount("TestMerchant")
->setRecurring($recurring)
->setRecurringProcessingModel("Subscription")
->setShopperInteraction("ContAuth")
->setSelectedRecurringDetailReference("RecurringDetailReference1")
->setShopperEmail("gras.shopper77@somewhere.org")
->setShopperIP("1.1.1.1")
->setCard($card)
->setShopperReference("YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j");
// Make the API call
$service = new PaymentsApi($client);
$response = $service->authorise($paymentRequest);
```
#### C\#
```cs
// Adyen .net API Library v14.4.0
using Adyen;
using Environment = Adyen.Model.Environment;
using Adyen.Model;
using Adyen.Model.Payment;
using Adyen.Service;
var config = new Config()
{
XApiKey = "ADYEN_API_KEY",
Environment = Environment.Test
};
var client = new Client(config);
// Create the request object(s)
Amount amount = new Amount
{
Currency = "EUR",
Value = 10
};
Recurring recurring = new Recurring
{
Contract = Recurring.ContractEnum.RECURRING
};
Card card = new Card
{
ExpiryMonth = "11",
ExpiryYear = "2018"
};
PaymentRequest paymentRequest = new PaymentRequest
{
Reference = "RecurringPayment-0001",
Amount = amount,
MerchantAccount = "TestMerchant",
Recurring = recurring,
RecurringProcessingModel = PaymentRequest.RecurringProcessingModelEnum.Subscription,
ShopperInteraction = PaymentRequest.ShopperInteractionEnum.ContAuth,
SelectedRecurringDetailReference = "RecurringDetailReference1",
ShopperEmail = "gras.shopper77@somewhere.org",
ShopperIP = "1.1.1.1",
Card = card,
ShopperReference = "YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j"
};
// Make the API call
var service = new PaymentService(client);
var response = service.Authorise(paymentRequest);
```
#### NodeJS (JavaScript)
```js
// Adyen Node API Library v16.2.0
// Require the parts of the module you want to use
const { Client, PaymentAPI } = require('@adyen/api-library');
// Initialize the client object
const client = new Client({apiKey: "ADYEN_API_KEY", environment: "TEST"});
// Create the request object(s)
const paymentRequest = {
amount: {
value: 10,
currency: "EUR"
},
card: {
expiryMonth: 11,
expiryYear: 2018
},
merchantAccount: "TestMerchant",
recurring: {
contract: "RECURRING"
},
recurringProcessingModel: "Subscription",
reference: "RecurringPayment-0001",
shopperEmail: "gras.shopper77@somewhere.org",
shopperIP: "1.1.1.1",
shopperInteraction: "ContAuth",
shopperReference: "YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j",
selectedRecurringDetailReference: "RecurringDetailReference1"
}
// Make the API call
const paymentAPI = new PaymentAPI(client);
const response = paymentAPI.authorise(paymentRequest);
```
#### Go
```go
// Adyen Go API Library v9.3.0
import (
"context"
"github.com/adyen/adyen-go-api-library/v9/src/common"
"github.com/adyen/adyen-go-api-library/v9/src/adyen"
"github.com/adyen/adyen-go-api-library/v9/src/payments"
)
client := adyen.NewClient(&common.Config{
ApiKey: "ADYEN_API_KEY",
Environment: common.TestEnv,
})
// Create the request object(s)
amount := payments.Amount{
Currency: "EUR",
Value: 10,
}
recurring := payments.Recurring{
Contract: common.PtrString("RECURRING"),
}
card := payments.Card{
ExpiryMonth: common.PtrString("11"),
ExpiryYear: common.PtrString("2018"),
}
paymentRequest := payments.PaymentRequest{
Reference: "RecurringPayment-0001",
Amount: amount,
MerchantAccount: "TestMerchant",
Recurring: &recurring,
RecurringProcessingModel: common.PtrString("Subscription"),
ShopperInteraction: common.PtrString("ContAuth"),
SelectedRecurringDetailReference: common.PtrString("RecurringDetailReference1"),
ShopperEmail: common.PtrString("gras.shopper77@somewhere.org"),
ShopperIP: common.PtrString("1.1.1.1"),
Card: &card,
ShopperReference: common.PtrString("YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j"),
}
// Make the API call
service := client.Payments()
req := service.PaymentsApi.AuthoriseInput().PaymentRequest(paymentRequest)
res, httpRes, err := service.PaymentsApi.Authorise(context.Background(), req)
```
#### Python
```py
# Adyen Python API Library v12.2.0
import Adyen
adyen = Adyen.Adyen()
adyen.client.xapikey = "ADYEN_API_KEY"
adyen.client.platform = "test" # The environment to use library in.
# Create the request object(s)
json_request = {
"amount": {
"value": 10,
"currency": "EUR"
},
"card": {
"expiryMonth": 11,
"expiryYear": 2018
},
"merchantAccount": "TestMerchant",
"recurring": {
"contract": "RECURRING"
},
"recurringProcessingModel": "Subscription",
"reference": "RecurringPayment-0001",
"shopperEmail": "gras.shopper77@somewhere.org",
"shopperIP": "1.1.1.1",
"shopperInteraction": "ContAuth",
"shopperReference": "YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j",
"selectedRecurringDetailReference": "RecurringDetailReference1"
}
# Make the API call
result = adyen.payment.payments_api.authorise(request=json_request)
```
#### Ruby
```rb
# Adyen Ruby API Library v9.3.0
require "adyen-ruby-api-library"
adyen = Adyen::Client.new
adyen.api_key = 'ADYEN_API_KEY'
adyen.env = :test # Set to "live" for live environment
# Create the request object(s)
request_body = {
:amount => {
:value => 10,
:currency => 'EUR'
},
:card => {
:expiryMonth => 11,
:expiryYear => 2018
},
:merchantAccount => 'TestMerchant',
:recurring => {
:contract => 'RECURRING'
},
:recurringProcessingModel => 'Subscription',
:reference => 'RecurringPayment-0001',
:shopperEmail => 'gras.shopper77@somewhere.org',
:shopperIP => '1.1.1.1',
:shopperInteraction => 'ContAuth',
:shopperReference => 'YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j',
:selectedRecurringDetailReference => 'RecurringDetailReference1'
}
# Make the API call
result = adyen.payment.payments_api.authorise(request_body)
```
#### NodeJS (TypeScript)
```ts
// Adyen Node API Library v16.2.0
// Require the parts of the module you want to use
import { Client, PaymentAPI, Types } from "@adyen/api-library";
// Initialize the client object
const client = new Client({apiKey: "ADYEN_API_KEY", environment: "TEST"});
// Create the request object(s)
const amount: Types.payment.Amount = {
currency: "EUR",
value: 10
};
const recurring: Types.payment.Recurring = {
contract: Types.payment.Recurring.ContractEnum.RECURRING
};
const card: Types.payment.Card = {
expiryMonth: "11",
expiryYear: "2018"
};
const paymentRequest: Types.payment.PaymentRequest = {
reference: "RecurringPayment-0001",
amount: amount,
merchantAccount: "TestMerchant",
recurring: recurring,
recurringProcessingModel: Types.payment.PaymentRequest.RecurringProcessingModelEnum.Subscription,
shopperInteraction: Types.payment.PaymentRequest.ShopperInteractionEnum.ContAuth,
selectedRecurringDetailReference: "RecurringDetailReference1",
shopperEmail: "gras.shopper77@somewhere.org",
shopperIP: "1.1.1.1",
card: card,
shopperReference: "YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j"
};
// Make the API call
const paymentAPI = new PaymentAPI(client);
const response = paymentAPI.authorise(paymentRequest);
```
## Response
If a recurring payment is successfully authorised, payment details are also updated during this call. In this case, the old `recurringDetailReference` becomes invalid, and a new reference is created.
A new `recurringDetailReference` value isn't returned in the `/authorisation` response. To learn how to obtain a new `recurringDetailReference` value, refer to [this document](/online-payments/classic-integrations/classic-api-integration/tokenization/retrieve-stored-details).
For information on all available fields, refer to the [PaymentResult](https://docs.adyen.com/api-explorer/#/Payment/latest/authorise__section_resParams) topic.
The following example shows the response in case of successful authorisation:
#### JSON
```json
{
"pspReference":"8535034809517607",
"resultCode":"Authorised",
"authCode":"32486"
}
```
#### Soap
```xml
9914713344211235
Authorised
32486
```
## Next steps
* [Disable stored details](/online-payments/classic-integrations/classic-api-integration/tokenization/disable-stored-details)