--- title: "Delegated Payment Spec with Adyen" description: "Learn to integrate the Delegated Payment Spec with Adyen." url: "https://docs.adyen.com/online-payments/agentic-commerce/delegated-payment-spec" source_url: "https://docs.adyen.com/online-payments/agentic-commerce/delegated-payment-spec.md" canonical: "https://docs.adyen.com/online-payments/agentic-commerce/delegated-payment-spec" last_modified: "2026-03-06T17:04:00+01:00" language: "en" --- # Delegated Payment Spec with Adyen Learn to integrate the Delegated Payment Spec with Adyen. Integrate with the [Delegated Payment Spec](https://developers.openai.com/commerce/specs/payment) so that your Agentic Platform collects or holds shopper payment credentials and securely delegates payment processing to Adyen. This enables merchants that use your Agentic Platform to process payments with Adyen. If you want to integrate with the [Universal Commerce Protocol](https://developers.google.com/pay/api/universal-commerce-protocol/overview) instead, refer to our [documentation on how to handle Google Pay tokens with Adyen](/payment-methods/google-pay/api-only/google-pay-token-decryption). ## Requirements | Requirement | Description | | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **Integration type** | Make sure that you have set up an integration that follows the [Agentic Commerce Protocol (ACP)](https://developers.openai.com/commerce/guides/get-started). | | **Limitations** | * Compliance: your Agentic Platform must meet PCI DSS Level 1 compliance. * You must complete our security review to approve your platform. | | **Setup steps** | Before you begin, reach out to your Adyen Account Manager or our [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other) for the following:* Access to Delegated Payment. * Your dedicated Agentic Commerce authentication token. * Enable your Adyen merchant accounts for Agentic Commerce. | ## How it works When the shopper initiates a transaction using your Agentic Platform, the following flow occurs: 1. The shopper enters their payment details in your Agentic Platform. 2. Your Agentic Platform sends the payment (card number or network token) data to Adyen by making a `/agentic_commerce/delegate_payment` request. 3. Adyen validates the credentials and returns a merchant-scoped ACP token to your Agentic Platform. 4. Your Agentic Platform sends the ACP token to your checkout application. 5. The merchant's checkout application makes a `/payments` request including the ACP token. 6. Adyen authorizes the payment and returns the payment result to your checkout application. ```mermaid sequenceDiagram autonumber participant Shopper participant Platform as Your Agentic Platform participant Adyen participant App as Merchant Checkout Application Shopper->>Platform: Enters payment details Platform->>Adyen: /agentic_commerce/delegate_payment Adyen-->>Platform: Merchant-scoped ACP token Platform->>App: Sends ACP token App->>Adyen: /payments (includes ACP token) Adyen-->>App: Payment result (Authorized) ``` ## Send a delegated payment request through the Agentic Platform Make a POST `/agentic_commerce/delegate_payment` request through the Agentic Platform, including the following: Headers: | Header | Required | Description | | ----------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | | `Authorization` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Use the following format: `Bearer `. If you enter a standard API key, you get the 401 Unauthorized error. | | `Content-Type` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Must be the following: **application/json**. | | `API-Version` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Must be the following: **2025-09-29**. | | `Accept-Language` | | The preferred locale for content like messages and errors. For example: **en-US**. | | `User-Agent` | | Your platform name and version. For example: **MyPlatform/2.0**. | | `Idempotency-Key` | | A unique value, such as a universally unique identifier (UUID), to prevent duplicate transactions. For example: `idempotency_key_123` | | `Request-Id` | | Unique trace identifier for each request. For example: **request\_id\_123**. | | `Signature` | | The Base64 HMAC-SHA256 signature of the request body. | | `Timestamp` | | The time the request as an RFC 3339 string. For example: **2025-09-25T10:30:00Z**. | Body: | Parameter name | Required | Description | | ------------------------------------------ | ------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | | `payment_method.type` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **card** | | `payment_method.card_number_type` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **fpan** or **network\_token** | | `payment_method.number` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The shopper's card number. | | `payment_method.metadata` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Arbitrary key/value pairs. | | `allowance.reason` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **one\_time** | | `allowance.max_amount` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Maximum amount the payment method can be charged. | | `allowance.currency` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The ISO-4217 currency code. For example: **USD**. | | `allowance.checkout_session_id` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The merchant's `checkout_session_id`. | | `allowance.merchant_id` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The merchant's Adyen merchant account. | | `allowance.expires_at` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Timestamp, formatted as an RFC 3339 string. | | `billing_address.name` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The shopper's name. | | `billing_address.line_one` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The shopper's street address. | | `billing_address.city` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The city of the shopper's address. | | `billing_address.country` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The country of the shopper's address, following ISO 3166-1 standard. | | `billing_address.postal_code` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The postal code of the shopper's address. | | `risk_signals.type` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The type of risk signal. | | `risk_signals.score` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The risk signals score. For example: **10**. | | `risk_signals.action` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Possible values:- **blocked** - **manual\_review** - **authorized** | | `metadata` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Arbitrary key/value pairs. | | `payment_method.exp_month` | | The card's expiry month. | | `payment_method.exp_year` | | The card's expiry year (four digits). | | `payment_method.name` | | The cardholder name. | | `payment_method.cvc` | | The card's CVC number. | | `payment_method.cryptogram` | | The cryptogram provided with network tokens. | | `payment_method.eci_value` | | The Electronic Commerce Indicator/Security Level Indicator provided with network tokens. | | `payment_method.checks_performed` | | An array that indicates the checks already performed on the card. For example **\[avs, cvv, ani, auth0]**. | | `payment_method.iin` | | The first six digits of the card number, identifying the issuer. | | `payment_method.display_card_funding_type` | | Funding type of the card to display.Possible values:- **credit** - debit - or prepaid | | `payment_method.display_wallet_type` | | If the card came through a digital wallet, what type of wallet. | | `payment_method.display_brand` | | The brand of the card to display. | | `payment_method.display_last4` | | In case of non-PAN, this is the original last 4 digits of the card for customer display. | | `billing_address.line_two` | | The second line of the shopper's street address. | | `billing_address.state` | | The state of the shopper's addres, following ISO 3166-2 standard. | ### Tab: Card number **Example request body with card number** ```bash curl -X POST https://pal-test.adyen.com/paltokenization/servlet/Recurring/Agentic/acp/v1/agentic_commerce/delegate_payment \ -H "Authorization: Bearer YOUR_AGENTIC_TOKEN" \ -H "User-Agent: MyPlatform/2.0" \ -H "Idempotency-Key: idempotency_key_123" \ -H "Request-Id: request_id_123" \ -H "Content-Type: application/json" \ -H "Signature: YOUR_SIGNATURE" \ -H "Timestamp: 2025-09-25T10:30:00Z" \ -H "API-Version: 2025-09-29" \ -H "Accept-Language: en-US" \ -d '{ "payment_method": { "type": "card", "card_number_type": "fpan", "number": "4111111111111111", "exp_month": "03", "exp_year": "2030", "name": "Jane Doe", "cvc": "737", "metadata": { "issuing_bank": "example_bank" } }, "allowance": { "reason": "one_time", "max_amount": 2500, "currency": "usd", "checkout_session_id": "cs_123", "merchant_id": "ADYEN_MERCHANT_ACCOUNT", "expires_at": "2025-10-09T07:20:50Z" }, "billing_address": { "name": "Jane Doe", "line_one": "123 Main St", "city": "San Francisco", "country": "US", "postal_code": "94105" }, "risk_signals": [ { "type": "card_testing", "score": 2, "action": "authorized" } ], "metadata": { "source": "agentic_platform", "campaign": "q4" } }' ``` ### Tab: Network token **Example request body with network token** ```bash curl -X POST https://pal-test.adyen.com/paltokenization/servlet/Recurring/Agentic/acp/v1/agentic_commerce/delegate_payment \ -H "Authorization: Bearer YOUR_AGENTIC_TOKEN" \ -H "User-Agent: MyPlatform/2.0" \ -H "Idempotency-Key: idempotency_key_123" \ -H "Request-Id: request_id_123" \ -H "Content-Type: application/json" \ -H "Signature: YOUR_SIGNATURE" \ -H "Timestamp: 2025-09-25T10:30:00Z" \ -H "API-Version: 2025-09-29" \ -H "Accept-Language: en-US" \ -d '{ "payment_method": { "type": "card", "card_number_type": "network_token", "number": "4111111111111111", "exp_month": "03", "exp_year": "2030", "name": "Jane Doe", "cryptogram":"gXc5UCLnM6ckD7pjM1TdPA==", "cvc": "737", "metadata": { "issuing_bank": "example_bank" } }, "allowance": { "reason": "one_time", "max_amount": 2500, "currency": "usd", "checkout_session_id": "cs_123", "merchant_id": "ADYEN_MERCHANT_ACCOUNT", "expires_at": "2025-10-09T07:20:50Z" }, "billing_address": { "name": "Jane Doe", "line_one": "123 Main St", "city": "San Francisco", "country": "US", "postal_code": "94105" }, "risk_signals": [ { "type": "card_testing", "score": 2, "action": "authorized" } ], "metadata": { "source": "agentic_platform", "campaign": "q4" } }' ``` 2. Get the ACP token (`id`) from the response.[]() **Example response with ACP token** ```json { "id": "FKSPNCQ8HXSKGK82", "created": "2026-02-23T23:50:55.482694934+01:00", "metadata": { "recurringDetailReference": "FKSPNCQ8HXSKGK82", "source": "agent_checkout", "merchant_id": "ADYEN_MERCHANT_ACCOUNT", "shopperReference": "CHECKOUT_SESSION_ID" } } ``` The ACP token: * Is merchant-scoped. * Cannot be used across unauthorized merchant accounts. * Does not expose raw card data. ## Make a payment request with the ACP token Make a POST [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments) request through your checkout application, including: | Parameter name | Description | | ------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | | `shopperReference` | The `checkout_session_id` value from the response in the `/checkout_session` response from the Agentic Platform. | | `paymentMethod.storedPaymentMethodId` | The [ACP token from the Agentic Platform](#acp_response). | | `merchantAccount` | Your merchant account. | | `amount.value` | The value of the payment, in minor units. | | `amount.currency` | The three-character ISO currency code. | | `shopperInteraction` | **ContAuth** | | `recurringProcessingModel` | **UnscheduledCardOnFile** | | `reference` | Your reference for the order. | **Example payment request including the ACP** ```bash curl https://checkout-test.adyen.com/v72/payments \ -H 'x-api-key: ADYEN_API_KEY' \ -H "idempotency-key: YOUR_IDEMPOTENCY_KEY" \ -H 'content-type: application/json' \ -d '{ "shopperReference" : "csn_01AB2A3XYZ9ABC", "paymentMethod" : { "storedPaymentMethodId" : "FKSPNCQ8HXSKGK82" }, "merchantAccount" : "ADYEN_MERCHANT_ACCOUNT", "amount" : { "currency" : "USD", "value" : "2500" }, "shopperInteraction" : "ContAuth", "recurringProcessingModel" : "UnscheduledCardOnFile", "reference": "your-order-reference-123-abc" }' ``` The response include the following: | Parameter | Description | | -------------- | -------------------------------------------- | | `pspReference` | Our unique identifier for the transaction. | | `resultCode` | Indicates the current status of the payment. | **Example response for an authorized payment** ```json { "pspReference": "W78NTVXSJV84L675", "resultCode": "Authorised" } ``` ## Test and go live After you test your integration and are ready to go live, you must change your `/agentic_commerce/delegate_payment` from the test URL to the live URL: | Environment | URL | | ----------- | --------------------------------------------------------------------------------------------------------------- | | Test | `https://pal-test.adyen.com/paltokenization/servlet/Recurring/Agentic/acp/v1/agentic_commerce/delegate_payment` | | Live | `https://pal-live.adyen.com/paltokenization/servlet/Recurring/Agentic/acp/v1/agentic_commerce/delegate_payment` |