{"title":"AI agent API integration","category":"default","creationDate":1781866579,"content":"<p>The Adyen Agentic API acts as a bridge between your AI agent platform and our merchants. This enables your agents to make transactions on behalf of shoppers who use your AI agents. You communicate with Adyen through our API endpoints, and you do not communicate directly with merchants. Adyen handles the communication with our merchants and the downstream complexity of orchestrating stock validation, tax calculation, shipping, and payment authorization. We make the relevant information visible to your agents.<\/p>\n<h2>Requirements<\/h2>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Requirement<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><strong>Integration type<\/strong><\/td>\n<td style=\"text-align: left;\">This guide is for an integration using the OpenAI <a href=\"https:\/\/developers.openai.com\/commerce\/guides\/get-started\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Agentic Commerce Protocol (ACP)<\/a>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>User role<\/strong><\/td>\n<td style=\"text-align: left;\">Make sure that your Adyen credential (API key) has the following user role: <ul><li markdown=\"1\"><strong>Commerce Suite API<\/strong><\/li><\/ul>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>Setup steps<\/strong><\/td>\n<td style=\"text-align: left;\">Before you begin, make sure that you have: <ul><li markdown=\"1\">Set up a Token Vault integration using the <a href=\"\/online-payments\/agentic-commerce\/agent-platform\/agentic-payments-acp\">Agentic Payments integration with Agentic Commerce Protocol (ACP)<\/a>.<\/li><li markdown=\"1\">PCI DSS Level 1 compliance for your platform.<\/li><li markdown=\"1\">Completed the Adyen security review.<\/li><li markdown=\"1\">Your target merchant accounts enabled for Agentic Commerce by your Adyen Account Manager.<\/li><\/ul><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>How it works<\/h2>\n<p>Use the following base URL for the endpoints in the agentic commerce checkout lifecycle, besides the <a href=\"#delegate-payment\">delegate payment<\/a> phase.<\/p>\n<p>The path parameter <code>{companyAccount}<\/code> is the Adyen account of the merchant that the shopper makes the transaction with.<\/p>\n<table>\n<thead>\n<tr>\n<th>Environment<\/th>\n<th>Base URL<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Test<\/td>\n<td><code>https:\/\/commerce-suite-test.adyen.com\/commerce-suite\/acp\/v1\/{companyAccount}<\/code><\/td>\n<\/tr>\n<tr>\n<td>Live<\/td>\n<td><code>https:\/\/commerce-suite-live.adyen.com\/commerce-suite\/acp\/v1\/{companyAccount}<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>The agentic commerce checkout lifecycle consists of six phases:<\/p>\n<ol>\n<li><a href=\"#create-session\">Create session<\/a>: Initialize a checkout session with items, shopper, and fulfillment details.<\/li>\n<li><a href=\"#optional-get-session\">Get session<\/a> (optional): Get the current state of the session to synchronize the total payment amount or verify its status.<\/li>\n<li><a href=\"#update-session\">Update session<\/a>: Update items, address, buyer details, or fulfillment selection and recalculate totals.<\/li>\n<li><a href=\"#delegate-payment\">Delegate payment<\/a>: Get a single-use payment token with the shopper's encrypted payment details.<\/li>\n<li><a href=\"#complete-session\">Complete session<\/a>: Submit the payment token and trigger authorization.<\/li>\n<li><a href=\"#optional-cancel-session\">Cancel session<\/a> (optional): Cancel an active session and release reserved inventory.<\/li>\n<\/ol>\n<p>You can use the <a href=\"#sequence-standard-flow\">standard flow<\/a> or <a href=\"#sequence-advanced-flow\">advanced flow<\/a>.<\/p>\n<h3>Authentication<\/h3>\n<p>The Adyen Agentic Commerce Suite uses <a href=\"https:\/\/blog.postman.com\/what-is-a-bearer-token\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Bearer token authentication<\/a>. <\/p>\n<p>In the <code>Authorization<\/code> header of your requests, pass your Adyen API key as the bearer token. Your API key must have the <strong>Commerce Suite API<\/strong> role.<\/p>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Bearer token authentication'\" :id=\"''\" :code-data='[{\"language\":\"curl\",\"tabTitle\":\"\",\"content\":\"Authorization: Bearer ADYEN_API_KEY\\nContent-Type: application\\\/json\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<div class=\"sc-notice warning\"><div>\n<p>Never expose your API key in a URL query string, or in agent-readable context. All API requests must originate from your secure agent backend or token vault infrastructure.<\/p>\n<\/div><\/div>\n<h2>Create session<\/h2>\n<p>Initialize a new checkout session with a list of items, optional shopper information, and shipping\/fulfillment information. Adyen does the following: <\/p>\n<ol>\n<li>Makes a request to the merchant's server to validate stock and calculate total amounts in real-time.<\/li>\n<li>Sends the session data to your agent.<\/li>\n<\/ol>\n<p>Make a POST <code>\/checkout_sessions<\/code> request, including the following parameters:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Required<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>currency<\/code><\/td>\n<td style=\"text-align: left;\">String (<a href=\"https:\/\/en.wikipedia.org\/wiki\/ISO_4217\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">ISO 4217<\/a>)<\/td>\n<td style=\"text-align: left;\"><span class=\"hint--bottom\" data-hint=\"Required\" markdown=\"1\"><img style=\"width: 25px;\" alt=\"Required\" src=\"\/user\/pages\/reuse\/image-library\/01.icons\/required\/required.svg?decoding=auto&amp;fetchpriority=auto\" \/><\/span><\/td>\n<td style=\"text-align: left;\">The 3-letter settlement currency code, for example, <code>USD<\/code>, <code>EUR<\/code>, <code>GBP<\/code>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>items<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#acpitem\">\n  <code>AcpItem[]<\/code>\n<\/a><\/td>\n<td style=\"text-align: left;\"><span class=\"hint--bottom\" data-hint=\"Required\" markdown=\"1\"><img style=\"width: 25px;\" alt=\"Required\" src=\"\/user\/pages\/reuse\/image-library\/01.icons\/required\/required.svg?decoding=auto&amp;fetchpriority=auto\" \/><\/span><\/td>\n<td style=\"text-align: left;\">Items to add to the session. Each item requires an <code>id<\/code> and <code>quantity<\/code> of <strong>1<\/strong> or more.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>fulfillment_address<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#acpaddress\">\n  <code>AcpAddress<\/code>\n<\/a><\/td>\n<td style=\"text-align: left;\"><span class=\"hint--bottom\" data-hint=\"Conditionally required\" markdown=\"1\"><img style=\"width: 25px;\" alt=\"Conditionally required\" src=\"\/user\/pages\/reuse\/image-library\/01.icons\/conditionally-required\/conditionally-required.svg?decoding=auto&amp;fetchpriority=auto\" \/><\/span><\/td>\n<td style=\"text-align: left;\">Required if the order includes physical goods where tax or shipping varies by location. <br> The shipping address.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>buyer<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#acpbuyer\">\n  <code>AcpBuyer<\/code>\n<\/a><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">The shopper's contact details.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>fulfillment_option_id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">The pre-selected <a href=\"#acpfulfillmentoption\">fulfillment option<\/a>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>affiliate_attribution<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#acpaffiliateattribution\">\n  <code>AcpAffiliateAttribution<\/code>\n<\/a><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">The affiliate attribution data for tracking referral sources.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>discounts<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#acpdiscountsrequest\">\n  <code>AcpDiscountsRequest<\/code>\n<\/a><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">The discount codes to apply at session creation.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example request to create a checkout session'\" :id=\"'create-checkout-session'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;&quot;,&quot;content&quot;:&quot;curl https:\\\/\\\/commerce-suite-test.adyen.com\\\/commerce-suite\\\/acp\\\/v1\\\/ADYEN_MERCHANT_COMPANY_ACCOUNT\\\/checkout_sessions \\\\\\n-H 'Authorization: Bearer ADYEN_API_KEY' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-H 'Idempotency-Key: YOUR_IDEMPOTENCY_KEY' \\\\\\n-X POST \\\\\\n-d '{\\n  \\&quot;currency\\&quot;: \\&quot;USD\\&quot;,\\n  \\&quot;items\\&quot;: [{ \\&quot;id\\&quot;: \\&quot;01\\&quot;, \\&quot;quantity\\&quot;: 1 }],\\n  \\&quot;buyer\\&quot;: {\\n    \\&quot;email\\&quot;: \\&quot;s.hopper@example.com\\&quot;,\\n    \\&quot;first_name\\&quot;: \\&quot;Simon\\&quot;,\\n    \\&quot;last_name\\&quot;: \\&quot;Hopper\\&quot;\\n  },\\n  \\&quot;fulfillment_address\\&quot;: {\\n    \\&quot;line_one\\&quot;: \\&quot;123 Market St\\&quot;,\\n    \\&quot;line_two\\&quot;: \\&quot;\\&quot;,\\n    \\&quot;city\\&quot;: \\&quot;San Francisco\\&quot;,\\n    \\&quot;state\\&quot;: \\&quot;CA\\&quot;,\\n    \\&quot;country\\&quot;: \\&quot;US\\&quot;,\\n    \\&quot;postal_code\\&quot;: \\&quot;94103\\&quot;\\n  },\\n  \\&quot;fulfillment_option_id\\&quot;: \\&quot;ship_express\\&quot;,\\n  \\&quot;affiliate_attribution\\&quot;: {\\n    \\&quot;provider\\&quot;: \\&quot;affiliate.example.com\\&quot;,\\n    \\&quot;publisher_id\\&quot;: \\&quot;publisher_123\\&quot;,\\n    \\&quot;campaign_id\\&quot;: \\&quot;campaign_456\\&quot;,\\n    \\&quot;touchpoint\\&quot;: \\&quot;first\\&quot;\\n  }\\n}'&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<p>The success HTTP (201) response includes the following: <\/p>\n<table>\n<thead>\n<tr>\n<th>Parameter<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>id<\/code><\/td>\n<td>The unique session identifier. Use this for subsequent requests for this session.<\/td>\n<\/tr>\n<tr>\n<td><code>status<\/code><\/td>\n<td>Current session status.<\/td>\n<\/tr>\n<tr>\n<td><code>currency<\/code><\/td>\n<td>Settlement currency code.<\/td>\n<\/tr>\n<tr>\n<td><code>payment_provider<\/code><\/td>\n<td>Payment service provider (PSP) configuration and supported payment methods.<\/td>\n<\/tr>\n<tr>\n<td><code>line_items<\/code><\/td>\n<td>Line items with pricing and tax details.<\/td>\n<\/tr>\n<tr>\n<td><code>fulfillment_options<\/code><\/td>\n<td>Available fulfillment options with costs.<\/td>\n<\/tr>\n<tr>\n<td><code>totals<\/code><\/td>\n<td>Subtotal, tax, shipping, and total amount.<\/td>\n<\/tr>\n<tr>\n<td><code>messages<\/code><\/td>\n<td>An <a href=\"#acpmessage\">\n  <code>AcpMessage<\/code>\n<\/a> array with informational or warning messages.<\/td>\n<\/tr>\n<tr>\n<td><code>links<\/code><\/td>\n<td>An <a href=\"#acplink\">\n  <code>AcpLink<\/code>\n<\/a> array with links to merchant policy or support URLs.<\/td>\n<\/tr>\n<tr>\n<td><code>discounts<\/code><\/td>\n<td>An <a href=\"#acpdiscountsresponse\">\n  <code>AcpDiscountsResponse<\/code>\n<\/a> object with applied, rejected, and submitted discount codes.<\/td>\n<\/tr>\n<tr>\n<td><code>marketing_consent_options<\/code><\/td>\n<td>An <a href=\"#acpmarketingconsentoption\">\n  <code>AcpMarketingConsentOption[]<\/code>\n<\/a> array of marketing consent prompts from the merchant.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example HTTP 201 Created response for creating a session'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n  \\\"id\\\": \\\"cs_8xzQk2TmNpR\\\",\\n  \\\"status\\\": \\\"ready_for_payment\\\",\\n  \\\"currency\\\": \\\"USD\\\",\\n  \\\"payment_provider\\\": {\\n    \\\"provider\\\": \\\"adyen\\\",\\n    \\\"merchant_id\\\": \\\"ADYEN_MERCHANT_ACCOUNT\\\",\\n    \\\"supported_payment_methods\\\": [\\\"scheme\\\", \\\"googlepay\\\", \\\"applepay\\\"]\\n  },\\n  \\\"line_items\\\": [{\\n    \\\"id\\\": \\\"li_001\\\",\\n    \\\"item\\\": { \\\"id\\\": \\\"prod_headphones_pro\\\", \\\"quantity\\\": 1 },\\n    \\\"base_amount\\\": 34900,\\n    \\\"subtotal\\\": 34900,\\n    \\\"tax\\\": 2967,\\n    \\\"total\\\": 37867\\n  }],\\n  \\\"fulfillment_options\\\": [{\\n    \\\"id\\\": \\\"ship_standard\\\",\\n    \\\"type\\\": \\\"shipping\\\",\\n    \\\"carrier\\\": \\\"UPS\\\",\\n    \\\"title\\\": \\\"Standard Shipping\\\",\\n    \\\"subtitle\\\": \\\"5-7 business days\\\",\\n    \\\"subtotal\\\": 799,\\n    \\\"tax\\\": 0,\\n    \\\"total\\\": 799\\n  }],\\n  \\\"totals\\\": [\\n    { \\\"type\\\": \\\"subtotal\\\", \\\"amount\\\": 34900, \\\"display_text\\\": \\\"Subtotal\\\" },\\n    { \\\"type\\\": \\\"tax\\\", \\\"amount\\\": 2967, \\\"display_text\\\": \\\"Tax\\\" },\\n    { \\\"type\\\": \\\"shipping\\\", \\\"amount\\\": 799, \\\"display_text\\\": \\\"Shipping\\\" },\\n    { \\\"type\\\": \\\"total\\\", \\\"amount\\\": 38666, \\\"display_text\\\": \\\"Order Total\\\" }\\n  ],\\n  \\\"messages\\\": [\\n    { \\\"code\\\": \\\"INFO\\\", \\\"content\\\": \\\"Free shipping on orders over $50.\\\", \\\"content_type\\\": \\\"plain\\\", \\\"type\\\": \\\"info\\\" }\\n  ],\\n  \\\"links\\\": [\\n    { \\\"type\\\": \\\"terms_of_service\\\", \\\"url\\\": \\\"https:\\\/\\\/www.merchant-company.example.com\\\/terms\\\" },\\n    { \\\"type\\\": \\\"return_policy\\\", \\\"url\\\": \\\"https:\\\/\\\/www.merchant-company.example.com\\\/returns\\\" },\\n    { \\\"type\\\": \\\"privacy_policy\\\", \\\"url\\\": \\\"https:\\\/\\\/www.merchant-company.example.com\\\/privacy\\\" }\\n  ],\\n  \\\"discounts\\\": {\\n    \\\"applied\\\": [],\\n    \\\"codes\\\": [],\\n    \\\"rejected\\\": []\\n  },\\n  \\\"marketing_consent_options\\\": [\\n    { \\\"channel\\\": \\\"email\\\", \\\"display_text\\\": \\\"Receive marketing emails\\\", \\\"privacy_policy_url\\\": \\\"https:\\\/\\\/www.merchant-company.example.com\\\/privacy\\\" }\\n  ]\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h3>Possible HTTP status codes<\/h3>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">HTTP<\/th>\n<th style=\"text-align: left;\">Meaning<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\">201<\/td>\n<td style=\"text-align: left;\">Created<\/td>\n<td style=\"text-align: left;\">Session created. Use the returned <code>id<\/code> for all subsequent requests for this session.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">422<\/td>\n<td style=\"text-align: left;\">Unprocessable<\/td>\n<td style=\"text-align: left;\">An error in business logic prevented the session from being created. For example, one of the items in the order is out of stock. Get more information from <code>messages[]<\/code>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>(Optional) Get session<\/h2>\n<p>Get the current state of the session to synchronize the total payment amount or verify its status.<\/p>\n<p>Make a GET <code>\/checkout_sessions\/{sessionId}<\/code> request with the following path parameters:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Required<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>companyAccount<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><span class=\"hint--bottom\" data-hint=\"Required\" markdown=\"1\"><img style=\"width: 25px;\" alt=\"Required\" src=\"\/user\/pages\/reuse\/image-library\/01.icons\/required\/required.svg?decoding=auto&amp;fetchpriority=auto\" \/><\/span><\/td>\n<td style=\"text-align: left;\">Your Adyen company account identifier.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>sessionId<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><span class=\"hint--bottom\" data-hint=\"Required\" markdown=\"1\"><img style=\"width: 25px;\" alt=\"Required\" src=\"\/user\/pages\/reuse\/image-library\/01.icons\/required\/required.svg?decoding=auto&amp;fetchpriority=auto\" \/><\/span><\/td>\n<td style=\"text-align: left;\">The <code>id<\/code> returned from the <a href=\"#create-session\">Create session<\/a> request.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>No request body is required. The success HTTP (200) response returns the full session state, identical to the <a href=\"#create-session\">Create session<\/a> response.<\/p>\n<h3>Possible HTTP status codes<\/h3>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">HTTP<\/th>\n<th style=\"text-align: left;\">Meaning<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\">200<\/td>\n<td style=\"text-align: left;\">OK<\/td>\n<td style=\"text-align: left;\">Session found and returned.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">404<\/td>\n<td style=\"text-align: left;\">Not Found<\/td>\n<td style=\"text-align: left;\">The session ID does not exist or has expired.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Update session<\/h2>\n<p>Update an existing session with new items, address, buyer details, or a fulfillment selection. Adyen makes a request to the merchant's live calculator, so your agent always has accurate totals.<\/p>\n<p>Make a POST <code>\/checkout_sessions\/{sessionId}<\/code> request. Include only the parameters that need to change:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Required<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>currency<\/code><\/td>\n<td style=\"text-align: left;\">String (<a href=\"https:\/\/en.wikipedia.org\/wiki\/ISO_4217\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">ISO 4217<\/a>)<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Must match the currency set at session creation.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>items<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#acpitem\">\n  <code>AcpItem[]<\/code>\n<\/a><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Replaces the entire item list.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>buyer<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#acpbuyer\">\n  <code>AcpBuyer<\/code>\n<\/a><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Updated shopper contact information.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>fulfillment_address<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#acpaddress\">\n  <code>AcpAddress<\/code>\n<\/a><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Updated shipping address. Triggers recalculation of tax and shipping costs.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>fulfillment_option_id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">The ID of the <a href=\"#acpfulfillmentoption\">fulfillment option<\/a> the shopper selected from <code>fulfillment_options[]<\/code> in the session response.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>discounts<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#acpdiscountsrequest\">\n  <code>AcpDiscountsRequest<\/code>\n<\/a><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">The discount codes to apply or update. Replaces any previously submitted codes.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example request to update a checkout session'\" :id=\"'update-checkout-session'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;&quot;,&quot;content&quot;:&quot;curl https:\\\/\\\/commerce-suite-test.adyen.com\\\/commerce-suite\\\/acp\\\/v1\\\/ADYEN_MERCHANT_COMPANY_ACCOUNT\\\/checkout_sessions\\\/cs_8xzQk2TmNpR \\\\\\n-H 'Authorization: Bearer ADYEN_API_KEY' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-H 'Idempotency-Key: YOUR_IDEMPOTENCY_KEY' \\\\\\n-X POST \\\\\\n-d '{\\n  \\&quot;fulfillment_option_id\\&quot;: \\&quot;ship_express\\&quot;,\\n  \\&quot;fulfillment_address\\&quot;: {\\n    \\&quot;line_one\\&quot;: \\&quot;1 Infinite Loop\\&quot;,\\n    \\&quot;line_two\\&quot;: \\&quot;\\&quot;,\\n    \\&quot;city\\&quot;: \\&quot;Cupertino\\&quot;,\\n    \\&quot;state\\&quot;: \\&quot;CA\\&quot;,\\n    \\&quot;country\\&quot;: \\&quot;US\\&quot;,\\n    \\&quot;postal_code\\&quot;: \\&quot;95014\\&quot;\\n  }\\n}'&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<div class=\"sc-notice info\"><div>\n<p>Make this request to update the session whenever the shopper changes their delivery address, selects a shipping option, modifies their shopping cart, or applies a discount code. The response <code>line_items[].total<\/code>, <code>fulfillment_options[].total<\/code>, and <code>totals[]<\/code> are always authoritative. Show these values to the shopper before completing the session.<\/p>\n<\/div><\/div>\n<p>The success HTTP (200) response returns the full updated session state, identical to the <a href=\"#create-session\">Create session<\/a> response.<\/p>\n<h3>Possible HTTP status codes<\/h3>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">HTTP<\/th>\n<th style=\"text-align: left;\">Meaning<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\">200<\/td>\n<td style=\"text-align: left;\">OK<\/td>\n<td style=\"text-align: left;\">Session updated. The response contains the latest authoritative state.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">422<\/td>\n<td style=\"text-align: left;\">Unprocessable<\/td>\n<td style=\"text-align: left;\">An error in merchant logic rejected the update. For example, an item is now out of stock. Get more information from <code>messages[]<\/code>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Delegate payment<\/h2>\n<p>Before completing the session, your agent's Token Vault must obtain a PSP transaction token. <\/p>\n<p>Endpoint:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Environment<\/th>\n<th style=\"text-align: left;\">URL<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\">Test<\/td>\n<td style=\"text-align: left;\"><code>https:\/\/pal-test.adyen.com\/paltokenization\/servlet\/Recurring\/Agentic\/acp\/v1\/agentic_commerce\/delegate_payment<\/code><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Live<\/td>\n<td style=\"text-align: left;\"><code>https:\/\/pal-live.adyen.com\/paltokenization\/servlet\/Recurring\/Agentic\/acp\/v1\/agentic_commerce\/delegate_payment<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Make a POST <code>\/agentic_commerce\/delegate_payment<\/code> request to the PAL tokenization domain (not the Commerce Suite domain), including the following parameters:<\/p>\n<h3>Request headers<\/h3>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Header<\/th>\n<th style=\"text-align: left;\">Required<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>Authorization<\/code><\/td>\n<td style=\"text-align: left;\"><span class=\"hint--bottom\" data-hint=\"Required\" markdown=\"1\"><img style=\"width: 25px;\" alt=\"Required\" src=\"\/user\/pages\/reuse\/image-library\/01.icons\/required\/required.svg?decoding=auto&amp;fetchpriority=auto\" \/><\/span><\/td>\n<td style=\"text-align: left;\">Bearer token. Pass your Adyen agentic token.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>Content-Type<\/code><\/td>\n<td style=\"text-align: left;\"><span class=\"hint--bottom\" data-hint=\"Required\" markdown=\"1\"><img style=\"width: 25px;\" alt=\"Required\" src=\"\/user\/pages\/reuse\/image-library\/01.icons\/required\/required.svg?decoding=auto&amp;fetchpriority=auto\" \/><\/span><\/td>\n<td style=\"text-align: left;\"><strong>application\/json<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>API-Version<\/code><\/td>\n<td style=\"text-align: left;\"><span class=\"hint--bottom\" data-hint=\"Required\" markdown=\"1\"><img style=\"width: 25px;\" alt=\"Required\" src=\"\/user\/pages\/reuse\/image-library\/01.icons\/required\/required.svg?decoding=auto&amp;fetchpriority=auto\" \/><\/span><\/td>\n<td style=\"text-align: left;\"><strong>2025-09-29<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>Idempotency-Key<\/code><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">A unique UUID to prevent duplicate transactions.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Request body<\/h3>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Required<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><a href=\"#delegated-payment-objects-payment-method\">\n  <code>payment_method<\/code>\n<\/a><\/td>\n<td style=\"text-align: left;\"><span class=\"hint--bottom\" data-hint=\"Required\" markdown=\"1\"><img style=\"width: 25px;\" alt=\"Required\" src=\"\/user\/pages\/reuse\/image-library\/01.icons\/required\/required.svg?decoding=auto&amp;fetchpriority=auto\" \/><\/span><\/td>\n<td style=\"text-align: left;\">The card details used to generate the payment token. Requires <code>type<\/code>, <code>card_number_type<\/code>, <code>number<\/code>, and <code>metadata<\/code>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><a href=\"#delegated-payment-objects-allowance\">\n  <code>allowance<\/code>\n<\/a><\/td>\n<td style=\"text-align: left;\"><span class=\"hint--bottom\" data-hint=\"Required\" markdown=\"1\"><img style=\"width: 25px;\" alt=\"Required\" src=\"\/user\/pages\/reuse\/image-library\/01.icons\/required\/required.svg?decoding=auto&amp;fetchpriority=auto\" \/><\/span><\/td>\n<td style=\"text-align: left;\">The spending limit and scope for the token. Requires <code>reason<\/code>, <code>max_amount<\/code>, <code>currency<\/code>, <code>checkout_session_id<\/code>, <code>merchant_id<\/code>, and <code>expires_at<\/code>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><a href=\"#delegated-payment-objects-billing-address\">\n  <code>billing_address<\/code>\n<\/a><\/td>\n<td style=\"text-align: left;\"><span class=\"hint--bottom\" data-hint=\"Required\" markdown=\"1\"><img style=\"width: 25px;\" alt=\"Required\" src=\"\/user\/pages\/reuse\/image-library\/01.icons\/required\/required.svg?decoding=auto&amp;fetchpriority=auto\" \/><\/span><\/td>\n<td style=\"text-align: left;\">The billing address for the payment instrument. Requires <code>name<\/code>, <code>line_one<\/code>, <code>city<\/code>, <code>country<\/code>, and <code>postal_code<\/code>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><a href=\"#delegated-payment-objects-risk-signals\">\n  <code>risk_signals<\/code>\n<\/a><\/td>\n<td style=\"text-align: left;\"><span class=\"hint--bottom\" data-hint=\"Required\" markdown=\"1\"><img style=\"width: 25px;\" alt=\"Required\" src=\"\/user\/pages\/reuse\/image-library\/01.icons\/required\/required.svg?decoding=auto&amp;fetchpriority=auto\" \/><\/span><\/td>\n<td style=\"text-align: left;\">Risk assessment data from your platform. Requires <code>type<\/code>, <code>score<\/code>, and <code>action<\/code>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><a href=\"#delegated-payment-objects-metadata\">\n  <code>metadata<\/code>\n<\/a><\/td>\n<td style=\"text-align: left;\"><span class=\"hint--bottom\" data-hint=\"Required\" markdown=\"1\"><img style=\"width: 25px;\" alt=\"Required\" src=\"\/user\/pages\/reuse\/image-library\/01.icons\/required\/required.svg?decoding=auto&amp;fetchpriority=auto\" \/><\/span><\/td>\n<td style=\"text-align: left;\">Key-value pairs for metadata related to the request.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example delegate payment request'\" :id=\"'delegate-payment'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;&quot;,&quot;content&quot;:&quot;curl https:\\\/\\\/pal-test.adyen.com\\\/paltokenization\\\/servlet\\\/Recurring\\\/Agentic\\\/acp\\\/v1\\\/agentic_commerce\\\/delegate_payment \\\\\\n-H 'Authorization: Bearer ADYEN_API_KEY' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-H 'API-Version: 2025-09-29' \\\\\\n-H 'Idempotency-Key: YOUR_IDEMPOTENCY_KEY' \\\\\\n-X POST \\\\\\n-d '{\\n  \\&quot;payment_method\\&quot;: {\\n    \\&quot;type\\&quot;: \\&quot;card\\&quot;,\\n    \\&quot;card_number_type\\&quot;: \\&quot;fpan\\&quot;,\\n    \\&quot;number\\&quot;: \\&quot;4111111111111111\\&quot;,\\n    \\&quot;exp_month\\&quot;: \\&quot;03\\&quot;,\\n    \\&quot;exp_year\\&quot;: \\&quot;2030\\&quot;,\\n    \\&quot;name\\&quot;: \\&quot;Simon Hopper\\&quot;,\\n    \\&quot;cvc\\&quot;: \\&quot;737\\&quot;,\\n    \\&quot;metadata\\&quot;: {}\\n  },\\n  \\&quot;allowance\\&quot;: {\\n    \\&quot;reason\\&quot;: \\&quot;one_time\\&quot;,\\n    \\&quot;max_amount\\&quot;: 5000,\\n    \\&quot;currency\\&quot;: \\&quot;USD\\&quot;,\\n    \\&quot;checkout_session_id\\&quot;: \\&quot;cs_8xzQk2TmNpR\\&quot;,\\n    \\&quot;merchant_id\\&quot;: \\&quot;ADYEN_MERCHANT_COMPANY_ACCOUNT\\&quot;,\\n    \\&quot;expires_at\\&quot;: \\&quot;2026-05-01T12:00:00Z\\&quot;\\n  },\\n  \\&quot;billing_address\\&quot;: {\\n    \\&quot;name\\&quot;: \\&quot;Simon Hopper\\&quot;,\\n    \\&quot;line_one\\&quot;: \\&quot;123 Market St\\&quot;,\\n    \\&quot;city\\&quot;: \\&quot;San Francisco\\&quot;,\\n    \\&quot;state\\&quot;: \\&quot;CA\\&quot;,\\n    \\&quot;country\\&quot;: \\&quot;US\\&quot;,\\n    \\&quot;postal_code\\&quot;: \\&quot;94103\\&quot;\\n  },\\n  \\&quot;risk_signals\\&quot;: {\\n    \\&quot;type\\&quot;: \\&quot;platform_score\\&quot;,\\n    \\&quot;score\\&quot;: 10,\\n    \\&quot;action\\&quot;: \\&quot;authorized\\&quot;\\n  },\\n  \\&quot;metadata\\&quot;: { \\&quot;session_ref\\&quot;: \\&quot;cs_8xzQk2TmNpR\\&quot; }\\n}'&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<p>The success (HTTP 200) response includes the following:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The single-use ACP payment token. Submit this as <code>payment_data.token<\/code> in the <a href=\"#complete-session\">Complete session<\/a> request.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>expires_at<\/code><\/td>\n<td style=\"text-align: left;\">String (date-time)<\/td>\n<td style=\"text-align: left;\">The token expiry timestamp as an RFC 3339 string. The token must be used before this time.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"sc-notice info\"><div>\n<p>The <code>id<\/code> is merchant-scoped and cannot be used across unauthorized merchant accounts. It does not expose raw card data.<\/p>\n<\/div><\/div>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example HTTP 200 OK delegate payment response'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n  \\\"id\\\": \\\"acp_tok_Ab1cDeF2GhI\\\",\\n  \\\"expires_at\\\": \\\"2026-05-01T12:00:00Z\\\"\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h3>Possible HTTP status codes<\/h3>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">HTTP<\/th>\n<th style=\"text-align: left;\">Meaning<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\">200<\/td>\n<td style=\"text-align: left;\">OK<\/td>\n<td style=\"text-align: left;\">Token issued.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">401<\/td>\n<td style=\"text-align: left;\">Unauthorized<\/td>\n<td style=\"text-align: left;\">Invalid or missing agentic commerce token. Verify that you are using the dedicated token with the correct role.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">403<\/td>\n<td style=\"text-align: left;\">Forbidden<\/td>\n<td style=\"text-align: left;\">Your platform does not have access to this merchant account, or Agentic Commerce has not been enabled.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">422<\/td>\n<td style=\"text-align: left;\">Unprocessable<\/td>\n<td style=\"text-align: left;\">Request body validation failed. Get more information from the error message.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Complete session<\/h2>\n<p>Finalize the session by submitting the payment token from your agent's Token Vault. Adyen does the following:<\/p>\n<ol>\n<li>Validates the token.<\/li>\n<li>Optionally makes a request to the merchant's commit endpoint for a pre-authorization risk check.<\/li>\n<li>Initializes payment authorization and returns the result.<\/li>\n<\/ol>\n<p>Make a POST <code>\/checkout_sessions\/{sessionId}\/complete<\/code> request, including the following parameters:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Required<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>payment_data<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#acppaymentdata\">\n  <code>AcpPaymentData<\/code>\n<\/a><\/td>\n<td style=\"text-align: left;\"><span class=\"hint--bottom\" data-hint=\"Required\" markdown=\"1\"><img style=\"width: 25px;\" alt=\"Required\" src=\"\/user\/pages\/reuse\/image-library\/01.icons\/required\/required.svg?decoding=auto&amp;fetchpriority=auto\" \/><\/span><\/td>\n<td style=\"text-align: left;\">The payment token and provider. Must include the following: <ul><li markdown=\"1\"><code>provider<\/code> (for example, <strong>adyen<\/strong>)<\/li><li markdown=\"1\"><code>token<\/code>: The PSP transaction token from your vault's <code>\/delegate_payment<\/code> request.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>affiliate_attribution<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#acpaffiliateattribution\">\n  <code>AcpAffiliateAttribution<\/code>\n<\/a><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">The attribution data captured at checkout completion (<code>touchpoint<\/code>: <strong>last<\/strong>). Use for last-touch attribution tracking.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>buyer<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#acpbuyer\">\n  <code>AcpBuyer<\/code>\n<\/a><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">The final shopper details at completion time. Use to override or supplement the details provided at session creation.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>marketing_consents<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#acpmarketingconsent\">\n  <code>AcpMarketingConsent[]<\/code>\n<\/a><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">The shopper's channel-specific marketing consent responses. Each entry captures <code>channel<\/code> (for example, <strong>email<\/strong>) and <code>opted_in<\/code> (<strong>true<\/strong> or <strong>false<\/strong>).<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example request to complete a checkout session'\" :id=\"'complete-checkout-session'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;&quot;,&quot;content&quot;:&quot;curl https:\\\/\\\/commerce-suite-test.adyen.com\\\/commerce-suite\\\/acp\\\/v1\\\/ADYEN_MERCHANT_COMPANY_ACCOUNT\\\/checkout_sessions\\\/cs_8xzQk2TmNpR\\\/complete \\\\\\n-H 'Authorization: Bearer ADYEN_API_KEY' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-H 'Idempotency-Key: YOUR_IDEMPOTENCY_KEY' \\\\\\n-X POST \\\\\\n-d '{\\n  \\&quot;payment_data\\&quot;: {\\n    \\&quot;provider\\&quot;: \\&quot;adyen\\&quot;,\\n    \\&quot;token\\&quot;: \\&quot;psp_tok_Ab7xQfN2YwR...\\&quot;\\n  }\\n}'&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<p>The success HTTP (200) response includes the full session state plus an <code>order<\/code> object on successful authorization:<\/p>\n<table>\n<thead>\n<tr>\n<th>Parameter<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>order.id<\/code><\/td>\n<td>The unique order identifier. Use for post-purchase communication and support queries.<\/td>\n<\/tr>\n<tr>\n<td><code>order.checkout_session_id<\/code><\/td>\n<td>The originating checkout session ID for correlation.<\/td>\n<\/tr>\n<tr>\n<td><code>order.permalink_url<\/code><\/td>\n<td>Permanent URL to the merchant's order details page. Present to the shopper as their confirmation link.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example HTTP 200 OK response for completing a session'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n  \\\"id\\\": \\\"cs_8xzQk2TmNpR\\\",\\n  \\\"status\\\": \\\"completed\\\",\\n  \\\"order\\\": {\\n    \\\"id\\\": \\\"ORD-2026-001\\\",\\n    \\\"checkout_session_id\\\": \\\"cs_8xzQk2TmNpR\\\",\\n    \\\"permalink_url\\\": \\\"https:\\\/\\\/www.merchant-company.example.com\\\/orders\\\/ORD-2026-001\\\"\\n  },\\n  \\\"line_items\\\": [],\\n  \\\"fulfillment_options\\\": [],\\n  \\\"totals\\\": [],\\n  \\\"messages\\\": [],\\n  \\\"links\\\": []\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h3>Possible HTTP status codes<\/h3>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">HTTP<\/th>\n<th style=\"text-align: left;\">Meaning<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\">200<\/td>\n<td style=\"text-align: left;\">OK<\/td>\n<td style=\"text-align: left;\">Authorization successful. The <code>order<\/code> object is present on success. If authorization is declined, get more information from <code>messages[]<\/code>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>(Optional) Cancel session<\/h2>\n<p>Cancel an active session that has not been completed. Use this when the shopper abandons checkout or your agent cannot proceed. Adyen signals the merchant to release any reserved inventory.<\/p>\n<p>Make a POST <code>\/checkout_sessions\/{sessionId}\/cancel<\/code> request. No request body is required.<\/p>\n<p>The success HTTP (200) response returns the final session state with <code>status<\/code>: <strong>canceled<\/strong>.<\/p>\n<h3>Possible HTTP status codes<\/h3>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">HTTP<\/th>\n<th style=\"text-align: left;\">Meaning<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\">200<\/td>\n<td style=\"text-align: left;\">OK<\/td>\n<td style=\"text-align: left;\">Session canceled. The response contains the final session state with <code>status<\/code>: <strong>canceled<\/strong>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Test and go live<\/h2>\n<p>Use the sandbox environment to test end-to-end before going live. The sandbox uses the same API specifications and <a href=\"#schema-reference\">schemas<\/a> as the live environment.<\/p>\n<h3>Test environment endpoints<\/h3>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Phase<\/th>\n<th style=\"text-align: left;\">Method<\/th>\n<th style=\"text-align: left;\">Endpoint URL<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\">Create session<\/td>\n<td style=\"text-align: left;\"><code>POST<\/code><\/td>\n<td style=\"text-align: left;\"><code>https:\/\/commerce-suite-test.adyen.com\/commerce-suite\/acp\/v1\/{companyAccount}\/checkout_sessions<\/code><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Get session<\/td>\n<td style=\"text-align: left;\"><code>GET<\/code><\/td>\n<td style=\"text-align: left;\"><code>https:\/\/commerce-suite-test.adyen.com\/commerce-suite\/acp\/v1\/{companyAccount}\/checkout_sessions\/{sessionId}<\/code><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Update session<\/td>\n<td style=\"text-align: left;\"><code>POST<\/code><\/td>\n<td style=\"text-align: left;\"><code>https:\/\/commerce-suite-test.adyen.com\/commerce-suite\/acp\/v1\/{companyAccount}\/checkout_sessions\/{sessionId}<\/code><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Complete session<\/td>\n<td style=\"text-align: left;\"><code>POST<\/code><\/td>\n<td style=\"text-align: left;\"><code>https:\/\/commerce-suite-test.adyen.com\/commerce-suite\/acp\/v1\/{companyAccount}\/checkout_sessions\/{sessionId}\/complete<\/code><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Cancel session<\/td>\n<td style=\"text-align: left;\"><code>POST<\/code><\/td>\n<td style=\"text-align: left;\"><code>https:\/\/commerce-suite-test.adyen.com\/commerce-suite\/acp\/v1\/{companyAccount}\/checkout_sessions\/{sessionId}\/cancel<\/code><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Delegate payment<\/td>\n<td style=\"text-align: left;\"><code>POST<\/code><\/td>\n<td style=\"text-align: left;\"><code>https:\/\/pal-test.adyen.com\/paltokenization\/servlet\/Recurring\/Agentic\/acp\/v1\/agentic_commerce\/delegate_payment<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Recommended test sequence<\/h3>\n<p>To verify your integration, follow these steps:<\/p>\n<ol>\n<li>\n<p>Create a session.<\/p>\n<p>Make a POST <code>\/checkout_sessions<\/code> request with your test API key in the <code>Authorization: Bearer<\/code> header. Note the returned <code>id<\/code> (for example, <code>cs_test_abc123<\/code>).<\/p>\n<\/li>\n<li>\n<p>Update with address and fulfillment selection.<\/p>\n<p>Make a POST <code>\/checkout_sessions\/cs_test_abc123<\/code> request. Confirm that <code>status<\/code> is <code>ready_for_payment<\/code> and that the totals are finalized.<\/p>\n<\/li>\n<li>\n<p>Delegate payment through the Token Vault.<\/p>\n<p>Make a POST <code>\/delegate_payment<\/code> request with your test API key in the <code>Authorization: Bearer<\/code> header. Capture the returned <code>psp_transaction_token<\/code>.<\/p>\n<\/li>\n<li>\n<p>Complete the session.<\/p>\n<p>Make a POST <code>\/checkout_sessions\/cs_test_abc123\/complete<\/code> request.<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Example request body object'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n  \\\"payment_data\\\": {\\n    \\\"provider\\\": \\\"adyen\\\",\\n    \\\"token\\\": \\\"&lt;psp_token&gt;\\\"\\n  }\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<p>Confirm that <code>status<\/code> is <code>completed<\/code> and <code>order.id<\/code> is present.<\/p>\n<\/li>\n<\/ol>\n<h3>Go live<\/h3>\n<p>In your live environment, use the live endpoints.<\/p>\n<h2>Sequence diagrams<\/h2>\n<p>The two diagrams below show the full lifecycle for both integration flows. In both flows, your agent's API requests to Adyen are the same. The difference is how Adyen and the merchant orchestrate payment authorization.<\/p>\n<h3 id=\"sequence-standard-flow\">Standard flow<\/h3>\n<p>Adyen initializes payment authorization on behalf of the agent. The agent's Token Vault makes a request to the <code>\/delegate_payment<\/code> endpoint to obtain a PSP token, which the agent then submits via <code>\/complete<\/code>. Adyen handles the rest.<\/p>\n<div id=\"mermaid-6a352592a098b-wrapper\"><div id=\"mermaid-6a352592a098b\" class=\"mermaid-shortcode loading\">CnNlcXVlbmNlRGlhZ3JhbQogICAgcGFydGljaXBhbnQgU2hvcHBlcgogICAgcGFydGljaXBhbnQgQWdlbnQgYXMgQUkgQWdlbnQKICAgIHBhcnRpY2lwYW50IFZhdWx0IGFzIFRva2VuIFZhdWx0CiAgICBwYXJ0aWNpcGFudCBBZHllbgogICAgcGFydGljaXBhbnQgTWVyY2hhbnQKCiAgICByZWN0IHJnYigyNDUsIDI0NSwgMjQ1KQogICAgTm90ZSBvdmVyIFNob3BwZXIsIE1lcmNoYW50OiBTdGFnZSAxLiBDcmVhdGUgY2hlY2tvdXQKICAgIFNob3BwZXItPj5BZ2VudDogIkJ1eSB0aGVzZSBoZWFkcGhvbmVzIgogICAgQWdlbnQtPj5BZHllbjogW0FDUF0gUE9TVCAvY2hlY2tvdXRfc2Vzc2lvbnMKICAgIEFkeWVuLT4+TWVyY2hhbnQ6IFBPU1QgL2FnZW50aWMvc2Vzc2lvbnMve2lkfQogICAgTWVyY2hhbnQtLT4+QWR5ZW46IDIwMCBzdGF0dXM6ICB0b3RhbHMsIHN0b2NrLCBzaGlwcGluZwogICAgQWR5ZW4tLT4+QWdlbnQ6IDIwMTogU2Vzc2lvbiBJRCArIHRvdGFscwogICAgQWdlbnQtLT4+U2hvcHBlcjogRGlzcGxheSBvcmRlciBzdW1tYXJ5CiAgICBlbmQKCiAgICByZWN0IHJnYigyNDUsIDI0NSwgMjQ1KQogICAgTm90ZSBvdmVyIFNob3BwZXIsIE1lcmNoYW50OiBTdGFnZSAyLiBEZWxlZ2F0ZSBwYXltZW50ICYgdG9rZW5pemF0aW9uCiAgICBTaG9wcGVyLT4+QWdlbnQ6ICJQYXkgbm93IgogICAgQWdlbnQtPj5WYXVsdDogSW5zdHJ1Y3QgZGVsZWdhdGVfcGF5bWVudAogICAgVmF1bHQtPj5BZHllbjogW0FDUF0gL2RlbGVnYXRlX3BheW1lbnQKICAgIEFkeWVuLS0+PlZhdWx0OiBwc3BfdHJhbnNhY3Rpb25fdG9rZW4KICAgIFZhdWx0LS0+PkFnZW50OiBwc3BfdHJhbnNhY3Rpb25fdG9rZW4KICAgIGVuZAoKICAgIHJlY3QgcmdiKDI0NSwgMjQ1LCAyNDUpCiAgICBOb3RlIG92ZXIgU2hvcHBlciwgTWVyY2hhbnQ6IFN0YWdlIDMuIENvbXBsZXRlICYgYXV0aG9yaXplCiAgICBBZ2VudC0+PkFkeWVuOiBbQUNQXSAvY2hlY2tvdXRfc2Vzc2lvbnMve2lkfS9jb21wbGV0ZQogICAgQWR5ZW4tPj5NZXJjaGFudDogUE9TVCAvYWdlbnRpYy9zZXNzaW9ucy97aWR9L2NvbW1pdAogICAgTWVyY2hhbnQtLT4+QWR5ZW46IDIwMCBTVUNDRVNTCiAgICBOb3RlIG92ZXIgQWR5ZW46IEluaXRpYWxpemUgYXV0aG9yaXphdGlvbgogICAgQWR5ZW4tPj5NZXJjaGFudDogUE9TVCAvYWdlbnRpYy9zZXNzaW9ucy97aWR9L2ZpbmFsaXplCiAgICBNZXJjaGFudC0tPj5BZHllbjogMjA0IEFDSzogdHJpZ2dlciBmdWxmaWxsbWVudAogICAgQWR5ZW4tLT4+QWdlbnQ6IDIwMCBzdGF0dXM6IGNvbXBsZXRlZCwgb3JkZXJ7fQogICAgQWdlbnQtLT4+U2hvcHBlcjogIk9yZGVyIGNvbmZpcm1lZCEiCiAgICBlbmQKCiAgICByZWN0IHJnYigyNDUsIDI0NSwgMjQ1KQogICAgTm90ZSBvdmVyIFNob3BwZXIsIE1lcmNoYW50OiBTdGFnZSA0LiBQb3N0LXB1cmNoYXNlCiAgICBNZXJjaGFudC0+PkFkeWVuOiBQT1NUIC9ldmVudHMgKHRyYWNraW5nIGluZm8pCiAgICBBZHllbi0+PkFnZW50OiBQdXNoIHRyYWNraW5nIHRvIEFnZW50CiAgICBBZ2VudC0tPj5TaG9wcGVyOiAiWW91ciBwYWNrYWdlIGlzIG9uIHRoZSB3YXkhIgogICAgZW5kCg==<\/div><\/div>\n<h3 id=\"sequence-advanced-flow\">Advanced flow<\/h3>\n<p>The agent's <code>\/complete<\/code> request is identical to the standard flow. The difference: Adyen delivers the payment token to the merchant, who then makes a <code>POST \/payments<\/code> request directly and triggers order fulfillment in a single synchronous step.<\/p>\n<div id=\"mermaid-6a352592a0991-wrapper\"><div id=\"mermaid-6a352592a0991\" class=\"mermaid-shortcode loading\">CnNlcXVlbmNlRGlhZ3JhbQogICAgcGFydGljaXBhbnQgU2hvcHBlcgogICAgcGFydGljaXBhbnQgQWdlbnQgYXMgQUkgQWdlbnQKICAgIHBhcnRpY2lwYW50IFZhdWx0IGFzIFRva2VuIFZhdWx0CiAgICBwYXJ0aWNpcGFudCBBZHllbgogICAgcGFydGljaXBhbnQgTWVyY2hhbnQKCiAgICByZWN0IHJnYigyNDUsIDI0NSwgMjQ1KQogICAgTm90ZSBvdmVyIFNob3BwZXIsIE1lcmNoYW50OiBTdGFnZSAxLiBDcmVhdGUgY2hlY2tvdXQKICAgIFNob3BwZXItPj5BZ2VudDogIkJ1eSB0aGVzZSBoZWFkcGhvbmVzIgogICAgQWdlbnQtPj5BZHllbjogW0FDUF0gUE9TVCAvY2hlY2tvdXRfc2Vzc2lvbnMKICAgIEFkeWVuLT4+TWVyY2hhbnQ6IFBPU1QgL2FnZW50aWMvc2Vzc2lvbnMve2lkfQogICAgTWVyY2hhbnQtLT4+QWR5ZW46IDIwMDogdG90YWxzLCBzdG9jaywgc2hpcHBpbmcKICAgIEFkeWVuLS0+PkFnZW50OiAyMDE6IFNlc3Npb24gSUQgKyB0b3RhbHMKICAgIEFnZW50LS0+PlNob3BwZXI6IERpc3BsYXkgb3JkZXIgc3VtbWFyeQogICAgZW5kCgogICAgcmVjdCByZ2IoMjQ1LCAyNDUsIDI0NSkKICAgIE5vdGUgb3ZlciBTaG9wcGVyLCBNZXJjaGFudDogU3RhZ2UgMi4gRGVsZWdhdGUgcGF5bWVudCAmIHRva2VuaXphdGlvbgogICAgU2hvcHBlci0+PkFnZW50OiAiUGF5IG5vdyIKICAgIEFnZW50LT4+VmF1bHQ6IEluc3RydWN0IGRlbGVnYXRlX3BheW1lbnQKICAgIFZhdWx0LT4+QWR5ZW46IFtBQ1BdIC9kZWxlZ2F0ZV9wYXltZW50CiAgICBBZHllbi0tPj5WYXVsdDogcHNwX3RyYW5zYWN0aW9uX3Rva2VuCiAgICBWYXVsdC0tPj5BZ2VudDogcHNwX3RyYW5zYWN0aW9uX3Rva2VuCiAgICBlbmQKCiAgICByZWN0IHJnYigyNDUsIDI0NSwgMjQ1KQogICAgTm90ZSBvdmVyIFNob3BwZXIsIE1lcmNoYW50OiBTdGFnZSAzLiBDb21wbGV0ZSAmIGF1dGhvcml6ZSAobWVyY2hhbnQtZXhlY3V0ZWQpCiAgICBBZ2VudC0+PkFkeWVuOiBbQUNQXSAvY2hlY2tvdXRfc2Vzc2lvbnMve2lkfS9jb21wbGV0ZQogICAgQWR5ZW4tPj5NZXJjaGFudDogUGF5bWVudCB0b2tlbiArIHNlc3Npb24gZGF0YQogICAgTWVyY2hhbnQtPj5BZHllbjogUE9TVCAvcGF5bWVudHMgKHBzcF90b2tlbikKICAgIEFkeWVuLS0+Pk1lcmNoYW50OiBQYXltZW50IHJlc3VsdCAoQXV0aG9yaXNlZCkKICAgIE5vdGUgb3ZlciBNZXJjaGFudDogVHJpZ2dlciBmdWxmaWxsbWVudAogICAgTWVyY2hhbnQtLT4+QWR5ZW46IDIwNCBBQ0s6IHBheW1lbnQgcmVzdWx0CiAgICBBZHllbi0tPj5BZ2VudDogMjAwIHN0YXR1czogY29tcGxldGVkLCBvcmRlcnt9CiAgICBBZ2VudC0tPj5TaG9wcGVyOiAiT3JkZXIgY29uZmlybWVkISBSZWY6IG9yZF8uLi4iCiAgICBlbmQKCiAgICByZWN0IHJnYigyNDUsIDI0NSwgMjQ1KQogICAgTm90ZSBvdmVyIFNob3BwZXIsIE1lcmNoYW50OiBTdGFnZSA0LiBQb3N0LXB1cmNoYXNlCiAgICBNZXJjaGFudC0+PkFkeWVuOiBQT1NUIC9ldmVudHMgKHRyYWNraW5nIGluZm8pCiAgICBBZHllbi0+PkFnZW50OiBQdXNoIHRyYWNraW5nIHRvIEFnZW50CiAgICBBZ2VudC0tPj5TaG9wcGVyOiAiWW91ciBwYWNrYWdlIGlzIG9uIHRoZSB3YXkhIgogICAgZW5kCg==<\/div><\/div>\n<h2>Session statuses<\/h2>\n<p>Every response contains a <code>status<\/code> field. Evaluate this field on every response.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Status<\/th>\n<th style=\"text-align: left;\">Category<\/th>\n<th style=\"text-align: left;\">Agent action<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>not_ready_for_payment<\/code><\/td>\n<td style=\"text-align: left;\">Active<\/td>\n<td style=\"text-align: left;\">Session has blocking errors. Surface <code>messages[]<\/code> to the shopper and resolve before proceeding.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>ready_for_payment<\/code><\/td>\n<td style=\"text-align: left;\">Active<\/td>\n<td style=\"text-align: left;\">All data valid and totals confirmed. Prompt shopper to confirm, then make a <a href=\"#complete-session\">Complete session<\/a> request.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>in_progress<\/code><\/td>\n<td style=\"text-align: left;\">Active<\/td>\n<td style=\"text-align: left;\">Session is actively being processed. Await the next status transition before taking further action.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>completed<\/code><\/td>\n<td style=\"text-align: left;\">Final<\/td>\n<td style=\"text-align: left;\">Payment authorized and order created. Present <code>order.permalink_url<\/code> and <code>order.id<\/code> to the shopper.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>canceled<\/code><\/td>\n<td style=\"text-align: left;\">Final<\/td>\n<td style=\"text-align: left;\">Session explicitly canceled. Do not reuse this session ID.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Error codes<\/h2>\n<p>When the merchant rejects a request (HTTP <code>422<\/code>), the session response contains a <code>messages[]<\/code> array with structured error objects. Surface these to the shopper as appropriate.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">HTTP<\/th>\n<th style=\"text-align: left;\">Reason code<\/th>\n<th style=\"text-align: left;\">Phase<\/th>\n<th style=\"text-align: left;\">Agent handling<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\">200<\/td>\n<td style=\"text-align: left;\">None<\/td>\n<td style=\"text-align: left;\">Any<\/td>\n<td style=\"text-align: left;\">Valid. Proceed to the next step.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">422<\/td>\n<td style=\"text-align: left;\"><code>OUT_OF_STOCK<\/code><\/td>\n<td style=\"text-align: left;\">Create \/ Update \/ Commit<\/td>\n<td style=\"text-align: left;\">Item unavailable. Offer alternatives or remove from cart.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">422<\/td>\n<td style=\"text-align: left;\"><code>PARTIAL_STOCK<\/code><\/td>\n<td style=\"text-align: left;\">Create \/ Update \/ Commit<\/td>\n<td style=\"text-align: left;\">Only X of Y units available. Offer reduced quantity.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">422<\/td>\n<td style=\"text-align: left;\"><code>INVALID_ADDRESS<\/code><\/td>\n<td style=\"text-align: left;\">Create \/ Update \/ Commit<\/td>\n<td style=\"text-align: left;\">Delivery to this address unsupported. Prompt for alternative.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">422<\/td>\n<td style=\"text-align: left;\"><code>RISK_REJECTED<\/code><\/td>\n<td style=\"text-align: left;\">Commit only<\/td>\n<td style=\"text-align: left;\">Merchant fraud engine blocked. Do not expose risk details. Offer alternative payment method.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">422<\/td>\n<td style=\"text-align: left;\"><code>PRICE_MISMATCH<\/code><\/td>\n<td style=\"text-align: left;\">Commit only<\/td>\n<td style=\"text-align: left;\">Price changed since last fetch. Re-fetch session and present updated totals for shopper re-confirmation.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>AcpMessage object<\/h3>\n<p>All session responses include a required <code>messages[]<\/code> array. Each entry follows the <code>AcpMessage<\/code> schema.<\/p>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'AcpMessage example'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n  \\\"code\\\": \\\"OUT_OF_STOCK\\\",\\n  \\\"content\\\": \\\"The item is no longer available.\\\",\\n  \\\"content_type\\\": \\\"plain\\\",\\n  \\\"type\\\": \\\"error\\\",\\n  \\\"path\\\": \\\"items[0]\\\"\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h2>Schema reference<\/h2>\n<p>The schema reference below shows all the available endpoints and objects you can use for this integration.<\/p>\n<h3>Endpoints<\/h3>\n<p>Adyen Agentic API:<\/p>\n<table>\n<thead>\n<tr>\n<th>Environment<\/th>\n<th>Base URL<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Test<\/td>\n<td><code>https:\/\/commerce-suite-test.adyen.com\/commerce-suite\/acp\/v1\/{companyAccount}<\/code><\/td>\n<\/tr>\n<tr>\n<td>Live<\/td>\n<td><code>https:\/\/commerce-suite-live.adyen.com\/commerce-suite\/acp\/v1\/{companyAccount}<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Tokenization:<\/p>\n<table>\n<thead>\n<tr>\n<th>Environment<\/th>\n<th>Endpoint URL<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Test<\/td>\n<td><code>https:\/\/pal-test.adyen.com\/paltokenization\/servlet\/Recurring\/Agentic\/acp\/v1\/agentic_commerce\/delegate_payment<\/code><\/td>\n<\/tr>\n<tr>\n<td>Live<\/td>\n<td><code>https:\/\/pal-live.adyen.com\/paltokenization\/servlet\/Recurring\/Agentic\/acp\/v1\/agentic_commerce\/delegate_payment<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>All request and response objects follow these standardized schemas.<\/p>\n<h3>AcpItem<\/h3>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The merchant's custom product identifier or the stock keeping unit (SKU) identifier.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>quantity<\/code><\/td>\n<td style=\"text-align: left;\">Integer<\/td>\n<td style=\"text-align: left;\">The number of units of the item. <strong>1<\/strong> or more.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>AcpLineItem<\/h3>\n<p>Returned in all session responses. Represents a resolved cart line with merchant-computed pricing.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The unique identifier for this line item within the session.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>item<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#acpitem\">AcpItem<\/a><\/td>\n<td style=\"text-align: left;\">The underlying item reference (<code>id<\/code> and <code>quantity<\/code>).<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>base_amount<\/code><\/td>\n<td style=\"text-align: left;\">Integer (int64)<\/td>\n<td style=\"text-align: left;\">The pre-tax unit price \u00d7 quantity in minor currency units, for example, <strong>34900<\/strong> = $349.00.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>discount<\/code><\/td>\n<td style=\"text-align: left;\">Integer (int64)<\/td>\n<td style=\"text-align: left;\">The discount applied to this line in minor currency units. <strong>0<\/strong> if no discount applies.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>subtotal<\/code><\/td>\n<td style=\"text-align: left;\">Integer (int64)<\/td>\n<td style=\"text-align: left;\">The line subtotal after any adjustments, before tax, in minor currency units.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>tax<\/code><\/td>\n<td style=\"text-align: left;\">Integer (int64)<\/td>\n<td style=\"text-align: left;\">The tax amount for this line in minor currency units.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>total<\/code><\/td>\n<td style=\"text-align: left;\">Integer (int64)<\/td>\n<td style=\"text-align: left;\">The final line total (subtotal + tax) in minor currency units.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>AcpAddress<\/h3>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>line_one<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The primary street address. <br> Format requirements: <ul><li markdown=\"1\">Maximum characters: 256.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>line_two<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The secondary address line (apartment, suite, unit). <br> Format requirements: <ul><li markdown=\"1\">Maximum characters: 256.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>city<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The city name. <br> Format requirements: <ul><li markdown=\"1\">Maximum characters: 256.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>state<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The state or province code. <br> Format requirements: <ul><li markdown=\"1\">Minimum characters: 1.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>country<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The <a href=\"https:\/\/en.wikipedia.org\/wiki\/ISO_3166-1_alpha-2\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">ISO 3166-1 alpha-2<\/a> country code, for example, <strong>US<\/strong>, <strong>GB<\/strong>, <strong>NL<\/strong>. <br> Format requirements: <ul><li markdown=\"1\">Exactly 2 characters.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>postal_code<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The ZIP or postal code. <br> Format requirements: <ul><li markdown=\"1\">Maximum characters: 20.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>name<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Optional. The recipient name for the address. <br> Format requirements: <ul><li markdown=\"1\">Maximum characters: 256.<\/li><\/ul><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>AcpBuyer<\/h3>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>email<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The shopper's email address. <br> Format requirements: <ul><li markdown=\"1\">Maximum characters: 256.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>first_name<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The shopper's first name. <br> Format requirements: <ul><li markdown=\"1\">Maximum characters: 256.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>last_name<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The shopper's last name. <br> Format requirements: <ul><li markdown=\"1\">Maximum characters: 256.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>phone_number<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The shopper's contact phone number.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>AcpPaymentData<\/h3>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>provider<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The payment provider identifier. Use <strong>adyen<\/strong> for Adyen-issued tokens. <br> Format requirements: <ul><li markdown=\"1\">Minimum characters: 1.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>token<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The PSP transaction token from your vault's <code>\/delegate_payment<\/code> request. <br> Format requirements: <ul><li markdown=\"1\">Minimum characters: 1.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>billing_address<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#acpaddress\">AcpAddress<\/a><\/td>\n<td style=\"text-align: left;\">Optional. The billing address associated with the payment instrument. If omitted, the <code>fulfillment_address<\/code> is used for billing.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>AcpPaymentProvider<\/h3>\n<p>Returned in the <a href=\"#create-session\">Create session<\/a> response.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>provider<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The payment provider. Always <strong>adyen<\/strong> for this integration.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>merchant_id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The Adyen merchant account identifier for the connected merchant.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>supported_payment_methods<\/code><\/td>\n<td style=\"text-align: left;\">String[]<\/td>\n<td style=\"text-align: left;\">The accepted payment methods, for example, <strong>scheme<\/strong>, <strong>googlepay<\/strong>, <strong>applepay<\/strong>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>AcpFulfillmentOption<\/h3>\n<p><code>AcpFulfillmentOption<\/code> is a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Tagged_union\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">discriminated union<\/a> keyed on <code>type<\/code>. The base object only requires <code>type<\/code>. Use the subtype schemas based on the value of <code>type<\/code>.<\/p>\n<p><strong>Base<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>type<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The discriminator field. Determines which subtype schema applies. Possible values: <strong>shipping<\/strong>, <strong>digital<\/strong>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>AcpFulfillmentOptionShipping<\/strong> (type: <code>shipping<\/code>)<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The unique identifier. Pass as <code>fulfillment_option_id<\/code> in <a href=\"#update-session\">Update session<\/a> or <a href=\"#create-session\">Create session<\/a>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>type<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><strong>shipping<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>title<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The human-readable shipping option name.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>subtotal<\/code><\/td>\n<td style=\"text-align: left;\">Integer (int64)<\/td>\n<td style=\"text-align: left;\">The fulfillment subtotal before tax in minor currency units.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>tax<\/code><\/td>\n<td style=\"text-align: left;\">Integer (int64)<\/td>\n<td style=\"text-align: left;\">The tax on the fulfillment option in minor currency units.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>total<\/code><\/td>\n<td style=\"text-align: left;\">Integer (int64)<\/td>\n<td style=\"text-align: left;\">The total fulfillment cost (subtotal + tax) in minor currency units.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>carrier<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Optional. The carrier name, for example, <strong>UPS<\/strong>, <strong>DHL<\/strong>, <strong>FedEx<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>subtitle<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Optional. An additional description, for example, \"Delivered in 5\u20137 business days\".<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>earliest_delivery_time<\/code><\/td>\n<td style=\"text-align: left;\">String (date-time)<\/td>\n<td style=\"text-align: left;\">Optional. The ISO 8601 timestamp for earliest expected delivery.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>latest_delivery_time<\/code><\/td>\n<td style=\"text-align: left;\">String (date-time)<\/td>\n<td style=\"text-align: left;\">Optional. The ISO 8601 timestamp for latest expected delivery.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>AcpFulfillmentOptionDigital<\/strong> (type: <code>digital<\/code>)<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The unique identifier.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>type<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><strong>digital<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>title<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The human-readable option name.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>subtotal<\/code><\/td>\n<td style=\"text-align: left;\">Integer (int64)<\/td>\n<td style=\"text-align: left;\">The fulfillment subtotal before tax.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>tax<\/code><\/td>\n<td style=\"text-align: left;\">Integer (int64)<\/td>\n<td style=\"text-align: left;\">The tax amount.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>total<\/code><\/td>\n<td style=\"text-align: left;\">Integer (int64)<\/td>\n<td style=\"text-align: left;\">The total cost (subtotal + tax).<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>subtitle<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Optional. An additional description.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>AcpTotal<\/h3>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>type<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The total type as a free-form string set by the merchant, for example, <strong>subtotal<\/strong>, <strong>tax<\/strong>, <strong>shipping<\/strong>, <strong>total<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>amount<\/code><\/td>\n<td style=\"text-align: left;\">Integer<\/td>\n<td style=\"text-align: left;\">The amount in minor currency units.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>display_text<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The localized label for display, for example, <strong>Order Total<\/strong>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>AcpOrder<\/h3>\n<p>Included in the <a href=\"#complete-session\">Complete session<\/a> response when authorization succeeds.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The unique order identifier. Present to the shopper as their order reference.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>checkout_session_id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The originating checkout session ID for correlation.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>permalink_url<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The permanent URL to the merchant's order details page. Share with the shopper for tracking and support.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>AcpMessage<\/h3>\n<p>All responses include a required <code>messages[]<\/code> array. Evaluate it on every response, not only on error HTTP codes.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>code<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The machine-readable reason code, for example, <strong>OUT_OF_STOCK<\/strong>, <strong>PRICE_MISMATCH<\/strong>, <strong>INVALID_ADDRESS<\/strong>, <strong>RISK_REJECTED<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>content<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The human-readable message text. Show to the shopper when <code>type<\/code> is <strong>error<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>content_type<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The format of <code>content<\/code>. Possible values: <strong>plain<\/strong>, <strong>markdown<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>type<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The message category. Possible values: <strong>error<\/strong> (agent must act), <strong>info<\/strong> (informational notice).<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>path<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Optional. The JSON path that identifies the specific field that triggered the message, for example, <strong>items[0]<\/strong>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>AcpLink<\/h3>\n<p>All session responses include a required <code>links[]<\/code> array of merchant policy and support URLs.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>type<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The link category, for example, <strong>terms_of_service<\/strong>, <strong>return_policy<\/strong>, <strong>privacy_policy<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>url<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The fully-qualified URL.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>AcpUpdateCheckoutSessionRequest<\/h3>\n<p>Dedicated schema for the <a href=\"#update-session\">Update session<\/a> endpoint. All fields are optional. Include only what needs to change.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>currency<\/code><\/td>\n<td style=\"text-align: left;\">String (<a href=\"https:\/\/en.wikipedia.org\/wiki\/ISO_4217\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">ISO 4217<\/a>)<\/td>\n<td style=\"text-align: left;\">The currency. Must match the currency set at session creation.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>items<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#acpitem\">AcpItem[]<\/a><\/td>\n<td style=\"text-align: left;\">Replaces the entire item list.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>buyer<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#acpbuyer\">AcpBuyer<\/a><\/td>\n<td style=\"text-align: left;\">The updated shopper contact information.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>fulfillment_address<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#acpaddress\">AcpAddress<\/a><\/td>\n<td style=\"text-align: left;\">The updated shipping address.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>fulfillment_option_id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The ID of the selected <a href=\"#acpfulfillmentoption\">fulfillment option<\/a>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>discounts<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#acpdiscountsrequest\">AcpDiscountsRequest<\/a><\/td>\n<td style=\"text-align: left;\">Optional. The discount codes to apply or update. Replaces any previously submitted codes.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>AcpAffiliateAttribution<\/h3>\n<p>Optional affiliate attribution object for tracking referral sources at session creation or completion. Include this to credit publishers, influencers, or campaign sources.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>provider<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The attribution provider namespace identifier, for example, <strong>impact.com<\/strong>, <strong>partnerize<\/strong>. <br> Format requirements: <ul><li markdown=\"1\">Minimum characters: 1.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>token<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Optional. The opaque provider-issued attribution token for fraud-resistant validation.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>publisher_id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Optional. The provider-scoped affiliate or publisher identifier.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>campaign_id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Optional. The provider-scoped campaign identifier.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>creative_id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Optional. The provider-scoped creative identifier.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>sub_id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Optional. The provider-scoped sub-tracking identifier.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>touchpoint<\/code><\/td>\n<td style=\"text-align: left;\">String (enum)<\/td>\n<td style=\"text-align: left;\">Optional. The attribution touchpoint. Possible values: <strong>first<\/strong> (session creation), <strong>last<\/strong> (session completion).<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>source<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#acpaffiliateattributionsource\">AcpAffiliateAttributionSource<\/a><\/td>\n<td style=\"text-align: left;\">Optional. The context about where the attribution originated (<code>type<\/code> + optional <code>url<\/code>).<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>issued_at<\/code><\/td>\n<td style=\"text-align: left;\">String (date-time)<\/td>\n<td style=\"text-align: left;\">Optional. The ISO 8601 timestamp when the attribution token was issued.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>expires_at<\/code><\/td>\n<td style=\"text-align: left;\">String (date-time)<\/td>\n<td style=\"text-align: left;\">Optional. The ISO 8601 timestamp when the attribution token expires.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>metadata<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\">Optional. Arbitrary key-value metadata for additional attribution context.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>AcpAffiliateAttributionSource<\/h3>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>type<\/code><\/td>\n<td style=\"text-align: left;\">String (enum)<\/td>\n<td style=\"text-align: left;\">The source type. Possible values: <strong>url<\/strong>, <strong>platform<\/strong>, <strong>unknown<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>url<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Optional. The originating URL when <code>type<\/code> is <strong>url<\/strong>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>AcpDiscountsRequest<\/h3>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>codes<\/code><\/td>\n<td style=\"text-align: left;\">String[]<\/td>\n<td style=\"text-align: left;\">Optional. The discount or promo codes to apply to the session.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>AcpDiscountsResponse<\/h3>\n<p>Returned in all session responses when discounts are present.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>codes<\/code><\/td>\n<td style=\"text-align: left;\">String[]<\/td>\n<td style=\"text-align: left;\">Optional. All submitted discount codes.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>applied<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#acpapplieddiscount\">AcpAppliedDiscount[]<\/a><\/td>\n<td style=\"text-align: left;\">Optional. Successfully applied discounts with full detail.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>rejected<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#acprejecteddiscount\">AcpRejectedDiscount[]<\/a><\/td>\n<td style=\"text-align: left;\">Optional. Rejected discount codes with reason codes.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>AcpAppliedDiscount<\/h3>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The unique identifier of the applied discount. <br> Format requirements: <ul><li markdown=\"1\">Minimum characters: 1.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>amount<\/code><\/td>\n<td style=\"text-align: left;\">Integer (int64)<\/td>\n<td style=\"text-align: left;\">The total discount amount applied in minor currency units.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>coupon<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#acpcoupon\">AcpCoupon<\/a><\/td>\n<td style=\"text-align: left;\">The coupon definition behind this discount.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>code<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Optional. The discount code string submitted by the shopper.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>automatic<\/code><\/td>\n<td style=\"text-align: left;\">Boolean<\/td>\n<td style=\"text-align: left;\">Optional. <strong>true<\/strong> if applied automatically without a code.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>method<\/code><\/td>\n<td style=\"text-align: left;\">String (enum)<\/td>\n<td style=\"text-align: left;\">Optional. The allocation method. Possible values: <strong>each<\/strong> (per line item), <strong>across<\/strong> (spread proportionally).<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>allocations<\/code><\/td>\n<td style=\"text-align: left;\">AcpDiscountAllocation[]<\/td>\n<td style=\"text-align: left;\">Optional. The per-line-item breakdown. Each entry includes <code>path<\/code> (JSON path) and <code>amount<\/code>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>start<\/code><\/td>\n<td style=\"text-align: left;\">String (date-time)<\/td>\n<td style=\"text-align: left;\">Optional. The validity start timestamp.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>end<\/code><\/td>\n<td style=\"text-align: left;\">String (date-time)<\/td>\n<td style=\"text-align: left;\">Optional. The validity end timestamp.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>AcpRejectedDiscount<\/h3>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>code<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The discount code that was rejected. <br> Format requirements: <ul><li markdown=\"1\">Minimum characters: 1.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>reason<\/code><\/td>\n<td style=\"text-align: left;\">String (enum)<\/td>\n<td style=\"text-align: left;\">The machine-readable rejection reason. See <a href=\"#acpdiscounterrorcode\">AcpDiscountErrorCode<\/a>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>message<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Optional. The human-readable rejection explanation. Surface to the shopper.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>AcpDiscountErrorCode<\/h3>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Value<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>discount_code_expired<\/code><\/td>\n<td style=\"text-align: left;\">The discount code has passed its expiry date.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>discount_code_invalid<\/code><\/td>\n<td style=\"text-align: left;\">The code does not exist or is malformed.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>discount_code_already_applied<\/code><\/td>\n<td style=\"text-align: left;\">This code has already been applied to the session.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>discount_code_combination_disallowed<\/code><\/td>\n<td style=\"text-align: left;\">This code cannot be combined with other active discounts.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>discount_code_minimum_not_met<\/code><\/td>\n<td style=\"text-align: left;\">The cart total does not meet the minimum order value.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>discount_code_user_not_logged_in<\/code><\/td>\n<td style=\"text-align: left;\">The code requires an authenticated user session.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>discount_code_user_ineligible<\/code><\/td>\n<td style=\"text-align: left;\">The shopper does not qualify for this discount.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>discount_code_usage_limit_reached<\/code><\/td>\n<td style=\"text-align: left;\">The maximum redemption count has been reached.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>AcpCoupon<\/h3>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The unique coupon identifier. <br> Format requirements: <ul><li markdown=\"1\">Minimum characters: 1.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>name<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The human-readable coupon name. <br> Format requirements: <ul><li markdown=\"1\">Minimum characters: 1.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>percent_off<\/code><\/td>\n<td style=\"text-align: left;\">Integer (int32)<\/td>\n<td style=\"text-align: left;\">Optional. The percentage discount applied to eligible amounts. Range: 0\u2013100.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>amount_off<\/code><\/td>\n<td style=\"text-align: left;\">Integer (int64)<\/td>\n<td style=\"text-align: left;\">Optional. The fixed discount amount in minor currency units.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>currency<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Optional. The currency of <code>amount_off<\/code> (lowercase <a href=\"https:\/\/en.wikipedia.org\/wiki\/ISO_4217\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">ISO 4217<\/a>).<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>duration<\/code><\/td>\n<td style=\"text-align: left;\">String (enum)<\/td>\n<td style=\"text-align: left;\">Optional. The coupon duration. Possible values: <strong>once<\/strong>, <strong>repeating<\/strong>, <strong>forever<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>duration_in_months<\/code><\/td>\n<td style=\"text-align: left;\">Integer (int32)<\/td>\n<td style=\"text-align: left;\">Optional. The number of months when <code>duration<\/code> is <strong>repeating<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>max_redemptions<\/code><\/td>\n<td style=\"text-align: left;\">Integer (int32)<\/td>\n<td style=\"text-align: left;\">Optional. The maximum number of times this coupon can be used.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>times_redeemed<\/code><\/td>\n<td style=\"text-align: left;\">Integer (int32)<\/td>\n<td style=\"text-align: left;\">Optional. The number of times this coupon has been redeemed.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>metadata<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\">Optional. Arbitrary key-value metadata.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>AcpMarketingConsentOption<\/h3>\n<p>Returned in all session responses. Represents a marketing consent prompt from the merchant.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>channel<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The marketing channel identifier, for example, <strong>email<\/strong>, <strong>sms<\/strong>, <strong>push<\/strong>. <br> Format requirements: <ul><li markdown=\"1\">Minimum characters: 1.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>display_text<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The localized consent prompt to show to the shopper. <br> Format requirements: <ul><li markdown=\"1\">Minimum characters: 1.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>privacy_policy_url<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The URL to the merchant's privacy policy for this channel. <br> Format requirements: <ul><li markdown=\"1\">Minimum characters: 1.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>is_subscribed<\/code><\/td>\n<td style=\"text-align: left;\">Boolean<\/td>\n<td style=\"text-align: left;\">Optional. The pre-populated subscription state for returning shoppers.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>AcpMarketingConsent<\/h3>\n<p>Submitted in the <a href=\"#complete-session\">Complete session<\/a> request to capture the shopper's consent decisions.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>channel<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The marketing channel. Must match a <code>channel<\/code> value from <a href=\"#acpmarketingconsentoption\">AcpMarketingConsentOption<\/a>. <br> Format requirements: <ul><li markdown=\"1\">Minimum characters: 1.<\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>opted_in<\/code><\/td>\n<td style=\"text-align: left;\">Boolean<\/td>\n<td style=\"text-align: left;\">The shopper's consent decision. <strong>true<\/strong> = opted in, <strong>false<\/strong> = opted out.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Delegated payment objects<\/h3>\n<p>Payment method (<code>payment_method<\/code>): <span id=\"delegated-payment-objects-payment-method\"><\/span><\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>payment_method.type<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><strong>card<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>payment_method.card_number_type<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The card number type. Possible values: <strong>fpan<\/strong>, <strong>network_token<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>payment_method.number<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The shopper's card number.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>payment_method.metadata<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\">Arbitrary key-value pairs associated with the payment method.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>payment_method.exp_month<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Optional. The card expiry month.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>payment_method.exp_year<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Optional. The card expiry year (four digits).<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>payment_method.name<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Optional. The cardholder name.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>payment_method.cvc<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Optional. The card CVC or CVV number.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>payment_method.cryptogram<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Optional. The cryptogram provided with network tokens.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>payment_method.eci_value<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Optional. The Electronic Commerce Indicator or Security Level Indicator for network tokens.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>payment_method.checks_performed<\/code><\/td>\n<td style=\"text-align: left;\">String[]<\/td>\n<td style=\"text-align: left;\">Optional. Checks already performed, for example, <code>[\"avs\", \"cvv\", \"ani\", \"auth0\"]<\/code>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>payment_method.iin<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Optional. The first six digits of the card number (Issuer Identification Number).<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>payment_method.display_card_funding_type<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Optional. The funding type: <strong>credit<\/strong>, <strong>debit<\/strong>, or <strong>prepaid<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>payment_method.display_wallet_type<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Optional. The digital wallet type if the card originated from a wallet.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>payment_method.display_brand<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Optional. The card brand for display, for example, <strong>Visa<\/strong>, <strong>Mastercard<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>payment_method.display_last4<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Optional. The original last four digits of the card for customer display (for non-PAN tokens).<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Allowance (<code>allowance<\/code>): <span id=\"delegated-payment-objects-allowance\"><\/span><\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>allowance.reason<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><strong>one_time<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>allowance.max_amount<\/code><\/td>\n<td style=\"text-align: left;\">Integer<\/td>\n<td style=\"text-align: left;\">The maximum amount the payment method can be charged, in minor currency units.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>allowance.currency<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The <a href=\"https:\/\/en.wikipedia.org\/wiki\/ISO_4217\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">ISO 4217<\/a> currency code.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>allowance.checkout_session_id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The <code>id<\/code> from the <a href=\"#create-session\">Create session<\/a> response.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>allowance.merchant_id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The Adyen merchant account identifier.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>allowance.expires_at<\/code><\/td>\n<td style=\"text-align: left;\">String (date-time)<\/td>\n<td style=\"text-align: left;\">The token expiry timestamp as an RFC 3339 string.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Billing address (<code>billing_address<\/code>): <span id=\"delegated-payment-objects-billing-address\"><\/span><\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>billing_address.name<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The shopper's full name.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>billing_address.line_one<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The primary street address.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>billing_address.city<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The city name.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>billing_address.country<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The <a href=\"https:\/\/en.wikipedia.org\/wiki\/ISO_3166-1_alpha-2\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">ISO 3166-1 alpha-2<\/a> country code.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>billing_address.postal_code<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The ZIP or postal code.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>billing_address.line_two<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Optional. The secondary address line (apartment, suite, unit).<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>billing_address.state<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Optional. The state or province, following <a href=\"https:\/\/en.wikipedia.org\/wiki\/ISO_3166-2\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">ISO 3166-2<\/a>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Risk signals (<code>risk_signals<\/code>): <span id=\"delegated-payment-objects-risk-signals\"><\/span><\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>risk_signals.type<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The type of risk signal provided by your platform.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>risk_signals.score<\/code><\/td>\n<td style=\"text-align: left;\">Integer<\/td>\n<td style=\"text-align: left;\">The risk score.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>risk_signals.action<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The risk outcome. Possible values: <strong>blocked<\/strong>, <strong>manual_review<\/strong>, <strong>authorized<\/strong>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Metadata (<code>metadata<\/code>): <span id=\"delegated-payment-objects-metadata\"><\/span><\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Type<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>metadata<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\">Arbitrary key-value pairs at the request level.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>","url":"https:\/\/docs.adyen.com\/online-payments\/agentic-commerce\/agent-platform\/ai-agent-integration","articleFields":{"description":"Integrate with the Adyen Agentic API to enable your AI agent platform to make transactions with Adyen merchants."},"algolia":{"url":"https:\/\/docs.adyen.com\/online-payments\/agentic-commerce\/agent-platform\/ai-agent-integration","title":"AI agent API integration","content":"The Adyen Agentic API acts as a bridge between your AI agent platform and our merchants. This enables your agents to make transactions on behalf of shoppers who use your AI agents. You communicate with Adyen through our API endpoints, and you do not communicate directly with merchants. Adyen handles the communication with our merchants and the downstream complexity of orchestrating stock validation, tax calculation, shipping, and payment authorization. We make the relevant information visible to your agents.\nRequirements\n\n\n\nRequirement\nDescription\n\n\n\n\nIntegration type\nThis guide is for an integration using the OpenAI Agentic Commerce Protocol (ACP).\n\n\nUser role\nMake sure that your Adyen credential (API key) has the following user role: Commerce Suite API.\n\n\nSetup steps\nBefore you begin, make sure that you have: Set up a Token Vault integration using the Agentic Payments integration with Agentic Commerce Protocol (ACP).PCI DSS Level 1 compliance for your platform.Completed the Adyen security review.Your target merchant accounts enabled for Agentic Commerce by your Adyen Account Manager.\n\n\n\nHow it works\nUse the following base URL for the endpoints in the agentic commerce checkout lifecycle, besides the delegate payment phase.\nThe path parameter {companyAccount} is the Adyen account of the merchant that the shopper makes the transaction with.\n\n\n\nEnvironment\nBase URL\n\n\n\n\nTest\nhttps:\/\/commerce-suite-test.adyen.com\/commerce-suite\/acp\/v1\/{companyAccount}\n\n\nLive\nhttps:\/\/commerce-suite-live.adyen.com\/commerce-suite\/acp\/v1\/{companyAccount}\n\n\n\nThe agentic commerce checkout lifecycle consists of six phases:\n\nCreate session: Initialize a checkout session with items, shopper, and fulfillment details.\nGet session (optional): Get the current state of the session to synchronize the total payment amount or verify its status.\nUpdate session: Update items, address, buyer details, or fulfillment selection and recalculate totals.\nDelegate payment: Get a single-use payment token with the shopper's encrypted payment details.\nComplete session: Submit the payment token and trigger authorization.\nCancel session (optional): Cancel an active session and release reserved inventory.\n\nYou can use the standard flow or advanced flow.\nAuthentication\nThe Adyen Agentic Commerce Suite uses Bearer token authentication. \nIn the Authorization header of your requests, pass your Adyen API key as the bearer token. Your API key must have the Commerce Suite API role.\n\n    \n\n\nNever expose your API key in a URL query string, or in agent-readable context. All API requests must originate from your secure agent backend or token vault infrastructure.\n\nCreate session\nInitialize a new checkout session with a list of items, optional shopper information, and shipping\/fulfillment information. Adyen does the following: \n\nMakes a request to the merchant's server to validate stock and calculate total amounts in real-time.\nSends the session data to your agent.\n\nMake a POST \/checkout_sessions request, including the following parameters:\n\n\n\nParameter\nType\nRequired\nDescription\n\n\n\n\ncurrency\nString (ISO 4217)\n\nThe 3-letter settlement currency code, for example, USD, EUR, GBP.\n\n\nitems\n\n  AcpItem[]\n\n\nItems to add to the session. Each item requires an id and quantity of 1 or more.\n\n\nfulfillment_address\n\n  AcpAddress\n\n\nRequired if the order includes physical goods where tax or shipping varies by location.  The shipping address.\n\n\nbuyer\n\n  AcpBuyer\n\n\nThe shopper's contact details.\n\n\nfulfillment_option_id\nString\n\nThe pre-selected fulfillment option.\n\n\naffiliate_attribution\n\n  AcpAffiliateAttribution\n\n\nThe affiliate attribution data for tracking referral sources.\n\n\ndiscounts\n\n  AcpDiscountsRequest\n\n\nThe discount codes to apply at session creation.\n\n\n\n\n    \n\nThe success HTTP (201) response includes the following: \n\n\n\nParameter\nDescription\n\n\n\n\nid\nThe unique session identifier. Use this for subsequent requests for this session.\n\n\nstatus\nCurrent session status.\n\n\ncurrency\nSettlement currency code.\n\n\npayment_provider\nPayment service provider (PSP) configuration and supported payment methods.\n\n\nline_items\nLine items with pricing and tax details.\n\n\nfulfillment_options\nAvailable fulfillment options with costs.\n\n\ntotals\nSubtotal, tax, shipping, and total amount.\n\n\nmessages\nAn \n  AcpMessage\n array with informational or warning messages.\n\n\nlinks\nAn \n  AcpLink\n array with links to merchant policy or support URLs.\n\n\ndiscounts\nAn \n  AcpDiscountsResponse\n object with applied, rejected, and submitted discount codes.\n\n\nmarketing_consent_options\nAn \n  AcpMarketingConsentOption[]\n array of marketing consent prompts from the merchant.\n\n\n\n\n    \n\nPossible HTTP status codes\n\n\n\nHTTP\nMeaning\nDescription\n\n\n\n\n201\nCreated\nSession created. Use the returned id for all subsequent requests for this session.\n\n\n422\nUnprocessable\nAn error in business logic prevented the session from being created. For example, one of the items in the order is out of stock. Get more information from messages[].\n\n\n\n(Optional) Get session\nGet the current state of the session to synchronize the total payment amount or verify its status.\nMake a GET \/checkout_sessions\/{sessionId} request with the following path parameters:\n\n\n\nParameter\nType\nRequired\nDescription\n\n\n\n\ncompanyAccount\nString\n\nYour Adyen company account identifier.\n\n\nsessionId\nString\n\nThe id returned from the Create session request.\n\n\n\nNo request body is required. The success HTTP (200) response returns the full session state, identical to the Create session response.\nPossible HTTP status codes\n\n\n\nHTTP\nMeaning\nDescription\n\n\n\n\n200\nOK\nSession found and returned.\n\n\n404\nNot Found\nThe session ID does not exist or has expired.\n\n\n\nUpdate session\nUpdate an existing session with new items, address, buyer details, or a fulfillment selection. Adyen makes a request to the merchant's live calculator, so your agent always has accurate totals.\nMake a POST \/checkout_sessions\/{sessionId} request. Include only the parameters that need to change:\n\n\n\nParameter\nType\nRequired\nDescription\n\n\n\n\ncurrency\nString (ISO 4217)\n\nMust match the currency set at session creation.\n\n\nitems\n\n  AcpItem[]\n\n\nReplaces the entire item list.\n\n\nbuyer\n\n  AcpBuyer\n\n\nUpdated shopper contact information.\n\n\nfulfillment_address\n\n  AcpAddress\n\n\nUpdated shipping address. Triggers recalculation of tax and shipping costs.\n\n\nfulfillment_option_id\nString\n\nThe ID of the fulfillment option the shopper selected from fulfillment_options[] in the session response.\n\n\ndiscounts\n\n  AcpDiscountsRequest\n\n\nThe discount codes to apply or update. Replaces any previously submitted codes.\n\n\n\n\n    \n\n\nMake this request to update the session whenever the shopper changes their delivery address, selects a shipping option, modifies their shopping cart, or applies a discount code. The response line_items[].total, fulfillment_options[].total, and totals[] are always authoritative. Show these values to the shopper before completing the session.\n\nThe success HTTP (200) response returns the full updated session state, identical to the Create session response.\nPossible HTTP status codes\n\n\n\nHTTP\nMeaning\nDescription\n\n\n\n\n200\nOK\nSession updated. The response contains the latest authoritative state.\n\n\n422\nUnprocessable\nAn error in merchant logic rejected the update. For example, an item is now out of stock. Get more information from messages[].\n\n\n\nDelegate payment\nBefore completing the session, your agent's Token Vault must obtain a PSP transaction token. \nEndpoint:\n\n\n\nEnvironment\nURL\n\n\n\n\nTest\nhttps:\/\/pal-test.adyen.com\/paltokenization\/servlet\/Recurring\/Agentic\/acp\/v1\/agentic_commerce\/delegate_payment\n\n\nLive\nhttps:\/\/pal-live.adyen.com\/paltokenization\/servlet\/Recurring\/Agentic\/acp\/v1\/agentic_commerce\/delegate_payment\n\n\n\nMake a POST \/agentic_commerce\/delegate_payment request to the PAL tokenization domain (not the Commerce Suite domain), including the following parameters:\nRequest headers\n\n\n\nHeader\nRequired\nDescription\n\n\n\n\nAuthorization\n\nBearer token. Pass your Adyen agentic token.\n\n\nContent-Type\n\napplication\/json.\n\n\nAPI-Version\n\n2025-09-29.\n\n\nIdempotency-Key\n\nA unique UUID to prevent duplicate transactions.\n\n\n\nRequest body\n\n\n\nParameter\nRequired\nDescription\n\n\n\n\n\n  payment_method\n\n\nThe card details used to generate the payment token. Requires type, card_number_type, number, and metadata.\n\n\n\n  allowance\n\n\nThe spending limit and scope for the token. Requires reason, max_amount, currency, checkout_session_id, merchant_id, and expires_at.\n\n\n\n  billing_address\n\n\nThe billing address for the payment instrument. Requires name, line_one, city, country, and postal_code.\n\n\n\n  risk_signals\n\n\nRisk assessment data from your platform. Requires type, score, and action.\n\n\n\n  metadata\n\n\nKey-value pairs for metadata related to the request.\n\n\n\n\n    \n\nThe success (HTTP 200) response includes the following:\n\n\n\nParameter\nType\nDescription\n\n\n\n\nid\nString\nThe single-use ACP payment token. Submit this as payment_data.token in the Complete session request.\n\n\nexpires_at\nString (date-time)\nThe token expiry timestamp as an RFC 3339 string. The token must be used before this time.\n\n\n\n\nThe id is merchant-scoped and cannot be used across unauthorized merchant accounts. It does not expose raw card data.\n\n\n    \n\nPossible HTTP status codes\n\n\n\nHTTP\nMeaning\nDescription\n\n\n\n\n200\nOK\nToken issued.\n\n\n401\nUnauthorized\nInvalid or missing agentic commerce token. Verify that you are using the dedicated token with the correct role.\n\n\n403\nForbidden\nYour platform does not have access to this merchant account, or Agentic Commerce has not been enabled.\n\n\n422\nUnprocessable\nRequest body validation failed. Get more information from the error message.\n\n\n\nComplete session\nFinalize the session by submitting the payment token from your agent's Token Vault. Adyen does the following:\n\nValidates the token.\nOptionally makes a request to the merchant's commit endpoint for a pre-authorization risk check.\nInitializes payment authorization and returns the result.\n\nMake a POST \/checkout_sessions\/{sessionId}\/complete request, including the following parameters:\n\n\n\nParameter\nType\nRequired\nDescription\n\n\n\n\npayment_data\n\n  AcpPaymentData\n\n\nThe payment token and provider. Must include the following: provider (for example, adyen)token: The PSP transaction token from your vault's \/delegate_payment request.\n\n\naffiliate_attribution\n\n  AcpAffiliateAttribution\n\n\nThe attribution data captured at checkout completion (touchpoint: last). Use for last-touch attribution tracking.\n\n\nbuyer\n\n  AcpBuyer\n\n\nThe final shopper details at completion time. Use to override or supplement the details provided at session creation.\n\n\nmarketing_consents\n\n  AcpMarketingConsent[]\n\n\nThe shopper's channel-specific marketing consent responses. Each entry captures channel (for example, email) and opted_in (true or false).\n\n\n\n\n    \n\nThe success HTTP (200) response includes the full session state plus an order object on successful authorization:\n\n\n\nParameter\nDescription\n\n\n\n\norder.id\nThe unique order identifier. Use for post-purchase communication and support queries.\n\n\norder.checkout_session_id\nThe originating checkout session ID for correlation.\n\n\norder.permalink_url\nPermanent URL to the merchant's order details page. Present to the shopper as their confirmation link.\n\n\n\n\n    \n\nPossible HTTP status codes\n\n\n\nHTTP\nMeaning\nDescription\n\n\n\n\n200\nOK\nAuthorization successful. The order object is present on success. If authorization is declined, get more information from messages[].\n\n\n\n(Optional) Cancel session\nCancel an active session that has not been completed. Use this when the shopper abandons checkout or your agent cannot proceed. Adyen signals the merchant to release any reserved inventory.\nMake a POST \/checkout_sessions\/{sessionId}\/cancel request. No request body is required.\nThe success HTTP (200) response returns the final session state with status: canceled.\nPossible HTTP status codes\n\n\n\nHTTP\nMeaning\nDescription\n\n\n\n\n200\nOK\nSession canceled. The response contains the final session state with status: canceled.\n\n\n\nTest and go live\nUse the sandbox environment to test end-to-end before going live. The sandbox uses the same API specifications and schemas as the live environment.\nTest environment endpoints\n\n\n\nPhase\nMethod\nEndpoint URL\n\n\n\n\nCreate session\nPOST\nhttps:\/\/commerce-suite-test.adyen.com\/commerce-suite\/acp\/v1\/{companyAccount}\/checkout_sessions\n\n\nGet session\nGET\nhttps:\/\/commerce-suite-test.adyen.com\/commerce-suite\/acp\/v1\/{companyAccount}\/checkout_sessions\/{sessionId}\n\n\nUpdate session\nPOST\nhttps:\/\/commerce-suite-test.adyen.com\/commerce-suite\/acp\/v1\/{companyAccount}\/checkout_sessions\/{sessionId}\n\n\nComplete session\nPOST\nhttps:\/\/commerce-suite-test.adyen.com\/commerce-suite\/acp\/v1\/{companyAccount}\/checkout_sessions\/{sessionId}\/complete\n\n\nCancel session\nPOST\nhttps:\/\/commerce-suite-test.adyen.com\/commerce-suite\/acp\/v1\/{companyAccount}\/checkout_sessions\/{sessionId}\/cancel\n\n\nDelegate payment\nPOST\nhttps:\/\/pal-test.adyen.com\/paltokenization\/servlet\/Recurring\/Agentic\/acp\/v1\/agentic_commerce\/delegate_payment\n\n\n\nRecommended test sequence\nTo verify your integration, follow these steps:\n\n\nCreate a session.\nMake a POST \/checkout_sessions request with your test API key in the Authorization: Bearer header. Note the returned id (for example, cs_test_abc123).\n\n\nUpdate with address and fulfillment selection.\nMake a POST \/checkout_sessions\/cs_test_abc123 request. Confirm that status is ready_for_payment and that the totals are finalized.\n\n\nDelegate payment through the Token Vault.\nMake a POST \/delegate_payment request with your test API key in the Authorization: Bearer header. Capture the returned psp_transaction_token.\n\n\nComplete the session.\nMake a POST \/checkout_sessions\/cs_test_abc123\/complete request.\n\n\n\nConfirm that status is completed and order.id is present.\n\n\nGo live\nIn your live environment, use the live endpoints.\nSequence diagrams\nThe two diagrams below show the full lifecycle for both integration flows. In both flows, your agent's API requests to Adyen are the same. The difference is how Adyen and the merchant orchestrate payment authorization.\nStandard flow\nAdyen initializes payment authorization on behalf of the agent. The agent's Token Vault makes a request to the \/delegate_payment endpoint to obtain a PSP token, which the agent then submits via \/complete. Adyen handles the rest.\nCnNlcXVlbmNlRGlhZ3JhbQogICAgcGFydGljaXBhbnQgU2hvcHBlcgogICAgcGFydGljaXBhbnQgQWdlbnQgYXMgQUkgQWdlbnQKICAgIHBhcnRpY2lwYW50IFZhdWx0IGFzIFRva2VuIFZhdWx0CiAgICBwYXJ0aWNpcGFudCBBZHllbgogICAgcGFydGljaXBhbnQgTWVyY2hhbnQKCiAgICByZWN0IHJnYigyNDUsIDI0NSwgMjQ1KQogICAgTm90ZSBvdmVyIFNob3BwZXIsIE1lcmNoYW50OiBTdGFnZSAxLiBDcmVhdGUgY2hlY2tvdXQKICAgIFNob3BwZXItPj5BZ2VudDogIkJ1eSB0aGVzZSBoZWFkcGhvbmVzIgogICAgQWdlbnQtPj5BZHllbjogW0FDUF0gUE9TVCAvY2hlY2tvdXRfc2Vzc2lvbnMKICAgIEFkeWVuLT4+TWVyY2hhbnQ6IFBPU1QgL2FnZW50aWMvc2Vzc2lvbnMve2lkfQogICAgTWVyY2hhbnQtLT4+QWR5ZW46IDIwMCBzdGF0dXM6ICB0b3RhbHMsIHN0b2NrLCBzaGlwcGluZwogICAgQWR5ZW4tLT4+QWdlbnQ6IDIwMTogU2Vzc2lvbiBJRCArIHRvdGFscwogICAgQWdlbnQtLT4+U2hvcHBlcjogRGlzcGxheSBvcmRlciBzdW1tYXJ5CiAgICBlbmQKCiAgICByZWN0IHJnYigyNDUsIDI0NSwgMjQ1KQogICAgTm90ZSBvdmVyIFNob3BwZXIsIE1lcmNoYW50OiBTdGFnZSAyLiBEZWxlZ2F0ZSBwYXltZW50ICYgdG9rZW5pemF0aW9uCiAgICBTaG9wcGVyLT4+QWdlbnQ6ICJQYXkgbm93IgogICAgQWdlbnQtPj5WYXVsdDogSW5zdHJ1Y3QgZGVsZWdhdGVfcGF5bWVudAogICAgVmF1bHQtPj5BZHllbjogW0FDUF0gL2RlbGVnYXRlX3BheW1lbnQKICAgIEFkeWVuLS0+PlZhdWx0OiBwc3BfdHJhbnNhY3Rpb25fdG9rZW4KICAgIFZhdWx0LS0+PkFnZW50OiBwc3BfdHJhbnNhY3Rpb25fdG9rZW4KICAgIGVuZAoKICAgIHJlY3QgcmdiKDI0NSwgMjQ1LCAyNDUpCiAgICBOb3RlIG92ZXIgU2hvcHBlciwgTWVyY2hhbnQ6IFN0YWdlIDMuIENvbXBsZXRlICYgYXV0aG9yaXplCiAgICBBZ2VudC0+PkFkeWVuOiBbQUNQXSAvY2hlY2tvdXRfc2Vzc2lvbnMve2lkfS9jb21wbGV0ZQogICAgQWR5ZW4tPj5NZXJjaGFudDogUE9TVCAvYWdlbnRpYy9zZXNzaW9ucy97aWR9L2NvbW1pdAogICAgTWVyY2hhbnQtLT4+QWR5ZW46IDIwMCBTVUNDRVNTCiAgICBOb3RlIG92ZXIgQWR5ZW46IEluaXRpYWxpemUgYXV0aG9yaXphdGlvbgogICAgQWR5ZW4tPj5NZXJjaGFudDogUE9TVCAvYWdlbnRpYy9zZXNzaW9ucy97aWR9L2ZpbmFsaXplCiAgICBNZXJjaGFudC0tPj5BZHllbjogMjA0IEFDSzogdHJpZ2dlciBmdWxmaWxsbWVudAogICAgQWR5ZW4tLT4+QWdlbnQ6IDIwMCBzdGF0dXM6IGNvbXBsZXRlZCwgb3JkZXJ7fQogICAgQWdlbnQtLT4+U2hvcHBlcjogIk9yZGVyIGNvbmZpcm1lZCEiCiAgICBlbmQKCiAgICByZWN0IHJnYigyNDUsIDI0NSwgMjQ1KQogICAgTm90ZSBvdmVyIFNob3BwZXIsIE1lcmNoYW50OiBTdGFnZSA0LiBQb3N0LXB1cmNoYXNlCiAgICBNZXJjaGFudC0+PkFkeWVuOiBQT1NUIC9ldmVudHMgKHRyYWNraW5nIGluZm8pCiAgICBBZHllbi0+PkFnZW50OiBQdXNoIHRyYWNraW5nIHRvIEFnZW50CiAgICBBZ2VudC0tPj5TaG9wcGVyOiAiWW91ciBwYWNrYWdlIGlzIG9uIHRoZSB3YXkhIgogICAgZW5kCg==\nAdvanced flow\nThe agent's \/complete request is identical to the standard flow. The difference: Adyen delivers the payment token to the merchant, who then makes a POST \/payments request directly and triggers order fulfillment in a single synchronous step.\nCnNlcXVlbmNlRGlhZ3JhbQogICAgcGFydGljaXBhbnQgU2hvcHBlcgogICAgcGFydGljaXBhbnQgQWdlbnQgYXMgQUkgQWdlbnQKICAgIHBhcnRpY2lwYW50IFZhdWx0IGFzIFRva2VuIFZhdWx0CiAgICBwYXJ0aWNpcGFudCBBZHllbgogICAgcGFydGljaXBhbnQgTWVyY2hhbnQKCiAgICByZWN0IHJnYigyNDUsIDI0NSwgMjQ1KQogICAgTm90ZSBvdmVyIFNob3BwZXIsIE1lcmNoYW50OiBTdGFnZSAxLiBDcmVhdGUgY2hlY2tvdXQKICAgIFNob3BwZXItPj5BZ2VudDogIkJ1eSB0aGVzZSBoZWFkcGhvbmVzIgogICAgQWdlbnQtPj5BZHllbjogW0FDUF0gUE9TVCAvY2hlY2tvdXRfc2Vzc2lvbnMKICAgIEFkeWVuLT4+TWVyY2hhbnQ6IFBPU1QgL2FnZW50aWMvc2Vzc2lvbnMve2lkfQogICAgTWVyY2hhbnQtLT4+QWR5ZW46IDIwMDogdG90YWxzLCBzdG9jaywgc2hpcHBpbmcKICAgIEFkeWVuLS0+PkFnZW50OiAyMDE6IFNlc3Npb24gSUQgKyB0b3RhbHMKICAgIEFnZW50LS0+PlNob3BwZXI6IERpc3BsYXkgb3JkZXIgc3VtbWFyeQogICAgZW5kCgogICAgcmVjdCByZ2IoMjQ1LCAyNDUsIDI0NSkKICAgIE5vdGUgb3ZlciBTaG9wcGVyLCBNZXJjaGFudDogU3RhZ2UgMi4gRGVsZWdhdGUgcGF5bWVudCAmIHRva2VuaXphdGlvbgogICAgU2hvcHBlci0+PkFnZW50OiAiUGF5IG5vdyIKICAgIEFnZW50LT4+VmF1bHQ6IEluc3RydWN0IGRlbGVnYXRlX3BheW1lbnQKICAgIFZhdWx0LT4+QWR5ZW46IFtBQ1BdIC9kZWxlZ2F0ZV9wYXltZW50CiAgICBBZHllbi0tPj5WYXVsdDogcHNwX3RyYW5zYWN0aW9uX3Rva2VuCiAgICBWYXVsdC0tPj5BZ2VudDogcHNwX3RyYW5zYWN0aW9uX3Rva2VuCiAgICBlbmQKCiAgICByZWN0IHJnYigyNDUsIDI0NSwgMjQ1KQogICAgTm90ZSBvdmVyIFNob3BwZXIsIE1lcmNoYW50OiBTdGFnZSAzLiBDb21wbGV0ZSAmIGF1dGhvcml6ZSAobWVyY2hhbnQtZXhlY3V0ZWQpCiAgICBBZ2VudC0+PkFkeWVuOiBbQUNQXSAvY2hlY2tvdXRfc2Vzc2lvbnMve2lkfS9jb21wbGV0ZQogICAgQWR5ZW4tPj5NZXJjaGFudDogUGF5bWVudCB0b2tlbiArIHNlc3Npb24gZGF0YQogICAgTWVyY2hhbnQtPj5BZHllbjogUE9TVCAvcGF5bWVudHMgKHBzcF90b2tlbikKICAgIEFkeWVuLS0+Pk1lcmNoYW50OiBQYXltZW50IHJlc3VsdCAoQXV0aG9yaXNlZCkKICAgIE5vdGUgb3ZlciBNZXJjaGFudDogVHJpZ2dlciBmdWxmaWxsbWVudAogICAgTWVyY2hhbnQtLT4+QWR5ZW46IDIwNCBBQ0s6IHBheW1lbnQgcmVzdWx0CiAgICBBZHllbi0tPj5BZ2VudDogMjAwIHN0YXR1czogY29tcGxldGVkLCBvcmRlcnt9CiAgICBBZ2VudC0tPj5TaG9wcGVyOiAiT3JkZXIgY29uZmlybWVkISBSZWY6IG9yZF8uLi4iCiAgICBlbmQKCiAgICByZWN0IHJnYigyNDUsIDI0NSwgMjQ1KQogICAgTm90ZSBvdmVyIFNob3BwZXIsIE1lcmNoYW50OiBTdGFnZSA0LiBQb3N0LXB1cmNoYXNlCiAgICBNZXJjaGFudC0+PkFkeWVuOiBQT1NUIC9ldmVudHMgKHRyYWNraW5nIGluZm8pCiAgICBBZHllbi0+PkFnZW50OiBQdXNoIHRyYWNraW5nIHRvIEFnZW50CiAgICBBZ2VudC0tPj5TaG9wcGVyOiAiWW91ciBwYWNrYWdlIGlzIG9uIHRoZSB3YXkhIgogICAgZW5kCg==\nSession statuses\nEvery response contains a status field. Evaluate this field on every response.\n\n\n\nStatus\nCategory\nAgent action\n\n\n\n\nnot_ready_for_payment\nActive\nSession has blocking errors. Surface messages[] to the shopper and resolve before proceeding.\n\n\nready_for_payment\nActive\nAll data valid and totals confirmed. Prompt shopper to confirm, then make a Complete session request.\n\n\nin_progress\nActive\nSession is actively being processed. Await the next status transition before taking further action.\n\n\ncompleted\nFinal\nPayment authorized and order created. Present order.permalink_url and order.id to the shopper.\n\n\ncanceled\nFinal\nSession explicitly canceled. Do not reuse this session ID.\n\n\n\nError codes\nWhen the merchant rejects a request (HTTP 422), the session response contains a messages[] array with structured error objects. Surface these to the shopper as appropriate.\n\n\n\nHTTP\nReason code\nPhase\nAgent handling\n\n\n\n\n200\nNone\nAny\nValid. Proceed to the next step.\n\n\n422\nOUT_OF_STOCK\nCreate \/ Update \/ Commit\nItem unavailable. Offer alternatives or remove from cart.\n\n\n422\nPARTIAL_STOCK\nCreate \/ Update \/ Commit\nOnly X of Y units available. Offer reduced quantity.\n\n\n422\nINVALID_ADDRESS\nCreate \/ Update \/ Commit\nDelivery to this address unsupported. Prompt for alternative.\n\n\n422\nRISK_REJECTED\nCommit only\nMerchant fraud engine blocked. Do not expose risk details. Offer alternative payment method.\n\n\n422\nPRICE_MISMATCH\nCommit only\nPrice changed since last fetch. Re-fetch session and present updated totals for shopper re-confirmation.\n\n\n\nAcpMessage object\nAll session responses include a required messages[] array. Each entry follows the AcpMessage schema.\n\n    \n\nSchema reference\nThe schema reference below shows all the available endpoints and objects you can use for this integration.\nEndpoints\nAdyen Agentic API:\n\n\n\nEnvironment\nBase URL\n\n\n\n\nTest\nhttps:\/\/commerce-suite-test.adyen.com\/commerce-suite\/acp\/v1\/{companyAccount}\n\n\nLive\nhttps:\/\/commerce-suite-live.adyen.com\/commerce-suite\/acp\/v1\/{companyAccount}\n\n\n\nTokenization:\n\n\n\nEnvironment\nEndpoint URL\n\n\n\n\nTest\nhttps:\/\/pal-test.adyen.com\/paltokenization\/servlet\/Recurring\/Agentic\/acp\/v1\/agentic_commerce\/delegate_payment\n\n\nLive\nhttps:\/\/pal-live.adyen.com\/paltokenization\/servlet\/Recurring\/Agentic\/acp\/v1\/agentic_commerce\/delegate_payment\n\n\n\nAll request and response objects follow these standardized schemas.\nAcpItem\n\n\n\nParameter\nType\nDescription\n\n\n\n\nid\nString\nThe merchant's custom product identifier or the stock keeping unit (SKU) identifier.\n\n\nquantity\nInteger\nThe number of units of the item. 1 or more.\n\n\n\nAcpLineItem\nReturned in all session responses. Represents a resolved cart line with merchant-computed pricing.\n\n\n\nParameter\nType\nDescription\n\n\n\n\nid\nString\nThe unique identifier for this line item within the session.\n\n\nitem\nAcpItem\nThe underlying item reference (id and quantity).\n\n\nbase_amount\nInteger (int64)\nThe pre-tax unit price \u00d7 quantity in minor currency units, for example, 34900 = $349.00.\n\n\ndiscount\nInteger (int64)\nThe discount applied to this line in minor currency units. 0 if no discount applies.\n\n\nsubtotal\nInteger (int64)\nThe line subtotal after any adjustments, before tax, in minor currency units.\n\n\ntax\nInteger (int64)\nThe tax amount for this line in minor currency units.\n\n\ntotal\nInteger (int64)\nThe final line total (subtotal + tax) in minor currency units.\n\n\n\nAcpAddress\n\n\n\nParameter\nType\nDescription\n\n\n\n\nline_one\nString\nThe primary street address.  Format requirements: Maximum characters: 256.\n\n\nline_two\nString\nThe secondary address line (apartment, suite, unit).  Format requirements: Maximum characters: 256.\n\n\ncity\nString\nThe city name.  Format requirements: Maximum characters: 256.\n\n\nstate\nString\nThe state or province code.  Format requirements: Minimum characters: 1.\n\n\ncountry\nString\nThe ISO 3166-1 alpha-2 country code, for example, US, GB, NL.  Format requirements: Exactly 2 characters.\n\n\npostal_code\nString\nThe ZIP or postal code.  Format requirements: Maximum characters: 20.\n\n\nname\nString\nOptional. The recipient name for the address.  Format requirements: Maximum characters: 256.\n\n\n\nAcpBuyer\n\n\n\nParameter\nType\nDescription\n\n\n\n\nemail\nString\nThe shopper's email address.  Format requirements: Maximum characters: 256.\n\n\nfirst_name\nString\nThe shopper's first name.  Format requirements: Maximum characters: 256.\n\n\nlast_name\nString\nThe shopper's last name.  Format requirements: Maximum characters: 256.\n\n\nphone_number\nString\nThe shopper's contact phone number.\n\n\n\nAcpPaymentData\n\n\n\nParameter\nType\nDescription\n\n\n\n\nprovider\nString\nThe payment provider identifier. Use adyen for Adyen-issued tokens.  Format requirements: Minimum characters: 1.\n\n\ntoken\nString\nThe PSP transaction token from your vault's \/delegate_payment request.  Format requirements: Minimum characters: 1.\n\n\nbilling_address\nAcpAddress\nOptional. The billing address associated with the payment instrument. If omitted, the fulfillment_address is used for billing.\n\n\n\nAcpPaymentProvider\nReturned in the Create session response.\n\n\n\nParameter\nType\nDescription\n\n\n\n\nprovider\nString\nThe payment provider. Always adyen for this integration.\n\n\nmerchant_id\nString\nThe Adyen merchant account identifier for the connected merchant.\n\n\nsupported_payment_methods\nString[]\nThe accepted payment methods, for example, scheme, googlepay, applepay.\n\n\n\nAcpFulfillmentOption\nAcpFulfillmentOption is a discriminated union keyed on type. The base object only requires type. Use the subtype schemas based on the value of type.\nBase\n\n\n\nParameter\nType\nDescription\n\n\n\n\ntype\nString\nThe discriminator field. Determines which subtype schema applies. Possible values: shipping, digital.\n\n\n\nAcpFulfillmentOptionShipping (type: shipping)\n\n\n\nParameter\nType\nDescription\n\n\n\n\nid\nString\nThe unique identifier. Pass as fulfillment_option_id in Update session or Create session.\n\n\ntype\nString\nshipping.\n\n\ntitle\nString\nThe human-readable shipping option name.\n\n\nsubtotal\nInteger (int64)\nThe fulfillment subtotal before tax in minor currency units.\n\n\ntax\nInteger (int64)\nThe tax on the fulfillment option in minor currency units.\n\n\ntotal\nInteger (int64)\nThe total fulfillment cost (subtotal + tax) in minor currency units.\n\n\ncarrier\nString\nOptional. The carrier name, for example, UPS, DHL, FedEx.\n\n\nsubtitle\nString\nOptional. An additional description, for example, \"Delivered in 5\u20137 business days\".\n\n\nearliest_delivery_time\nString (date-time)\nOptional. The ISO 8601 timestamp for earliest expected delivery.\n\n\nlatest_delivery_time\nString (date-time)\nOptional. The ISO 8601 timestamp for latest expected delivery.\n\n\n\nAcpFulfillmentOptionDigital (type: digital)\n\n\n\nParameter\nType\nDescription\n\n\n\n\nid\nString\nThe unique identifier.\n\n\ntype\nString\ndigital.\n\n\ntitle\nString\nThe human-readable option name.\n\n\nsubtotal\nInteger (int64)\nThe fulfillment subtotal before tax.\n\n\ntax\nInteger (int64)\nThe tax amount.\n\n\ntotal\nInteger (int64)\nThe total cost (subtotal + tax).\n\n\nsubtitle\nString\nOptional. An additional description.\n\n\n\nAcpTotal\n\n\n\nParameter\nType\nDescription\n\n\n\n\ntype\nString\nThe total type as a free-form string set by the merchant, for example, subtotal, tax, shipping, total.\n\n\namount\nInteger\nThe amount in minor currency units.\n\n\ndisplay_text\nString\nThe localized label for display, for example, Order Total.\n\n\n\nAcpOrder\nIncluded in the Complete session response when authorization succeeds.\n\n\n\nParameter\nType\nDescription\n\n\n\n\nid\nString\nThe unique order identifier. Present to the shopper as their order reference.\n\n\ncheckout_session_id\nString\nThe originating checkout session ID for correlation.\n\n\npermalink_url\nString\nThe permanent URL to the merchant's order details page. Share with the shopper for tracking and support.\n\n\n\nAcpMessage\nAll responses include a required messages[] array. Evaluate it on every response, not only on error HTTP codes.\n\n\n\nParameter\nType\nDescription\n\n\n\n\ncode\nString\nThe machine-readable reason code, for example, OUT_OF_STOCK, PRICE_MISMATCH, INVALID_ADDRESS, RISK_REJECTED.\n\n\ncontent\nString\nThe human-readable message text. Show to the shopper when type is error.\n\n\ncontent_type\nString\nThe format of content. Possible values: plain, markdown.\n\n\ntype\nString\nThe message category. Possible values: error (agent must act), info (informational notice).\n\n\npath\nString\nOptional. The JSON path that identifies the specific field that triggered the message, for example, items[0].\n\n\n\nAcpLink\nAll session responses include a required links[] array of merchant policy and support URLs.\n\n\n\nParameter\nType\nDescription\n\n\n\n\ntype\nString\nThe link category, for example, terms_of_service, return_policy, privacy_policy.\n\n\nurl\nString\nThe fully-qualified URL.\n\n\n\nAcpUpdateCheckoutSessionRequest\nDedicated schema for the Update session endpoint. All fields are optional. Include only what needs to change.\n\n\n\nParameter\nType\nDescription\n\n\n\n\ncurrency\nString (ISO 4217)\nThe currency. Must match the currency set at session creation.\n\n\nitems\nAcpItem[]\nReplaces the entire item list.\n\n\nbuyer\nAcpBuyer\nThe updated shopper contact information.\n\n\nfulfillment_address\nAcpAddress\nThe updated shipping address.\n\n\nfulfillment_option_id\nString\nThe ID of the selected fulfillment option.\n\n\ndiscounts\nAcpDiscountsRequest\nOptional. The discount codes to apply or update. Replaces any previously submitted codes.\n\n\n\nAcpAffiliateAttribution\nOptional affiliate attribution object for tracking referral sources at session creation or completion. Include this to credit publishers, influencers, or campaign sources.\n\n\n\nParameter\nType\nDescription\n\n\n\n\nprovider\nString\nThe attribution provider namespace identifier, for example, impact.com, partnerize.  Format requirements: Minimum characters: 1.\n\n\ntoken\nString\nOptional. The opaque provider-issued attribution token for fraud-resistant validation.\n\n\npublisher_id\nString\nOptional. The provider-scoped affiliate or publisher identifier.\n\n\ncampaign_id\nString\nOptional. The provider-scoped campaign identifier.\n\n\ncreative_id\nString\nOptional. The provider-scoped creative identifier.\n\n\nsub_id\nString\nOptional. The provider-scoped sub-tracking identifier.\n\n\ntouchpoint\nString (enum)\nOptional. The attribution touchpoint. Possible values: first (session creation), last (session completion).\n\n\nsource\nAcpAffiliateAttributionSource\nOptional. The context about where the attribution originated (type + optional url).\n\n\nissued_at\nString (date-time)\nOptional. The ISO 8601 timestamp when the attribution token was issued.\n\n\nexpires_at\nString (date-time)\nOptional. The ISO 8601 timestamp when the attribution token expires.\n\n\nmetadata\nObject\nOptional. Arbitrary key-value metadata for additional attribution context.\n\n\n\nAcpAffiliateAttributionSource\n\n\n\nParameter\nType\nDescription\n\n\n\n\ntype\nString (enum)\nThe source type. Possible values: url, platform, unknown.\n\n\nurl\nString\nOptional. The originating URL when type is url.\n\n\n\nAcpDiscountsRequest\n\n\n\nParameter\nType\nDescription\n\n\n\n\ncodes\nString[]\nOptional. The discount or promo codes to apply to the session.\n\n\n\nAcpDiscountsResponse\nReturned in all session responses when discounts are present.\n\n\n\nParameter\nType\nDescription\n\n\n\n\ncodes\nString[]\nOptional. All submitted discount codes.\n\n\napplied\nAcpAppliedDiscount[]\nOptional. Successfully applied discounts with full detail.\n\n\nrejected\nAcpRejectedDiscount[]\nOptional. Rejected discount codes with reason codes.\n\n\n\nAcpAppliedDiscount\n\n\n\nParameter\nType\nDescription\n\n\n\n\nid\nString\nThe unique identifier of the applied discount.  Format requirements: Minimum characters: 1.\n\n\namount\nInteger (int64)\nThe total discount amount applied in minor currency units.\n\n\ncoupon\nAcpCoupon\nThe coupon definition behind this discount.\n\n\ncode\nString\nOptional. The discount code string submitted by the shopper.\n\n\nautomatic\nBoolean\nOptional. true if applied automatically without a code.\n\n\nmethod\nString (enum)\nOptional. The allocation method. Possible values: each (per line item), across (spread proportionally).\n\n\nallocations\nAcpDiscountAllocation[]\nOptional. The per-line-item breakdown. Each entry includes path (JSON path) and amount.\n\n\nstart\nString (date-time)\nOptional. The validity start timestamp.\n\n\nend\nString (date-time)\nOptional. The validity end timestamp.\n\n\n\nAcpRejectedDiscount\n\n\n\nParameter\nType\nDescription\n\n\n\n\ncode\nString\nThe discount code that was rejected.  Format requirements: Minimum characters: 1.\n\n\nreason\nString (enum)\nThe machine-readable rejection reason. See AcpDiscountErrorCode.\n\n\nmessage\nString\nOptional. The human-readable rejection explanation. Surface to the shopper.\n\n\n\nAcpDiscountErrorCode\n\n\n\nValue\nDescription\n\n\n\n\ndiscount_code_expired\nThe discount code has passed its expiry date.\n\n\ndiscount_code_invalid\nThe code does not exist or is malformed.\n\n\ndiscount_code_already_applied\nThis code has already been applied to the session.\n\n\ndiscount_code_combination_disallowed\nThis code cannot be combined with other active discounts.\n\n\ndiscount_code_minimum_not_met\nThe cart total does not meet the minimum order value.\n\n\ndiscount_code_user_not_logged_in\nThe code requires an authenticated user session.\n\n\ndiscount_code_user_ineligible\nThe shopper does not qualify for this discount.\n\n\ndiscount_code_usage_limit_reached\nThe maximum redemption count has been reached.\n\n\n\nAcpCoupon\n\n\n\nParameter\nType\nDescription\n\n\n\n\nid\nString\nThe unique coupon identifier.  Format requirements: Minimum characters: 1.\n\n\nname\nString\nThe human-readable coupon name.  Format requirements: Minimum characters: 1.\n\n\npercent_off\nInteger (int32)\nOptional. The percentage discount applied to eligible amounts. Range: 0\u2013100.\n\n\namount_off\nInteger (int64)\nOptional. The fixed discount amount in minor currency units.\n\n\ncurrency\nString\nOptional. The currency of amount_off (lowercase ISO 4217).\n\n\nduration\nString (enum)\nOptional. The coupon duration. Possible values: once, repeating, forever.\n\n\nduration_in_months\nInteger (int32)\nOptional. The number of months when duration is repeating.\n\n\nmax_redemptions\nInteger (int32)\nOptional. The maximum number of times this coupon can be used.\n\n\ntimes_redeemed\nInteger (int32)\nOptional. The number of times this coupon has been redeemed.\n\n\nmetadata\nObject\nOptional. Arbitrary key-value metadata.\n\n\n\nAcpMarketingConsentOption\nReturned in all session responses. Represents a marketing consent prompt from the merchant.\n\n\n\nParameter\nType\nDescription\n\n\n\n\nchannel\nString\nThe marketing channel identifier, for example, email, sms, push.  Format requirements: Minimum characters: 1.\n\n\ndisplay_text\nString\nThe localized consent prompt to show to the shopper.  Format requirements: Minimum characters: 1.\n\n\nprivacy_policy_url\nString\nThe URL to the merchant's privacy policy for this channel.  Format requirements: Minimum characters: 1.\n\n\nis_subscribed\nBoolean\nOptional. The pre-populated subscription state for returning shoppers.\n\n\n\nAcpMarketingConsent\nSubmitted in the Complete session request to capture the shopper's consent decisions.\n\n\n\nParameter\nType\nDescription\n\n\n\n\nchannel\nString\nThe marketing channel. Must match a channel value from AcpMarketingConsentOption.  Format requirements: Minimum characters: 1.\n\n\nopted_in\nBoolean\nThe shopper's consent decision. true = opted in, false = opted out.\n\n\n\nDelegated payment objects\nPayment method (payment_method): \n\n\n\nParameter\nType\nDescription\n\n\n\n\npayment_method.type\nString\ncard\n\n\npayment_method.card_number_type\nString\nThe card number type. Possible values: fpan, network_token.\n\n\npayment_method.number\nString\nThe shopper's card number.\n\n\npayment_method.metadata\nObject\nArbitrary key-value pairs associated with the payment method.\n\n\npayment_method.exp_month\nString\nOptional. The card expiry month.\n\n\npayment_method.exp_year\nString\nOptional. The card expiry year (four digits).\n\n\npayment_method.name\nString\nOptional. The cardholder name.\n\n\npayment_method.cvc\nString\nOptional. The card CVC or CVV number.\n\n\npayment_method.cryptogram\nString\nOptional. The cryptogram provided with network tokens.\n\n\npayment_method.eci_value\nString\nOptional. The Electronic Commerce Indicator or Security Level Indicator for network tokens.\n\n\npayment_method.checks_performed\nString[]\nOptional. Checks already performed, for example, [\"avs\", \"cvv\", \"ani\", \"auth0\"].\n\n\npayment_method.iin\nString\nOptional. The first six digits of the card number (Issuer Identification Number).\n\n\npayment_method.display_card_funding_type\nString\nOptional. The funding type: credit, debit, or prepaid.\n\n\npayment_method.display_wallet_type\nString\nOptional. The digital wallet type if the card originated from a wallet.\n\n\npayment_method.display_brand\nString\nOptional. The card brand for display, for example, Visa, Mastercard.\n\n\npayment_method.display_last4\nString\nOptional. The original last four digits of the card for customer display (for non-PAN tokens).\n\n\n\nAllowance (allowance): \n\n\n\nParameter\nType\nDescription\n\n\n\n\nallowance.reason\nString\none_time\n\n\nallowance.max_amount\nInteger\nThe maximum amount the payment method can be charged, in minor currency units.\n\n\nallowance.currency\nString\nThe ISO 4217 currency code.\n\n\nallowance.checkout_session_id\nString\nThe id from the Create session response.\n\n\nallowance.merchant_id\nString\nThe Adyen merchant account identifier.\n\n\nallowance.expires_at\nString (date-time)\nThe token expiry timestamp as an RFC 3339 string.\n\n\n\nBilling address (billing_address): \n\n\n\nParameter\nType\nDescription\n\n\n\n\nbilling_address.name\nString\nThe shopper's full name.\n\n\nbilling_address.line_one\nString\nThe primary street address.\n\n\nbilling_address.city\nString\nThe city name.\n\n\nbilling_address.country\nString\nThe ISO 3166-1 alpha-2 country code.\n\n\nbilling_address.postal_code\nString\nThe ZIP or postal code.\n\n\nbilling_address.line_two\nString\nOptional. The secondary address line (apartment, suite, unit).\n\n\nbilling_address.state\nString\nOptional. The state or province, following ISO 3166-2.\n\n\n\nRisk signals (risk_signals): \n\n\n\nParameter\nType\nDescription\n\n\n\n\nrisk_signals.type\nString\nThe type of risk signal provided by your platform.\n\n\nrisk_signals.score\nInteger\nThe risk score.\n\n\nrisk_signals.action\nString\nThe risk outcome. Possible values: blocked, manual_review, authorized.\n\n\n\nMetadata (metadata): \n\n\n\nParameter\nType\nDescription\n\n\n\n\nmetadata\nObject\nArbitrary key-value pairs at the request level.\n\n\n","type":"page","locale":"en","boost":16,"hierarchy":{"lvl0":"Home","lvl1":"Online payments","lvl2":"Adyen Agentic","lvl3":"Agent platform","lvl4":"AI agent API integration"},"hierarchy_url":{"lvl0":"https:\/\/docs.adyen.com\/","lvl1":"https:\/\/docs.adyen.com\/online-payments","lvl2":"https:\/\/docs.adyen.com\/online-payments\/agentic-commerce","lvl3":"https:\/\/docs.adyen.com\/online-payments\/agentic-commerce\/agent-platform","lvl4":"\/online-payments\/agentic-commerce\/agent-platform\/ai-agent-integration"},"levels":5,"category":"Online Payments","category_color":"green","tags":["agent","integration"]}}
