Skip to content

Extended Catalog

Capability: dev.asp.services.catalog Version: 2026-02-19 Schema: catalog.json

Purpose

Retrieves a provider's complete catalog with hierarchical sections, items with pricing, and modifier groups for customization.

Endpoint

GET /catalog/{provider_id}/catalog

Response Structure

A catalog is organized as:

Service Catalog
├── provider_id, provider_name
└── sections[]
    ├── id, title
    └── items[]
        ├── id, title, description, price_cents, images[]
        └── modifier_groups[]
            ├── id, title, required, min/max_selections
            └── options[]
                ├── id, label, price_delta_cents

Schema: Catalog Item

Field Type Required Description
id string Yes Unique item identifier.
title string Yes Display name of the item.
description string Yes Item description.
price_cents integer Yes Base price in cents.
image [image] Yes Item image.
modifier_groups array\<modifier_group> No Available customization groups for this item.
is_available boolean Yes Whether this item is currently available for ordering. Default: True
is_featured boolean Yes Whether this item is currently featured.
tags array\<string> No Free-form tags relevant to this item, e.g. 'fast food', 'gourmet', 'date night', 'romantic'.
images array\<image> No Multiple images for different contexts (thumbnail for list view, hero for detail page, etc.).

Schema: Modifier Group

Field Type Required Description
id string Yes Unique group identifier.
title string Yes Display title for this modifier group.
required boolean No Whether the user must select an option from this group. Default: False
min_selections integer No Minimum number of options the user must select. Default: 0
max_selections integer No Maximum number of options the user may select. Default: 1
options array\<modifier_option> Yes Available options in this group.

Schema: Modifier Option

Field Type Required Description
id string Yes Unique option identifier.
label string Yes Display label for this option.
price_delta_cents integer No Price adjustment in cents when this option is selected. Default: 0

Example

{
  "provider_id": "pizza-palace",
  "provider_name": "Pizza Palace",
  "sections": [
    {
      "id": "pizzas",
      "title": "Pizzas",
      "items": [
        {
          "id": "margherita",
          "title": "Margherita Pizza",
          "description": "Classic tomato, mozzarella, and basil",
          "price_cents": 1299,
          "images": [
            { "url": "https://img.example.com/margherita.jpg", "type": "thumbnail", "alt_text": "Margherita Pizza" }
          ],
          "modifier_groups": [
            {
              "id": "size",
              "title": "Size",
              "required": true,
              "min_selections": 1,
              "max_selections": 1,
              "options": [
                { "id": "small", "label": "Small", "price_delta_cents": 0 },
                { "id": "medium", "label": "Medium", "price_delta_cents": 300 },
                { "id": "large", "label": "Large", "price_delta_cents": 500 }
              ]
            },
            {
              "id": "extras",
              "title": "Extras",
              "required": false,
              "max_selections": 3,
              "options": [
                { "id": "extra-cheese", "label": "Extra Cheese", "price_delta_cents": 150 },
                { "id": "mushrooms", "label": "Mushrooms", "price_delta_cents": 100 }
              ]
            }
          ]
        }
      ]
    }
  ]
}

Availability

Items include an is_available flag (default true). Unavailable items should be displayed as greyed-out or hidden, depending on the agent's UX.

Reorder

Agents can reorder from a previous order, receiving current availability and pricing for the original items.

Endpoint

POST /catalog/reorder

Request

Field Type Required Description
order_id string Yes The previous order to reorder from
provider_id string Yes The provider of the original order
scheduled_for datetime No Optional scheduled time (integrates with available_for_scheduling)

Response

Field Type Description
items array of CatalogItem Items from the original order with current availability and pricing
unavailable_items array Items no longer available, each with item_id, title, and reason

Example

{
  "order_id": "order-98765",
  "provider_id": "pizza-palace"
}

Response:

{
  "items": [
    {
      "id": "margherita",
      "title": "Margherita Pizza",
      "price_cents": 1299,
      "is_available": true
    }
  ],
  "unavailable_items": [
    {
      "item_id": "tiramisu",
      "title": "Tiramisu",
      "reason": "Out of stock"
    }
  ]
}