{"title":"UCP Tokenization Handler","category":"default","creationDate":1778252957,"content":"<p>Integrate with the Adyen UCP Tokenization Handler to securely tokenize payment credentials on behalf of merchants, following the <a href=\"https:\/\/ucp.dev\/2026-01-23\/specification\/tokenization-guide\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Universal Commerce Protocol (UCP) tokenization specification (2026-01-23)<\/a>. Your agent platform sends shopper payment credentials to Adyen's endpoint, and Adyen returns a UCP token that is associated with the specific checkout session and merchant identifier.<\/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;\">Make sure that you have set up an integration that follows the <a href=\"https:\/\/ucp.dev\/2026-01-23\/specification\/tokenization-guide\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Universal Commerce Protocol (UCP) tokenization specification (2026-01-23)<\/a>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>Limitations<\/strong><\/td>\n<td style=\"text-align: left;\">You must complete our security review to approve your platform.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>Setup steps<\/strong><\/td>\n<td style=\"text-align: left;\">Before you begin, reach out to your Adyen contact for the following: <ul><li markdown=\"1\">Access to UCP Tokenization Handler.<\/li><li markdown=\"1\">Your dedicated agent platform API key.<\/li><\/ul><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>How it works<\/h2>\n<p>When a shopper initiates a transaction using your agent platform, the following flow occurs:<\/p>\n<ol>\n<li>The shopper enters their payment details in your agent platform.<\/li>\n<li>Your agent platform sends the payment credentials to Adyen by making a POST <code>\/ucp\/v1\/handler\/tokenize<\/code> request.<\/li>\n<li>Adyen validates the credentials and returns a UCP token to your agent platform.<\/li>\n<\/ol>\n<div id=\"mermaid-69fe0435af4bc-wrapper\"><div id=\"mermaid-69fe0435af4bc\" class=\"mermaid-shortcode loading\">CnNlcXVlbmNlRGlhZ3JhbQphdXRvbnVtYmVyCnBhcnRpY2lwYW50IFNob3BwZXIKcGFydGljaXBhbnQgUGxhdGZvcm0gYXMgWW91ciBhZ2VudCBwbGF0Zm9ybQpwYXJ0aWNpcGFudCBBZHllbgoKICAgIFNob3BwZXItPj5QbGF0Zm9ybTogRW50ZXJzIHBheW1lbnQgZGV0YWlscwogICAgUGxhdGZvcm0tPj5BZHllbjogUE9TVCAvdWNwL3YxL2hhbmRsZXIvdG9rZW5pemUKICAgIEFkeWVuLS0+PlBsYXRmb3JtOiBVQ1AgdG9rZW4K<\/div><\/div>\n<h3>Authentication<\/h3>\n<p>Authenticate your requests using your agent platform API key as a Bearer token in the <code>Authorization<\/code> header.<\/p>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Bearer token authentication'\" :id=\"''\" :code-data='[{\"language\":\"http\",\"tabTitle\":\"\",\"content\":\"Authorization: Bearer AGENT_PLATFORM_API_KEY\\nContent-Type: application\\\/json\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<div class=\"sc-notice warning\"><div>\n<p>Never expose your credentials in a URL query string, or in agent-readable context. All calls must originate from your secure agent backend.<\/p>\n<\/div><\/div>\n<h2>Create a token with payment details<\/h2>\n<p>After the shopper enters their payment details, create a UCP token to securely store their payment information.<\/p>\n<p>Use the following base URL:<\/p>\n<table>\n<thead>\n<tr>\n<th>Environment<\/th>\n<th>Base URL<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Test<\/td>\n<td><code>https:\/\/commerce-suite-test.adyen.com\/commerce-suite\/ucp\/v1\/handler\/tokenize<\/code><\/td>\n<\/tr>\n<tr>\n<td>Live<\/td>\n<td><code>https:\/\/commerce-suite.adyen.com\/commerce-suite\/ucp\/v1\/handler\/tokenize<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Make a POST <code>\/tokenize<\/code> request. The request body contains two objects: <code>credential<\/code> and <code>binding<\/code>.<\/p>\n<h4><code>credential<\/code> object<\/h4>\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;\"><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 credential type. Possible value: <strong>card<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>card_number_type<\/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 card number. Set to <strong>fpan<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>number<\/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 card number (12-19 digits).<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>expiry_month<\/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;\">The card's expiration month (1-12).<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>expiry_year<\/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;\">The card's expiration year (four digits).<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>cvc<\/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 card's security code (3-4 digits).<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4><code>binding<\/code> object<\/h4>\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>checkout_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;\">The UCP checkout session identifier that this token associated with.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>identity.access_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;\">A merchant identifier associated with the <code>merchant_id<\/code> provided by Adyen.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example request'\" :id=\"'ucp-tokenize-request-card'\" :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\\\/ucp\\\/v1\\\/handler\\\/tokenize \\\\\\n-H \\&quot;Authorization: Bearer AGENT_PLATFORM_API_KEY\\&quot; \\\\\\n-H \\&quot;Content-Type: application\\\/json\\&quot; \\\\\\n-H \\&quot;idempotency-key: YOUR_IDEMPOTENCY_KEY\\&quot; \\\\\\n-d '{\\n  \\&quot;credential\\&quot;: {\\n    \\&quot;type\\&quot;: \\&quot;card\\&quot;,\\n    \\&quot;card_number_type\\&quot;: \\&quot;fpan\\&quot;,\\n    \\&quot;number\\&quot;: \\&quot;4111111111111111\\&quot;,\\n    \\&quot;expiry_month\\&quot;: 12,\\n    \\&quot;expiry_year\\&quot;: 2026,\\n    \\&quot;cvc\\&quot;: \\&quot;123\\&quot;,\\n    \\&quot;name\\&quot;: \\&quot;Jane Doe\\&quot;\\n  },\\n  \\&quot;binding\\&quot;: {\\n    \\&quot;checkout_id\\&quot;: \\&quot;CS_XXXXXXXXXXXXX\\&quot;,\\n    \\&quot;identity\\&quot;: {\\n      \\&quot;access_token\\&quot;: \\&quot;MERCHANT_PUBLIC_ID_123\\&quot;\\n    }\\n  }\\n}'&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h3>Response<\/h3>\n<p>A successful response returns the UCP token.<\/p>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Example response (HTTP 200 OK)'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n  \\\"token\\\": \\\"token_adyen_abc123xyz789\\\"\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h2>Specification of the UCP Tokenization Handler<\/h2>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'OpenAPI specification'\" :id=\"''\" :code-data=\"[{&quot;language&quot;:&quot;json&quot;,&quot;tabTitle&quot;:&quot;&quot;,&quot;content&quot;:&quot;openapi: 3.1.0\\ninfo:\\n  title: UcpPaymentHandlerResource\\n  description: OpenAPI spec for UcpPaymentHandlerResource\\n  termsOfService: https:\\\/\\\/www.adyen.com\\\/legal\\\/terms-and-conditions\\n  contact:\\n    name: Adyen Developer Experience team\\n    url: https:\\\/\\\/github.com\\\/Adyen\\\/adyen-openapi\\n  version: \\&quot;1\\&quot;\\n  x-framework: JERSEY\\n  x-origin-application: com.adyen.commercesuite.CommerceSuiteUcpApplication\\n  x-webapp: commerce-suite\\ntags:\\n- name: UcpPaymentHandlerResource\\npaths:\\n  \\\/v1\\\/handler\\\/tokenize:\\n    post:\\n      tags:\\n      - UcpPaymentHandlerResource\\n      summary: Universal Commerce Protocol (UCP) tokenize payment handler endpoint\\n      description: Creates PSP agentic token according to Universal Commerce Protocol\\n        (UCP) tokenize payment handler specification\\n      operationId: tokenize\\n      requestBody:\\n        content:\\n          application\\\/json:\\n            schema:\\n              $ref: \\&quot;#\\\/components\\\/schemas\\\/UcpTokenizeRequest\\&quot;\\n        required: true\\n      responses:\\n        \\&quot;200\\&quot;:\\n          description: OK - the request has succeeded.\\n          content:\\n            application\\\/json:\\n              schema:\\n                $ref: \\&quot;#\\\/components\\\/schemas\\\/UcpTokenizeResponse\\&quot;\\n      x-sortIndex: 0\\ncomponents:\\n  schemas:\\n    UcpBinding:\\n      required:\\n      - checkout_id\\n      type: object\\n      properties:\\n        checkout_id:\\n          minLength: 1\\n          type: string\\n          description: The checkout session identifier this token is bound to\\n        identity:\\n          description: The participant identity this token is bound to\\n          $ref: \\&quot;#\\\/components\\\/schemas\\\/UcpIdentity\\&quot;\\n    UcpCredential:\\n      required:\\n      - card_number_type\\n      - number\\n      - type\\n      type: object\\n      properties:\\n        card_number_type:\\n          minLength: 1\\n          pattern: ^fpan$|^network_token$\\n          type: string\\n          description: The type of card number provided\\n          enum:\\n          - fpan\\n          - network_token\\n        cryptogram:\\n          type: string\\n          description: The cryptogram for a network token\\n        cvc:\\n          pattern: \\&quot;^\\\\\\\\d{3,4}$\\&quot;\\n          type: string\\n          description: The card's security code\\n        eci_value:\\n          maxLength: 2\\n          minLength: 0\\n          type: string\\n          description: The Electronic Commerce Indicator value\\n        expiry_month:\\n          maximum: 12\\n          minimum: 1\\n          type: integer\\n          description: The card's expiration month\\n          format: int32\\n        expiry_year:\\n          type: integer\\n          description: The card's expiration year\\n          format: int32\\n        name:\\n          type: string\\n          description: The name of the cardholder\\n        number:\\n          minLength: 1\\n          pattern: \\&quot;^\\\\\\\\d{12,19}$\\&quot;\\n          type: string\\n          description: The card number\\n        type:\\n          minLength: 1\\n          pattern: ^card$\\n          type: string\\n          description: The credential type discriminator\\n          enum:\\n          - card\\n    UcpIdentity:\\n      required:\\n      - access_token\\n      type: object\\n      properties:\\n        access_token:\\n          minLength: 1\\n          type: string\\n          description: Unique identifier for this participant (merchant identifier)\\n    UcpTokenizeRequest:\\n      required:\\n      - binding\\n      - credential\\n      type: object\\n      properties:\\n        binding:\\n          description: Binding context for the token\\n          $ref: \\&quot;#\\\/components\\\/schemas\\\/UcpBinding\\&quot;\\n        credential:\\n          description: Credential to tokenize\\n          $ref: \\&quot;#\\\/components\\\/schemas\\\/UcpCredential\\&quot;\\n    UcpTokenizeResponse:\\n      required:\\n      - token\\n      type: object\\n      properties:\\n        token:\\n          type: string\\n          description: The token value\\n  securitySchemes:\\n    BearerAuth:\\n      type: http\\n      scheme: bearer\\n      description: Enter your API Key as the Bearer token.\\njsonSchemaDialect: https:\\\/\\\/spec.openapis.org\\\/oas\\\/3.1\\\/dialect\\\/base&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>","url":"https:\/\/docs.adyen.com\/online-payments\/agentic-commerce\/ucp-tokenization-handler","articleFields":{"description":"Tokenize payment credentials using the Universal Commerce Protocol (UCP) with Adyen.","robots":"noindex,nofollow","feedback_component":true,"filters_component":false,"decision_tree":"[]"},"algolia":{"url":"https:\/\/docs.adyen.com\/online-payments\/agentic-commerce\/ucp-tokenization-handler","title":"UCP Tokenization Handler","content":"Integrate with the Adyen UCP Tokenization Handler to securely tokenize payment credentials on behalf of merchants, following the Universal Commerce Protocol (UCP) tokenization specification (2026-01-23). Your agent platform sends shopper payment credentials to Adyen's endpoint, and Adyen returns a UCP token that is associated with the specific checkout session and merchant identifier.\nRequirements\n\n\n\nRequirement\nDescription\n\n\n\n\nIntegration type\nMake sure that you have set up an integration that follows the Universal Commerce Protocol (UCP) tokenization specification (2026-01-23).\n\n\nLimitations\nYou must complete our security review to approve your platform.\n\n\nSetup steps\nBefore you begin, reach out to your Adyen contact for the following: Access to UCP Tokenization Handler.Your dedicated agent platform API key.\n\n\n\nHow it works\nWhen a shopper initiates a transaction using your agent platform, the following flow occurs:\n\nThe shopper enters their payment details in your agent platform.\nYour agent platform sends the payment credentials to Adyen by making a POST \/ucp\/v1\/handler\/tokenize request.\nAdyen validates the credentials and returns a UCP token to your agent platform.\n\nCnNlcXVlbmNlRGlhZ3JhbQphdXRvbnVtYmVyCnBhcnRpY2lwYW50IFNob3BwZXIKcGFydGljaXBhbnQgUGxhdGZvcm0gYXMgWW91ciBhZ2VudCBwbGF0Zm9ybQpwYXJ0aWNpcGFudCBBZHllbgoKICAgIFNob3BwZXItPj5QbGF0Zm9ybTogRW50ZXJzIHBheW1lbnQgZGV0YWlscwogICAgUGxhdGZvcm0tPj5BZHllbjogUE9TVCAvdWNwL3YxL2hhbmRsZXIvdG9rZW5pemUKICAgIEFkeWVuLS0+PlBsYXRmb3JtOiBVQ1AgdG9rZW4K\nAuthentication\nAuthenticate your requests using your agent platform API key as a Bearer token in the Authorization header.\n\n    \n\n\nNever expose your credentials in a URL query string, or in agent-readable context. All calls must originate from your secure agent backend.\n\nCreate a token with payment details\nAfter the shopper enters their payment details, create a UCP token to securely store their payment information.\nUse the following base URL:\n\n\n\nEnvironment\nBase URL\n\n\n\n\nTest\nhttps:\/\/commerce-suite-test.adyen.com\/commerce-suite\/ucp\/v1\/handler\/tokenize\n\n\nLive\nhttps:\/\/commerce-suite.adyen.com\/commerce-suite\/ucp\/v1\/handler\/tokenize\n\n\n\nMake a POST \/tokenize request. The request body contains two objects: credential and binding.\ncredential object\n\n\n\nParameter\nType\nRequired\nDescription\n\n\n\n\ntype\nstring\n\nThe credential type. Possible value: card.\n\n\ncard_number_type\nstring\n\nThe type of card number. Set to fpan.\n\n\nnumber\nstring\n\nThe card number (12-19 digits).\n\n\nexpiry_month\ninteger\n\nThe card's expiration month (1-12).\n\n\nexpiry_year\ninteger\n\nThe card's expiration year (four digits).\n\n\ncvc\nstring\n\nThe card's security code (3-4 digits).\n\n\n\nbinding object\n\n\n\nParameter\nType\nRequired\nDescription\n\n\n\n\ncheckout_id\nstring\n\nThe UCP checkout session identifier that this token associated with.\n\n\nidentity.access_token\nstring\n\nA merchant identifier associated with the merchant_id provided by Adyen.\n\n\n\n\n    \n\nResponse\nA successful response returns the UCP token.\n\n    \n\nSpecification of the UCP Tokenization Handler\n\n    \n","type":"page","locale":"en","boost":17,"hierarchy":{"lvl0":"Home","lvl1":"Online payments","lvl2":"Agentic Commerce","lvl3":"UCP Tokenization Handler"},"hierarchy_url":{"lvl0":"https:\/\/docs.adyen.com\/","lvl1":"https:\/\/docs.adyen.com\/online-payments","lvl2":"https:\/\/docs.adyen.com\/online-payments\/agentic-commerce","lvl3":"\/online-payments\/agentic-commerce\/ucp-tokenization-handler"},"levels":4,"category":"Online Payments","category_color":"green","tags":["Tokenization","Handler"]}}
