Fulfillment Extension
Basic Information
- Capability Name:
dev.ucp.shopping.fulfillment - Version:
2026-01-11 - Official Specification: fulfillment.md
Overview
The Fulfillment extension enables businesses to advertise support for physical goods fulfillment (shipping, pickup, etc).
This extension adds a fulfillment field to Checkout containing:
methods[]— fulfillment methods applicable to cart items (shipping, pickup, etc)line_item_ids— which items this method fulfillsdestinations[]— where to fulfill (address, store location)groups[]— business-generated packages, each with selectableoptions[]
available_methods[]— inventory availability per item (optional)
Mental Model
methods[0] Shipping
line_item_ids: 👕👖
selected_destination_id = destinations[0].id → 123 Fake St
groups[0] → 📦👕👖
selected_option_id = options[0].id → Standard $5
options[1] → Express $10
methods[1] Pick Up in Store
line_item_ids: 👞
selected_destination_id = destinations[0].id → Uptown Store
groups[0] → 📦👞
selected_option_id = options[0].id → In-Store Pickup
options[1] → Curbside PickupSchema Structure
When this capability is active, checkout is extended with fulfillment object.
Fulfillment Method Response
| Field | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Unique method identifier |
type | string | Yes | Method type (shipping, pickup, etc) |
line_item_ids | string[] | Yes | Line item IDs this method fulfills |
selected_destination_id | string | No | Selected destination ID |
destinations | array | No | Destination list |
groups | array | Yes | Fulfillment groups (packages) |
Fulfillment Option Response
| Field | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Unique option identifier |
title | string | Yes | Option title |
description | string | No | Option description |
totals | array | Yes | Price totals |
Rendering
Fulfillment options are designed for method-agnostic rendering.
Business Responsibilities
For options[].title:
- MUST distinguish this option from its siblings
- SHOULD include method and speed (e.g., “Express Shipping”, “Curbside Pickup”)
- MUST be sufficient for buyer decision if
descriptionis absent
For options[].description:
- MUST NOT repeat
titleortotal— provides supplementary context only - SHOULD include timing, carrier, or other decision-relevant details
- SHOULD be a complete phrase (e.g., “Arrives Dec 12-15 via USPS”)
Platform Responsibilities
Platforms SHOULD treat fulfillment as a generic, renderable structure:
- Render each option as a card using
title,description, andtotal - Present options in the order provided by the business
- Present all methods returned — method selection is a buyer decision
Configuration
Businesses and platforms declare fulfillment constraints in their profiles.
Platform Profile
Platforms declare their rendering capabilities using platform_config:
{
"name": "dev.ucp.shopping.fulfillment",
"version": "2026-01-11",
"config": {
"supports_multi_group": true
}
}Business Profile
Businesses declare what fulfillment configurations they support using merchant_config:
{
"capabilities": [{
"name": "dev.ucp.shopping.fulfillment",
"version": "2026-01-11",
"config": {
"allows_multi_destination": {
"shipping": true
},
"allows_method_combinations": [["shipping", "pickup"]]
}
}]
}Example
Basic
{
"fulfillment": {
"methods": [
{
"id": "method_1",
"type": "shipping",
"line_item_ids": ["shirt", "pants"],
"selected_destination_id": "dest_1",
"destinations": [
{
"id": "dest_1",
"street_address": "123 Main St",
"address_locality": "Springfield",
"address_region": "IL",
"postal_code": "62701",
"address_country": "US"
}
],
"groups": [
{
"id": "package_1",
"line_item_ids": ["shirt", "pants"],
"selected_option_id": "standard",
"options": [
{
"id": "standard",
"title": "Standard Shipping",
"description": "Arrives Dec 12-15 via USPS",
"totals": [{"type": "total", "amount": 500}]
},
{
"id": "express",
"title": "Express Shipping",
"description": "Arrives Dec 10-11 via FedEx",
"totals": [{"type": "total", "amount": 1000}]
}
]
}
]
}
]
}
}