Beta
Manage stock levels for each product variant (e.g. size or color) and temporarily hold stock while an AI agent completes a checkout. Each hold can later be confirmed or cancelled, and automatically expires on its own if left unresolved. This prevents overselling, even when multiple agents are buying at the same time. Holds work the same way regardless of which agentic commerce protocol is used.
Requires the agentic:inventory scope. To onboard your AI platform, contact us.
Returns the current stock levels and sellable availability for a single variant.
available is clamped to zero: max(0, on_hand − reserved − safety_stock) — this is the value
an availability feed should publish.
Requires the agentic:inventory scope. The merchant is resolved from the token claims; a variant
owned by another merchant returns 404.
The current stock levels for the variant.
Missing or invalid token.
The token does not carry the agentic:inventory scope.
The variant does not exist, or is owned by another merchant.
Rate limit exceeded.
{- "variant_id": "var_123",
- "on_hand": 10,
- "reserved": 2,
- "safety_stock": 1,
- "available": 7,
- "state": "in_stock",
- "source": "managed",
- "created_on": "2026-07-01T09:15:00Z",
- "modified_on": "2026-07-13T14:02:11Z",
- "product": {
- "variant_id": "var_123",
- "title": "Classic leather belt, brown",
- "description": "A full-grain leather belt with a brushed nickel buckle.",
- "sku": "BELT-BRN-001",
- "gtin": "00012345678905",
- "mpn": "MPN-4471",
- "brand": "Acme Leathercraft",
- "category": "Apparel & Accessories > Belts",
- "price": {
- "amount": 1999,
- "currency": "USD"
}, - "sale_price": {
- "amount": 1999,
- "currency": "USD"
}, - "sale_price_starts_at": "2026-08-01T00:00:00Z",
- "sale_price_ends_at": "2026-08-31T23:59:59Z",
- "group_id": "grp_belt_classic",
- "group_title": "Classic leather belt",
- "color": "Brown",
- "size": "M",
- "size_system": "US",
- "gender": "unisex",
- "condition": "new",
- "material": "Full-grain leather",
- "age_group": "adult",
- "length": 110,
- "width": 3.5,
- "height": 0.5,
- "dimension_unit": "cm",
- "weight": 0.2,
- "weight_unit": "kg",
- "expiration_date": "2027-01-01T00:00:00Z",
- "harmonized_system_code": "4203.30",
- "country_of_origin": "IT",
- "seller_name": "Acme Leathercraft Ltd",
- "created_on": "2026-08-01T09:15:00Z",
- "modified_on": "2026-08-13T14:02:11Z",
- "_links": {
- "self": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}, - "set": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}, - "delete": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}
}
}, - "_links": {
- "self": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}, - "set": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}
}
}Sets the absolute stock levels for a variant (Managed mode and corrections). The call is an
upsert: it returns 201 when the inventory item is created and 200 when an existing item is
updated. Availability is recomputed and a set entry is written to the ledger. Active
reservations are never disturbed.
Requires the agentic:inventory scope.
The variant already existed and its levels were updated.
The inventory item was created.
Missing or invalid token.
The token does not carry the agentic:inventory scope.
Request validation failed.
Rate limit exceeded.
{- "on_hand": 25,
- "safety_stock": 2,
- "reason": "stock take 2026-07"
}{- "variant_id": "var_123",
- "on_hand": 10,
- "reserved": 2,
- "safety_stock": 1,
- "available": 7,
- "state": "in_stock",
- "source": "managed",
- "created_on": "2026-07-01T09:15:00Z",
- "modified_on": "2026-07-13T14:02:11Z",
- "product": {
- "variant_id": "var_123",
- "title": "Classic leather belt, brown",
- "description": "A full-grain leather belt with a brushed nickel buckle.",
- "sku": "BELT-BRN-001",
- "gtin": "00012345678905",
- "mpn": "MPN-4471",
- "brand": "Acme Leathercraft",
- "category": "Apparel & Accessories > Belts",
- "price": {
- "amount": 1999,
- "currency": "USD"
}, - "sale_price": {
- "amount": 1999,
- "currency": "USD"
}, - "sale_price_starts_at": "2026-08-01T00:00:00Z",
- "sale_price_ends_at": "2026-08-31T23:59:59Z",
- "group_id": "grp_belt_classic",
- "group_title": "Classic leather belt",
- "color": "Brown",
- "size": "M",
- "size_system": "US",
- "gender": "unisex",
- "condition": "new",
- "material": "Full-grain leather",
- "age_group": "adult",
- "length": 110,
- "width": 3.5,
- "height": 0.5,
- "dimension_unit": "cm",
- "weight": 0.2,
- "weight_unit": "kg",
- "expiration_date": "2027-01-01T00:00:00Z",
- "harmonized_system_code": "4203.30",
- "country_of_origin": "IT",
- "seller_name": "Acme Leathercraft Ltd",
- "created_on": "2026-08-01T09:15:00Z",
- "modified_on": "2026-08-13T14:02:11Z",
- "_links": {
- "self": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}, - "set": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}, - "delete": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}
}
}, - "_links": {
- "self": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}, - "set": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}
}
}Beta
Returns the product knowledge for a single variant.Requires the agentic:inventory scope. The merchant is resolved from the token claims; a variant
owned by another merchant, or one with no product knowledge set, returns 404.
The product knowledge for the variant.
Missing or invalid token.
The token does not carry the agentic:inventory scope.
No product knowledge exists for the variant, or the variant is owned by another merchant.
Rate limit exceeded.
{- "variant_id": "var_123",
- "title": "Classic leather belt, brown",
- "description": "A full-grain leather belt with a brushed nickel buckle.",
- "sku": "BELT-BRN-001",
- "gtin": "00012345678905",
- "mpn": "MPN-4471",
- "brand": "Acme Leathercraft",
- "category": "Apparel & Accessories > Belts",
- "price": {
- "amount": 1999,
- "currency": "USD"
}, - "sale_price": {
- "amount": 1999,
- "currency": "USD"
}, - "sale_price_starts_at": "2026-08-01T00:00:00Z",
- "sale_price_ends_at": "2026-08-31T23:59:59Z",
- "group_id": "grp_belt_classic",
- "group_title": "Classic leather belt",
- "color": "Brown",
- "size": "M",
- "size_system": "US",
- "gender": "unisex",
- "condition": "new",
- "material": "Full-grain leather",
- "age_group": "adult",
- "length": 110,
- "width": 3.5,
- "height": 0.5,
- "dimension_unit": "cm",
- "weight": 0.2,
- "weight_unit": "kg",
- "expiration_date": "2027-01-01T00:00:00Z",
- "harmonized_system_code": "4203.30",
- "country_of_origin": "IT",
- "seller_name": "Acme Leathercraft Ltd",
- "created_on": "2026-08-01T09:15:00Z",
- "modified_on": "2026-08-13T14:02:11Z",
- "_links": {
- "self": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}, - "set": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}, - "delete": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}
}
}Beta
Sets the product knowledge for a variant. The call is an upsert: it returns201 when the
product knowledge is created and 200 when it is updated.
Requires the agentic:inventory scope.
The variant already had product knowledge, and it was updated.
The product knowledge was created for the variant.
Missing or invalid token.
The token does not carry the agentic:inventory scope.
Request validation failed.
Rate limit exceeded.
{- "title": "Classic leather belt, brown",
- "description": "A full-grain leather belt with a brushed nickel buckle.",
- "sku": "BELT-BRN-001",
- "gtin": "00012345678905",
- "mpn": "MPN-4471",
- "brand": "Acme Leathercraft",
- "category": "Apparel & Accessories > Belts",
- "price": {
- "amount": 1999,
- "currency": "USD"
}, - "sale_price": {
- "amount": 1999,
- "currency": "USD"
}, - "sale_price_starts_at": "2026-08-01T00:00:00Z",
- "sale_price_ends_at": "2026-08-31T23:59:59Z",
- "group_id": "grp_belt_classic",
- "group_title": "Classic leather belt",
- "color": "Brown",
- "size": "M",
- "size_system": "US",
- "gender": "unisex",
- "condition": "new",
- "material": "Full-grain leather",
- "age_group": "adult",
- "length": 110,
- "width": 3.5,
- "height": 0.5,
- "dimension_unit": "cm",
- "weight": 0.2,
- "weight_unit": "kg",
- "expiration_date": "2027-01-01T00:00:00Z",
- "harmonized_system_code": "4203.30",
- "country_of_origin": "IT",
- "seller_name": "Acme Leathercraft Ltd",
}{- "variant_id": "var_123",
- "title": "Classic leather belt, brown",
- "description": "A full-grain leather belt with a brushed nickel buckle.",
- "sku": "BELT-BRN-001",
- "gtin": "00012345678905",
- "mpn": "MPN-4471",
- "brand": "Acme Leathercraft",
- "category": "Apparel & Accessories > Belts",
- "price": {
- "amount": 1999,
- "currency": "USD"
}, - "sale_price": {
- "amount": 1999,
- "currency": "USD"
}, - "sale_price_starts_at": "2026-08-01T00:00:00Z",
- "sale_price_ends_at": "2026-08-31T23:59:59Z",
- "group_id": "grp_belt_classic",
- "group_title": "Classic leather belt",
- "color": "Brown",
- "size": "M",
- "size_system": "US",
- "gender": "unisex",
- "condition": "new",
- "material": "Full-grain leather",
- "age_group": "adult",
- "length": 110,
- "width": 3.5,
- "height": 0.5,
- "dimension_unit": "cm",
- "weight": 0.2,
- "weight_unit": "kg",
- "expiration_date": "2027-01-01T00:00:00Z",
- "harmonized_system_code": "4203.30",
- "country_of_origin": "IT",
- "seller_name": "Acme Leathercraft Ltd",
- "created_on": "2026-08-01T09:15:00Z",
- "modified_on": "2026-08-13T14:02:11Z",
- "_links": {
- "self": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}, - "set": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}, - "delete": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}
}
}Beta
Deletes the product knowledge for a variant. Stock levels and reservations for the variant are unaffected.Requires the agentic:inventory scope.
The product knowledge existed and was deleted.
Missing or invalid token.
The token does not carry the agentic:inventory scope.
No product knowledge exists for the variant, or the variant is owned by another merchant.
Rate limit exceeded.
{- "request_id": "req_7f3c9a12b8d54e6f",
- "error_type": "conflict",
- "error_codes": [
- "insufficient_stock"
], - "variant_id": "var_123",
- "available": 1
}Applies a relative delta to a variant's physical stock (on_hand) with a mandatory reason (for example, damaged or found stock).
The call fails if the delta drives the physical stock below zero. An adjust entry is written to the ledger.
Requires the agentic:inventory scope.
Idempotent replay of an earlier adjustment made with the same key.
The adjustment was applied.
Missing or invalid token.
The token does not carry the agentic:inventory scope.
The variant does not exist.
The adjustment drives the physical stock below zero.
Request validation failed.
Rate limit exceeded.
{- "variant_id": "var_123",
- "delta": -3,
- "reason": "damaged in warehouse"
}{- "variant_id": "var_123",
- "on_hand": 10,
- "reserved": 2,
- "safety_stock": 1,
- "available": 7,
- "state": "in_stock",
- "source": "managed",
- "created_on": "2026-07-01T09:15:00Z",
- "modified_on": "2026-07-13T14:02:11Z",
- "product": {
- "variant_id": "var_123",
- "title": "Classic leather belt, brown",
- "description": "A full-grain leather belt with a brushed nickel buckle.",
- "sku": "BELT-BRN-001",
- "gtin": "00012345678905",
- "mpn": "MPN-4471",
- "brand": "Acme Leathercraft",
- "category": "Apparel & Accessories > Belts",
- "price": {
- "amount": 1999,
- "currency": "USD"
}, - "sale_price": {
- "amount": 1999,
- "currency": "USD"
}, - "sale_price_starts_at": "2026-08-01T00:00:00Z",
- "sale_price_ends_at": "2026-08-31T23:59:59Z",
- "group_id": "grp_belt_classic",
- "group_title": "Classic leather belt",
- "color": "Brown",
- "size": "M",
- "size_system": "US",
- "gender": "unisex",
- "condition": "new",
- "material": "Full-grain leather",
- "age_group": "adult",
- "length": 110,
- "width": 3.5,
- "height": 0.5,
- "dimension_unit": "cm",
- "weight": 0.2,
- "weight_unit": "kg",
- "expiration_date": "2027-01-01T00:00:00Z",
- "harmonized_system_code": "4203.30",
- "country_of_origin": "IT",
- "seller_name": "Acme Leathercraft Ltd",
- "created_on": "2026-08-01T09:15:00Z",
- "modified_on": "2026-08-13T14:02:11Z",
- "_links": {
- "self": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}, - "set": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}, - "delete": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}
}
}, - "_links": {
- "self": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}, - "set": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}
}
}Creates an atomic hold across multiple variants, with a time-to-live (TTL). All items in the hold are reserved together, or none are, so a reservation can never oversell.
The hold is protocol-neutral: it is bound to an owner_type and owner_reference supplied by the calling protocol adapter, for example a UCP session or an ACP checkout.
Requires the agentic:inventory scope.
Idempotent replay of an earlier reservation made with the same key.
The reservation was created and the stock is held.
Missing or invalid token.
The token does not carry the agentic:inventory scope.
One of the requested variants does not exist.
Not enough stock to hold one of the variants or the idempotency key was reused with a different request body.
Request validation failed.
Rate limit exceeded.
{- "owner_type": "ucp_session",
- "owner_reference": "cs_8f42",
- "items": [
- {
- "variant_id": "var_123",
- "quantity": 2
}
], - "ttl_seconds": 900
}{- "id": "rsv_tkoi5db4hryu5cei5vwoabr7we",
- "state": "held",
- "owner_type": "ucp_session",
- "owner_reference": "cs_8f42",
- "items": [
- {
- "variant_id": "var_123",
- "quantity": 2
}
], - "expires_at": "2026-07-14T08:47:00Z",
- "created_on": "2026-07-14T08:32:00Z",
- "_links": {
- "self": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}, - "commit": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}, - "release": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}
}
}Returns a reservation in any state. A reservation with a held status past its expires_at is reported as expired.
The _links field returns the operations valid for the reservation's current state.
Requires the agentic:inventory scope. A reservation owned by another merchant returns 404.
The reservation.
Missing or invalid token.
The token does not carry the agentic:inventory scope.
The reservation does not exist, or is owned by another merchant (reservation_not_found).
Rate limit exceeded.
{- "id": "rsv_tkoi5db4hryu5cei5vwoabr7we",
- "state": "held",
- "owner_type": "ucp_session",
- "owner_reference": "cs_8f42",
- "items": [
- {
- "variant_id": "var_123",
- "quantity": 2
}
], - "expires_at": "2026-07-14T08:47:00Z",
- "created_on": "2026-07-14T08:32:00Z",
- "_links": {
- "self": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}, - "commit": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}, - "release": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}
}
}Converts a hold into a sale on order completion. In one atomic transaction, for each held item, on_hand (physical stock) and reserved are decremented.
The reservation moves to committed, and commit entries are written to the ledger.
The transaction is conditioned on the reservation still having a held status and not being past its expires_at, so a late commit can never land on an expired hold.
Requires the agentic:inventory scope.
The reservation was committed (or is already committed).
Missing or invalid token.
The token does not carry the agentic:inventory scope.
The reservation does not exist, or is owned by another merchant.
The reservation expired or was released. You must create a new reservation.
Rate limit exceeded.
{- "id": "rsv_tkoi5db4hryu5cei5vwoabr7we",
- "state": "held",
- "owner_type": "ucp_session",
- "owner_reference": "cs_8f42",
- "items": [
- {
- "variant_id": "var_123",
- "quantity": 2
}
], - "expires_at": "2026-07-14T08:47:00Z",
- "created_on": "2026-07-14T08:32:00Z",
- "_links": {
- "self": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}, - "commit": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}, - "release": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}
}
}Releases a hold when a checkout is cancelled or abandoned. In one atomic transaction, for each held item reserved is decremented and available is restored.
The reservation moves to released, and release entries are written to the ledger.
Requires the agentic:inventory scope.
The reservation was released (or is already released, or had already expired — in which case
state reads expired).
Missing or invalid token.
The token does not carry the agentic:inventory scope.
The reservation does not exist, or is owned by another merchant.
The reservation was already committed and cannot be released; use an adjustment to return stock for a completed sale.
Rate limit exceeded.
{- "id": "rsv_tkoi5db4hryu5cei5vwoabr7we",
- "state": "held",
- "owner_type": "ucp_session",
- "owner_reference": "cs_8f42",
- "items": [
- {
- "variant_id": "var_123",
- "quantity": 2
}
], - "expires_at": "2026-07-14T08:47:00Z",
- "created_on": "2026-07-14T08:32:00Z",
- "_links": {
- "self": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}, - "commit": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}, - "release": {
- "actions": [
- "GET"
], - "types": [
- "application/json"
]
}
}
}