This guide provides the technical API reference and payload schemas for
integrating the Universal Commerce Protocol (UCP) Cart API in version
2026-04-08.
Before building your endpoints, ensure you have reviewed the Cart API overview for the high-level concepts and prerequisites.
Create cart
This endpoint allows the creation of a new cart session. To integrate, implement
the CreateCart endpoint (POST /carts). When a user opts to transfer their
cart, Google calls this endpoint with all the line items details. Your system
must respond with a continue_url directing the user to their pre-populated
cart on your site.
- Endpoint:
POST /carts - Trigger: a single
CreateCart(POST /carts) request is triggered only when the user clicks the transfer button (for example, Checkout on merchant) to transfer their cart to your store.
Cart flow
The cart flow and state work as follows:
- Accumulation on Google: when a user adds items to their cart, Google accumulates those items locally. Google does not fire multiple API calls as items are added.
- The payload: the single
POST /cartsrequest will contain the complete array of all accumulatedline_itemsat once. - Redirection and state: the merchant's backend responds with a
continue_urlpointing to the pre-populated cart on their website.
Request: Google sends the array of line_items to be added to the cart.
Request example:
{
"line_items": [
{
"item": {
"id": "item_123"
},
"quantity": 2
}
]
}
Response: You return the initialized cart session including line item
details, totals, and a continue_url. The continue_url field in the response
must direct the user back to a page on your site where they can continue
managing the cart. This typically links to your cart or checkout page with the
session identified by id pre-loaded.
Response example:
{
"ucp": {
"version": "2026-04-08",
"capabilities": {
"dev.ucp.shopping.cart": [{"version": "2026-04-08"}]
}
},
"id": "cart_abc123",
"line_items": [
{
"id": "li_1",
"item": {
"id": "item_123",
"title": "Red T-Shirt",
"price": 2500
},
"quantity": 2,
"totals": [
{"type": "subtotal", "amount": 5000},
{"type": "total", "amount": 5000}
]
}
],
"currency": "USD",
"totals": [
{
"type": "subtotal",
"amount": 5000
},
{
"type": "total",
"amount": 5000,
"display_text": "Estimated total (taxes calculated at checkout)"
}
],
// Used for redirecting the user back to the merchant's cart experience from Google surfaces.
"continue_url": "https://business.example.com/checkout?cart=cart_abc123",
// Indicate the timestamp at which the cart session will expire and become invalid.
"expires_at": "2026-01-16T12:00:00Z"
}
Error handling
For complete guidelines on how to format error messages and the distinction between protocol and business logic errors, see the Error codes.