{"title":"Agentic Cart API integration","category":"default","creationDate":1766481060,"content":"<p>When a shopper uses an AI agent to make a purchase, the AI agent platform communicates with Adyen to initiate payments on behalf of shoppers. Adyen translates the information to be able to communicate with you. To enable Adyen to process payments for AI-agent-initiated transactions with you, you must create a server with endpoints that Adyen can make requests to. Adyen communicates with your server so that you do not need to integrate with multiple agent platforms.<\/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;\">An existing <a href=\"\/online-payments\">online payments<\/a> integration.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>How it works<\/h2>\n<p>For this integration, your server must do the following:<\/p>\n<ul>\n<li>Make requests to Adyen.<\/li>\n<li>Expose endpoints that Adyen makes requests to.<\/li>\n<\/ul>\n<h3>One-time configuration<\/h3>\n<p>You must do a one-time configuration register your server's endpoints and declare which endpoints you want Adyen to make request to. <\/p>\n<h3>Adyen requests to your server<\/h3>\n<p>After you configure your server's endpoints, Adyen can make requests to them. You must set up your endpoints to do the following, so that Adyen can make requests to them:<\/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-update-session\">Update session<\/a> (optional): Update items, address, or fulfillment selection and recalculate totals.<\/li>\n<li><a href=\"#optional-commit-session\">Commit session<\/a> (optional): Run a final price or stock check before Adyen authorizes the payment.<\/li>\n<li><a href=\"#optional-cancel-session\">Cancel session<\/a> (optional): Release reserved inventory when the shopper abandons checkout.<\/li>\n<li><a href=\"#finalize-session\">Finalize session<\/a>: Receive the authorization result and trigger order creation.<\/li>\n<li><a href=\"#optional-complete-session-advanced-flow\">Complete session<\/a> (optional): Receive the payment token and make the payment request to Adyen directly.<\/li>\n<\/ol>\n<p>Response latency: Your server must respond to Adyen's requests within five seconds. Otherwise, we treat timeouts as errors.<\/p>\n<p>Possible flows:<\/p>\n<ul>\n<li><a href=\"#sequence-diagrams\">Standard<\/a>: Adyen makes a request to finalize the session, and you fulfill the order.<\/li>\n<li><a href=\"#sequence-diagrams\">Advanced<\/a>: We strongly recommend that you only use this flow if you must have direct control of the payment request. Adyen makes a request to complete the session and gives you a payment token. You make a payment request to Adyen. <\/li>\n<\/ul>\n<h3>After purchase events<\/h3>\n<p>After a purchase is finished, you can optionally send a request to Adyen to give order information to the agent (for example, shipping tracking).<\/p>\n<h2>One-time configuration<\/h2>\n<p>Register your server's base URL and declare which endpoints you want Adyen to make request to. You can update this configuration at any time without downtime.<\/p>\n<p>Use the following endpoint URL:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Environment<\/th>\n<th style=\"text-align: left;\">Endpoint 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:\/\/commerce-suite-test.adyen.com\/commerce-suite\/companies\/v1\/{CompanyAccount}\/agentic\/configuration<\/code><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Live<\/td>\n<td style=\"text-align: left;\"><code>https:\/\/commerce-suite-live.adyen.com\/commerce-suite\/companies\/v1\/{CompanyAccount}\/agentic\/configuration<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Make a POST <code>\/agentic\/configuration<\/code> request, including the following parameters:<\/p>\n<p>Request headers:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Header<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>x-api-key<\/code><\/td>\n<td style=\"text-align: left;\">Your Adyen API key from your <a href=\"\/account\/account-structure#company-account\">Adyen company account<\/a>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>Idempotency-Key<\/code><\/td>\n<td style=\"text-align: left;\">A unique identifier for the request.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Request body:<\/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>baseUrl<\/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 server's base URL. Adyen appends endpoint paths to this URL. For example: <strong>your-agentic-server.example.com<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>security.apiKey<\/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 API key that Adyen includes in the <code>Authorization<\/code> header on every callback to your server. Validate it on every inbound request and reject anything that does not match.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>features.enableCommitSession<\/code><\/td>\n<td style=\"text-align: left;\">Boolean<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">If <strong>true<\/strong>, Adyen makes a request to POST <code>\/sessions\/{sessionId}\/commit<\/code> before authorizing. Use this to run a final price or stock check before the card is charged. Default: <strong>false<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>features.enableCancelSession<\/code><\/td>\n<td style=\"text-align: left;\">Boolean<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">If <strong>true<\/strong>, Adyen makes a request to POST <code>\/sessions\/{sessionId}\/cancel<\/code> when an agent cancels a session. Use this to release reserved inventory. Default: <strong>false<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>features.enableFinalizeSession<\/code><\/td>\n<td style=\"text-align: left;\">Boolean<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">If <strong>true<\/strong>, Adyen makes a request to POST <code>\/sessions\/{sessionId}\/finalize<\/code> after successful authorization. This is your fulfillment trigger. Default: <strong>true<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>features.enableCompleteSession<\/code><\/td>\n<td style=\"text-align: left;\">Boolean<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Advanced flow only. If <strong>true<\/strong>, Adyen makes a request to POST <code>\/sessions\/{sessionId}\/complete<\/code> with the raw payment token. Your server makes a POST <code>\/payments<\/code> request directly. Leave <strong>false<\/strong> unless you need to own the authorization step. Default: <strong>false<\/strong>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example configuration request'\" :id=\"'post-agentic-configuration'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;&quot;,&quot;content&quot;:&quot;curl -X POST https:\\\/\\\/commerce-suite-test.adyen.com\\\/commerce-suite\\\/agentic\\\/configuration \\\\\\n-H 'x-api-key: ADYEN_API_KEY' \\\\\\n-H 'Idempotency-Key: YOUR_IDEMPOTENCY_KEY' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-d '{\\n  \\&quot;baseUrl\\&quot;: \\&quot;https:\\\/\\\/api.testshop.com\\\/adyen-integration\\&quot;,\\n  \\&quot;features\\&quot;: {\\n    \\&quot;enableCommitSession\\&quot;: false,\\n    \\&quot;enableCancelSession\\&quot;: false,\\n    \\&quot;enableFinalizeSession\\&quot;: true,\\n    \\&quot;enableCompleteSession\\&quot;: false\\n  },\\n  \\&quot;security\\&quot;: {\\n    \\&quot;apiKey\\&quot;: \\&quot;API_KEY_FOR_VALIDATION\\&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 warning\"><div>\n<p>Never expose your <code>security.apiKey<\/code> in agent-readable context or client-side code. This key is your primary mechanism for confirming that a request originates from Adyen.<\/p>\n<\/div><\/div>\n<h2>Create session<\/h2>\n<p>Set up the following endpoint: POST <code>\/agentic\/sessions\/{sessionId}<\/code><\/p>\n<p>Adyen makes a request to this endpoint when an AI agent initiates a new checkout session. This is the first request including the  <code>sessionId<\/code> in the path. Your server must respond with authoritative totals, stock status, and available fulfillment options. Use the <code>sessionId<\/code> to create a draft order record in your system if needed.<\/p>\n<h2>Adyen request to your server<\/h2>\n<p>When Adyen makes a POST <code>\/agentic\/sessions\/{sessionId}<\/code> request to your server, the request includes the following parameters:<\/p>\n<p>Path parameter: <\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>sessionId<\/code><\/td>\n<td style=\"text-align: left;\">The unique session identifier assign by Adyen. Use this to create or update a draft order in your system.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Request headers:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Header<\/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;\">Adyen-issued bearer token. Validate this token for every request your server receives.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Request body:<\/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 three-letter currency code, for example, <strong>USD<\/strong>, <strong>EUR<\/strong>, <strong>GBP<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#merchantitemrequest\">\n  <code>MerchantItemRequest[]<\/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 requested by the agent. 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>shoppingPlatform<\/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;\">Agent platform identifier, for example, <strong>openai<\/strong>, <strong>google<\/strong>, <strong>meta<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>deliveryAddress<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#merchantaddress\">\n  <code>MerchantAddress<\/code>\n<\/a><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">The shopper's delivery address. Required to compute shipping and address-level tax.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>fulfillment<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#merchantfulfillment\">\n  <code>MerchantFulfillment<\/code>\n<\/a><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Contains <code>selectedFulfillmentOptionId<\/code> if the shopper has selected a shipping tier.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>shopper<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#merchantshopper\">\n  <code>MerchantShopper<\/code>\n<\/a><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Shopper contact details: <code>email<\/code>, <code>firstName<\/code>, <code>lastName<\/code>, <code>phoneNumber<\/code>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>discounts<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#merchantdiscountsrequest\">\n  <code>MerchantDiscountsRequest<\/code>\n<\/a><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Discount codes submitted by the shopper. Validate and return applied or rejected results.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>affiliateAttribution<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#merchantaffiliateattribution\">\n  <code>MerchantAffiliateAttribution<\/code>\n<\/a><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Affiliate attribution data passed through from the agent.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>reference<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Your internal reference for this session. Echo back in the response.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems[].quantity<\/code><\/td>\n<td style=\"text-align: left;\">Integer<\/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;\">Units requested. Must be <strong>1<\/strong> or more.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems[].id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Product or SKU identifier. Echo back in <code>MerchantLineItem.id<\/code>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example request from Adyen to create session'\" :id=\"'post-create-session'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;&quot;,&quot;content&quot;:&quot;curl -X POST https:\\\/\\\/your-agentic-server.example.com\\\/agentic\\\/sessions\\\/cs_1abCd2Ef3GhIjK \\\\\\n-H 'Authorization: Bearer ADYEN_SESSION_TOKEN' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-d '{\\n  \\&quot;currency\\&quot;: \\&quot;USD\\&quot;,\\n  \\&quot;shoppingPlatform\\&quot;: \\&quot;openai\\&quot;,\\n  \\&quot;lineItems\\&quot;: [\\n    {\\n      \\&quot;id\\&quot;: \\&quot;SKU-HEADPHONES-PRO\\&quot;,\\n      \\&quot;quantity\\&quot;: 1\\n    }\\n  ]\\n}'&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h2>Your server response<\/h2>\n<p>Build the responses that your server responds to Adyen with.<\/p>\n<p>The success HTTP <strong>200<\/strong> response includes the following. All fields are optional, but populate as much as possible because the agent presents these totals and options directly to the shopper.<\/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>merchantAccount<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Your Adyen merchant account identifier. Adyen uses this to route the payment.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>reference<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Echo back the <code>reference<\/code> from the request.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems<\/code><\/td>\n<td style=\"text-align: left;\">Object[]<\/td>\n<td style=\"text-align: left;\">Resolved line items with pricing, stock status, and discount breakdown.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems[].quantity<\/code><\/td>\n<td style=\"text-align: left;\">Integer<\/td>\n<td style=\"text-align: left;\">Resolved quantity for this line item.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems[].id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Echo back the product or SKU <code>id<\/code> from the request.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems[].status<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Stock status: <strong>IN_STOCK<\/strong>, <strong>OUT_OF_STOCK<\/strong>, or <strong>PARTIAL_STOCK<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems[].amount<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\">Unit price multiplied by quantity in minor currency units.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems[].discount<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\">Discount applied to this line in minor currency units.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems[].subtotal<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\">Line subtotal after discount, before tax.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems[].taxAmount<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\">Tax for this line in minor currency units.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems[].totalAmount<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\">Final line total (subtotal + tax) in minor currency units.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>fulfillmentOptions<\/code><\/td>\n<td style=\"text-align: left;\">Object[]<\/td>\n<td style=\"text-align: left;\">Available fulfillment options for the shopper to choose from.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>fulfillmentOptions[].id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Unique identifier. The shopper's selection is sent back as <code>fulfillment.selectedFulfillmentOptionId<\/code>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>fulfillmentOptions[].type<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Option type, for example, <strong>shipping<\/strong>, <strong>digital<\/strong>, <strong>pickup<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>fulfillmentOptions[].title<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Human-readable name shown to the shopper, for example, <strong>Express (1-2 days)<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>fulfillmentOptions[].subtitle<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Additional description, for example, <strong>Delivered by FedEx<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>fulfillmentOptions[].carrier<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">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>fulfillmentOptions[].amount<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\">Shipping cost before tax in minor currency units.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>fulfillmentOptions[].taxAmount<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\">Tax on this fulfillment option in minor currency units.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>fulfillmentOptions[].total<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\">Total fulfillment cost (<code>amount<\/code> + <code>taxAmount<\/code>) in minor currency units.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>fulfillmentOptions[].earliestDeliveryTime<\/code><\/td>\n<td style=\"text-align: left;\">String (date-time)<\/td>\n<td style=\"text-align: left;\">ISO 8601 timestamp for earliest expected delivery.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>fulfillmentOptions[].latestDeliveryTime<\/code><\/td>\n<td style=\"text-align: left;\">String (date-time)<\/td>\n<td style=\"text-align: left;\">ISO 8601 timestamp for latest expected delivery.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>totals<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\">Session totals. <code>totals.total.value<\/code> is the amount Adyen authorizes.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>totals.subtotal<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\">Order subtotal before tax and fulfillment.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>totals.tax<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\">Total tax for the order.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>totals.fulfillment<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\">Total fulfillment cost.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>totals.total<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\">Grand total (subtotal + tax + fulfillment).<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>discounts<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#merchantdiscountsresponse\">MerchantDiscountsResponse<\/a><\/td>\n<td style=\"text-align: left;\">Discount processing results: applied and rejected codes with detail.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>marketingConsentOptions<\/code><\/td>\n<td style=\"text-align: left;\">Object[]<\/td>\n<td style=\"text-align: left;\">Marketing consent channels to present to the shopper through the agent.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>messages<\/code><\/td>\n<td style=\"text-align: left;\">Object[]<\/td>\n<td style=\"text-align: left;\">Structured messages. Include on all <strong>422<\/strong> responses.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>messages[].code<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Machine-readable reason code aligned with <code>AgenticReasonCode<\/code>, for example, <strong>OUT_OF_STOCK<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>messages[].content<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Human-readable message text. The agent shows this to the shopper when <code>type<\/code> is <strong>ERROR<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>messages[].type<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><strong>ERROR<\/strong> blocks checkout. <strong>INFO<\/strong> is advisory and does not block.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>links<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#merchantlink\">MerchantLink<\/a>[]<\/td>\n<td style=\"text-align: left;\">Merchant policy URLs: terms of service, return policy, privacy policy.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>reason<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Machine-readable rejection reason on <strong>422<\/strong> responses. See <a href=\"#error-handling-and-reason-codes\">Error handling and reason codes<\/a>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example success response (HTTP **200**)'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n  \\\"reference\\\": \\\"SESSION-2026-001\\\",\\n  \\\"merchantAccount\\\": \\\"ADYEN_MERCHANT_ACCOUNT\\\",\\n  \\\"lineItems\\\": [\\n    {\\n      \\\"id\\\": \\\"SKU-HEADPHONES-PRO\\\",\\n      \\\"quantity\\\": 1,\\n      \\\"status\\\": \\\"IN_STOCK\\\",\\n      \\\"amount\\\": { \\\"value\\\": 34900, \\\"currency\\\": \\\"USD\\\" },\\n      \\\"taxAmount\\\": { \\\"value\\\": 3141, \\\"currency\\\": \\\"USD\\\" },\\n      \\\"totalAmount\\\": { \\\"value\\\": 38041, \\\"currency\\\": \\\"USD\\\" }\\n    }\\n  ],\\n  \\\"fulfillmentOptions\\\": [\\n    {\\n      \\\"id\\\": \\\"ship_standard\\\",\\n      \\\"type\\\": \\\"shipping\\\",\\n      \\\"title\\\": \\\"Standard (5-7 days)\\\",\\n      \\\"carrier\\\": \\\"UPS\\\",\\n      \\\"amount\\\": { \\\"value\\\": 999, \\\"currency\\\": \\\"USD\\\" },\\n      \\\"total\\\": { \\\"value\\\": 999, \\\"currency\\\": \\\"USD\\\" }\\n    }\\n  ],\\n  \\\"totals\\\": {\\n    \\\"subtotal\\\": { \\\"value\\\": 34900, \\\"currency\\\": \\\"USD\\\" },\\n    \\\"tax\\\": { \\\"value\\\": 3141, \\\"currency\\\": \\\"USD\\\" },\\n    \\\"fulfillment\\\": { \\\"value\\\": 999, \\\"currency\\\": \\\"USD\\\" },\\n    \\\"total\\\": { \\\"value\\\": 39040, \\\"currency\\\": \\\"USD\\\" }\\n  },\\n  \\\"messages\\\": [],\\n  \\\"links\\\": [\\n    {\\n      \\\"type\\\": \\\"terms_of_service\\\",\\n      \\\"url\\\": \\\"https:\\\/\\\/www.your-shop.example.com\\\/legal\\\/terms-of-service\\\"\\n    }\\n  ]\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example error response for an out-of-stock item (HTTP **422**)'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n  \\\"reason\\\": \\\"OUT_OF_STOCK\\\",\\n  \\\"lineItems\\\": [\\n    {\\n      \\\"id\\\": \\\"SKU-HEADPHONES-PRO\\\",\\n      \\\"quantity\\\": 1,\\n      \\\"status\\\": \\\"OUT_OF_STOCK\\\"\\n    }\\n  ],\\n  \\\"messages\\\": [\\n    {\\n      \\\"code\\\": \\\"OUT_OF_STOCK\\\",\\n      \\\"content\\\": \\\"This item is no longer available. Remove it from your cart.\\\",\\n      \\\"type\\\": \\\"ERROR\\\"\\n    }\\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;\"><code>reason<\/code><\/th>\n<th style=\"text-align: left;\"><code>lineItems.status<\/code><\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><strong>200<\/strong><\/td>\n<td style=\"text-align: left;\">None<\/td>\n<td style=\"text-align: left;\"><strong>IN_STOCK<\/strong><\/td>\n<td style=\"text-align: left;\">Session valid. Return <code>totals<\/code>, <code>lineItems<\/code>, and <code>fulfillmentOptions<\/code>. The agent presents these to the shopper.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>422<\/strong><\/td>\n<td style=\"text-align: left;\"><strong>OUT_OF_STOCK<\/strong><\/td>\n<td style=\"text-align: left;\"><strong>OUT_OF_STOCK<\/strong><\/td>\n<td style=\"text-align: left;\">Requested items are fully unavailable.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>422<\/strong><\/td>\n<td style=\"text-align: left;\"><strong>PARTIAL_STOCK<\/strong><\/td>\n<td style=\"text-align: left;\"><strong>PARTIAL_STOCK<\/strong><\/td>\n<td style=\"text-align: left;\">The number of available items is less than the requested number.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>422<\/strong><\/td>\n<td style=\"text-align: left;\"><strong>INVALID_ADDRESS<\/strong><\/td>\n<td style=\"text-align: left;\">\u2014<\/td>\n<td style=\"text-align: left;\">Shipping options do not support the delivery location.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>(Optional) Update session<\/h2>\n<p>Set up the following endpoint: POST <code>\/agentic\/sessions\/{sessionId}<\/code><\/p>\n<p>Adyen makes a request to this endpoint every time the cart changes after the initial create session request. This includes item quantity changes, delivery address updates, fulfillment option selection, or discount code application. The same endpoint path is used as <a href=\"#create-session\">Create session<\/a>. Adyen distinguishes them by whether the <code>sessionId<\/code> already exists in your system.<\/p>\n<div class=\"notices green\">\n<p>Handle duplicate update requests gracefully. Adyen may retry on timeout. Return the same response for the same session state.<\/p>\n<\/div>\n<h3>Adyen request to your server<\/h3>\n<p>When Adyen makes a POST <code>\/agentic\/sessions\/{sessionId}<\/code> request to your server, the request includes the following parameters. The schema is identical to <a href=\"#create-session\">Create session<\/a>. On update requests, fields that have not changed can be omitted.<\/p>\n<p>Path parameter:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>sessionId<\/code><\/td>\n<td style=\"text-align: left;\">The unique session identifier assigned by Adyen.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Request headers:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Header<\/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;\">Adyen-issued bearer token. Validate this token for every request your server receives.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Body 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;\">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 three-letter currency code. Must match the session currency if provided.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems<\/code><\/td>\n<td style=\"text-align: left;\">Object[]<\/td>\n<td style=\"text-align: left;\">Updated item list. Revalidate stock and recompute totals for all items.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems[].quantity<\/code><\/td>\n<td style=\"text-align: left;\">Integer<\/td>\n<td style=\"text-align: left;\">Units requested. Must be <strong>1<\/strong> or more.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems[].id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Product or SKU identifier.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>shoppingPlatform<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Agent platform identifier. Usually unchanged from create.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>deliveryAddress<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#merchantaddress\">MerchantAddress<\/a><\/td>\n<td style=\"text-align: left;\">Updated delivery address. Triggers recalculation of shipping costs and tax.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>fulfillment<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#merchantfulfillment\">MerchantFulfillment<\/a><\/td>\n<td style=\"text-align: left;\">Updated fulfillment selection. Contains <code>selectedFulfillmentOptionId<\/code> chosen by the shopper.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>shopper<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#merchantshopper\">MerchantShopper<\/a><\/td>\n<td style=\"text-align: left;\">Updated shopper contact details.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>discounts<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#merchantdiscountsrequest\">MerchantDiscountsRequest<\/a><\/td>\n<td style=\"text-align: left;\">Discount codes to apply or update.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>affiliateAttribution<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#merchantaffiliateattribution\">MerchantAffiliateAttribution<\/a><\/td>\n<td style=\"text-align: left;\">Affiliate attribution data.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>reference<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Session reference.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example request to update a session with address and fulfillment selection'\" :id=\"'post-update-session-address'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;&quot;,&quot;content&quot;:&quot;curl -X POST https:\\\/\\\/your-agentic-server.example.com\\\/agentic\\\/sessions\\\/cs_1abCd2Ef3GhIjK \\\\\\n-H 'Authorization: Bearer ADYEN_SESSION_TOKEN' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-d '{\\n  \\&quot;currency\\&quot;: \\&quot;USD\\&quot;,\\n  \\&quot;shoppingPlatform\\&quot;: \\&quot;openai\\&quot;,\\n  \\&quot;lineItems\\&quot;: [\\n    {\\n      \\&quot;id\\&quot;: \\&quot;SKU-HEADPHONES-PRO\\&quot;,\\n      \\&quot;quantity\\&quot;: 1\\n    }\\n  ],\\n  \\&quot;deliveryAddress\\&quot;: {\\n    \\&quot;street\\&quot;: \\&quot;123 Market St\\&quot;,\\n    \\&quot;houseNumberOrName\\&quot;: \\&quot;\\&quot;,\\n    \\&quot;city\\&quot;: \\&quot;San Francisco\\&quot;,\\n    \\&quot;stateOrProvince\\&quot;: \\&quot;CA\\&quot;,\\n    \\&quot;country\\&quot;: \\&quot;US\\&quot;,\\n    \\&quot;postalCode\\&quot;: \\&quot;94103\\&quot;\\n  },\\n  \\&quot;fulfillment\\&quot;: {\\n    \\&quot;selectedFulfillmentOptionId\\&quot;: \\&quot;ship_express\\&quot;\\n  }\\n}'&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example request to update a session with a discount code'\" :id=\"'post-update-session-discount'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;&quot;,&quot;content&quot;:&quot;curl -X POST https:\\\/\\\/your-agentic-server.example.com\\\/agentic\\\/sessions\\\/cs_1abCd2Ef3GhIjK \\\\\\n-H 'Authorization: Bearer ADYEN_SESSION_TOKEN' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-d '{\\n  \\&quot;currency\\&quot;: \\&quot;USD\\&quot;,\\n  \\&quot;shoppingPlatform\\&quot;: \\&quot;openai\\&quot;,\\n  \\&quot;lineItems\\&quot;: [\\n    {\\n      \\&quot;id\\&quot;: \\&quot;SKU-HEADPHONES-PRO\\&quot;,\\n      \\&quot;quantity\\&quot;: 1\\n    }\\n  ],\\n  \\&quot;discounts\\&quot;: {\\n    \\&quot;codes\\&quot;: [\\&quot;SUMMER20\\&quot;]\\n  }\\n}'&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h3>Your server response<\/h3>\n<p>The response schema is identical to <a href=\"#your-server-response\">Create session<\/a>. Always return the fully recalculated state \u2014 never return only the changed fields.<\/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;\"><code>reason<\/code><\/th>\n<th style=\"text-align: left;\"><code>lineItems.status<\/code><\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><strong>200<\/strong><\/td>\n<td style=\"text-align: left;\">None<\/td>\n<td style=\"text-align: left;\"><strong>IN_STOCK<\/strong><\/td>\n<td style=\"text-align: left;\">Session updated. Return fully recalculated state. The agent presents updated totals to the shopper.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>422<\/strong><\/td>\n<td style=\"text-align: left;\"><strong>OUT_OF_STOCK<\/strong><\/td>\n<td style=\"text-align: left;\"><strong>OUT_OF_STOCK<\/strong><\/td>\n<td style=\"text-align: left;\">Requested items are fully unavailable.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>422<\/strong><\/td>\n<td style=\"text-align: left;\"><strong>PARTIAL_STOCK<\/strong><\/td>\n<td style=\"text-align: left;\"><strong>PARTIAL_STOCK<\/strong><\/td>\n<td style=\"text-align: left;\">The number of available items is less than the requested number.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>422<\/strong><\/td>\n<td style=\"text-align: left;\"><strong>INVALID_ADDRESS<\/strong><\/td>\n<td style=\"text-align: left;\">\u2014<\/td>\n<td style=\"text-align: left;\">Shipping options do not support the delivery location.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>(Optional) Cancel session<\/h2>\n<p>Set up the following endpoint: POST <code>\/agentic\/sessions\/{sessionId}\/cancel<\/code><\/p>\n<p>Adyen makes a request to this endpoint when the shopper abandons checkout or the agent terminates the session before payment. Use this to release reserved inventory or discard draft orders.<\/p>\n<h3>Adyen request to your server<\/h3>\n<p>When Adyen makes a POST <code>\/agentic\/sessions\/{sessionId}\/cancel<\/code> request to your server, the request includes the following parameters:<\/p>\n<p>Path parameter:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>sessionId<\/code><\/td>\n<td style=\"text-align: left;\">The unique session identifier assigned by Adyen.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Request headers:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Header<\/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;\">Adyen-issued bearer token. Validate this token for every request your server receives.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Body 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;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>reference<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Session reference from the original create or update request. Use to locate your internal session record.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example request from Adyen to cancel a session'\" :id=\"'post-cancel-session'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;&quot;,&quot;content&quot;:&quot;curl -X POST https:\\\/\\\/your-agentic-server.example.com\\\/agentic\\\/sessions\\\/cs_1abCd2Ef3GhIjK\\\/cancel \\\\\\n-H 'Authorization: Bearer ADYEN_SESSION_TOKEN' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-d '{\\n  \\&quot;reference\\&quot;: \\&quot;SESSION-2026-001\\&quot;\\n}'&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h3>Your server response<\/h3>\n<p>No response body is expected. Return the appropriate HTTP status code.<\/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;\"><strong>204<\/strong><\/td>\n<td style=\"text-align: left;\">No Content<\/td>\n<td style=\"text-align: left;\">Session cancelled successfully. No response body expected.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>409<\/strong><\/td>\n<td style=\"text-align: left;\">Conflict<\/td>\n<td style=\"text-align: left;\">Session cannot be cancelled. The session may already be in a terminal state.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>(Optional) Commit session<\/h2>\n<p>Set up the following endpoint: POST <code>\/agentic\/sessions\/{sessionId}\/commit<\/code><\/p>\n<p>Adyen makes a request to this endpoint after the shopper confirms payment, but before Adyen executes authorization. Adyen sends the full session state and payment metadata. A <strong>200<\/strong> response is a binding commitment to fulfill the order at the stated totals \u2014 Adyen proceeds to authorization immediately after.<\/p>\n<div class=\"notices green\">\n<p>This endpoint is only called if you set <code>features.enableCommitSession<\/code> to <strong>true<\/strong> in your <a href=\"#one-time-configuration\">one-time configuration<\/a>. If disabled, Adyen proceeds directly to authorization after the final update session request.<\/p>\n<\/div>\n<div class=\"notices yellow\">\n<p>A <strong>200<\/strong> response is a commitment to fulfill the order at the stated totals. Adyen authorizes payment immediately after. Return <strong>422<\/strong> if you cannot guarantee fulfillment.<\/p>\n<\/div>\n<h3>Adyen request to your server<\/h3>\n<p>When Adyen makes a POST <code>\/agentic\/sessions\/{sessionId}\/commit<\/code> request to your server, the request includes the following parameters:<\/p>\n<p>Path parameter:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>sessionId<\/code><\/td>\n<td style=\"text-align: left;\">The unique session identifier assigned by Adyen.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Request headers:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Header<\/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;\">Adyen-issued bearer token. Validate this token for every request your server receives.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>X-Merchant-Account<\/code><\/td>\n<td style=\"text-align: left;\">The Adyen merchant account for which this session was processed.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Body 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>lineItems<\/code><\/td>\n<td style=\"text-align: left;\">Object[]<\/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;\">Final resolved line items.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems[].quantity<\/code><\/td>\n<td style=\"text-align: left;\">Integer<\/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;\">Resolved quantity for this line item.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems[].id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Product or SKU identifier.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems[].status<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Stock status: <strong>IN_STOCK<\/strong>, <strong>OUT_OF_STOCK<\/strong>, or <strong>PARTIAL_STOCK<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems[].totalAmount<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Final line total (subtotal + tax) in minor currency units.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>billingAddress<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#merchantaddress\">MerchantAddress<\/a><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">The shopper's billing address at checkout completion.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>fulfillmentOptions<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#merchantfulfillment\">MerchantFulfillment<\/a>[]<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Selected fulfillment options.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>totals<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Final session totals. Reconcile against your records \u2014 a mismatch should return <strong>PRICE_MISMATCH<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>totals.subtotal<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Order subtotal before tax and fulfillment.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>totals.tax<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Total tax for the order.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>totals.fulfillment<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Total fulfillment cost.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>totals.total<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Grand total (subtotal + tax + fulfillment).<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>shopper<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#merchantshopper\">MerchantShopper<\/a><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Final shopper details.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>paymentMetadata<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Payment instrument metadata. Use for risk checks.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>paymentMetadata.bin<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Bank identification number (first 6 digits of the card).<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>paymentMetadata.cardAlias<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Hashed card alias for velocity checks.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>paymentMetadata.paymentMethod<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Payment method type, for example, <strong>visa<\/strong>, <strong>mc<\/strong>, <strong>amex<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>marketingConsents<\/code><\/td>\n<td style=\"text-align: left;\">Object[]<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Shopper's marketing consent choices at checkout.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>messages<\/code><\/td>\n<td style=\"text-align: left;\">Object[]<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Any session messages.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>links<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#merchantlink\">MerchantLink<\/a>[]<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Merchant policy links from the session.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>reference<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Session reference.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example request from Adyen to commit a session'\" :id=\"'post-commit-session'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;&quot;,&quot;content&quot;:&quot;curl -X POST https:\\\/\\\/your-agentic-server.example.com\\\/agentic\\\/sessions\\\/cs_8xzQk2TmNpR\\\/commit \\\\\\n-H 'Authorization: Bearer ADYEN_SESSION_TOKEN' \\\\\\n-H 'X-Merchant-Account: ADYEN_MERCHANT_ACCOUNT' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-d '{\\n  \\&quot;lineItems\\&quot;: [\\n    {\\n      \\&quot;id\\&quot;: \\&quot;SKU-HEADPHONES-PRO\\&quot;,\\n      \\&quot;quantity\\&quot;: 1,\\n      \\&quot;status\\&quot;: \\&quot;IN_STOCK\\&quot;,\\n      \\&quot;totalAmount\\&quot;: { \\&quot;value\\&quot;: 38041, \\&quot;currency\\&quot;: \\&quot;USD\\&quot; }\\n    }\\n  ],\\n  \\&quot;totals\\&quot;: {\\n    \\&quot;subtotal\\&quot;: { \\&quot;value\\&quot;: 34900, \\&quot;currency\\&quot;: \\&quot;USD\\&quot; },\\n    \\&quot;tax\\&quot;: { \\&quot;value\\&quot;: 3141, \\&quot;currency\\&quot;: \\&quot;USD\\&quot; },\\n    \\&quot;fulfillment\\&quot;: { \\&quot;value\\&quot;: 999, \\&quot;currency\\&quot;: \\&quot;USD\\&quot; },\\n    \\&quot;total\\&quot;: { \\&quot;value\\&quot;: 39040, \\&quot;currency\\&quot;: \\&quot;USD\\&quot; }\\n  },\\n  \\&quot;paymentMetadata\\&quot;: {\\n    \\&quot;bin\\&quot;: \\&quot;411111\\&quot;,\\n    \\&quot;paymentMethod\\&quot;: \\&quot;visa\\&quot;\\n  }\\n}'&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h3>Your server response<\/h3>\n<p>The success HTTP <strong>200<\/strong> 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;\">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>lineItems<\/code><\/td>\n<td style=\"text-align: left;\">Object[]<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Updated line items if stock or pricing changed during commit.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>messages<\/code><\/td>\n<td style=\"text-align: left;\">Object[]<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Structured messages. Errors block authorization.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>order<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">If you pre-create the order at this point, return it here.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>order.id<\/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 unique order identifier.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>order.checkoutSessionId<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">The originating checkout <code>sessionId<\/code>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>order.permalinkUrl<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Permanent URL to your order details page. The agent presents this to the shopper as their confirmation link.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>reason<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Machine-readable rejection reason on <strong>422<\/strong> responses. See <a href=\"#error-handling-and-reason-codes\">Error handling and reason codes<\/a>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\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;\"><code>reason<\/code><\/th>\n<th style=\"text-align: left;\"><code>lineItems.status<\/code><\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><strong>200<\/strong><\/td>\n<td style=\"text-align: left;\">None<\/td>\n<td style=\"text-align: left;\"><strong>IN_STOCK<\/strong><\/td>\n<td style=\"text-align: left;\">Commit accepted. Adyen proceeds to payment authorization immediately.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>422<\/strong><\/td>\n<td style=\"text-align: left;\"><strong>OUT_OF_STOCK<\/strong><\/td>\n<td style=\"text-align: left;\"><strong>OUT_OF_STOCK<\/strong><\/td>\n<td style=\"text-align: left;\">Requested items are fully unavailable.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>422<\/strong><\/td>\n<td style=\"text-align: left;\"><strong>PARTIAL_STOCK<\/strong><\/td>\n<td style=\"text-align: left;\"><strong>PARTIAL_STOCK<\/strong><\/td>\n<td style=\"text-align: left;\">The number of available items is less than the requested number.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>422<\/strong><\/td>\n<td style=\"text-align: left;\"><strong>PRICE_MISMATCH<\/strong><\/td>\n<td style=\"text-align: left;\">\u2014<\/td>\n<td style=\"text-align: left;\">Totals do not match your records.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Finalize session<\/h2>\n<p>Set up the following endpoint: POST <code>\/agentic\/sessions\/{sessionId}\/finalize<\/code><\/p>\n<p>Adyen makes a request to this endpoint after successful authorization. This is the signal to create the final order and begin fulfillment.<\/p>\n<div class=\"notices green\">\n<p>If you already consume standard Adyen webhook messages with <code>eventCode<\/code>: <strong>AUTHORISATION<\/strong>, you can use those instead of this endpoint. The webhook message includes the same authorization result and additional agentic metadata including <code>sessionId<\/code> and <code>shoppingPlatform<\/code> in <code>additionalData<\/code>. Configure your preference in your <a href=\"#one-time-configuration\">one-time configuration<\/a>.<\/p>\n<\/div>\n<h3>Adyen request to your server<\/h3>\n<p>When Adyen makes a POST <code>\/agentic\/sessions\/{sessionId}\/finalize<\/code> request to your server, the request includes the following parameters:<\/p>\n<p>Path parameter:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>sessionId<\/code><\/td>\n<td style=\"text-align: left;\">The unique session identifier assigned by Adyen.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Request headers:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Header<\/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;\">Adyen-issued bearer token. Validate this token for every request your server receives.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>X-Merchant-Account<\/code><\/td>\n<td style=\"text-align: left;\">The Adyen merchant account for which this session was processed.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Body 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>lineItems<\/code><\/td>\n<td style=\"text-align: left;\">Object[]<\/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;\">Final authorized line items.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems[].quantity<\/code><\/td>\n<td style=\"text-align: left;\">Integer<\/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;\">Resolved quantity for this line item.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems[].id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Product or SKU identifier.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems[].status<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Stock status: <strong>IN_STOCK<\/strong>, <strong>OUT_OF_STOCK<\/strong>, or <strong>PARTIAL_STOCK<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems[].amount<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Unit price multiplied by quantity in minor currency units.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems[].taxAmount<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Tax for this line in minor currency units.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems[].totalAmount<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Final line total (subtotal + tax) in minor currency units.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>billingAddress<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#merchantaddress\">MerchantAddress<\/a><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">The shopper's billing address associated with the authorized payment.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>fulfillmentOptions<\/code><\/td>\n<td style=\"text-align: left;\">Object[]<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Selected fulfillment methods for this order.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>fulfillmentOptions[].id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Unique identifier for the fulfillment option.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>fulfillmentOptions[].type<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Option type, for example, <strong>shipping<\/strong>, <strong>digital<\/strong>, <strong>pickup<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>fulfillmentOptions[].title<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Human-readable name shown to the shopper.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>fulfillmentOptions[].carrier<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">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>fulfillmentOptions[].amount<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Shipping cost before tax in minor currency units.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>totals<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Final authorized totals. Use these to create your order record.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>totals.subtotal<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Order subtotal before tax and fulfillment.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>totals.tax<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Total tax for the order.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>totals.fulfillment<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Total fulfillment cost.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>totals.total<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Grand total (subtotal + tax + fulfillment).<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>shopper<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#merchantshopper\">MerchantShopper<\/a><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Shopper contact details.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>paymentMetadata<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Payment instrument metadata.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>paymentMetadata.paymentMethod<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Payment method used, for example, <strong>visa<\/strong>, <strong>mc<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>paymentMetadata.bin<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Bank identification number (first 6 digits of the card).<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>paymentMetadata.cardAlias<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Tokenized card alias.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>messages<\/code><\/td>\n<td style=\"text-align: left;\">Object[]<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Any session messages.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>links<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#merchantlink\">MerchantLink<\/a>[]<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Merchant policy links from the session.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>reference<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Session reference.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example request from Adyen to finalize a session'\" :id=\"'post-finalize-session'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;&quot;,&quot;content&quot;:&quot;curl -X POST https:\\\/\\\/your-agentic-server.example.com\\\/agentic\\\/sessions\\\/cs_1abCd2Ef3GhIjK\\\/finalize \\\\\\n-H 'Authorization: Bearer ADYEN_SESSION_TOKEN' \\\\\\n-H 'X-Merchant-Account: ADYEN_MERCHANT_ACCOUNT' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-d '{\\n  \\&quot;lineItems\\&quot;: [\\n    {\\n      \\&quot;id\\&quot;: \\&quot;SKU-HEADPHONES-PRO\\&quot;,\\n      \\&quot;quantity\\&quot;: 1,\\n      \\&quot;status\\&quot;: \\&quot;IN_STOCK\\&quot;,\\n      \\&quot;amount\\&quot;: { \\&quot;value\\&quot;: 34900, \\&quot;currency\\&quot;: \\&quot;USD\\&quot; },\\n      \\&quot;taxAmount\\&quot;: { \\&quot;value\\&quot;: 3141, \\&quot;currency\\&quot;: \\&quot;USD\\&quot; },\\n      \\&quot;totalAmount\\&quot;: { \\&quot;value\\&quot;: 38041, \\&quot;currency\\&quot;: \\&quot;USD\\&quot; }\\n    }\\n  ],\\n  \\&quot;totals\\&quot;: {\\n    \\&quot;subtotal\\&quot;: { \\&quot;value\\&quot;: 34900, \\&quot;currency\\&quot;: \\&quot;USD\\&quot; },\\n    \\&quot;fulfillment\\&quot;: { \\&quot;value\\&quot;: 999, \\&quot;currency\\&quot;: \\&quot;USD\\&quot; },\\n    \\&quot;tax\\&quot;: { \\&quot;value\\&quot;: 3141, \\&quot;currency\\&quot;: \\&quot;USD\\&quot; },\\n    \\&quot;total\\&quot;: { \\&quot;value\\&quot;: 39040, \\&quot;currency\\&quot;: \\&quot;USD\\&quot; }\\n  },\\n  \\&quot;fulfillmentOptions\\&quot;: [\\n    {\\n      \\&quot;id\\&quot;: \\&quot;ship_standard\\&quot;,\\n      \\&quot;type\\&quot;: \\&quot;shipping\\&quot;,\\n      \\&quot;title\\&quot;: \\&quot;Standard (5-7 days)\\&quot;,\\n      \\&quot;carrier\\&quot;: \\&quot;UPS\\&quot;,\\n      \\&quot;amount\\&quot;: { \\&quot;value\\&quot;: 999, \\&quot;currency\\&quot;: \\&quot;USD\\&quot; }\\n    }\\n  ],\\n  \\&quot;paymentMetadata\\&quot;: {\\n    \\&quot;paymentMethod\\&quot;: \\&quot;visa\\&quot;,\\n    \\&quot;bin\\&quot;: \\&quot;411111\\&quot;,\\n    \\&quot;cardAlias\\&quot;: \\&quot;alias_ABCD1234\\&quot;\\n  },\\n  \\&quot;reference\\&quot;: \\&quot;SESSION-2026-001\\&quot;\\n}'&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h3>Your server response<\/h3>\n<p>No response body is expected. Return the appropriate HTTP status code.<\/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;\"><strong>204<\/strong><\/td>\n<td style=\"text-align: left;\">No Content<\/td>\n<td style=\"text-align: left;\">Finalization acknowledged. Create the final order record and begin fulfillment.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>(Optional) Complete session (advanced flow)<\/h2>\n<p>Set up the following endpoint: POST <code>\/agentic\/sessions\/{sessionId}\/complete<\/code><\/p>\n<p>If you implement the advanced flow, Adyen makes a request to this endpoint instead of the <a href=\"#finalize-session\">finalize session<\/a> one. Adyen sends the raw payment token, and your server executes payment authorization directly with a POST  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments<\/a> request and handles fulfillment synchronously in one step.<\/p>\n<h3>Adyen request to your server<\/h3>\n<p>When Adyen makes a POST <code>\/agentic\/sessions\/{sessionId}\/complete<\/code> request to your server, the request includes the following parameters:<\/p>\n<p>Path parameter:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>sessionId<\/code><\/td>\n<td style=\"text-align: left;\">The unique session identifier assigned by Adyen.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Request headers:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Header<\/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;\">Adyen-issued bearer token. Validate this token for every request your server receives.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Body 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>paymentData<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/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. Pass <code>paymentData.token<\/code> as <code>paymentMethod.storedPaymentMethodId<\/code> in your POST  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments<\/a> request.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>paymentData.provider<\/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;\">Payment provider. Always <strong>adyen<\/strong> for this integration.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>paymentData.token<\/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 ACP token from Adyen. Pass as <code>paymentMethod.storedPaymentMethodId<\/code> in your POST  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments<\/a> request.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems<\/code><\/td>\n<td style=\"text-align: left;\">Object[]<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Final resolved line items.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems[].quantity<\/code><\/td>\n<td style=\"text-align: left;\">Integer<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Resolved quantity for this line item.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems[].id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Product or SKU identifier.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems[].status<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Stock status: <strong>IN_STOCK<\/strong>, <strong>OUT_OF_STOCK<\/strong>, or <strong>PARTIAL_STOCK<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems[].amount<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Unit price multiplied by quantity in minor currency units.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems[].taxAmount<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Tax for this line in minor currency units.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems[].totalAmount<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Final line total (subtotal + tax) in minor currency units.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>totals<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Final totals. Use <code>totals.total.value<\/code> and <code>totals.total.currency<\/code> as the <code>amount<\/code> in your <code>POST<\/code>  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments<\/a> request.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>totals.subtotal<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Order subtotal before tax and fulfillment.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>totals.tax<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Total tax for the order.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>totals.fulfillment<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Total fulfillment cost.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>totals.total<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Grand total (subtotal + tax + fulfillment).<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>selectedFulfillmentOptionId<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">The fulfillment option the shopper selected.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>billingAddress<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#merchantaddress\">MerchantAddress<\/a><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">The shopper's billing address.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>shopper<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#merchantshopper\">MerchantShopper<\/a><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Shopper contact details.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>marketingConsents<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#merchantmarketingconsent\">MerchantMarketingConsent<\/a>[]<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">The shopper's marketing opt-in or opt-out choices.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>affiliateAttribution<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#merchantaffiliateattribution\">MerchantAffiliateAttribution<\/a><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Attribution data for tracking.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>reference<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Session reference.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example request from Adyen to complete a session'\" :id=\"'post-complete-session'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;&quot;,&quot;content&quot;:&quot;curl -X POST https:\\\/\\\/your-agentic-server.example.com\\\/agentic\\\/sessions\\\/cs_1abCd2Ef3GhIjK\\\/complete \\\\\\n-H 'Authorization: Bearer ADYEN_SESSION_TOKEN' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-d '{\\n  \\&quot;paymentData\\&quot;: {\\n    \\&quot;provider\\&quot;: \\&quot;adyen\\&quot;,\\n    \\&quot;token\\&quot;: \\&quot;PAYMENT_TOKEN_FROM_ADYEN\\&quot;\\n  },\\n  \\&quot;lineItems\\&quot;: [\\n    {\\n      \\&quot;id\\&quot;: \\&quot;SKU-HEADPHONES-PRO\\&quot;,\\n      \\&quot;quantity\\&quot;: 1,\\n      \\&quot;status\\&quot;: \\&quot;IN_STOCK\\&quot;,\\n      \\&quot;amount\\&quot;: { \\&quot;value\\&quot;: 34900, \\&quot;currency\\&quot;: \\&quot;USD\\&quot; },\\n      \\&quot;taxAmount\\&quot;: { \\&quot;value\\&quot;: 3141, \\&quot;currency\\&quot;: \\&quot;USD\\&quot; },\\n      \\&quot;totalAmount\\&quot;: { \\&quot;value\\&quot;: 38041, \\&quot;currency\\&quot;: \\&quot;USD\\&quot; }\\n    }\\n  ],\\n  \\&quot;totals\\&quot;: {\\n    \\&quot;subtotal\\&quot;: { \\&quot;value\\&quot;: 34900, \\&quot;currency\\&quot;: \\&quot;USD\\&quot; },\\n    \\&quot;fulfillment\\&quot;: { \\&quot;value\\&quot;: 999, \\&quot;currency\\&quot;: \\&quot;USD\\&quot; },\\n    \\&quot;tax\\&quot;: { \\&quot;value\\&quot;: 3141, \\&quot;currency\\&quot;: \\&quot;USD\\&quot; },\\n    \\&quot;total\\&quot;: { \\&quot;value\\&quot;: 39040, \\&quot;currency\\&quot;: \\&quot;USD\\&quot; }\\n  },\\n  \\&quot;selectedFulfillmentOptionId\\&quot;: \\&quot;ship_standard\\&quot;,\\n  \\&quot;reference\\&quot;: \\&quot;SESSION-2026-001\\&quot;\\n}'&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<ol>\n<li>Get the information that you need to <a href=\"#payment-request-to-adyen\">make a payment request to Adyen<\/a>.<\/li>\n<\/ol>\n<h3>Your server response<\/h3>\n<p>The success HTTP <strong>200<\/strong> 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>order<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\">The order you created.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>order.id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Your internal order identifier.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>order.checkoutSessionId<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The <code>sessionId<\/code> path parameter.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>order.permalinkUrl<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">The URL where the shopper can view the order.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lineItems<\/code><\/td>\n<td style=\"text-align: left;\">Object[]<\/td>\n<td style=\"text-align: left;\">Final line items for the order.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>messages<\/code><\/td>\n<td style=\"text-align: left;\">Object[]<\/td>\n<td style=\"text-align: left;\">Any messages to surface.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>reason<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\">Machine-readable failure reason if payment or fulfillment failed.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\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;\"><code>reason<\/code><\/th>\n<th style=\"text-align: left;\"><code>lineItems.status<\/code><\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><strong>200<\/strong><\/td>\n<td style=\"text-align: left;\">None<\/td>\n<td style=\"text-align: left;\"><strong>IN_STOCK<\/strong><\/td>\n<td style=\"text-align: left;\">Payment executed and order created. Return the response with the <code>order<\/code> object.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>422<\/strong><\/td>\n<td style=\"text-align: left;\"><strong>PAYMENT_FAILED<\/strong><\/td>\n<td style=\"text-align: left;\">\u2014<\/td>\n<td style=\"text-align: left;\">The payment was not successfully authorized. The POST  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments<\/a> response included an unsuccessful authorization result.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3 id=\"payment-request-to-adyen\">Make the payment request to Adyen<\/h3>\n<ol start=\"2\">\n<li>\n<p>Make a POST  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments<\/a> request, including the information from Adyen's request to your server:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter in payment request<\/th>\n<th style=\"text-align: left;\">Value<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><code>paymentMethod.storedPaymentMethodId<\/code><\/td>\n<td style=\"text-align: left;\">The value from <code>paymentData.token<\/code>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>shopperReference<\/code><\/td>\n<td style=\"text-align: left;\">The <code>sessionId<\/code> path parameter.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>merchantAccount<\/code><\/td>\n<td style=\"text-align: left;\">Your Adyen merchant account.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>amount.value<\/code><\/td>\n<td style=\"text-align: left;\">The value from <code>totals.total.value<\/code>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>amount.currency<\/code><\/td>\n<td style=\"text-align: left;\">The value from <code>totals.total.currency<\/code>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>shopperInteraction<\/code><\/td>\n<td style=\"text-align: left;\"><strong>ContAuth<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>recurringProcessingModel<\/code><\/td>\n<td style=\"text-align: left;\"><strong>UnscheduledCardOnFile<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>reference<\/code><\/td>\n<td style=\"text-align: left;\">Your internal order reference.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<\/ol>\n<h2>(Optional) Events after the purchase<\/h2>\n<p>Make a request to: POST <code>https:\/\/commerce-suite-test.adyen.com\/commerce-suite\/companies\/v1\/{CompanyAccount}\/agentic\/sessions\/{sessionId}\/events<\/code><\/p>\n<p>After the purchase, you can send fulfillment updates to Adyen. The AI agent uses these to support the shopper with post-purchase questions, for example, \"What is the status of my order?\".<\/p>\n<h3>Your request to Adyen<\/h3>\n<p>Path parameters:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter<\/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;\">Your Adyen company account.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>sessionId<\/code><\/td>\n<td style=\"text-align: left;\">The unique session identifier assigned by Adyen.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Request headers:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Header<\/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;\">Adyen-issued bearer token. Validate this token for every request your server receives.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Request body:<\/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>eventCode<\/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 type of event. For example, <strong>ORDER_SHIPPED<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>payload<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/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;\">Event details.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>payload.carrier<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Carrier name, for example, <strong>Example Carrier<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>payload.trackingNumber<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Carrier tracking number.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>payload.trackingUrl<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">URL for the shopper to track their shipment.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example event request'\" :id=\"'post-session-events'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;&quot;,&quot;content&quot;:&quot;curl -X POST https:\\\/\\\/commerce-suite-test.adyen.com\\\/commerce-suite\\\/companies\\\/v1\\\/YOUR_COMPANY_ACCOUNT\\\/agentic\\\/sessions\\\/cs_1abCd2Ef3GhIjK\\\/events \\\\\\n-H 'x-api-key: ADYEN_API_KEY' \\\\\\n-H 'Idempotency-Key: YOUR_IDEMPOTENCY_KEY' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-d '{\\n  \\&quot;eventCode\\&quot;: \\&quot;ORDER_SHIPPED\\&quot;,\\n  \\&quot;payload\\&quot;: {\\n    \\&quot;carrier\\&quot;: \\&quot;Example Carrier\\&quot;,\\n    \\&quot;trackingNumber\\&quot;: \\&quot;carrier_abcd_1234\\&quot;,\\n    \\&quot;trackingUrl\\&quot;: \\&quot;https:\\\/\\\/carrier.example.com\\\/track\\\/carrier_abcd_1234\\&quot;\\n  }\\n}'&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h3>Adyen response<\/h3>\n<p>No response body is expected. You get an HTTP <strong>204<\/strong> acknowledgment.<\/p>\n<h2>Test and go live<\/h2>\n<p>Use the Adyen sandbox to test your server's endpoints end-to-end before going live. The sandbox makes requests to your endpoints exactly like in the live environment.<\/p>\n<h3>Recommended test sequence<\/h3>\n<p>To verify your integration, follow these steps:<\/p>\n<ol>\n<li>\n<p>Register your test endpoints.<\/p>\n<p>Make a POST <code>https:\/\/commerce-suite-test.adyen.com\/commerce-suite\/companies\/v1\/{CompanyAccount}\/agentic\/configuration<\/code> request with your test base URL and enable the endpoints you want to test.<\/p>\n<\/li>\n<li>\n<p>Trigger a create session request.<\/p>\n<p>Adyen makes a POST <code>\/agentic\/sessions\/{sessionId}<\/code> request. Your server responds with <code>lineItems<\/code>, <code>fulfillmentOptions<\/code>, and <code>totals<\/code>.<\/p>\n<\/li>\n<li>\n<p>Test an update with address and fulfillment selection.<\/p>\n<p>Adyen makes a POST <code>\/agentic\/sessions\/{sessionId}<\/code> request with an updated body. Confirm that your server returns recalculated totals.<\/p>\n<\/li>\n<li>\n<p>Test stock error handling.<\/p>\n<p>Return a <strong>422<\/strong> response with <code>reason<\/code>: <strong>OUT_OF_STOCK<\/strong> and <code>messages[]<\/code>.<\/p>\n<\/li>\n<li>\n<p>Test commit (if enabled).<\/p>\n<p>Adyen makes a POST <code>\/agentic\/sessions\/{sessionId}\/commit<\/code> request. Your server responds with <strong>200 OK<\/strong> to accept, or <strong>422<\/strong> with <code>reason<\/code>: <strong>RISK_REJECTED<\/strong> to reject.<\/p>\n<\/li>\n<li>\n<p>Test finalize.<\/p>\n<p>Adyen makes a POST <code>\/agentic\/sessions\/{sessionId}\/finalize<\/code> request. Your server responds with <strong>204 No Content<\/strong>. Verify that the order is created in your system.<\/p>\n<\/li>\n<\/ol>\n<h2>Go live<\/h2>\n<ol>\n<li>\n<p>Before you go live, verify the following:<\/p>\n<ul>\n<li>You tested your integration end-to-end, including error scenarios.<\/li>\n<li>Your server validates the <code>Authorization<\/code> header from each inbound request from Adyen.<\/li>\n<li>Your server's endpoints respond within five seconds, under the load of the expected volume of requests in the live environment.<\/li>\n<li>Your server's <a href=\"#create-session\">create session<\/a> and <a href=\"#update-session\">update session<\/a> endpoints return <strong>200<\/strong> with the following:\n<ul>\n<li><code>lineItems<\/code> <\/li>\n<li><code>fulfillmentOptions<\/code><\/li>\n<li><code>totals<\/code><\/li>\n<\/ul><\/li>\n<li>Your server's <a href=\"#commit-session\">commit-session<\/a> endpoint validates the <code>X-Merchant-Account<\/code> header in the request.<\/li>\n<li>Your server's <a href=\"#finalize-session\">finalize session<\/a> endpoint:\n<ul>\n<li>Validadtes the <code>X-Merchant-Account<\/code> header in the request.<\/li>\n<li>Returns <strong>204 No Content<\/strong> (no response body).<\/li>\n<\/ul><\/li>\n<li>Your server's <a href=\"#cancel-session\">cancel session<\/a> endpoint returns:\n<ul>\n<li><strong>204<\/strong>: For a successful request. <\/li>\n<li><strong>409<\/strong>: If the session cannot be cancelled.<\/li>\n<\/ul><\/li>\n<li>For each <strong>422<\/strong> response from your server:\n<ul>\n<li>The response body includes the following <code>MerchantMessage<\/code> parameters:<\/li>\n<li><code>code<\/code><\/li>\n<li><code>content<\/code> <\/li>\n<li><code>type<\/code> <\/li>\n<li>The response body includes the <code>AgenticReasonCode<\/code> object.<\/li>\n<\/ul><\/li>\n<li>Your server's <a href=\"#complete-session\">complete session<\/a> endpoint (advanced flow):\n<ul>\n<li>Includes an <code>order.permalinkUrl<\/code> that is a stable and publicly accessible.<\/li>\n<li>The <code>marketingConsents<\/code> object applies to shopper preferences is stored in a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Persistence_(computer_science)\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">persistent<\/a> way.<\/li>\n<li>The <code>affiliateAttribution<\/code> data is stored for reporting.<\/li>\n<\/ul><\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Make the one-time configuration request to Adyen, using the live endpoint URL: <code>https:\/\/commerce-suite-live.adyen.com\/commerce-suite\/companies\/v1\/{CompanyAccount}\/agentic\/configuration<\/code>. <\/p>\n<\/li>\n<\/ol>\n<h2>Sequence diagrams<\/h2>\n<p>Standard flow (ACP):<\/p>\n<div id=\"mermaid-6a35259572495-wrapper\"><div id=\"mermaid-6a35259572495\" class=\"mermaid-shortcode loading\">CnNlcXVlbmNlRGlhZ3JhbQogICAgcGFydGljaXBhbnQgUyBhcyBTaG9wcGVyCiAgICBwYXJ0aWNpcGFudCBBIGFzIEFJIGFnZW50CiAgICBwYXJ0aWNpcGFudCBWIGFzIEFnZW50J3MgdG9rZW4gdmF1bHQKICAgIHBhcnRpY2lwYW50IFAgYXMgQWR5ZW4gCiAgICBwYXJ0aWNpcGFudCBNIGFzIFlvdXIgc2VydmVyCgogICAgTm90ZSBvdmVyIFMsIE06IENoZWNrb3V0IGNyZWF0aW9uCiAgICBTIC0+PiBBOiBNZXNzYWdlOiAiSSB3YW50IHRvIGJ1eSB0aGVzZSBoZWFkcGhvbmVzIgogICAgQSAtPj4gUDogL2NoZWNrb3V0X3Nlc3Npb24KICAgIFAgLT4+IE06IFBPU1QgL2FnZW50aWMvc2Vzc2lvbnMve3Nlc3Npb25JZH0KICAgIE0gLS0+PiBQOiBIVFRQIDIwMCByZXNwb25zZSB3aXRoIGJvZHkgaW5jbHVkaW5nIHRvdGFscywgc2hpcHBpbmcsIGFuZCBpbnZlbnRvcnkgaW5mbwogICAgUCAtLT4+IEE6IHNlc3Npb25JZCBhbmQgb3JkZXIgaW5mb3JtYXRpb24KICAgIEEgLS0+PiBTOiBTaG93IG9yZGVyIGluZm8gKGxpa2UgcHJpY2UgYW5kIGludmVudG9yeSkKCiAgICBOb3RlIG92ZXIgUywgTTogUGF5bWVudCBhbmQgZmluYWwgdmFsaWRhdGlvbgogICAgUyAtPj4gQTogIlBheSBub3ciCiAgICBBIC0+PiBWOiBJbnN0cnVjdCB0byBkZWxlZ2F0ZSBwYXltZW50IGZvciB0aGUgc2Vzc2lvbgogICAgViAtPj4gUDogL2RlbGVnYXRlX3BheW1lbnQgd2l0aCBzZWN1cmUgZGF0YQogICAgUCAtLT4+IFY6IFJldHVybiB1bmlxdWUgdHJhbnNhY3Rpb24gdG9rZW4KICAgIFYgLS0+PiBBOiBSZXR1cm4gdHJhbnNhY3Rpb24gdG9rZW4KCiAgICBOb3RlIG92ZXIgUywgTTogQ29tbWl0LCBhdXRob3JpemUsIGFuZCBmaW5hbGl6ZQogICAgQSAtPj4gUDogUE9TVCAvY2hlY2tvdXRfc2Vzc2lvbi97c2Vzc2lvbklkfS9jb21wbGV0ZSBpbmNsdWRpbmcgdW5pcXVlIHRyYW5zYWN0aW9uIHRva2VuCiAgICBQIC0+PiBNOiBQT1NUL2FnZW50aWMvc2Vzc2lvbnMve2lkfS9jb21taXQKICAgIE0gLS0+PiBQOiBIVFRQIDIwMCByZXNwb25zZQoKICAgIFAgLT4+IFA6IEV4ZWN1dGUgcGF5bWVudCBhdXRob3JpemF0aW9uCiAgICBQIC0+PiBNOiBQT1NUIC9hZ2VudGljL3Nlc3Npb25zL3tzZXNzaW9uSWR9L2ZpbmFsaXplIAogICAgTSAtLT4+IFA6IEhUVFAgMjAwIHJlc3BvbnNlIAogICAgTSAtPj4gTTogVHJpZ2dlciBvcmRlciBjcmVhdGlvbgoKICAgIFAgLS0+PiBBOiBSZXR1cm4gZmluYWwgc3RhdHVzOiBTVUNDRVNTCiAgICBBIC0tPj4gUzogIk9yZGVyIGNvbmZpcm1lZC4gUmVmZXJlbmNlOiBVTklRVUVfT1JERVJfUkVGIgoKICAgIE5vdGUgb3ZlciBTLCBNOiBBZnRlciB0aGUgcHVyY2hhc2UKICAgIE0gLT4+IFA6IFBPU1QgL2FnZW50aWMvc2Vzc2lvbnMve3Nlc3Npb25JZH0vZXZlbnRzIHdpdGggdHJhY2tpbmcgaW5mb3JtYXRpb24KICAgIFAgLT4+IEE6IFNlbmQgdHJhY2tpbmcgaW5mb3JtYXRpb24KICAgIEEgLS0+PiBTOiAiWW91ciBwYWNrYWdlIGlzIG9uIHRoZSB3YXkhIFRyYWNraW5nIGxpbms6IFNISVBQSU5HX1RSQUNLSU5HX1VSTCIK<\/div><\/div>\n<p>Advanced flow (ACP):<\/p>\n<div id=\"mermaid-6a3525957249f-wrapper\"><div id=\"mermaid-6a3525957249f\" class=\"mermaid-shortcode loading\">CnNlcXVlbmNlRGlhZ3JhbQogICAgcGFydGljaXBhbnQgUyBhcyBTaG9wcGVyCiAgICBwYXJ0aWNpcGFudCBBIGFzIEFJIGFnZW50CiAgICBwYXJ0aWNpcGFudCBWIGFzIEFnZW50J3MgdG9rZW4gdmF1bHQKICAgIHBhcnRpY2lwYW50IFAgYXMgQWR5ZW4KICAgIHBhcnRpY2lwYW50IE0gYXMgWW91ciBzZXJ2ZXIKCiAgICBOb3RlIG92ZXIgUywgTTogQ2hlY2tvdXQgY3JlYXRpb24KICAgIFMgLT4+IEE6IE1lc3NhZ2U6ICJJIHdhbnQgdG8gYnV5IHRoZXNlIGhlYWRwaG9uZXMiCiAgICBBIC0+PiBQOiAvY2hlY2tvdXRfc2Vzc2lvbgogICAgUCAtPj4gTTogUE9TVCAvYWdlbnRpYy9zZXNzaW9ucy97c2Vzc2lvbklkfQogICAgTSAtLT4+IFA6IEhUVFAgMjAwIHJlc3BvbnNlIHdpdGggYm9keSBpbmNsdWRpbmcgdG90YWxzLCBzaGlwcGluZywgYW5kIGludmVudG9yeSBpbmZvCiAgICBQIC0tPj4gQTogc2Vzc2lvbklkIGFuZCBvcmRlciBpbmZvcm1hdGlvbgogICAgQSAtLT4+IFM6IFNob3cgb3JkZXIgaW5mbyAobGlrZSBwcmljZSBhbmQgaW52ZW50b3J5KQoKICAgIE5vdGUgb3ZlciBTLCBNOiBQYXltZW50IGFuZCBmaW5hbCB2YWxpZGF0aW9uCiAgICBTIC0+PiBBOiAiUGF5IG5vdyIKICAgIEEgLT4+IFY6IEluc3RydWN0IHRvIGRlbGVnYXRlIHBheW1lbnQgZm9yIHRoZSBzZXNzaW9uCiAgICBWIC0+PiBQOiAvZGVsZWdhdGVfcGF5bWVudCB3aXRoIHNlY3VyZSBkYXRhCiAgICBQIC0tPj4gVjogUmV0dXJuIHVuaXF1ZSB0cmFuc2FjdGlvbiB0b2tlbgogICAgViAtLT4+IEE6IFJldHVybiB0cmFuc2FjdGlvbiB0b2tlbgoKICAgIE5vdGUgb3ZlciBTLCBNOiBDb21wbGV0ZSAobWVyY2hhbnQtZXhlY3V0ZWQgcGF5bWVudCkKICAgIEEgLT4+IFA6IFBPU1QgL2NoZWNrb3V0X3Nlc3Npb24ve3Nlc3Npb25JZH0vY29tcGxldGUgaW5jbHVkaW5nIHVuaXF1ZSB0cmFuc2FjdGlvbiB0b2tlbgogICAgUCAtPj4gTTogUE9TVCAvYWdlbnRpYy9zZXNzaW9ucy97c2Vzc2lvbklkfS9jb21wbGV0ZSB3aXRoIHRyYW5zYWN0aW9uIHRva2VuCiAgICBNIC0+PiBQOiBQT1NUIC9wYXltZW50cyB3aXRoIHRyYW5zYWN0aW9uIHRva2VuCiAgICBQIC0tPj4gTTogUmV0dXJuIHBheW1lbnQgcmVzdWx0IChzdWNjZXNzZnVsIGF1dGhvcml6YXRpb24pCiAgICBNIC0+PiBNOiBUcmlnZ2VyIG9yZGVyIGNyZWF0aW9uCiAgICBNIC0tPj4gUDogUmV0dXJuIHBheW1lbnQgcmVzdWx0CgogICAgUCAtLT4+IEE6IFJldHVybiBmaW5hbCBzdGF0dXM6IFNVQ0NFU1MKICAgIEEgLS0+PiBTOiAiT3JkZXIgY29uZmlybWVkLiBSZWZlcmVuY2U6IFVOSVFVRV9PUkRFUl9SRUYiCgogICAgTm90ZSBvdmVyIFMsIE06IEFmdGVyIHRoZSBwdXJjaGFzZQogICAgTSAtPj4gUDogUE9TVCAvYWdlbnRpYy9zZXNzaW9ucy97c2Vzc2lvbklkfS9ldmVudHMgd2l0aCB0cmFja2luZyBpbmZvcm1hdGlvbgogICAgUCAtPj4gQTogU2VuZCB0cmFja2luZyBpbmZvcm1hdGlvbgogICAgQSAtLT4+IFM6ICJZb3VyIHBhY2thZ2UgaXMgb24gdGhlIHdheSEgVHJhY2tpbmcgbGluazogU0hJUFBJTkdfVFJBQ0tJTkdfVVJMIgo=<\/div><\/div>\n<p>Standard flow (UCP):<\/p>\n<div id=\"mermaid-6a352595724a2-wrapper\"><div id=\"mermaid-6a352595724a2\" class=\"mermaid-shortcode loading\">CnNlcXVlbmNlRGlhZ3JhbQogICAgcGFydGljaXBhbnQgUyBhcyBTaG9wcGVyCiAgICBwYXJ0aWNpcGFudCBBIGFzIEFJIGFnZW50CiAgICBwYXJ0aWNpcGFudCBWIGFzIEFnZW50J3MgdG9rZW4gdmF1bHQKICAgIHBhcnRpY2lwYW50IFAgYXMgQWR5ZW4KICAgIHBhcnRpY2lwYW50IE0gYXMgWW91ciBzZXJ2ZXIKCiAgICBOb3RlIG92ZXIgUywgTTogQ2hlY2tvdXQgY3JlYXRpb24KICAgIFMgLT4+IEE6IE1lc3NhZ2U6ICJJIHdhbnQgdG8gYnV5IHRoZXNlIGhlYWRwaG9uZXMiCiAgICBBIC0+PiBQOiBQT1NUIC9jaGVja291dCAobGluZV9pdGVtcywgYnV5ZXIpCiAgICBQIC0+PiBNOiBQT1NUIC9hZ2VudGljL3Nlc3Npb25zL3tzZXNzaW9uSWR9CiAgICBNIC0tPj4gUDogSFRUUCAyMDAgcmVzcG9uc2Ugd2l0aCBib2R5IGluY2x1ZGluZyB0b3RhbHMgYW5kIHNoaXBwaW5nIGluZm8KICAgIFAgLS0+PiBBOiBVQ1AgY2hlY2tvdXQgb2JqZWN0CiAgICBBIC0tPj4gUzogU2hvdyBvcmRlciBpbmZvCgogICAgTm90ZSBvdmVyIFMsIE06IFRva2VuaXphdGlvbiBhbmQgY29tcGxldGlvbgogICAgUyAtPj4gQTogIlBheSBub3ciCiAgICBBIC0+PiBWOiBSZXRyaWV2ZSByYXcgcGF5bWVudCBjcmVkZW50aWFscwogICAgViAtLT4+IEE6IFNlY3VyZSBjYXJkIGRhdGEKCiAgICBBIC0+PiBQOiBQT1NUIC9jaGVja291dC97c2Vzc2lvbklkfS9jb21wbGV0ZSB3aXRoIFVDUCB0b2tlbgoKICAgIFAgLT4+IFY6IFBPU1QgL2RldG9rZW5pemUgd2l0aCBVQ1AgdG9rZW4KICAgIFYgLS0+PiBQOiBDYXJkIGRldGFpbHMKCiAgICBOb3RlIG92ZXIgUywgTTogQ29tbWl0LCBhdXRob3JpemUsIGFuZCBmaW5hbGl6ZQogICAgUCAtPj4gTTogUE9TVCAvYWdlbnRpYy9zZXNzaW9ucy97c2Vzc2lvbklkfS9jb21taXQKICAgIE0gLS0+PiBQOiBIVFRQIDIwMCByZXNwb25zZQoKICAgIFAgLT4+IFA6IEV4ZWN1dGUgcGF5bWVudCBhdXRob3JpemF0aW9uCgogICAgUCAtPj4gTTogUE9TVCAvYWdlbnRpYy9zZXNzaW9ucy97c2Vzc2lvbklkfS9maW5hbGl6ZQogICAgTSAtPj4gTTogVHJpZ2dlciBvcmRlciBjcmVhdGlvbgoKICAgIFAgLS0+PiBBOiBVQ1AgY2hlY2tvdXQgb2JqZWN0IChzdGF0dXM6IGNvbXBsZXRlZCkKICAgIEEgLS0+PiBTOiAiT3JkZXIgY29uZmlybWVkLiBSZWZlcmVuY2U6IFVOSVFVRV9PUkRFUl9SRUYiCgogICAgTm90ZSBvdmVyIFMsIE06IEFmdGVyIHRoZSBwdXJjaGFzZQogICAgTSAtPj4gUDogUE9TVCAvYWdlbnRpYy9zZXNzaW9ucy97c2Vzc2lvbklkfS9ldmVudHMgd2l0aCB0cmFja2luZyBpbmZvcm1hdGlvbgogICAgUCAtPj4gQTogU2VuZCB0cmFja2luZyBpbmZvcm1hdGlvbgogICAgQSAtLT4+IFM6ICJZb3VyIHBhY2thZ2UgaXMgb24gdGhlIHdheSEgVHJhY2tpbmcgbGluazogU0hJUFBJTkdfVFJBQ0tJTkdfVVJMIgo=<\/div><\/div>\n<h2>Schema reference<\/h2>\n<p>The following shows the objects used in the request and response bodies.<\/p>\n<h3>MerchantItemRequest<\/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;\">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>id<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Product or 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;\"><\/td>\n<td style=\"text-align: left;\">Units requested. Must be <strong>1<\/strong> or more.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>MerchantAddress<\/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;\">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>street<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Primary street name.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>houseNumberOrName<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">House number or building name.<\/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;\"><\/td>\n<td style=\"text-align: left;\">City name.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>stateOrProvince<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">State or province code (<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<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;\"><\/td>\n<td style=\"text-align: left;\"><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>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>postalCode<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">ZIP or postal code.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>MerchantShopper<\/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;\">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>email<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">The shopper's email address.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>firstName<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">The shopper's first name.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>lastName<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">The shopper's last name.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>phoneNumber<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">The shopper's phone number.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>MerchantFulfillment<\/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;\">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>selectedFulfillmentOptionId<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">The <code>id<\/code> of the fulfillment option the shopper selected.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>MerchantDiscountsRequest<\/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;\">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>codes<\/code><\/td>\n<td style=\"text-align: left;\">String[]<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Discount or promo codes submitted by the shopper.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>MerchantDiscountsResponse<\/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;\">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>codes<\/code><\/td>\n<td style=\"text-align: left;\">String[]<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">All submitted codes echoed back.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>applied<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#merchantapplieddiscount\">MerchantAppliedDiscount[]<\/a><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Successfully applied discounts.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>rejected<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#merchantrejecteddiscount\">MerchantRejectedDiscount[]<\/a><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Rejected codes with reason.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>MerchantAppliedDiscount<\/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;\">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>id<\/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;\">Unique identifier for this applied discount.<\/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;\"><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;\">Total discount amount 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=\"#merchantcoupon\">MerchantCoupon<\/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 coupon definition.<\/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;\"><\/td>\n<td style=\"text-align: left;\">The discount code string.<\/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;\"><\/td>\n<td style=\"text-align: left;\"><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<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">How the discount is allocated: <strong>each<\/strong> (per line item) or <strong>across<\/strong> (proportional).<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>allocations<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#merchantdiscountallocation\">MerchantDiscountAllocation[]<\/a><\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Per-line-item breakdown. Each entry has <code>path<\/code> (JSON pointer) 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;\"><\/td>\n<td style=\"text-align: left;\">Discount validity start.<\/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;\"><\/td>\n<td style=\"text-align: left;\">Discount validity end.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>MerchantDiscountAllocation<\/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;\">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>amount<\/code><\/td>\n<td style=\"text-align: left;\">Integer (int64)<\/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;\">Discount amount allocated to this line item in minor currency units.<\/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;\"><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;\">JSON pointer to the line item, for example, <strong>\/lineItems\/0<\/strong>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>MerchantRejectedDiscount<\/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;\">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>code<\/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 discount code that was rejected.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>reason<\/code><\/td>\n<td style=\"text-align: left;\"><a href=\"#merchantdiscounterrorcode\">MerchantDiscountErrorCode<\/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;\">Machine-readable rejection reason.<\/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;\"><\/td>\n<td style=\"text-align: left;\">Human-readable explanation. Surface this to the shopper.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>MerchantDiscountErrorCode<\/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;\"><strong>discount_code_expired<\/strong><\/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;\"><strong>discount_code_invalid<\/strong><\/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;\"><strong>discount_code_already_applied<\/strong><\/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;\"><strong>discount_code_combination_disallowed<\/strong><\/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;\"><strong>discount_code_minimum_not_met<\/strong><\/td>\n<td style=\"text-align: left;\">Cart total does not meet the minimum order value for this code.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>discount_code_user_not_logged_in<\/strong><\/td>\n<td style=\"text-align: left;\">Code requires the shopper to be authenticated.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>discount_code_user_ineligible<\/strong><\/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;\"><strong>discount_code_usage_limit_reached<\/strong><\/td>\n<td style=\"text-align: left;\">Maximum redemption count has been reached.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>MerchantCoupon<\/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;\">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>id<\/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;\">Unique coupon identifier.<\/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;\"><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;\">Human-readable coupon name.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>percentOff<\/code><\/td>\n<td style=\"text-align: left;\">Integer (int32)<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Percentage discount (0\u2013100).<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>amountOff<\/code><\/td>\n<td style=\"text-align: left;\">Integer (int64)<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">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;\"><\/td>\n<td style=\"text-align: left;\">Currency of <code>amountOff<\/code> (<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<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\"><strong>once<\/strong>, <strong>repeating<\/strong>, or <strong>forever<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>durationInMonths<\/code><\/td>\n<td style=\"text-align: left;\">Integer (int32)<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Number of months when <code>duration<\/code> is <strong>repeating<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>maxRedemptions<\/code><\/td>\n<td style=\"text-align: left;\">Integer (int32)<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Maximum redemption count.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>timesRedeemed<\/code><\/td>\n<td style=\"text-align: left;\">Integer (int32)<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">How many 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;\"><\/td>\n<td style=\"text-align: left;\">Arbitrary string key-value metadata.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>MerchantMarketingConsent<\/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;\">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>channel<\/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;\">Marketing channel, for example, <strong>email<\/strong>, <strong>sms<\/strong>, <strong>push<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>optedIn<\/code><\/td>\n<td style=\"text-align: left;\">Boolean<\/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 shopper's consent decision. <strong>true<\/strong> = opted in; <strong>false<\/strong> = opted out.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>MerchantMarketingConsentOption<\/h3>\n<p>Return these in your session response to surface consent options to the shopper through the agent.<\/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>channel<\/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;\">Channel identifier, for example, <strong>email<\/strong>, <strong>sms<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>displayText<\/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;\">Localized consent prompt to show to the shopper.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>privacyPolicyUrl<\/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;\">URL to your privacy policy for this channel.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>isSubscribed<\/code><\/td>\n<td style=\"text-align: left;\">Boolean<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Pre-populated subscription state for returning shoppers.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>MerchantAffiliateAttribution<\/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;\">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>provider<\/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;\">Attribution provider identifier, for example, <strong>impact.com<\/strong>.<\/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;\"><\/td>\n<td style=\"text-align: left;\">Provider-issued attribution token.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>publisherId<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Affiliate or publisher identifier.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>campaignId<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Campaign identifier.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>creativeId<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Creative identifier.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>subId<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">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<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Attribution touchpoint: <strong>first<\/strong> (session create) or <strong>last<\/strong> (session complete).<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>source<\/code><\/td>\n<td style=\"text-align: left;\">Object<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">Source context. Required field: <code>type<\/code> (<strong>url<\/strong>, <strong>platform<\/strong>, or <strong>unknown<\/strong>). Optional: <code>url<\/code>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>issuedAt<\/code><\/td>\n<td style=\"text-align: left;\">String (date-time)<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">When the attribution token was issued.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>expiresAt<\/code><\/td>\n<td style=\"text-align: left;\">String (date-time)<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">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;\"><\/td>\n<td style=\"text-align: left;\">Arbitrary key-value metadata.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>MerchantLink<\/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;\">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>type<\/code><\/td>\n<td style=\"text-align: left;\">String<\/td>\n<td style=\"text-align: left;\"><\/td>\n<td style=\"text-align: left;\">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;\"><\/td>\n<td style=\"text-align: left;\">Fully qualified URL.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>","url":"https:\/\/docs.adyen.com\/online-payments\/agentic-commerce\/merchant\/agentic-cart-api-integration","articleFields":{"description":"Enable AI agents to process payments through Adyen.","robots":"noindex,nofollow","feedback_component":true,"filters_component":false,"decision_tree":"[]","page_id":"80c1efef-1b1a-4fc1-9803-d887fb8b6f36"},"algolia":{"url":"https:\/\/docs.adyen.com\/online-payments\/agentic-commerce\/merchant\/agentic-cart-api-integration","title":"Agentic Cart API integration","content":"When a shopper uses an AI agent to make a purchase, the AI agent platform communicates with Adyen to initiate payments on behalf of shoppers. Adyen translates the information to be able to communicate with you. To enable Adyen to process payments for AI-agent-initiated transactions with you, you must create a server with endpoints that Adyen can make requests to. Adyen communicates with your server so that you do not need to integrate with multiple agent platforms.\nRequirements\n\n\n\nRequirement\nDescription\n\n\n\n\nIntegration type\nAn existing online payments integration.\n\n\n\nHow it works\nFor this integration, your server must do the following:\n\nMake requests to Adyen.\nExpose endpoints that Adyen makes requests to.\n\nOne-time configuration\nYou must do a one-time configuration register your server's endpoints and declare which endpoints you want Adyen to make request to. \nAdyen requests to your server\nAfter you configure your server's endpoints, Adyen can make requests to them. You must set up your endpoints to do the following, so that Adyen can make requests to them:\n\nCreate session: Initialize a checkout session with items, shopper, and fulfillment details.\nUpdate session (optional): Update items, address, or fulfillment selection and recalculate totals.\nCommit session (optional): Run a final price or stock check before Adyen authorizes the payment.\nCancel session (optional): Release reserved inventory when the shopper abandons checkout.\nFinalize session: Receive the authorization result and trigger order creation.\nComplete session (optional): Receive the payment token and make the payment request to Adyen directly.\n\nResponse latency: Your server must respond to Adyen's requests within five seconds. Otherwise, we treat timeouts as errors.\nPossible flows:\n\nStandard: Adyen makes a request to finalize the session, and you fulfill the order.\nAdvanced: We strongly recommend that you only use this flow if you must have direct control of the payment request. Adyen makes a request to complete the session and gives you a payment token. You make a payment request to Adyen. \n\nAfter purchase events\nAfter a purchase is finished, you can optionally send a request to Adyen to give order information to the agent (for example, shipping tracking).\nOne-time configuration\nRegister your server's base URL and declare which endpoints you want Adyen to make request to. You can update this configuration at any time without downtime.\nUse the following endpoint URL:\n\n\n\nEnvironment\nEndpoint URL\n\n\n\n\nTest\nhttps:\/\/commerce-suite-test.adyen.com\/commerce-suite\/companies\/v1\/{CompanyAccount}\/agentic\/configuration\n\n\nLive\nhttps:\/\/commerce-suite-live.adyen.com\/commerce-suite\/companies\/v1\/{CompanyAccount}\/agentic\/configuration\n\n\n\nMake a POST \/agentic\/configuration request, including the following parameters:\nRequest headers:\n\n\n\nHeader\nDescription\n\n\n\n\nx-api-key\nYour Adyen API key from your Adyen company account.\n\n\nIdempotency-Key\nA unique identifier for the request.\n\n\n\nRequest body:\n\n\n\nParameter\nType\nRequired\nDescription\n\n\n\n\nbaseUrl\nString\n\nYour server's base URL. Adyen appends endpoint paths to this URL. For example: your-agentic-server.example.com.\n\n\nsecurity.apiKey\nString\n\nThe API key that Adyen includes in the Authorization header on every callback to your server. Validate it on every inbound request and reject anything that does not match.\n\n\nfeatures.enableCommitSession\nBoolean\n\nIf true, Adyen makes a request to POST \/sessions\/{sessionId}\/commit before authorizing. Use this to run a final price or stock check before the card is charged. Default: false.\n\n\nfeatures.enableCancelSession\nBoolean\n\nIf true, Adyen makes a request to POST \/sessions\/{sessionId}\/cancel when an agent cancels a session. Use this to release reserved inventory. Default: false.\n\n\nfeatures.enableFinalizeSession\nBoolean\n\nIf true, Adyen makes a request to POST \/sessions\/{sessionId}\/finalize after successful authorization. This is your fulfillment trigger. Default: true.\n\n\nfeatures.enableCompleteSession\nBoolean\n\nAdvanced flow only. If true, Adyen makes a request to POST \/sessions\/{sessionId}\/complete with the raw payment token. Your server makes a POST \/payments request directly. Leave false unless you need to own the authorization step. Default: false.\n\n\n\n\n    \n\n\nNever expose your security.apiKey in agent-readable context or client-side code. This key is your primary mechanism for confirming that a request originates from Adyen.\n\nCreate session\nSet up the following endpoint: POST \/agentic\/sessions\/{sessionId}\nAdyen makes a request to this endpoint when an AI agent initiates a new checkout session. This is the first request including the  sessionId in the path. Your server must respond with authoritative totals, stock status, and available fulfillment options. Use the sessionId to create a draft order record in your system if needed.\nAdyen request to your server\nWhen Adyen makes a POST \/agentic\/sessions\/{sessionId} request to your server, the request includes the following parameters:\nPath parameter: \n\n\n\nParameter\nDescription\n\n\n\n\nsessionId\nThe unique session identifier assign by Adyen. Use this to create or update a draft order in your system.\n\n\n\nRequest headers:\n\n\n\nHeader\nDescription\n\n\n\n\nAuthorization\nAdyen-issued bearer token. Validate this token for every request your server receives.\n\n\n\nRequest body:\n\n\n\nParameter\nType\nRequired\nDescription\n\n\n\n\ncurrency\nString (ISO 4217)\n\nThe three-letter currency code, for example, USD, EUR, GBP.\n\n\nlineItems\n\n  MerchantItemRequest[]\n\n\nItems requested by the agent. Each item requires an id and quantity of 1 or more.\n\n\nshoppingPlatform\nString\n\nAgent platform identifier, for example, openai, google, meta.\n\n\ndeliveryAddress\n\n  MerchantAddress\n\n\nThe shopper's delivery address. Required to compute shipping and address-level tax.\n\n\nfulfillment\n\n  MerchantFulfillment\n\n\nContains selectedFulfillmentOptionId if the shopper has selected a shipping tier.\n\n\nshopper\n\n  MerchantShopper\n\n\nShopper contact details: email, firstName, lastName, phoneNumber.\n\n\ndiscounts\n\n  MerchantDiscountsRequest\n\n\nDiscount codes submitted by the shopper. Validate and return applied or rejected results.\n\n\naffiliateAttribution\n\n  MerchantAffiliateAttribution\n\n\nAffiliate attribution data passed through from the agent.\n\n\nreference\nString\n\nYour internal reference for this session. Echo back in the response.\n\n\nlineItems[].quantity\nInteger\n\nUnits requested. Must be 1 or more.\n\n\nlineItems[].id\nString\n\nProduct or SKU identifier. Echo back in MerchantLineItem.id.\n\n\n\n\n    \n\nYour server response\nBuild the responses that your server responds to Adyen with.\nThe success HTTP 200 response includes the following. All fields are optional, but populate as much as possible because the agent presents these totals and options directly to the shopper.\n\n\n\nParameter\nType\nDescription\n\n\n\n\nmerchantAccount\nString\nYour Adyen merchant account identifier. Adyen uses this to route the payment.\n\n\nreference\nString\nEcho back the reference from the request.\n\n\nlineItems\nObject[]\nResolved line items with pricing, stock status, and discount breakdown.\n\n\nlineItems[].quantity\nInteger\nResolved quantity for this line item.\n\n\nlineItems[].id\nString\nEcho back the product or SKU id from the request.\n\n\nlineItems[].status\nString\nStock status: IN_STOCK, OUT_OF_STOCK, or PARTIAL_STOCK.\n\n\nlineItems[].amount\nObject\nUnit price multiplied by quantity in minor currency units.\n\n\nlineItems[].discount\nObject\nDiscount applied to this line in minor currency units.\n\n\nlineItems[].subtotal\nObject\nLine subtotal after discount, before tax.\n\n\nlineItems[].taxAmount\nObject\nTax for this line in minor currency units.\n\n\nlineItems[].totalAmount\nObject\nFinal line total (subtotal + tax) in minor currency units.\n\n\nfulfillmentOptions\nObject[]\nAvailable fulfillment options for the shopper to choose from.\n\n\nfulfillmentOptions[].id\nString\nUnique identifier. The shopper's selection is sent back as fulfillment.selectedFulfillmentOptionId.\n\n\nfulfillmentOptions[].type\nString\nOption type, for example, shipping, digital, pickup.\n\n\nfulfillmentOptions[].title\nString\nHuman-readable name shown to the shopper, for example, Express (1-2 days).\n\n\nfulfillmentOptions[].subtitle\nString\nAdditional description, for example, Delivered by FedEx.\n\n\nfulfillmentOptions[].carrier\nString\nCarrier name, for example, UPS, DHL, FedEx.\n\n\nfulfillmentOptions[].amount\nObject\nShipping cost before tax in minor currency units.\n\n\nfulfillmentOptions[].taxAmount\nObject\nTax on this fulfillment option in minor currency units.\n\n\nfulfillmentOptions[].total\nObject\nTotal fulfillment cost (amount + taxAmount) in minor currency units.\n\n\nfulfillmentOptions[].earliestDeliveryTime\nString (date-time)\nISO 8601 timestamp for earliest expected delivery.\n\n\nfulfillmentOptions[].latestDeliveryTime\nString (date-time)\nISO 8601 timestamp for latest expected delivery.\n\n\ntotals\nObject\nSession totals. totals.total.value is the amount Adyen authorizes.\n\n\ntotals.subtotal\nObject\nOrder subtotal before tax and fulfillment.\n\n\ntotals.tax\nObject\nTotal tax for the order.\n\n\ntotals.fulfillment\nObject\nTotal fulfillment cost.\n\n\ntotals.total\nObject\nGrand total (subtotal + tax + fulfillment).\n\n\ndiscounts\nMerchantDiscountsResponse\nDiscount processing results: applied and rejected codes with detail.\n\n\nmarketingConsentOptions\nObject[]\nMarketing consent channels to present to the shopper through the agent.\n\n\nmessages\nObject[]\nStructured messages. Include on all 422 responses.\n\n\nmessages[].code\nString\nMachine-readable reason code aligned with AgenticReasonCode, for example, OUT_OF_STOCK.\n\n\nmessages[].content\nString\nHuman-readable message text. The agent shows this to the shopper when type is ERROR.\n\n\nmessages[].type\nString\nERROR blocks checkout. INFO is advisory and does not block.\n\n\nlinks\nMerchantLink[]\nMerchant policy URLs: terms of service, return policy, privacy policy.\n\n\nreason\nString\nMachine-readable rejection reason on 422 responses. See Error handling and reason codes.\n\n\n\n\n    \n\n\n    \n\nPossible HTTP status codes\n\n\n\nHTTP\nreason\nlineItems.status\nDescription\n\n\n\n\n200\nNone\nIN_STOCK\nSession valid. Return totals, lineItems, and fulfillmentOptions. The agent presents these to the shopper.\n\n\n422\nOUT_OF_STOCK\nOUT_OF_STOCK\nRequested items are fully unavailable.\n\n\n422\nPARTIAL_STOCK\nPARTIAL_STOCK\nThe number of available items is less than the requested number.\n\n\n422\nINVALID_ADDRESS\n\u2014\nShipping options do not support the delivery location.\n\n\n\n(Optional) Update session\nSet up the following endpoint: POST \/agentic\/sessions\/{sessionId}\nAdyen makes a request to this endpoint every time the cart changes after the initial create session request. This includes item quantity changes, delivery address updates, fulfillment option selection, or discount code application. The same endpoint path is used as Create session. Adyen distinguishes them by whether the sessionId already exists in your system.\n\nHandle duplicate update requests gracefully. Adyen may retry on timeout. Return the same response for the same session state.\n\nAdyen request to your server\nWhen Adyen makes a POST \/agentic\/sessions\/{sessionId} request to your server, the request includes the following parameters. The schema is identical to Create session. On update requests, fields that have not changed can be omitted.\nPath parameter:\n\n\n\nParameter\nDescription\n\n\n\n\nsessionId\nThe unique session identifier assigned by Adyen.\n\n\n\nRequest headers:\n\n\n\nHeader\nDescription\n\n\n\n\nAuthorization\nAdyen-issued bearer token. Validate this token for every request your server receives.\n\n\n\nBody parameters:\n\n\n\nParameter\nType\nDescription\n\n\n\n\ncurrency\nString (ISO 4217)\nThe three-letter currency code. Must match the session currency if provided.\n\n\nlineItems\nObject[]\nUpdated item list. Revalidate stock and recompute totals for all items.\n\n\nlineItems[].quantity\nInteger\nUnits requested. Must be 1 or more.\n\n\nlineItems[].id\nString\nProduct or SKU identifier.\n\n\nshoppingPlatform\nString\nAgent platform identifier. Usually unchanged from create.\n\n\ndeliveryAddress\nMerchantAddress\nUpdated delivery address. Triggers recalculation of shipping costs and tax.\n\n\nfulfillment\nMerchantFulfillment\nUpdated fulfillment selection. Contains selectedFulfillmentOptionId chosen by the shopper.\n\n\nshopper\nMerchantShopper\nUpdated shopper contact details.\n\n\ndiscounts\nMerchantDiscountsRequest\nDiscount codes to apply or update.\n\n\naffiliateAttribution\nMerchantAffiliateAttribution\nAffiliate attribution data.\n\n\nreference\nString\nSession reference.\n\n\n\n\n    \n\n\n    \n\nYour server response\nThe response schema is identical to Create session. Always return the fully recalculated state \u2014 never return only the changed fields.\nPossible HTTP status codes\n\n\n\nHTTP\nreason\nlineItems.status\nDescription\n\n\n\n\n200\nNone\nIN_STOCK\nSession updated. Return fully recalculated state. The agent presents updated totals to the shopper.\n\n\n422\nOUT_OF_STOCK\nOUT_OF_STOCK\nRequested items are fully unavailable.\n\n\n422\nPARTIAL_STOCK\nPARTIAL_STOCK\nThe number of available items is less than the requested number.\n\n\n422\nINVALID_ADDRESS\n\u2014\nShipping options do not support the delivery location.\n\n\n\n(Optional) Cancel session\nSet up the following endpoint: POST \/agentic\/sessions\/{sessionId}\/cancel\nAdyen makes a request to this endpoint when the shopper abandons checkout or the agent terminates the session before payment. Use this to release reserved inventory or discard draft orders.\nAdyen request to your server\nWhen Adyen makes a POST \/agentic\/sessions\/{sessionId}\/cancel request to your server, the request includes the following parameters:\nPath parameter:\n\n\n\nParameter\nDescription\n\n\n\n\nsessionId\nThe unique session identifier assigned by Adyen.\n\n\n\nRequest headers:\n\n\n\nHeader\nDescription\n\n\n\n\nAuthorization\nAdyen-issued bearer token. Validate this token for every request your server receives.\n\n\n\nBody parameters:\n\n\n\nParameter\nType\nDescription\n\n\n\n\nreference\nString\nSession reference from the original create or update request. Use to locate your internal session record.\n\n\n\n\n    \n\nYour server response\nNo response body is expected. Return the appropriate HTTP status code.\nPossible HTTP status codes\n\n\n\nHTTP\nMeaning\nDescription\n\n\n\n\n204\nNo Content\nSession cancelled successfully. No response body expected.\n\n\n409\nConflict\nSession cannot be cancelled. The session may already be in a terminal state.\n\n\n\n(Optional) Commit session\nSet up the following endpoint: POST \/agentic\/sessions\/{sessionId}\/commit\nAdyen makes a request to this endpoint after the shopper confirms payment, but before Adyen executes authorization. Adyen sends the full session state and payment metadata. A 200 response is a binding commitment to fulfill the order at the stated totals \u2014 Adyen proceeds to authorization immediately after.\n\nThis endpoint is only called if you set features.enableCommitSession to true in your one-time configuration. If disabled, Adyen proceeds directly to authorization after the final update session request.\n\n\nA 200 response is a commitment to fulfill the order at the stated totals. Adyen authorizes payment immediately after. Return 422 if you cannot guarantee fulfillment.\n\nAdyen request to your server\nWhen Adyen makes a POST \/agentic\/sessions\/{sessionId}\/commit request to your server, the request includes the following parameters:\nPath parameter:\n\n\n\nParameter\nDescription\n\n\n\n\nsessionId\nThe unique session identifier assigned by Adyen.\n\n\n\nRequest headers:\n\n\n\nHeader\nDescription\n\n\n\n\nAuthorization\nAdyen-issued bearer token. Validate this token for every request your server receives.\n\n\nX-Merchant-Account\nThe Adyen merchant account for which this session was processed.\n\n\n\nBody parameters:\n\n\n\nParameter\nType\nRequired\nDescription\n\n\n\n\nlineItems\nObject[]\n\nFinal resolved line items.\n\n\nlineItems[].quantity\nInteger\n\nResolved quantity for this line item.\n\n\nlineItems[].id\nString\n\nProduct or SKU identifier.\n\n\nlineItems[].status\nString\n\nStock status: IN_STOCK, OUT_OF_STOCK, or PARTIAL_STOCK.\n\n\nlineItems[].totalAmount\nObject\n\nFinal line total (subtotal + tax) in minor currency units.\n\n\nbillingAddress\nMerchantAddress\n\nThe shopper's billing address at checkout completion.\n\n\nfulfillmentOptions\nMerchantFulfillment[]\n\nSelected fulfillment options.\n\n\ntotals\nObject\n\nFinal session totals. Reconcile against your records \u2014 a mismatch should return PRICE_MISMATCH.\n\n\ntotals.subtotal\nObject\n\nOrder subtotal before tax and fulfillment.\n\n\ntotals.tax\nObject\n\nTotal tax for the order.\n\n\ntotals.fulfillment\nObject\n\nTotal fulfillment cost.\n\n\ntotals.total\nObject\n\nGrand total (subtotal + tax + fulfillment).\n\n\nshopper\nMerchantShopper\n\nFinal shopper details.\n\n\npaymentMetadata\nObject\n\nPayment instrument metadata. Use for risk checks.\n\n\npaymentMetadata.bin\nString\n\nBank identification number (first 6 digits of the card).\n\n\npaymentMetadata.cardAlias\nString\n\nHashed card alias for velocity checks.\n\n\npaymentMetadata.paymentMethod\nString\n\nPayment method type, for example, visa, mc, amex.\n\n\nmarketingConsents\nObject[]\n\nShopper's marketing consent choices at checkout.\n\n\nmessages\nObject[]\n\nAny session messages.\n\n\nlinks\nMerchantLink[]\n\nMerchant policy links from the session.\n\n\nreference\nString\n\nSession reference.\n\n\n\n\n    \n\nYour server response\nThe success HTTP 200 response includes the following:\n\n\n\nParameter\nType\nRequired\nDescription\n\n\n\n\nlineItems\nObject[]\n\nUpdated line items if stock or pricing changed during commit.\n\n\nmessages\nObject[]\n\nStructured messages. Errors block authorization.\n\n\norder\nObject\n\nIf you pre-create the order at this point, return it here.\n\n\norder.id\nString\n\nYour unique order identifier.\n\n\norder.checkoutSessionId\nString\n\nThe originating checkout sessionId.\n\n\norder.permalinkUrl\nString\n\nPermanent URL to your order details page. The agent presents this to the shopper as their confirmation link.\n\n\nreason\nString\n\nMachine-readable rejection reason on 422 responses. See Error handling and reason codes.\n\n\n\nPossible HTTP status codes\n\n\n\nHTTP\nreason\nlineItems.status\nDescription\n\n\n\n\n200\nNone\nIN_STOCK\nCommit accepted. Adyen proceeds to payment authorization immediately.\n\n\n422\nOUT_OF_STOCK\nOUT_OF_STOCK\nRequested items are fully unavailable.\n\n\n422\nPARTIAL_STOCK\nPARTIAL_STOCK\nThe number of available items is less than the requested number.\n\n\n422\nPRICE_MISMATCH\n\u2014\nTotals do not match your records.\n\n\n\nFinalize session\nSet up the following endpoint: POST \/agentic\/sessions\/{sessionId}\/finalize\nAdyen makes a request to this endpoint after successful authorization. This is the signal to create the final order and begin fulfillment.\n\nIf you already consume standard Adyen webhook messages with eventCode: AUTHORISATION, you can use those instead of this endpoint. The webhook message includes the same authorization result and additional agentic metadata including sessionId and shoppingPlatform in additionalData. Configure your preference in your one-time configuration.\n\nAdyen request to your server\nWhen Adyen makes a POST \/agentic\/sessions\/{sessionId}\/finalize request to your server, the request includes the following parameters:\nPath parameter:\n\n\n\nParameter\nDescription\n\n\n\n\nsessionId\nThe unique session identifier assigned by Adyen.\n\n\n\nRequest headers:\n\n\n\nHeader\nDescription\n\n\n\n\nAuthorization\nAdyen-issued bearer token. Validate this token for every request your server receives.\n\n\nX-Merchant-Account\nThe Adyen merchant account for which this session was processed.\n\n\n\nBody parameters:\n\n\n\nParameter\nType\nRequired\nDescription\n\n\n\n\nlineItems\nObject[]\n\nFinal authorized line items.\n\n\nlineItems[].quantity\nInteger\n\nResolved quantity for this line item.\n\n\nlineItems[].id\nString\n\nProduct or SKU identifier.\n\n\nlineItems[].status\nString\n\nStock status: IN_STOCK, OUT_OF_STOCK, or PARTIAL_STOCK.\n\n\nlineItems[].amount\nObject\n\nUnit price multiplied by quantity in minor currency units.\n\n\nlineItems[].taxAmount\nObject\n\nTax for this line in minor currency units.\n\n\nlineItems[].totalAmount\nObject\n\nFinal line total (subtotal + tax) in minor currency units.\n\n\nbillingAddress\nMerchantAddress\n\nThe shopper's billing address associated with the authorized payment.\n\n\nfulfillmentOptions\nObject[]\n\nSelected fulfillment methods for this order.\n\n\nfulfillmentOptions[].id\nString\n\nUnique identifier for the fulfillment option.\n\n\nfulfillmentOptions[].type\nString\n\nOption type, for example, shipping, digital, pickup.\n\n\nfulfillmentOptions[].title\nString\n\nHuman-readable name shown to the shopper.\n\n\nfulfillmentOptions[].carrier\nString\n\nCarrier name, for example, UPS, DHL, FedEx.\n\n\nfulfillmentOptions[].amount\nObject\n\nShipping cost before tax in minor currency units.\n\n\ntotals\nObject\n\nFinal authorized totals. Use these to create your order record.\n\n\ntotals.subtotal\nObject\n\nOrder subtotal before tax and fulfillment.\n\n\ntotals.tax\nObject\n\nTotal tax for the order.\n\n\ntotals.fulfillment\nObject\n\nTotal fulfillment cost.\n\n\ntotals.total\nObject\n\nGrand total (subtotal + tax + fulfillment).\n\n\nshopper\nMerchantShopper\n\nShopper contact details.\n\n\npaymentMetadata\nObject\n\nPayment instrument metadata.\n\n\npaymentMetadata.paymentMethod\nString\n\nPayment method used, for example, visa, mc.\n\n\npaymentMetadata.bin\nString\n\nBank identification number (first 6 digits of the card).\n\n\npaymentMetadata.cardAlias\nString\n\nTokenized card alias.\n\n\nmessages\nObject[]\n\nAny session messages.\n\n\nlinks\nMerchantLink[]\n\nMerchant policy links from the session.\n\n\nreference\nString\n\nSession reference.\n\n\n\n\n    \n\nYour server response\nNo response body is expected. Return the appropriate HTTP status code.\nPossible HTTP status codes\n\n\n\nHTTP\nMeaning\nDescription\n\n\n\n\n204\nNo Content\nFinalization acknowledged. Create the final order record and begin fulfillment.\n\n\n\n(Optional) Complete session (advanced flow)\nSet up the following endpoint: POST \/agentic\/sessions\/{sessionId}\/complete\nIf you implement the advanced flow, Adyen makes a request to this endpoint instead of the finalize session one. Adyen sends the raw payment token, and your server executes payment authorization directly with a POST  \/payments request and handles fulfillment synchronously in one step.\nAdyen request to your server\nWhen Adyen makes a POST \/agentic\/sessions\/{sessionId}\/complete request to your server, the request includes the following parameters:\nPath parameter:\n\n\n\nParameter\nDescription\n\n\n\n\nsessionId\nThe unique session identifier assigned by Adyen.\n\n\n\nRequest headers:\n\n\n\nHeader\nDescription\n\n\n\n\nAuthorization\nAdyen-issued bearer token. Validate this token for every request your server receives.\n\n\n\nBody parameters:\n\n\n\nParameter\nType\nRequired\nDescription\n\n\n\n\npaymentData\nObject\n\nThe payment token. Pass paymentData.token as paymentMethod.storedPaymentMethodId in your POST  \/payments request.\n\n\npaymentData.provider\nString\n\nPayment provider. Always adyen for this integration.\n\n\npaymentData.token\nString\n\nThe ACP token from Adyen. Pass as paymentMethod.storedPaymentMethodId in your POST  \/payments request.\n\n\nlineItems\nObject[]\n\nFinal resolved line items.\n\n\nlineItems[].quantity\nInteger\n\nResolved quantity for this line item.\n\n\nlineItems[].id\nString\n\nProduct or SKU identifier.\n\n\nlineItems[].status\nString\n\nStock status: IN_STOCK, OUT_OF_STOCK, or PARTIAL_STOCK.\n\n\nlineItems[].amount\nObject\n\nUnit price multiplied by quantity in minor currency units.\n\n\nlineItems[].taxAmount\nObject\n\nTax for this line in minor currency units.\n\n\nlineItems[].totalAmount\nObject\n\nFinal line total (subtotal + tax) in minor currency units.\n\n\ntotals\nObject\n\nFinal totals. Use totals.total.value and totals.total.currency as the amount in your POST  \/payments request.\n\n\ntotals.subtotal\nObject\n\nOrder subtotal before tax and fulfillment.\n\n\ntotals.tax\nObject\n\nTotal tax for the order.\n\n\ntotals.fulfillment\nObject\n\nTotal fulfillment cost.\n\n\ntotals.total\nObject\n\nGrand total (subtotal + tax + fulfillment).\n\n\nselectedFulfillmentOptionId\nString\n\nThe fulfillment option the shopper selected.\n\n\nbillingAddress\nMerchantAddress\n\nThe shopper's billing address.\n\n\nshopper\nMerchantShopper\n\nShopper contact details.\n\n\nmarketingConsents\nMerchantMarketingConsent[]\n\nThe shopper's marketing opt-in or opt-out choices.\n\n\naffiliateAttribution\nMerchantAffiliateAttribution\n\nAttribution data for tracking.\n\n\nreference\nString\n\nSession reference.\n\n\n\n\n    \n\n\nGet the information that you need to make a payment request to Adyen.\n\nYour server response\nThe success HTTP 200 response includes the following:\n\n\n\nParameter\nType\nDescription\n\n\n\n\norder\nObject\nThe order you created.\n\n\norder.id\nString\nYour internal order identifier.\n\n\norder.checkoutSessionId\nString\nThe sessionId path parameter.\n\n\norder.permalinkUrl\nString\nThe URL where the shopper can view the order.\n\n\nlineItems\nObject[]\nFinal line items for the order.\n\n\nmessages\nObject[]\nAny messages to surface.\n\n\nreason\nString\nMachine-readable failure reason if payment or fulfillment failed.\n\n\n\nPossible HTTP status codes\n\n\n\nHTTP\nreason\nlineItems.status\nDescription\n\n\n\n\n200\nNone\nIN_STOCK\nPayment executed and order created. Return the response with the order object.\n\n\n422\nPAYMENT_FAILED\n\u2014\nThe payment was not successfully authorized. The POST  \/payments response included an unsuccessful authorization result.\n\n\n\nMake the payment request to Adyen\n\n\nMake a POST  \/payments request, including the information from Adyen's request to your server:\n\n\n\nParameter in payment request\nValue\n\n\n\n\npaymentMethod.storedPaymentMethodId\nThe value from paymentData.token.\n\n\nshopperReference\nThe sessionId path parameter.\n\n\nmerchantAccount\nYour Adyen merchant account.\n\n\namount.value\nThe value from totals.total.value.\n\n\namount.currency\nThe value from totals.total.currency.\n\n\nshopperInteraction\nContAuth\n\n\nrecurringProcessingModel\nUnscheduledCardOnFile\n\n\nreference\nYour internal order reference.\n\n\n\n\n\n(Optional) Events after the purchase\nMake a request to: POST https:\/\/commerce-suite-test.adyen.com\/commerce-suite\/companies\/v1\/{CompanyAccount}\/agentic\/sessions\/{sessionId}\/events\nAfter the purchase, you can send fulfillment updates to Adyen. The AI agent uses these to support the shopper with post-purchase questions, for example, \"What is the status of my order?\".\nYour request to Adyen\nPath parameters:\n\n\n\nParameter\nDescription\n\n\n\n\nCompanyAccount\nYour Adyen company account.\n\n\nsessionId\nThe unique session identifier assigned by Adyen.\n\n\n\nRequest headers:\n\n\n\nHeader\nDescription\n\n\n\n\nAuthorization\nAdyen-issued bearer token. Validate this token for every request your server receives.\n\n\n\nRequest body:\n\n\n\nParameter\nType\nRequired\nDescription\n\n\n\n\neventCode\nString\n\nThe type of event. For example, ORDER_SHIPPED.\n\n\npayload\nObject\n\nEvent details.\n\n\npayload.carrier\nString\n\nCarrier name, for example, Example Carrier.\n\n\npayload.trackingNumber\nString\n\nCarrier tracking number.\n\n\npayload.trackingUrl\nString\n\nURL for the shopper to track their shipment.\n\n\n\n\n    \n\nAdyen response\nNo response body is expected. You get an HTTP 204 acknowledgment.\nTest and go live\nUse the Adyen sandbox to test your server's endpoints end-to-end before going live. The sandbox makes requests to your endpoints exactly like in the live environment.\nRecommended test sequence\nTo verify your integration, follow these steps:\n\n\nRegister your test endpoints.\nMake a POST https:\/\/commerce-suite-test.adyen.com\/commerce-suite\/companies\/v1\/{CompanyAccount}\/agentic\/configuration request with your test base URL and enable the endpoints you want to test.\n\n\nTrigger a create session request.\nAdyen makes a POST \/agentic\/sessions\/{sessionId} request. Your server responds with lineItems, fulfillmentOptions, and totals.\n\n\nTest an update with address and fulfillment selection.\nAdyen makes a POST \/agentic\/sessions\/{sessionId} request with an updated body. Confirm that your server returns recalculated totals.\n\n\nTest stock error handling.\nReturn a 422 response with reason: OUT_OF_STOCK and messages[].\n\n\nTest commit (if enabled).\nAdyen makes a POST \/agentic\/sessions\/{sessionId}\/commit request. Your server responds with 200 OK to accept, or 422 with reason: RISK_REJECTED to reject.\n\n\nTest finalize.\nAdyen makes a POST \/agentic\/sessions\/{sessionId}\/finalize request. Your server responds with 204 No Content. Verify that the order is created in your system.\n\n\nGo live\n\n\nBefore you go live, verify the following:\n\nYou tested your integration end-to-end, including error scenarios.\nYour server validates the Authorization header from each inbound request from Adyen.\nYour server's endpoints respond within five seconds, under the load of the expected volume of requests in the live environment.\nYour server's create session and update session endpoints return 200 with the following:\n\nlineItems \nfulfillmentOptions\ntotals\n\nYour server's commit-session endpoint validates the X-Merchant-Account header in the request.\nYour server's finalize session endpoint:\n\nValidadtes the X-Merchant-Account header in the request.\nReturns 204 No Content (no response body).\n\nYour server's cancel session endpoint returns:\n\n204: For a successful request. \n409: If the session cannot be cancelled.\n\nFor each 422 response from your server:\n\nThe response body includes the following MerchantMessage parameters:\ncode\ncontent \ntype \nThe response body includes the AgenticReasonCode object.\n\nYour server's complete session endpoint (advanced flow):\n\nIncludes an order.permalinkUrl that is a stable and publicly accessible.\nThe marketingConsents object applies to shopper preferences is stored in a persistent way.\nThe affiliateAttribution data is stored for reporting.\n\n\n\n\nMake the one-time configuration request to Adyen, using the live endpoint URL: https:\/\/commerce-suite-live.adyen.com\/commerce-suite\/companies\/v1\/{CompanyAccount}\/agentic\/configuration. \n\n\nSequence diagrams\nStandard flow (ACP):\nCnNlcXVlbmNlRGlhZ3JhbQogICAgcGFydGljaXBhbnQgUyBhcyBTaG9wcGVyCiAgICBwYXJ0aWNpcGFudCBBIGFzIEFJIGFnZW50CiAgICBwYXJ0aWNpcGFudCBWIGFzIEFnZW50J3MgdG9rZW4gdmF1bHQKICAgIHBhcnRpY2lwYW50IFAgYXMgQWR5ZW4gCiAgICBwYXJ0aWNpcGFudCBNIGFzIFlvdXIgc2VydmVyCgogICAgTm90ZSBvdmVyIFMsIE06IENoZWNrb3V0IGNyZWF0aW9uCiAgICBTIC0+PiBBOiBNZXNzYWdlOiAiSSB3YW50IHRvIGJ1eSB0aGVzZSBoZWFkcGhvbmVzIgogICAgQSAtPj4gUDogL2NoZWNrb3V0X3Nlc3Npb24KICAgIFAgLT4+IE06IFBPU1QgL2FnZW50aWMvc2Vzc2lvbnMve3Nlc3Npb25JZH0KICAgIE0gLS0+PiBQOiBIVFRQIDIwMCByZXNwb25zZSB3aXRoIGJvZHkgaW5jbHVkaW5nIHRvdGFscywgc2hpcHBpbmcsIGFuZCBpbnZlbnRvcnkgaW5mbwogICAgUCAtLT4+IEE6IHNlc3Npb25JZCBhbmQgb3JkZXIgaW5mb3JtYXRpb24KICAgIEEgLS0+PiBTOiBTaG93IG9yZGVyIGluZm8gKGxpa2UgcHJpY2UgYW5kIGludmVudG9yeSkKCiAgICBOb3RlIG92ZXIgUywgTTogUGF5bWVudCBhbmQgZmluYWwgdmFsaWRhdGlvbgogICAgUyAtPj4gQTogIlBheSBub3ciCiAgICBBIC0+PiBWOiBJbnN0cnVjdCB0byBkZWxlZ2F0ZSBwYXltZW50IGZvciB0aGUgc2Vzc2lvbgogICAgViAtPj4gUDogL2RlbGVnYXRlX3BheW1lbnQgd2l0aCBzZWN1cmUgZGF0YQogICAgUCAtLT4+IFY6IFJldHVybiB1bmlxdWUgdHJhbnNhY3Rpb24gdG9rZW4KICAgIFYgLS0+PiBBOiBSZXR1cm4gdHJhbnNhY3Rpb24gdG9rZW4KCiAgICBOb3RlIG92ZXIgUywgTTogQ29tbWl0LCBhdXRob3JpemUsIGFuZCBmaW5hbGl6ZQogICAgQSAtPj4gUDogUE9TVCAvY2hlY2tvdXRfc2Vzc2lvbi97c2Vzc2lvbklkfS9jb21wbGV0ZSBpbmNsdWRpbmcgdW5pcXVlIHRyYW5zYWN0aW9uIHRva2VuCiAgICBQIC0+PiBNOiBQT1NUL2FnZW50aWMvc2Vzc2lvbnMve2lkfS9jb21taXQKICAgIE0gLS0+PiBQOiBIVFRQIDIwMCByZXNwb25zZQoKICAgIFAgLT4+IFA6IEV4ZWN1dGUgcGF5bWVudCBhdXRob3JpemF0aW9uCiAgICBQIC0+PiBNOiBQT1NUIC9hZ2VudGljL3Nlc3Npb25zL3tzZXNzaW9uSWR9L2ZpbmFsaXplIAogICAgTSAtLT4+IFA6IEhUVFAgMjAwIHJlc3BvbnNlIAogICAgTSAtPj4gTTogVHJpZ2dlciBvcmRlciBjcmVhdGlvbgoKICAgIFAgLS0+PiBBOiBSZXR1cm4gZmluYWwgc3RhdHVzOiBTVUNDRVNTCiAgICBBIC0tPj4gUzogIk9yZGVyIGNvbmZpcm1lZC4gUmVmZXJlbmNlOiBVTklRVUVfT1JERVJfUkVGIgoKICAgIE5vdGUgb3ZlciBTLCBNOiBBZnRlciB0aGUgcHVyY2hhc2UKICAgIE0gLT4+IFA6IFBPU1QgL2FnZW50aWMvc2Vzc2lvbnMve3Nlc3Npb25JZH0vZXZlbnRzIHdpdGggdHJhY2tpbmcgaW5mb3JtYXRpb24KICAgIFAgLT4+IEE6IFNlbmQgdHJhY2tpbmcgaW5mb3JtYXRpb24KICAgIEEgLS0+PiBTOiAiWW91ciBwYWNrYWdlIGlzIG9uIHRoZSB3YXkhIFRyYWNraW5nIGxpbms6IFNISVBQSU5HX1RSQUNLSU5HX1VSTCIK\nAdvanced flow (ACP):\nCnNlcXVlbmNlRGlhZ3JhbQogICAgcGFydGljaXBhbnQgUyBhcyBTaG9wcGVyCiAgICBwYXJ0aWNpcGFudCBBIGFzIEFJIGFnZW50CiAgICBwYXJ0aWNpcGFudCBWIGFzIEFnZW50J3MgdG9rZW4gdmF1bHQKICAgIHBhcnRpY2lwYW50IFAgYXMgQWR5ZW4KICAgIHBhcnRpY2lwYW50IE0gYXMgWW91ciBzZXJ2ZXIKCiAgICBOb3RlIG92ZXIgUywgTTogQ2hlY2tvdXQgY3JlYXRpb24KICAgIFMgLT4+IEE6IE1lc3NhZ2U6ICJJIHdhbnQgdG8gYnV5IHRoZXNlIGhlYWRwaG9uZXMiCiAgICBBIC0+PiBQOiAvY2hlY2tvdXRfc2Vzc2lvbgogICAgUCAtPj4gTTogUE9TVCAvYWdlbnRpYy9zZXNzaW9ucy97c2Vzc2lvbklkfQogICAgTSAtLT4+IFA6IEhUVFAgMjAwIHJlc3BvbnNlIHdpdGggYm9keSBpbmNsdWRpbmcgdG90YWxzLCBzaGlwcGluZywgYW5kIGludmVudG9yeSBpbmZvCiAgICBQIC0tPj4gQTogc2Vzc2lvbklkIGFuZCBvcmRlciBpbmZvcm1hdGlvbgogICAgQSAtLT4+IFM6IFNob3cgb3JkZXIgaW5mbyAobGlrZSBwcmljZSBhbmQgaW52ZW50b3J5KQoKICAgIE5vdGUgb3ZlciBTLCBNOiBQYXltZW50IGFuZCBmaW5hbCB2YWxpZGF0aW9uCiAgICBTIC0+PiBBOiAiUGF5IG5vdyIKICAgIEEgLT4+IFY6IEluc3RydWN0IHRvIGRlbGVnYXRlIHBheW1lbnQgZm9yIHRoZSBzZXNzaW9uCiAgICBWIC0+PiBQOiAvZGVsZWdhdGVfcGF5bWVudCB3aXRoIHNlY3VyZSBkYXRhCiAgICBQIC0tPj4gVjogUmV0dXJuIHVuaXF1ZSB0cmFuc2FjdGlvbiB0b2tlbgogICAgViAtLT4+IEE6IFJldHVybiB0cmFuc2FjdGlvbiB0b2tlbgoKICAgIE5vdGUgb3ZlciBTLCBNOiBDb21wbGV0ZSAobWVyY2hhbnQtZXhlY3V0ZWQgcGF5bWVudCkKICAgIEEgLT4+IFA6IFBPU1QgL2NoZWNrb3V0X3Nlc3Npb24ve3Nlc3Npb25JZH0vY29tcGxldGUgaW5jbHVkaW5nIHVuaXF1ZSB0cmFuc2FjdGlvbiB0b2tlbgogICAgUCAtPj4gTTogUE9TVCAvYWdlbnRpYy9zZXNzaW9ucy97c2Vzc2lvbklkfS9jb21wbGV0ZSB3aXRoIHRyYW5zYWN0aW9uIHRva2VuCiAgICBNIC0+PiBQOiBQT1NUIC9wYXltZW50cyB3aXRoIHRyYW5zYWN0aW9uIHRva2VuCiAgICBQIC0tPj4gTTogUmV0dXJuIHBheW1lbnQgcmVzdWx0IChzdWNjZXNzZnVsIGF1dGhvcml6YXRpb24pCiAgICBNIC0+PiBNOiBUcmlnZ2VyIG9yZGVyIGNyZWF0aW9uCiAgICBNIC0tPj4gUDogUmV0dXJuIHBheW1lbnQgcmVzdWx0CgogICAgUCAtLT4+IEE6IFJldHVybiBmaW5hbCBzdGF0dXM6IFNVQ0NFU1MKICAgIEEgLS0+PiBTOiAiT3JkZXIgY29uZmlybWVkLiBSZWZlcmVuY2U6IFVOSVFVRV9PUkRFUl9SRUYiCgogICAgTm90ZSBvdmVyIFMsIE06IEFmdGVyIHRoZSBwdXJjaGFzZQogICAgTSAtPj4gUDogUE9TVCAvYWdlbnRpYy9zZXNzaW9ucy97c2Vzc2lvbklkfS9ldmVudHMgd2l0aCB0cmFja2luZyBpbmZvcm1hdGlvbgogICAgUCAtPj4gQTogU2VuZCB0cmFja2luZyBpbmZvcm1hdGlvbgogICAgQSAtLT4+IFM6ICJZb3VyIHBhY2thZ2UgaXMgb24gdGhlIHdheSEgVHJhY2tpbmcgbGluazogU0hJUFBJTkdfVFJBQ0tJTkdfVVJMIgo=\nStandard flow (UCP):\nCnNlcXVlbmNlRGlhZ3JhbQogICAgcGFydGljaXBhbnQgUyBhcyBTaG9wcGVyCiAgICBwYXJ0aWNpcGFudCBBIGFzIEFJIGFnZW50CiAgICBwYXJ0aWNpcGFudCBWIGFzIEFnZW50J3MgdG9rZW4gdmF1bHQKICAgIHBhcnRpY2lwYW50IFAgYXMgQWR5ZW4KICAgIHBhcnRpY2lwYW50IE0gYXMgWW91ciBzZXJ2ZXIKCiAgICBOb3RlIG92ZXIgUywgTTogQ2hlY2tvdXQgY3JlYXRpb24KICAgIFMgLT4+IEE6IE1lc3NhZ2U6ICJJIHdhbnQgdG8gYnV5IHRoZXNlIGhlYWRwaG9uZXMiCiAgICBBIC0+PiBQOiBQT1NUIC9jaGVja291dCAobGluZV9pdGVtcywgYnV5ZXIpCiAgICBQIC0+PiBNOiBQT1NUIC9hZ2VudGljL3Nlc3Npb25zL3tzZXNzaW9uSWR9CiAgICBNIC0tPj4gUDogSFRUUCAyMDAgcmVzcG9uc2Ugd2l0aCBib2R5IGluY2x1ZGluZyB0b3RhbHMgYW5kIHNoaXBwaW5nIGluZm8KICAgIFAgLS0+PiBBOiBVQ1AgY2hlY2tvdXQgb2JqZWN0CiAgICBBIC0tPj4gUzogU2hvdyBvcmRlciBpbmZvCgogICAgTm90ZSBvdmVyIFMsIE06IFRva2VuaXphdGlvbiBhbmQgY29tcGxldGlvbgogICAgUyAtPj4gQTogIlBheSBub3ciCiAgICBBIC0+PiBWOiBSZXRyaWV2ZSByYXcgcGF5bWVudCBjcmVkZW50aWFscwogICAgViAtLT4+IEE6IFNlY3VyZSBjYXJkIGRhdGEKCiAgICBBIC0+PiBQOiBQT1NUIC9jaGVja291dC97c2Vzc2lvbklkfS9jb21wbGV0ZSB3aXRoIFVDUCB0b2tlbgoKICAgIFAgLT4+IFY6IFBPU1QgL2RldG9rZW5pemUgd2l0aCBVQ1AgdG9rZW4KICAgIFYgLS0+PiBQOiBDYXJkIGRldGFpbHMKCiAgICBOb3RlIG92ZXIgUywgTTogQ29tbWl0LCBhdXRob3JpemUsIGFuZCBmaW5hbGl6ZQogICAgUCAtPj4gTTogUE9TVCAvYWdlbnRpYy9zZXNzaW9ucy97c2Vzc2lvbklkfS9jb21taXQKICAgIE0gLS0+PiBQOiBIVFRQIDIwMCByZXNwb25zZQoKICAgIFAgLT4+IFA6IEV4ZWN1dGUgcGF5bWVudCBhdXRob3JpemF0aW9uCgogICAgUCAtPj4gTTogUE9TVCAvYWdlbnRpYy9zZXNzaW9ucy97c2Vzc2lvbklkfS9maW5hbGl6ZQogICAgTSAtPj4gTTogVHJpZ2dlciBvcmRlciBjcmVhdGlvbgoKICAgIFAgLS0+PiBBOiBVQ1AgY2hlY2tvdXQgb2JqZWN0IChzdGF0dXM6IGNvbXBsZXRlZCkKICAgIEEgLS0+PiBTOiAiT3JkZXIgY29uZmlybWVkLiBSZWZlcmVuY2U6IFVOSVFVRV9PUkRFUl9SRUYiCgogICAgTm90ZSBvdmVyIFMsIE06IEFmdGVyIHRoZSBwdXJjaGFzZQogICAgTSAtPj4gUDogUE9TVCAvYWdlbnRpYy9zZXNzaW9ucy97c2Vzc2lvbklkfS9ldmVudHMgd2l0aCB0cmFja2luZyBpbmZvcm1hdGlvbgogICAgUCAtPj4gQTogU2VuZCB0cmFja2luZyBpbmZvcm1hdGlvbgogICAgQSAtLT4+IFM6ICJZb3VyIHBhY2thZ2UgaXMgb24gdGhlIHdheSEgVHJhY2tpbmcgbGluazogU0hJUFBJTkdfVFJBQ0tJTkdfVVJMIgo=\nSchema reference\nThe following shows the objects used in the request and response bodies.\nMerchantItemRequest\n\n\n\nParameter\nType\nRequired\nDescription\n\n\n\n\nid\nString\n\nProduct or SKU identifier.\n\n\nquantity\nInteger\n\nUnits requested. Must be 1 or more.\n\n\n\nMerchantAddress\n\n\n\nParameter\nType\nRequired\nDescription\n\n\n\n\nstreet\nString\n\nPrimary street name.\n\n\nhouseNumberOrName\nString\n\nHouse number or building name.\n\n\ncity\nString\n\nCity name.\n\n\nstateOrProvince\nString\n\nState or province code (ISO 3166-2).\n\n\ncountry\nString\n\nISO 3166-1 alpha-2 country code, for example, US, GB, NL.\n\n\npostalCode\nString\n\nZIP or postal code.\n\n\n\nMerchantShopper\n\n\n\nParameter\nType\nRequired\nDescription\n\n\n\n\nemail\nString\n\nThe shopper's email address.\n\n\nfirstName\nString\n\nThe shopper's first name.\n\n\nlastName\nString\n\nThe shopper's last name.\n\n\nphoneNumber\nString\n\nThe shopper's phone number.\n\n\n\nMerchantFulfillment\n\n\n\nParameter\nType\nRequired\nDescription\n\n\n\n\nselectedFulfillmentOptionId\nString\n\nThe id of the fulfillment option the shopper selected.\n\n\n\nMerchantDiscountsRequest\n\n\n\nParameter\nType\nRequired\nDescription\n\n\n\n\ncodes\nString[]\n\nDiscount or promo codes submitted by the shopper.\n\n\n\nMerchantDiscountsResponse\n\n\n\nParameter\nType\nRequired\nDescription\n\n\n\n\ncodes\nString[]\n\nAll submitted codes echoed back.\n\n\napplied\nMerchantAppliedDiscount[]\n\nSuccessfully applied discounts.\n\n\nrejected\nMerchantRejectedDiscount[]\n\nRejected codes with reason.\n\n\n\nMerchantAppliedDiscount\n\n\n\nParameter\nType\nRequired\nDescription\n\n\n\n\nid\nString\n\nUnique identifier for this applied discount.\n\n\namount\nInteger (int64)\n\nTotal discount amount in minor currency units.\n\n\ncoupon\nMerchantCoupon\n\nThe coupon definition.\n\n\ncode\nString\n\nThe discount code string.\n\n\nautomatic\nBoolean\n\ntrue if applied automatically without a code.\n\n\nmethod\nString\n\nHow the discount is allocated: each (per line item) or across (proportional).\n\n\nallocations\nMerchantDiscountAllocation[]\n\nPer-line-item breakdown. Each entry has path (JSON pointer) and amount.\n\n\nstart\nString (date-time)\n\nDiscount validity start.\n\n\nend\nString (date-time)\n\nDiscount validity end.\n\n\n\nMerchantDiscountAllocation\n\n\n\nParameter\nType\nRequired\nDescription\n\n\n\n\namount\nInteger (int64)\n\nDiscount amount allocated to this line item in minor currency units.\n\n\npath\nString\n\nJSON pointer to the line item, for example, \/lineItems\/0.\n\n\n\nMerchantRejectedDiscount\n\n\n\nParameter\nType\nRequired\nDescription\n\n\n\n\ncode\nString\n\nThe discount code that was rejected.\n\n\nreason\nMerchantDiscountErrorCode\n\nMachine-readable rejection reason.\n\n\nmessage\nString\n\nHuman-readable explanation. Surface this to the shopper.\n\n\n\nMerchantDiscountErrorCode\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\nCart total does not meet the minimum order value for this code.\n\n\ndiscount_code_user_not_logged_in\nCode requires the shopper to be authenticated.\n\n\ndiscount_code_user_ineligible\nThe shopper does not qualify for this discount.\n\n\ndiscount_code_usage_limit_reached\nMaximum redemption count has been reached.\n\n\n\nMerchantCoupon\n\n\n\nParameter\nType\nRequired\nDescription\n\n\n\n\nid\nString\n\nUnique coupon identifier.\n\n\nname\nString\n\nHuman-readable coupon name.\n\n\npercentOff\nInteger (int32)\n\nPercentage discount (0\u2013100).\n\n\namountOff\nInteger (int64)\n\nFixed discount amount in minor currency units.\n\n\ncurrency\nString\n\nCurrency of amountOff (ISO 4217).\n\n\nduration\nString\n\nonce, repeating, or forever.\n\n\ndurationInMonths\nInteger (int32)\n\nNumber of months when duration is repeating.\n\n\nmaxRedemptions\nInteger (int32)\n\nMaximum redemption count.\n\n\ntimesRedeemed\nInteger (int32)\n\nHow many times this coupon has been redeemed.\n\n\nmetadata\nObject\n\nArbitrary string key-value metadata.\n\n\n\nMerchantMarketingConsent\n\n\n\nParameter\nType\nRequired\nDescription\n\n\n\n\nchannel\nString\n\nMarketing channel, for example, email, sms, push.\n\n\noptedIn\nBoolean\n\nThe shopper's consent decision. true = opted in; false = opted out.\n\n\n\nMerchantMarketingConsentOption\nReturn these in your session response to surface consent options to the shopper through the agent.\n\n\n\nParameter\nType\nRequired\nDescription\n\n\n\n\nchannel\nString\n\nChannel identifier, for example, email, sms.\n\n\ndisplayText\nString\n\nLocalized consent prompt to show to the shopper.\n\n\nprivacyPolicyUrl\nString\n\nURL to your privacy policy for this channel.\n\n\nisSubscribed\nBoolean\n\nPre-populated subscription state for returning shoppers.\n\n\n\nMerchantAffiliateAttribution\n\n\n\nParameter\nType\nRequired\nDescription\n\n\n\n\nprovider\nString\n\nAttribution provider identifier, for example, impact.com.\n\n\ntoken\nString\n\nProvider-issued attribution token.\n\n\npublisherId\nString\n\nAffiliate or publisher identifier.\n\n\ncampaignId\nString\n\nCampaign identifier.\n\n\ncreativeId\nString\n\nCreative identifier.\n\n\nsubId\nString\n\nSub-tracking identifier.\n\n\ntouchpoint\nString\n\nAttribution touchpoint: first (session create) or last (session complete).\n\n\nsource\nObject\n\nSource context. Required field: type (url, platform, or unknown). Optional: url.\n\n\nissuedAt\nString (date-time)\n\nWhen the attribution token was issued.\n\n\nexpiresAt\nString (date-time)\n\nWhen the attribution token expires.\n\n\nmetadata\nObject\n\nArbitrary key-value metadata.\n\n\n\nMerchantLink\n\n\n\nParameter\nType\nRequired\nDescription\n\n\n\n\ntype\nString\n\nLink category, for example, terms_of_service, return_policy, privacy_policy.\n\n\nurl\nString\n\nFully qualified URL.\n\n\n","type":"page","locale":"en","boost":16,"hierarchy":{"lvl0":"Home","lvl1":"Online payments","lvl2":"Adyen Agentic","lvl3":"Merchant","lvl4":"Agentic Cart 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\/merchant","lvl4":"\/online-payments\/agentic-commerce\/merchant\/agentic-cart-api-integration"},"levels":5,"category":"Online Payments","category_color":"green","tags":["Agentic","integration"]}}
