Key sets: the org-global registries of pricing keys that rate tables and prices resolve against.
List key sets
Lists the organization's key sets. include=entries adds each set's keys; entry_count and product_count are sent without being asked until 2026-11-30, after that only with include=entry_count and include=product_count.
Required scope: price.read (Read prices).
query Parameters
includeExtra data to add to the response: entries, entry_count, product_count. Send a comma-separated list or repeat the parameter. An unknown name is refused with 400. entry_count is sent without being asked until 2026-11-30; after that date it is sent only when named here. product_count is sent without being asked until 2026-11-30; after that date it is sent only when named here.
limitPage size (default 50, max 200)
cursorOpaque continuation token from the previous response's pagination.cursor. Omit for the first page. Cursors are stateless and do not expire, but are only valid for the list and filters that produced them.
sortOrdering: slug, name or created_at, each with an optional :asc/:desc suffix (default slug:asc). An unknown value is rejected. Cursors are bound to the ordering that issued them, so changing sort mid-walk needs a fresh first page.
Headers
X-Workspace-IdSelects the workspace this request operates in, by workspace UUID or slug (e.g. a sandbox workspace for test integrations). Omitted: the organization's default live workspace. Unknown workspace: 404; workspace outside your organization: 403. Discover workspaces via GET /workspaces.
Workspace UUID or slug.
List key sets › Responses
OK
Create a key set
Creates an org-global key set, optionally seeding entries in the same call (CSV-import flow). Returns the key set in the shape of GET /key-sets/{id}.
Required scope: price.write (Write prices).
query Parameters
includeExtra data to add to the response: entries, entry_count, product_count. Send a comma-separated list or repeat the parameter. An unknown name is refused with 400. entries is sent without being asked until 2026-11-30; after that date it is sent only when named here. entry_count is sent without being asked until 2026-11-30; after that date it is sent only when named here. product_count is sent without being asked until 2026-11-30; after that date it is sent only when named here.
Headers
Idempotency-KeyUnique key that makes this POST safe to retry: repeats with the same key replay the first response instead of re-executing. Replays are scoped to the retrying principal (same API key / user) and kept for 24 hours. Required on every POST.
Client-generated idempotency key (e.g. a UUID).
X-Workspace-IdSelects the workspace this request operates in, by workspace UUID or slug (e.g. a sandbox workspace for test integrations). Omitted: the organization's default live workspace. Unknown workspace: 404; workspace outside your organization: 403. Discover workspaces via GET /workspaces.
Workspace UUID or slug.
Create a key set › Request Body
nameDisplay name for the new key set.
slugURL-safe unique identifier for the new key set, matching ^[a-z0-9][a-z0-9_-]{0,63}$.
descriptionOptional description of the set.
Optional keys to seed the set with in the same call; validated like UpsertEntries.
Create a key set › Responses
Created
Get a key set
Returns one key set in the list's shape. entries, entry_count and product_count are sent without being asked until 2026-11-30; after that each is sent only when named in include.
Required scope: price.read (Read prices).
path Parameters
idKey set ID
query Parameters
includeExtra data to add to the response: entries, entry_count, product_count. Send a comma-separated list or repeat the parameter. An unknown name is refused with 400. entries is sent without being asked until 2026-11-30; after that date it is sent only when named here. entry_count is sent without being asked until 2026-11-30; after that date it is sent only when named here. product_count is sent without being asked until 2026-11-30; after that date it is sent only when named here.
Headers
X-Workspace-IdSelects the workspace this request operates in, by workspace UUID or slug (e.g. a sandbox workspace for test integrations). Omitted: the organization's default live workspace. Unknown workspace: 404; workspace outside your organization: 403. Discover workspaces via GET /workspaces.
Workspace UUID or slug.
Get a key set › Responses
OK
Update a key set
Updates the name, the description and the status; the slug is immutable. status archived archives the set and is refused with 409 while any product references it (GET /key-sets/{id}/references lists them). Archiving is final: an archived set is not made active again.
Required scope: price.write (Write prices).
path Parameters
idKey set ID
query Parameters
includeExtra data to add to the response: entries, entry_count, product_count. Send a comma-separated list or repeat the parameter. An unknown name is refused with 400. entries is sent without being asked until 2026-11-30; after that date it is sent only when named here. entry_count is sent without being asked until 2026-11-30; after that date it is sent only when named here. product_count is sent without being asked until 2026-11-30; after that date it is sent only when named here.
Headers
X-Workspace-IdSelects the workspace this request operates in, by workspace UUID or slug (e.g. a sandbox workspace for test integrations). Omitted: the organization's default live workspace. Unknown workspace: 404; workspace outside your organization: 403. Discover workspaces via GET /workspaces.
Workspace UUID or slug.
Update a key set › Request Body
descriptionNew description; omit to leave unchanged.
nameNew display name; omit to leave unchanged.
statusarchived archives the set: refused with 409 while a product links it (GET /key-sets/{id}/references lists them). Archiving is final, so active is accepted only on a set that is still active. Omitted leaves it unchanged.
Update a key set › Responses
OK
Archive a key set (terminal)
Deprecated: use PATCH /key-sets/{id} instead. Removed on 2026-11-30.
Archives a key set and returns 200 with the archived key set. Refused (409) while any product references it; the references endpoint lists the blockers. Use PATCH /key-sets/{id} with {"status": "archived"} instead.
Required scope: price.write (Write prices).
path Parameters
idKey set ID
query Parameters
includeExtra data to add to the response: entries, entry_count, product_count. Send a comma-separated list or repeat the parameter. An unknown name is refused with 400. entries is sent without being asked until 2026-11-30; after that date it is sent only when named here. entry_count is sent without being asked until 2026-11-30; after that date it is sent only when named here. product_count is sent without being asked until 2026-11-30; after that date it is sent only when named here.
Headers
Idempotency-KeyUnique key that makes this POST safe to retry: repeats with the same key replay the first response instead of re-executing. Replays are scoped to the retrying principal (same API key / user) and kept for 24 hours. Required on every POST.
Client-generated idempotency key (e.g. a UUID).
X-Workspace-IdSelects the workspace this request operates in, by workspace UUID or slug (e.g. a sandbox workspace for test integrations). Omitted: the organization's default live workspace. Unknown workspace: 404; workspace outside your organization: 403. Discover workspaces via GET /workspaces.
Workspace UUID or slug.
Archive a key set (terminal) › Responses
OK
Upsert key set entries
Bulk-upserts entries by key: existing keys are overwritten (display name, status, tags, metadata), new keys are added. Retire keys by upserting status=retired. Returns the key set in the shape of GET /key-sets/{id}.
Required scope: price.write (Write prices).
path Parameters
idKey set ID
query Parameters
includeExtra data to add to the response: entries, entry_count, product_count. Send a comma-separated list or repeat the parameter. An unknown name is refused with 400. entries is sent without being asked until 2026-11-30; after that date it is sent only when named here. entry_count is sent without being asked until 2026-11-30; after that date it is sent only when named here. product_count is sent without being asked until 2026-11-30; after that date it is sent only when named here.
Headers
X-Workspace-IdSelects the workspace this request operates in, by workspace UUID or slug (e.g. a sandbox workspace for test integrations). Omitted: the organization's default live workspace. Unknown workspace: 404; workspace outside your organization: 403. Discover workspaces via GET /workspaces.
Workspace UUID or slug.
Upsert key set entries › Request Body
The keys to upsert; each existing key is overwritten and new keys are added.
Upsert key set entries › Responses
OK
List products referencing a key set
Returns the products linked to the key set: the products that block archiving it. include=product adds each product's id and name.
Required scope: price.read (Read prices).
path Parameters
idKey set ID
query Parameters
includeExtra data to add to the response: product. Send a comma-separated list or repeat the parameter. An unknown name is refused with 400.
Headers
X-Workspace-IdSelects the workspace this request operates in, by workspace UUID or slug (e.g. a sandbox workspace for test integrations). Omitted: the organization's default live workspace. Unknown workspace: 404; workspace outside your organization: 403. Discover workspaces via GET /workspaces.
Workspace UUID or slug.
List products referencing a key set › Responses
OK