Checkout
The Checkout API enables AI agents to create, update, and complete checkout sessions on behalf of buyers. This merchant-implemented REST interface provides a stateful checkout flow with comprehensive cart management, fulfillment options, and payment processing.
Overview
The Checkout API is designed for ChatGPT-driven checkout processes and provides:
- Session management: Create and maintain checkout state across multiple interactions
- Cart operations: Add, remove, or update items with automatic price and tax calculations
- Fulfillment handling: Present shipping options with estimated delivery times
- Payment processing: Secure payment completion with Stripe integration
- State synchronization: Each API call returns the latest authoritative checkout state
All API endpoints use HTTPS and return JSON. The merchant maintains full control over inventory, pricing, tax calculations, and payment processing.
Authentication
All API requests must be authenticated using a bearer token in the Authorization header:
Authorization: Bearer YOUR_API_KEY
The bearer token should be issued by the merchant and validated on each request to ensure authorized access to checkout operations.
Headers
Required headers
All API requests must include these headers:
| Header | Description |
|---|---|
Authorization | Bearer token for API authentication (e.g., Bearer sk_live_123) |
Content-Type | Must be application/json for requests with a body |
API-Version | API version date in format YYYY-MM-DD (e.g., 2026-01-30) |
Optional headers
These headers provide additional functionality:
| Header | Description |
|---|---|
Idempotency-Key | Unique key to safely retry requests without duplicate processing |
Request-Id | Unique identifier for request tracking and debugging |
Accept-Language | Preferred language for response messages (e.g., en-US) |
User-Agent | Client application identifier |
Signature | HMAC signature for webhook verification |
Timestamp | Unix timestamp for request timing validation |
Response headers
The API returns these headers with responses:
| Header | Description |
|---|---|
Idempotency-Key | Echo of the request's idempotency key if provided |
Request-Id | Unique identifier for the request |
Endpoints
Create checkout session
Creates a new checkout session with items and optional buyer information.
This endpoint initializes a new checkout session from a list of items. The response includes the complete checkout state with line items, pricing calculations, available fulfillment options, and any validation messages.
buyeritemsid and quantity.fulfillment_addressPOST /checkout_sessions
{
"buyer": {
"first_name": "Ada",
"last_name": "Lovelace",
"email": "ada@example.com"
},
"items": [
{ "id": "prod_123", "quantity": 2 }
],
"fulfillment_address": {
"name": "Ada Lovelace",
"line_one": "123 Market St",
"city": "San Francisco",
"state": "CA",
"country": "US",
"postal_code": "94103"
}
}
Status Codes:
201 Created- Checkout session successfully created400 Bad Request- Invalid request parameters or malformed data401 Unauthorized- Missing or invalid authentication credentials422 Unprocessable Entity- Valid request but business logic prevents processing (e.g., out of stock)
Retrieve checkout session
Retrieves the current state of an existing checkout session.
This endpoint returns the latest authoritative state for a specific checkout session. Use this to verify current pricing, fulfillment options, or session status.
checkout_session_idGET /checkout_sessions/cs_123
Status Codes:
200 OK- Checkout session successfully retrieved401 Unauthorized- Missing or invalid authentication credentials404 Not Found- Checkout session does not exist
Update checkout session
Updates an existing checkout session with new items, fulfillment address, or fulfillment option selection.
This endpoint applies changes to the checkout session and returns the updated state. You can update items, select a fulfillment option, modify the shipping address, or update buyer information. All parameters are optional; only include the fields you want to change.
checkout_session_idbuyeritemsfulfillment_addressfulfillment_option_idPOST /checkout_sessions/cs_123
{
"items": [
{ "id": "prod_123", "quantity": 3 }
],
"fulfillment_option_id": "ship_std"
}
Status Codes:
200 OK- Checkout session successfully updated400 Bad Request- Invalid request parameters401 Unauthorized- Missing or invalid authentication credentials404 Not Found- Checkout session does not exist422 Unprocessable Entity- Valid request but business logic prevents update
Complete checkout session
Finalizes the checkout by processing payment and creating an order.
This endpoint completes the checkout session by processing the payment method provided. The merchant must create an order and return it in the response. For Stripe integration, use the Shared Payment Token (SPT) to create and confirm a PaymentIntent.
checkout_session_idbuyerpayment_dataPOST /checkout_sessions/cs_123/complete
{
"payment_data": {
"token": "spt_1234567890abcdef",
"provider": "stripe"
}
}
Status Codes:
200 OK- Checkout successfully completed and order created400 Bad Request- Invalid request parameters401 Unauthorized- Missing or invalid authentication credentials402 Payment Required- Payment processing failed404 Not Found- Checkout session does not exist409 Conflict- Checkout session already completed or canceled422 Unprocessable Entity- Valid request but payment cannot be processed (see messages array for details)
Cancel checkout session
Cancels an active checkout session.
This endpoint cancels a checkout session that has not been completed. Use this to release inventory and clean up resources when a buyer exits the checkout process. Sessions that are already completed or canceled cannot be canceled.
checkout_session_idPOST /checkout_sessions/cs_123/cancel
Status Codes:
200 OK- Checkout session successfully canceled401 Unauthorized- Missing or invalid authentication credentials404 Not Found- Checkout session does not exist405 Method Not Allowed- Checkout session is already completed or canceled
Schema objects
Below are the data models used in the Checkout API.
Address
nameline_oneline_twocitystatecountrypostal_code{
"name": "Jane Doe",
"line_one": "123 Main Street",
"line_two": "Apt 4B",
"city": "New York",
"state": "NY",
"country": "US",
"postal_code": "10001"
}
AffiliateAttributionSource
Context about where the attribution originated.
type| Possible values |
|---|
url |
platform |
unknown |
url{
"type": "url",
"url": "https://example.com/product-review"
}
AffiliateAttributionMetadata
Flat key/value map for additional non-sensitive context. Keys must be strings; values must be strings, numbers, or booleans. Arrays and nested objects are NOT permitted.
[key]| Possible types |
|---|
string |
number |
boolean |
{
"campaign_type": "influencer",
"commission_rate": 0.15,
"is_verified": true
}
AffiliateAttribution
Optional affiliate attribution data for crediting third-party publishers. Write-only: not returned in responses. See RFC: Affiliate Attribution.
Forward compatibility: Servers SHOULD ignore unknown fields to support future extensions (per RFC §8.2).
providertokenpublisher_idcampaign_idcreative_idsub_idissued_atexpires_atmetadatatouchpoint| Possible values |
|---|
first |
last |
{
"provider": "impact.com",
"token": "atp_01J8Z3WXYZ9ABC",
"publisher_id": "pub_123",
"campaign_id": "camp_summer2026",
"touchpoint": "first",
"source": {
"type": "url",
"url": "https://example.com/product-review"
},
"issued_at": "2026-02-11T10:00:00Z",
"expires_at": "2026-02-11T11:00:00Z"
}
FulfillmentDetails
namephone_numberemailaddress{
"name": "John Smith",
"phone_number": "15551234567",
"email": "john.smith@example.com",
"address": {
"name": "John Smith",
"line_one": "555 Golden Gate Avenue",
"line_two": "Apt 401",
"city": "San Francisco",
"state": "CA",
"country": "US",
"postal_code": "94102"
}
}
CompanyInfo
nametax_iddepartmentcost_center{
"name": "Acme Corporation",
"tax_id": "12-3456789",
"department": "Marketing",
"cost_center": "CC-2001"
}
LoyaltyInfo
tierpoints_balancemember_since{
"tier": "Gold",
"points_balance": 5000,
"member_since": "2024-01-15T09:00:00Z"
}
TaxExemption
certificate_idcertificate_type| Possible values |
|---|
resale |
exempt_organization |
government |
exempt_regionsexpires_at{
"certificate_id": "cert_12345",
"certificate_type": "resale",
"exempt_regions": [
"CA",
"NY",
"TX"
],
"expires_at": "2027-12-31T23:59:59Z"
}
Buyer
first_namelast_namefull_nameemailphone_numbercustomer_idaccount_type| Possible values |
|---|
guest |
registered |
business |
authentication_status| Possible values |
|---|
authenticated |
guest |
requires_signin |
companyloyaltytax_exemption{
"first_name": "Alice",
"last_name": "Johnson",
"email": "alice.johnson@example.com",
"phone_number": "15559876543",
"customer_id": "cust_abc123",
"account_type": "registered",
"authentication_status": "authenticated"
}
InterventionCapabilities
Intervention capabilities. Context-specific fields: display_context, redirect_context, max_redirects, max_interaction_depth (requests only). required, enforcement (responses only). supported field contains intersection in responses.
supportedrequiredenforcement| Possible values |
|---|
always |
conditional |
optional |
display_context| Possible values |
|---|
native |
webview |
modal |
redirect |
redirect_context| Possible values |
|---|
in_app |
external_browser |
none |
max_redirectsmax_interaction_depth{
"supported": [
"3ds",
"address_verification"
],
"display_context": "webview",
"redirect_context": "in_app",
"max_redirects": 3,
"max_interaction_depth": 2
}
Capabilities
Capabilities object used in requests and responses. Context determines the party: requests are from Agents, responses are from Sellers. Seller responses contain the intersection of supported interventions.
paymentinterventionsextensions| Possible types |
|---|
arraystring |
arrayExtensionDeclaration |
{
"payment": {
"handlers": [
{
"id": "handler_1",
"name": "dev.acp.tokenized.card",
"version": "2026-01-30",
"spec": "https://example.com/handler-spec",
"requires_delegate_payment": true,
"requires_pci_compliance": false,
"psp": "stripe",
"config_schema": "https://example.com/config-schema",
"instrument_schemas": [
"https://example.com/instrument-schema"
],
"config": {}
}
]
},
"interventions": {
"supported": [
"3ds"
]
},
"extensions": [
"discount"
]
}
ExtensionDeclaration
Extension declaration in capabilities.extensions (response). Describes an active extension and which schema fields it adds.
nameextendsschemaspec{
"name": "discount@2026-01-30",
"extends": [
"$.CheckoutSession.discounts",
"$.CheckoutSessionCreateRequest.discounts"
],
"schema": "https://example.com/extensions/discount/schema.json",
"spec": "https://example.com/extensions/discount/spec"
}
PaymentMethodObject
Payment method with additional constraints (e.g., card brands, PSP routing)
methodbrandsfunding_typesproviders{
"method": "card",
"brands": [
"visa",
"mastercard",
"amex"
],
"funding_types": [
"credit",
"debit"
],
"providers": [
"stripe"
]
}
Item
idnameunit_amount{
"id": "item_123",
"name": "Wireless Headphones",
"unit_amount": 7999
}
Disclosure
type| Possible values |
|---|
disclaimer |
content_type| Possible values |
|---|
plain |
markdown |
content{
"type": "disclaimer",
"content_type": "plain",
"content": "This product contains small parts and is not suitable for children under 3 years."
}
CustomAttribute
display_namevalue{
"display_name": "Engraving",
"value": "Happy Birthday!"
}
MarketplaceSellerDetails
name{
"name": "TechGear Store"
}
PaymentHandler
Payment handler configuration and capabilities
idnameversionspecrequires_delegate_paymentrequires_pci_compliancepspconfig_schemainstrument_schemasconfig{
"id": "handler_stripe_card",
"name": "dev.acp.tokenized.card",
"version": "2026-01-30",
"spec": "https://example.com/payment-handlers/tokenized-card",
"requires_delegate_payment": true,
"requires_pci_compliance": false,
"psp": "stripe",
"config_schema": "https://example.com/schemas/card-config.json",
"instrument_schemas": [
"https://example.com/schemas/card-instrument.json"
],
"config": {
"publishable_key": "pk_test_123"
}
}
Payment
Payment configuration with handlers
handlers{
"handlers": [
{
"id": "handler_stripe_card",
"name": "dev.acp.tokenized.card",
"version": "2026-01-30",
"spec": "https://example.com/payment-handlers/tokenized-card",
"requires_delegate_payment": true,
"requires_pci_compliance": false,
"psp": "stripe",
"config_schema": "https://example.com/schemas/card-config.json",
"instrument_schemas": [
"https://example.com/schemas/card-instrument.json"
],
"config": {
"publishable_key": "pk_test_123"
}
}
]
}
VariantOption
namevalue{
"name": "Color",
"value": "Midnight Blue"
}
WeightInfo
valueunit| Possible values |
|---|
g |
kg |
oz |
lb |
{
"value": 250,
"unit": "g"
}
DimensionsInfo
lengthwidthheightunit| Possible values |
|---|
cm |
in |
{
"length": 15.5,
"width": 10.2,
"height": 5.8,
"unit": "cm"
}
DiscountDetail
codetype| Possible values |
|---|
percentage |
fixed |
bogo |
volume |
amountdescriptionsource| Possible values |
|---|
coupon |
automatic |
loyalty |
{
"code": "SAVE20",
"type": "percentage",
"amount": 1600,
"description": "20% off your order",
"source": "coupon"
}
LineItem
iditemquantitynamedescriptionimagesunit_amountdisclosurescustom_attributesmarketplace_seller_detailsproduct_idskuvariant_idcategorytagsweightdimensionsavailability_status| Possible values |
|---|
in_stock |
low_stock |
out_of_stock |
backorder |
pre_order |
available_quantitymax_quantity_per_orderfulfillable_onvariant_optionsdiscount_detailstax_exempttax_exemption_reasonparent_idtotals{
"id": "li_001",
"item": {
"id": "item_123",
"name": "Wireless Headphones",
"unit_amount": 7999
},
"quantity": 2,
"name": "Premium Wireless Headphones",
"unit_amount": 7999,
"availability_status": "in_stock",
"totals": [
{
"type": "subtotal",
"display_text": "Subtotal",
"amount": 15998
}
]
}
TaxBreakdownItem
jurisdictionrateamount{
"jurisdiction": "California State Tax",
"rate": 0.0725,
"amount": 1160
}
Total
type| Possible values |
|---|
items_base_amount |
items_discount |
subtotal |
discount |
fulfillment |
tax |
fee |
gift_wrap |
tip |
store_credit |
total |
display_textamountpresentment_amountdescriptionbreakdown{
"type": "tax",
"display_text": "Sales Tax",
"amount": 1400,
"breakdown": [
{
"jurisdiction": "California State Tax",
"rate": 0.0725,
"amount": 1160
},
{
"jurisdiction": "San Francisco County Tax",
"rate": 0.015,
"amount": 240
}
]
}
FulfillmentOptionPickup
typeidtitledescriptionlocationpickup_type| Possible values |
|---|
in_store |
curbside |
locker |
ready_bypickup_bytotals{
"type": "pickup",
"id": "pickup_001",
"title": "In-Store Pickup",
"description": "Pick up at our downtown location",
"location": {
"name": "Downtown Store",
"address": {
"name": "Downtown Store",
"line_one": "100 Market Street",
"city": "San Francisco",
"state": "CA",
"country": "US",
"postal_code": "94105"
},
"phone": "14155551234",
"instructions": "Use the pickup counter on the first floor"
},
"pickup_type": "in_store",
"ready_by": "2026-02-12T15:00:00Z",
"totals": [
{
"type": "fulfillment",
"display_text": "Pickup",
"amount": 0
}
]
}
FulfillmentOptionLocalDelivery
typeidtitledescriptiondelivery_windowservice_areatotals{
"type": "local_delivery",
"id": "local_001",
"title": "Same-Day Local Delivery",
"description": "Delivered by our team today",
"delivery_window": {
"start": "2026-02-11T16:00:00Z",
"end": "2026-02-11T20:00:00Z"
},
"service_area": {
"radius_miles": 10,
"center_postal_code": "94102"
},
"totals": [
{
"type": "fulfillment",
"display_text": "Delivery Fee",
"amount": 999
}
]
}
FulfillmentOptionShipping
typeidtitledescriptioncarrierearliest_delivery_timelatest_delivery_timetotals{
"type": "shipping",
"id": "ship_standard",
"title": "Standard Shipping",
"description": "Delivery in 5-7 business days",
"carrier": "USPS",
"earliest_delivery_time": "2026-02-16T00:00:00Z",
"latest_delivery_time": "2026-02-20T23:59:59Z",
"totals": [
{
"type": "fulfillment",
"display_text": "Shipping",
"amount": 599
}
]
}
FulfillmentOptionDigital
typeidtitledescriptiontotals{
"type": "digital",
"id": "digital_001",
"title": "Instant Download",
"description": "Available immediately after purchase",
"totals": [
{
"type": "fulfillment",
"display_text": "Digital Delivery",
"amount": 0
}
]
}
SelectedFulfillmentOption
type| Possible values |
|---|
shipping |
digital |
pickup |
local_delivery |
option_iditem_ids{
"type": "shipping",
"option_id": "ship_standard",
"item_ids": [
"li_001",
"li_002"
]
}
MessageInfo
typeseverity| Possible values |
|---|
info |
low |
medium |
high |
critical |
paramcontent_type| Possible values |
|---|
plain |
markdown |
content{
"type": "info",
"severity": "info",
"content_type": "plain",
"content": "Free shipping on orders over $50"
}
MessageWarning
typecode| Possible values |
|---|
low_stock |
high_demand |
shipping_delay |
price_change |
expiring_promotion |
limited_availability |
discount_code_expired |
discount_code_invalid |
discount_code_already_applied |
discount_code_combination_disallowed |
discount_code_minimum_not_met |
discount_code_user_not_logged_in |
discount_code_user_ineligible |
discount_code_usage_limit_reached |
severity| Possible values |
|---|
info |
low |
medium |
high |
critical |
paramcontent_type| Possible values |
|---|
plain |
markdown |
content{
"type": "warning",
"code": "low_stock",
"severity": "medium",
"param": "$.line_items[0]",
"content_type": "plain",
"content": "Only 3 items left in stock"
}
MessageError
Business-logic error within a valid CheckoutSession response. Used in messages[] on 2xx responses when the session is valid but has actionable issues (e.g. status "not_ready_for_payment"). The agent can respond by asking the buyer for corrections or trying alternatives. Use MessageError—not Error—when you can return a valid CheckoutSession and the problem is conversational (e.g. invalid email → code "invalid" and param "$.buyer.email"; out of stock → code "out_of_stock" and param "$.items[0]").
typecode| Possible values |
|---|
missing |
invalid |
out_of_stock |
payment_declined |
requires_sign_in |
requires_3ds |
low_stock |
quantity_exceeded |
coupon_invalid |
coupon_expired |
minimum_not_met |
maximum_exceeded |
region_restricted |
age_verification_required |
approval_required |
unsupported |
not_found |
conflict |
rate_limited |
expired |
intervention_required |
severity| Possible values |
|---|
info |
low |
medium |
high |
critical |
paramcontent_type| Possible values |
|---|
plain |
markdown |
content{
"type": "error",
"code": "out_of_stock",
"severity": "medium",
"param": "$.line_items[0]",
"content_type": "plain",
"content": "The item is out of stock"
}
GiftWrap
enabledstyle| Possible values |
|---|
birthday |
holiday |
elegant |
charge{
"enabled": true,
"style": "elegant",
"charge": 500
}
Link
type| Possible values |
|---|
terms_of_use |
privacy_policy |
return_policy |
shipping_policy |
contact_us |
about_us |
faq |
support |
titleurl{
"type": "return_policy",
"title": "Return Policy",
"url": "https://example.com/returns"
}
SplitPayment
amount{
"amount": 5000
}
PaymentData
handler_idinstrumentbilling_addresspurchase_order_numberpayment_terms| Possible values |
|---|
immediate |
net_15 |
net_30 |
net_60 |
net_90 |
due_dateapproval_required{
"handler_id": "handler_stripe_card",
"instrument": {
"type": "card",
"credential": {
"type": "spt",
"token": "spt_1234567890"
}
},
"billing_address": {
"name": "John Smith",
"line_one": "123 Main Street",
"city": "New York",
"state": "NY",
"country": "US",
"postal_code": "10001"
}
}
FulfillmentGroup
iditem_idsdestination_type| Possible values |
|---|
shipping |
pickup |
local_delivery |
digital |
fulfillment_detailslocation_idinstructions{
"id": "fg_001",
"item_ids": [
"li_001",
"li_002"
],
"destination_type": "shipping",
"instructions": "Leave package at front door"
}
EstimatedDelivery
earliestlatest{
"earliest": "2026-02-14T00:00:00Z",
"latest": "2026-02-18T23:59:59Z"
}
OrderConfirmation
confirmation_numberconfirmation_email_sentreceipt_urlinvoice_number{
"confirmation_number": "ORD-2026-02-11-001",
"confirmation_email_sent": true,
"receipt_url": "https://example.com/receipts/ord_123",
"invoice_number": "INV-2026-001"
}
SupportInfo
emailphonehourshelp_center_url{
"email": "support@example.com",
"phone": "18005551234",
"hours": "Mon-Fri 9am-5pm PST",
"help_center_url": "https://example.com/help"
}
Order
idcheckout_session_idorder_numberpermalink_urlstatus| Possible values |
|---|
confirmed |
processing |
shipped |
delivered |
estimated_deliveryconfirmationsupport{
"id": "ord_123456",
"checkout_session_id": "cs_abc123",
"order_number": "ORD-2026-001",
"permalink_url": "https://example.com/orders/ord_123456",
"status": "confirmed",
"estimated_delivery": {
"earliest": "2026-02-14T00:00:00Z",
"latest": "2026-02-18T23:59:59Z"
},
"confirmation": {
"confirmation_number": "ORD-2026-02-11-001",
"confirmation_email_sent": true,
"receipt_url": "https://example.com/receipts/ord_123456"
}
}
ProtocolVersion
Protocol metadata included in checkout responses. Indicates the ACP version.
version{
"version": "2026-01-30"
}
DiscountAllocation
Breakdown of how a discount amount was allocated to a specific target.
pathamount{
"path": "$.line_items[0]",
"amount": 500
}
Coupon
Coupon details describing the discount terms.
idnamepercent_offamount_offcurrencyduration| Possible values |
|---|
once |
repeating |
forever |
duration_in_monthsmax_redemptionstimes_redeemedmetadata{
"id": "coupon_summer2026",
"name": "Summer Sale 20% Off",
"percent_off": 20,
"duration": "once",
"max_redemptions": 1000,
"times_redeemed": 145
}
AppliedDiscount
A discount that was successfully applied to the checkout session.
idcodecouponamountautomaticstartendmethod| Possible values |
|---|
each |
across |
priorityallocations{
"id": "applied_discount_001",
"code": "SAVE20",
"coupon": {
"id": "coupon_summer2026",
"name": "Summer Sale 20% Off",
"percent_off": 20,
"duration": "once"
},
"amount": 1600,
"automatic": false,
"method": "across",
"priority": 1,
"allocations": [
{
"path": "$.line_items[0]",
"amount": 1600
}
]
}
RejectedDiscount
A discount code that could not be applied, with the reason.
codereasonmessage{
"code": "EXPIRED10",
"reason": "discount_code_expired",
"message": "This discount code expired on January 31, 2026"
}
DiscountErrorCode
Error codes for rejected discount codes, used in messages[].code.
value| Possible values |
|---|
discount_code_expired |
discount_code_invalid |
discount_code_already_applied |
discount_code_combination_disallowed |
discount_code_minimum_not_met |
discount_code_user_not_logged_in |
discount_code_user_ineligible |
discount_code_usage_limit_reached |
DiscountsRequest
Discount codes input for checkout create/update requests.
codes{
"codes": [
"SAVE20",
"FREESHIP"
]
}
DiscountsResponse
Discount codes input and applied discounts output in checkout responses.
codesappliedrejected{
"codes": [
"SAVE20"
],
"applied": [
{
"id": "applied_discount_001",
"code": "SAVE20",
"coupon": {
"id": "coupon_summer2026",
"name": "Summer Sale 20% Off",
"percent_off": 20,
"duration": "once"
},
"amount": 1600,
"automatic": false,
"method": "across"
}
],
"rejected": []
}
PaymentResponse
providerinstrumentshandlers{
"provider": "stripe",
"instruments": [],
"handlers": []
}
CheckoutSessionBase
idprotocolcapabilitiesbuyerstatus| Possible values |
|---|
incomplete |
not_ready_for_payment |
requires_escalation |
authentication_required |
ready_for_payment |
pending_approval |
complete_in_progress |
completed |
canceled |
in_progress |
expired |
currencypresentment_currencyexchange_rateexchange_rate_timestamplocaletimezoneline_itemsfulfillment_detailsfulfillment_optionsselected_fulfillment_optionsfulfillment_groupstotalsmessages| Possible types |
|---|
linksauthentication_metadatacreated_atupdated_atexpires_atcontinue_urlmetadataquote_idquote_expires_atdiscounts{
"id": "cs_abc123",
"protocol": {
"version": "2026-01-30"
},
"capabilities": {
"payment": {
"handlers": [
{
"id": "handler_stripe_card",
"name": "dev.acp.tokenized.card",
"version": "2026-01-30",
"spec": "https://example.com/payment-handlers/tokenized-card",
"requires_delegate_payment": true,
"requires_pci_compliance": false,
"psp": "stripe",
"config_schema": "https://example.com/schemas/card-config.json",
"instrument_schemas": [
"https://example.com/schemas/card-instrument.json"
],
"config": {}
}
]
},
"interventions": {
"supported": [
"3ds"
]
},
"extensions": [
{
"name": "discount@2026-01-30",
"extends": [
"$.CheckoutSession.discounts"
],
"schema": "https://example.com/extensions/discount/schema.json",
"spec": "https://example.com/extensions/discount/spec"
}
]
},
"status": "ready_for_payment",
"currency": "usd",
"line_items": [
{
"id": "li_001",
"item": {
"id": "item_123",
"name": "Wireless Headphones",
"unit_amount": 7999
},
"quantity": 2,
"name": "Premium Wireless Headphones",
"unit_amount": 7999,
"availability_status": "in_stock",
"totals": [
{
"type": "subtotal",
"display_text": "Subtotal",
"amount": 15998
}
]
}
],
"totals": [
{
"type": "subtotal",
"display_text": "Subtotal",
"amount": 15998
},
{
"type": "tax",
"display_text": "Sales Tax",
"amount": 1400
},
{
"type": "total",
"display_text": "Total",
"amount": 17398
}
],
"fulfillment_options": [
{
"type": "shipping",
"id": "ship_standard",
"title": "Standard Shipping",
"carrier": "USPS",
"totals": [
{
"type": "fulfillment",
"display_text": "Shipping",
"amount": 599
}
]
}
],
"messages": [],
"links": [
{
"type": "return_policy",
"title": "Return Policy",
"url": "https://example.com/returns"
}
],
"created_at": "2026-02-11T10:00:00Z",
"updated_at": "2026-02-11T10:05:00Z",
"expires_at": "2026-02-11T22:00:00Z"
}
CheckoutSession
idprotocolcapabilitiesbuyerstatus| Possible values |
|---|
incomplete |
not_ready_for_payment |
requires_escalation |
authentication_required |
ready_for_payment |
pending_approval |
complete_in_progress |
completed |
canceled |
in_progress |
expired |
currencypresentment_currencyexchange_rateexchange_rate_timestamplocaletimezoneline_itemsfulfillment_detailsfulfillment_optionsselected_fulfillment_optionsfulfillment_groupstotalsmessages| Possible types |
|---|
linksauthentication_metadatacreated_atupdated_atexpires_atcontinue_urlmetadataquote_idquote_expires_atdiscounts{
"id": "cs_abc123",
"protocol": {
"version": "2026-01-30"
},
"capabilities": {
"payment": {
"handlers": [
{
"id": "handler_stripe_card",
"name": "dev.acp.tokenized.card",
"version": "2026-01-30",
"spec": "https://example.com/payment-handlers/tokenized-card",
"requires_delegate_payment": true,
"requires_pci_compliance": false,
"psp": "stripe",
"config_schema": "https://example.com/schemas/card-config.json",
"instrument_schemas": [
"https://example.com/schemas/card-instrument.json"
],
"config": {}
}
]
},
"interventions": {
"supported": [
"3ds"
]
},
"extensions": [
{
"name": "discount@2026-01-30",
"extends": [
"$.CheckoutSession.discounts"
],
"schema": "https://example.com/extensions/discount/schema.json",
"spec": "https://example.com/extensions/discount/spec"
}
]
},
"status": "ready_for_payment",
"currency": "usd",
"line_items": [
{
"id": "li_001",
"item": {
"id": "item_123",
"name": "Wireless Headphones",
"unit_amount": 7999
},
"quantity": 2,
"name": "Premium Wireless Headphones",
"unit_amount": 7999,
"availability_status": "in_stock",
"totals": [
{
"type": "subtotal",
"display_text": "Subtotal",
"amount": 15998
}
]
}
],
"totals": [
{
"type": "subtotal",
"display_text": "Subtotal",
"amount": 15998
},
{
"type": "tax",
"display_text": "Sales Tax",
"amount": 1400
},
{
"type": "total",
"display_text": "Total",
"amount": 17398
}
],
"fulfillment_options": [
{
"type": "shipping",
"id": "ship_standard",
"title": "Standard Shipping",
"carrier": "USPS",
"totals": [
{
"type": "fulfillment",
"display_text": "Shipping",
"amount": 599
}
]
}
],
"messages": [],
"links": [
{
"type": "return_policy",
"title": "Return Policy",
"url": "https://example.com/returns"
}
],
"created_at": "2026-02-11T10:00:00Z",
"updated_at": "2026-02-11T10:05:00Z",
"expires_at": "2026-02-11T22:00:00Z"
}
CheckoutSessionWithOrder
idprotocolcapabilitiesbuyerstatus| Possible values |
|---|
incomplete |
not_ready_for_payment |
requires_escalation |
authentication_required |
ready_for_payment |
pending_approval |
complete_in_progress |
completed |
canceled |
in_progress |
expired |
currencypresentment_currencyexchange_rateexchange_rate_timestamplocaletimezoneline_itemsfulfillment_detailsfulfillment_optionsselected_fulfillment_optionsfulfillment_groupstotalsmessages| Possible types |
|---|
linksauthentication_metadatacreated_atupdated_atexpires_atcontinue_urlmetadataquote_idquote_expires_atdiscountsorder{
"id": "cs_abc123",
"protocol": {
"version": "2026-01-30"
},
"capabilities": {
"payment": {
"handlers": [
{
"id": "handler_stripe_card",
"name": "dev.acp.tokenized.card",
"version": "2026-01-30",
"spec": "https://example.com/payment-handlers/tokenized-card",
"requires_delegate_payment": true,
"requires_pci_compliance": false,
"psp": "stripe",
"config_schema": "https://example.com/schemas/card-config.json",
"instrument_schemas": [
"https://example.com/schemas/card-instrument.json"
],
"config": {}
}
]
},
"interventions": {
"supported": [
"3ds"
]
},
"extensions": [
{
"name": "discount@2026-01-30",
"extends": [
"$.CheckoutSession.discounts"
],
"schema": "https://example.com/extensions/discount/schema.json",
"spec": "https://example.com/extensions/discount/spec"
}
]
},
"status": "completed",
"currency": "usd",
"line_items": [
{
"id": "li_001",
"item": {
"id": "item_123",
"name": "Wireless Headphones",
"unit_amount": 7999
},
"quantity": 2,
"name": "Premium Wireless Headphones",
"unit_amount": 7999,
"availability_status": "in_stock",
"totals": [
{
"type": "subtotal",
"display_text": "Subtotal",
"amount": 15998
}
]
}
],
"totals": [
{
"type": "subtotal",
"display_text": "Subtotal",
"amount": 15998
},
{
"type": "tax",
"display_text": "Sales Tax",
"amount": 1400
},
{
"type": "total",
"display_text": "Total",
"amount": 17398
}
],
"fulfillment_options": [
{
"type": "shipping",
"id": "ship_standard",
"title": "Standard Shipping",
"carrier": "USPS",
"totals": [
{
"type": "fulfillment",
"display_text": "Shipping",
"amount": 599
}
]
}
],
"messages": [],
"links": [
{
"type": "return_policy",
"title": "Return Policy",
"url": "https://example.com/returns"
}
],
"created_at": "2026-02-11T10:00:00Z",
"updated_at": "2026-02-11T10:30:00Z",
"order": {
"id": "ord_123456",
"checkout_session_id": "cs_abc123",
"order_number": "ORD-2026-001",
"permalink_url": "https://example.com/orders/ord_123456",
"status": "confirmed"
}
}
CheckoutSessionCreateRequest
buyerline_itemscurrencyfulfillment_detailscapabilitiesfulfillment_groupsaffiliate_attributioncouponsdiscountslocaletimezonequote_idmetadata{
"line_items": [
{
"id": "item_123",
"name": "Wireless Headphones",
"unit_amount": 7999
}
],
"currency": "usd",
"capabilities": {
"payment": {
"handlers": [
{
"id": "handler_stripe_card",
"name": "dev.acp.tokenized.card",
"version": "2026-01-30",
"spec": "https://example.com/payment-handlers/tokenized-card",
"requires_delegate_payment": true,
"requires_pci_compliance": false,
"psp": "stripe",
"config_schema": "https://example.com/schemas/card-config.json",
"instrument_schemas": [
"https://example.com/schemas/card-instrument.json"
],
"config": {}
}
]
},
"interventions": {
"supported": [
"3ds"
]
},
"extensions": [
"discount"
]
}
}
CheckoutSessionUpdateRequest
buyerline_itemsfulfillment_detailsfulfillment_groupsselected_fulfillment_optionscouponsdiscounts{
"selected_fulfillment_options": [
{
"type": "shipping",
"option_id": "ship_standard",
"item_ids": [
"li_001"
]
}
]
}
RiskSignals
ip_addressuser_agentaccept_languagesession_iddevice_fingerprint{
"ip_address": "203.0.113.45",
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)",
"accept_language": "en-US,en;q=0.9",
"session_id": "sess_abc123",
"device_fingerprint": "fp_xyz789"
}
CheckoutSessionCompleteRequest
buyerpayment_dataauthentication_resultaffiliate_attributionrisk_signals{
"buyer": {
"first_name": "John",
"last_name": "Smith",
"email": "johnsmith@mail.com"
},
"payment_data": {
"handler_id": "handler_stripe_card",
"instrument": {
"type": "card",
"credential": {
"type": "spt",
"token": "spt_123"
}
}
}
}
AuthenticationMetadata
Seller-provided authentication metadata for 3DS flows.
channelacquirer_detailsdirectory_server| Possible values |
|---|
american_express |
mastercard |
visa |
flow_preference{
"channel": {
"type": "browser",
"browser": {
"accept_header": "text/html,application/xhtml+xml",
"ip_address": "203.0.113.45",
"javascript_enabled": true,
"language": "en-US",
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)",
"color_depth": 24,
"java_enabled": false,
"screen_height": 1080,
"screen_width": 1920,
"timezone_offset": -480
}
},
"acquirer_details": {
"acquirer_bin": "123456",
"acquirer_country": "US",
"acquirer_merchant_id": "merchant_123",
"merchant_name": "Example Store"
},
"directory_server": "visa"
}
AuthenticationResult
Agent-provided authentication results returned to the seller for card-based 3D Secure.
outcome| Possible values |
|---|
abandoned |
attempt_acknowledged |
authenticated |
canceled |
denied |
informational |
internal_error |
not_supported |
processing_error |
rejected |
outcome_details{
"outcome": "authenticated",
"outcome_details": {
"three_ds_cryptogram": "AbCdEfGhIjKlMnOpQrStUvWxY0=",
"electronic_commerce_indicator": "05",
"transaction_id": "dsTransId_abc123",
"version": "2.2.0"
}
}
IntentTrace
reason_code| Possible values |
|---|
price_sensitivity |
shipping_cost |
shipping_speed |
product_fit |
trust_security |
returns_policy |
payment_options |
comparison |
timing_deferred |
other |
trace_summarymetadata{
"reason_code": "price_sensitivity",
"trace_summary": "Customer mentioned the price was higher than expected and wanted to compare with other options",
"metadata": {
"compared_sites": 3
}
}
CancelSessionRequest
intent_trace{
"intent_trace": {
"reason_code": "price_sensitivity",
"trace_summary": "Customer mentioned the price was higher than expected"
}
}
Error
Protocol-level error returned in 4xx/5xx responses when the server cannot return a valid CheckoutSession at all (e.g. malformed request or unexpected failure). Use Error—not MessageError—when there is no valid session state to return. type semantics: invalid_request — malformed request, missing required fields, or invalid JSON; request_not_idempotent — idempotency violation; processing_error — unexpected server-side failure; service_unavailable — temporary unavailability.
type| Possible values |
|---|
invalid_request |
request_not_idempotent |
processing_error |
service_unavailable |
codemessageparam{
"type": "invalid_request",
"code": "missing_required_field",
"message": "The 'currency' field is required",
"param": "$.currency"
}