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 fulfills
    • destinations[] — where to fulfill (address, store location)
    • groups[] — business-generated packages, each with selectable options[]
  • 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 Pickup

Schema Structure

When this capability is active, checkout is extended with fulfillment object.

Fulfillment Method Response

FieldTypeRequiredDescription
idstringYesUnique method identifier
typestringYesMethod type (shipping, pickup, etc)
line_item_idsstring[]YesLine item IDs this method fulfills
selected_destination_idstringNoSelected destination ID
destinationsarrayNoDestination list
groupsarrayYesFulfillment groups (packages)

Fulfillment Option Response

FieldTypeRequiredDescription
idstringYesUnique option identifier
titlestringYesOption title
descriptionstringNoOption description
totalsarrayYesPrice 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 description is absent

For options[].description:

  • MUST NOT repeat title or total — 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, and total
  • 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}]
              }
            ]
          }
        ]
      }
    ]
  }
}