Build the Agentic Commerce Protocol checkout endpointsPrivate preview
Learn about the Agentic Commerce Protocol specification.
You can use the Agentic Commerce Protocol (ACP) to enable AI agents to manage commerce transactions between buyers and sellers. This specification defines the methods and data structures for creating, updating, and completing checkout flows.
You can find examples for REST integrations below.
Create a Checkout Session 
You can create a new Checkout Session with buyer details, line items, and shipping information.
Request 
Specify the parameters required for your request.
Parameter | Type | Description |
---|---|---|
items | array | Array of items you can purchase. Required |
buyer | hash optional | Information about the buyer. |
fulfillment_address | hash optional | Address where the order will ship. |
Example request:
POST /checkouts { "items": [ { "id": "item_123", "quantity": 2 } ], "buyer": { "first_name": "John", "last_name": "Doe", "email": "john.doe@example.com", "phone_number": "+1234567890" }, "fulfillment_address": { "name": "John Doe", "line_one": "123 Main St", "line_two": "Apt 4B", "city": "San Francisco", "state": "CA", "country": "US", "postal_code": "94105" } }
Response 
The response returns the current state of the checkout from the seller.
Example response:
{ "id": "checkout_abc123", "buyer": { "first_name": "John", "last_name": "Doe", "email": "john.doe@example.com", "phone_number": "+1234567890" }, "payment_provider": { "provider": "stripe", "supported_payment_methods": ["card"] }, "status": "ready_for_payment", "currency": "usd", "line_items": [ { "id": "item_123", "item": { "id": "item_123", "quantity": 2 }, "base_amount": 2000, "discount": 0, "total": 2000, "subtotal": 2000, "tax": 0 } ], "fulfillment_address": { "name": "John Doe", "line_one": "123 Main St", "line_two": "Apt 4B", "city": "San Francisco", "state": "CA", "country": "US", "postal_code": "94105" }, "fulfillment_options": [ { "type": "shipping", "id": "shipping_fast", "title": "Express Shipping", "subtitle": "2-3 business days", "carrier": "Shipping Co", "subtotal": 150, "tax": 0, "total": 150 } ], "fulfillment_option_id": "shipping_fast", "totals": [ { "type": "subtotal", "display_text": "Subtotal", "amount": 2000 }, { "type": "fulfillment", "display_text": "Shipping", "amount": 150 }, { "type": "tax", "display_text": "Tax", "amount": 100 }, { "type": "total", "display_text": "Total", "amount": 2250 } ], "messages": [], "links": [] }
Retrieve a Checkout object 
To retrieve an existing Checkout Session using its ID, make a request to the appropriate API endpoint with the ID included in the request.
Request 
Specify the parameters required for your request.
Parameter | Type | Description |
---|---|---|
id | string | Unique identifier for the checkout process. Required |
Example request:
GET /checkouts/:id
Response 
The response returns the current state of the checkout from the seller.
Example response:
{ "id": "checkout_abc123", "buyer": { "first_name": "John", "last_name": "Doe", "email": "john.doe@example.com", "phone_number": "+1234567890" }, "payment_provider": { "provider": "stripe", "supported_payment_methods": ["card"] }, "status": "ready_for_payment", "currency": "usd", "line_items": [ { "id": "item_123", "item": { "id": "item_123", "quantity": 2 }, "base_amount": 2000, "discount": 0, "total": 2000, "subtotal": 2000, "tax": 0 } ], "fulfillment_address": { "name": "John Doe", "line_one": "123 Main St", "line_two": "Apt 4B", "city": "San Francisco", "state": "CA", "country": "US", "postal_code": "94105" }, "fulfillment_options": [ { "type": "shipping", "id": "shipping_fast", "title": "Express Shipping", "subtitle": "2-3 business days", "carrier": "Shipping Co", "subtotal": 150, "tax": 0, "total": 150 } ], "fulfillment_option_id": "shipping_fast", "totals": [ { "type": "subtotal", "display_text": "Subtotal", "amount": 2000 }, { "type": "fulfillment", "display_text": "Shipping", "amount": 150 }, { "type": "tax", "display_text": "Tax", "amount": 100 }, { "type": "total", "display_text": "Total", "amount": 2250 } ], "messages": [], "links": [] }
Update a Checkout Session 
You can update an existing Checkout Session by modifying line items, shipping address, or fulfillment options.
Request 
Specify the parameters required for your request.
Example request:
PUT /checkouts/:id { "items": [ { "id": "item_123", "quantity": 3 }, { "id": "item_456", "quantity": 1 } ], "fulfillment_address": { "name": "John Doe", "line_one": "456 Oak Ave", "city": "Los Angeles", "state": "CA", "country": "US", "postal_code": "90210" }, "fulfillment_option_id": "shipping_fast" }
Response 
The response returns the current state of the checkout from the seller.
Example response:
{ "id": "checkout_abc123", "buyer": { "first_name": "John", "last_name": "Doe", "email": "john.doe@example.com", "phone_number": "+1234567890" }, "payment_provider": { "provider": "stripe", "supported_payment_methods": ["card"] }, "status": "ready_for_payment", "currency": "usd", "line_items": [ { "id": "item_123", "item": { "id": "item_123", "quantity": 3 }, "base_amount": 3000, "discount": 0, "total": 3000, "subtotal": 3000, "tax": 0 }, { "id": "item_456", "item": { "id": "item_456", "quantity": 1 }, "base_amount": 500, "discount": 0, "total": 500, "subtotal": 500, "tax": 0 } ], "fulfillment_address": { "name": "John Doe", "line_one": "456 Oak Ave", "city": "Los Angeles", "state": "CA", "country": "US", "postal_code": "90210" }, "fulfillment_options": [ { "type": "shipping", "id": "shipping_fast", "title": "Express Shipping", "subtitle": "2-3 business days", "carrier": "Shipping Co", "subtotal": 150, "tax": 0, "total": 150 } ], "fulfillment_option_id": "shipping_fast", "totals": [ { "type": "subtotal", "display_text": "Subtotal", "amount": 3500 }, { "type": "fulfillment", "display_text": "Shipping", "amount": 150 }, { "type": "tax", "display_text": "Tax", "amount": 100 }, { "type": "total", "display_text": "Total", "amount": 3750 } ], "messages": [], "links": [] }
Complete a Checkout 
You can complete the checkout process by processing the payment and creating an order.
Request 
Specify the parameters required for your request.
Example request:
POST /checkouts/:id/complete { "payment_data": { "token": "spt_123", "provider": "stripe", "billing_address": { "name": "John Doe", "line_one": "123 Main St", "line_two": "Apt 4B", "city": "San Francisco", "state": "CA", "country": "US", "postal_code": "94105" } } }
Response 
The response returns the current state of the checkout from the seller.
Example response:
{ "id": "checkout_abc123", "buyer": { "first_name": "John", "last_name": "Doe", "email": "john.doe@example.com", "phone_number": "+1234567890" }, "status": "completed", "currency": "usd", "line_items": [ { "id": "item_123", "item": { "id": "item_123", "quantity": 3 }, "base_amount": 3000, "discount": 0, "total": 3000, "subtotal": 3000, "tax": 0 }, { "id": "item_456", "item": { "id": "item_456", "quantity": 1 }, "base_amount": 500, "discount": 0, "total": 500, "subtotal": 500, "tax": 0 } ], "fulfillment_address": { "name": "John Doe", "line_one": "456 Oak Ave", "city": "Los Angeles", "state": "CA", "country": "US", "postal_code": "90210" }, "fulfillment_options": [ { "type": "shipping", "id": "shipping_fast", "title": "Express Shipping", "subtitle": "2-3 business days", "carrier": "Shipping Co", "subtotal": 150, "tax": 0, "total": 150 } ], "fulfillment_option_id": "shipping_fast", "totals": [ { "type": "subtotal", "display_text": "Subtotal", "amount": 3500 }, { "type": "fulfillment", "display_text": "Shipping", "amount": 150 }, { "type": "tax", "display_text": "Tax", "amount": 100 }, { "type": "total", "display_text": "Total", "amount": 3750 } ], "messages": [], "links": [] }
Cancel a Checkout 
You can cancel an existing Checkout Session if necessary.
Request 
Specify the parameters required for your request.
Parameter | Type | Description |
---|---|---|
id | string | Unique identifier for the checkout process. Required |
Example request:
POST /checkouts/:id/cancel {}
Response 
The response returns the current state of the checkout from the seller.
Example response:
{ "id": "checkout_abc123", "buyer": { "first_name": "John", "last_name": "Doe", "email": "john.doe@example.com", "phone_number": "+1234567890" }, "status": "canceled", "currency": "usd", "line_items": [ { "id": "item_123", "item": { "id": "item_123", "quantity": 3 }, "base_amount": 3000, "discount": 0, "total": 3000, "subtotal": 3000, "tax": 0 }, { "id": "item_456", "item": { "id": "item_456", "quantity": 1 }, "base_amount": 500, "discount": 0, "total": 500, "subtotal": 500, "tax": 0 } ], "fulfillment_address": { "name": "John Doe", "line_one": "456 Oak Ave", "city": "Los Angeles", "state": "CA", "country": "US", "postal_code": "90210" }, "fulfillment_options": [ { "type": "shipping", "id": "shipping_fast", "title": "Express Shipping", "subtitle": "2-3 business days", "carrier": "Shipping Co", "subtotal": 150, "tax": 0, "total": 150 } ], "fulfillment_option_id": "shipping_fast", "totals": [ { "type": "subtotal", "display_text": "Subtotal", "amount": 3500 }, { "type": "fulfillment", "display_text": "Shipping", "amount": 150 }, { "type": "tax", "display_text": "Tax", "amount": 100 }, { "type": "total", "display_text": "Total", "amount": 3750 } ], "messages": [ { "type": "info", "content_type": "plain", "content": "Checkout cancelled: Customer changed their mind" } ], "links": [] }
Data structures 
This section outlines the data structures involved in the checkout process.
Buyer 
The buyer is an individual who initiates the purchase.
Parameter | Type | Description |
---|---|---|
first_name | string | The first name of the buyer. Required |
last_name | string | The last name of the buyer. Required |
string | The email of the buyer. Required | |
phone_number | string optional | The phone number of the buyer. |
Item 
The Item is a product or service that the buyer requests to purchase, along with its quantity.
Parameter | Type | Description |
---|---|---|
id | string | Unique identifier for the item. Required |
quantity | integer | The requested quantity of the item for this checkout. Required |
LineItem 
The LineItem includes provides about the item added to the checkout, including the amount.
Address 
The Address provides the buyer’s shipping or billing address.
Parameter | Type | Description |
---|---|---|
name | string | Name of the person to whom the items are fulfilled. Required |
line_one | string | Address line 1 (e.g., street, PO Box, or company name). Required |
line_two | string optional | Address line 2 (e.g., apartment, suite, unit, or building). |
city | string | City, district, suburb, town, or village. Required |
state | string | State, county, province, or region. Required |
country | string | Two-letter country code (ISO 3166-1 alpha-2). Required |
postal_code | string | ZIP or postal code. Required |
PaymentData 
The PaymentData provides the buyer’s payment details, including the tokenized value and the payment provider.
Total 
The Total provides a summary of the overall total.
Parameter | Type | Description |
---|---|---|
type |
| The type of total. Required Possible values: |
display_text | string | The display text for the total. Required |
amount | integer | The amount of the total. Required |
FulfillmentOption 
Fulfillment options are either shipping or digital. See ShippingFulfillmentOption and DigitalFulfillmentOption for specific implementations.
ShippingFulfillmentOption 
The ShippingFulfillmentOption defines the parameters for shipping fulfillment options, including the carrier information and delivery times.
Parameter | Type | Description |
---|---|---|
type |
| The type of fulfillment option. Required Possible values: |
id | string | Unique identifier for the shipping fulfillment option. Required |
title | string | The title of the shipping fulfillment option. Required |
subtitle | string optional | The subtitle of the shipping fulfillment option. |
carrier | string optional | The carrier of the shipping fulfillment option. |
earliest_delivery_time | string optional | The earliest delivery time of the shipping fulfillment option (ISO 8601 format). |
latest_delivery_time | string optional | The latest delivery time of the shipping fulfillment option (ISO 8601 format). |
subtotal | integer | The subtotal of the shipping fulfillment option. Required |
tax | integer | The tax of the shipping fulfillment option. Required |
total | integer | The total of the shipping fulfillment option. Required |
DigitalFulfillmentOption 
The DigitalFulfillmentOption defines the parameters for digital fulfillment options, including the title and pricing information.
Parameter | Type | Description |
---|---|---|
type |
| The type of fulfillment option. Required Possible values: |
id | string | Unique identifier for the digital fulfillment option. Required |
title | string | The title of the digital fulfillment option. Required |
subtitle | string optional | The subtitle of the digital fulfillment option. |
subtotal | integer | The subtotal of the digital fulfillment option. Required |
tax | integer | The tax of the digital fulfillment option. Required |
total | integer | The total of the digital fulfillment option. Required |
PaymentProvider 
The PaymentProvider defines the seller’s supported payment provider and available methods.
Parameter | Type | Description |
---|---|---|
provider |
| The seller’s payment provider. Required Possible values: |
supported_payment_methods |
| The payment methods allowed by the seller. Required Possible values: |
Message 
Messages are either informational or error messages.
InfoMessage 
The InfoMessage represents informational messages, detailing the type and content.
Parameter | Type | Description |
---|---|---|
type |
| String value representing message type. Possible values: |
param | string optional | RFC 9535 JSONPath to the component of the Checkout Session that the message references. |
content_type |
| The type of content of the message. Possible values: |
content | string | The content of the message. |
ErrorMessage 
The ErrorMessage represents error messages, detailing the type and code.
Parameter | Type | Description |
---|---|---|
type |
| String value representing message type. Possible values: |
code |
| The code of the error. Possible values: |
param | string optional | RFC 9535 JSONPath to the component of the Checkout Session that the message references. |
content_type |
| The type of content of the message. Possible values: |
content | string | The content of the message. |
Error 
The Error defines the parameters related to errors occurring during the checkout process.
Parameter | Type | Description |
---|---|---|
type |
| The type of error. Required Possible values: |
code | string | The implementation-defined error code. Required |
message | string | The message of the error. Required |
param | string optional | RFC 9535 JSONPath to the component of the Checkout Session that the message references. |
Link 
The Link defines the parameters for links related to policies and agreements.
Parameter | Type | Description |
---|---|---|
type |
| String value representing the type of link. Required Possible values: |
url | string | The URL of the link. Required |
Order 
The Order provides the result of the checkout process and offers details to the buyer for order lookup.
Parameter | Type | Description |
---|---|---|
id | string | Unique identifier for the order. Required |
checkout_session_id | string | Reference to the Checkout Session that the order originated from. Required |
permalink_url | string | The permalink URL for the order. Required |
Event 
The Event defines the parameters for events related to order creation and updates.
Parameter | Type | Description |
---|---|---|
type |
| The type of event. Required Possible values: |
data | hash | Event data containing order information. Required |
OrderEventData 
The OrderEventData includes data related to order events.
Refund 
The Refund defines the parameters for managing refunds associated with completed orders.
Parameter | Type | Description |
---|---|---|
type |
| The type of refund. Required Possible values: |
amount | integer | The amount of the refund. Required |