Org-defined labels and their assignment to customers, products, plans, subscriptions, invoices, and credit notes.
List tags
Returns a paginated list of tags. Filters use the unified field.op=value grammar; see /docs/pagination for the operator set. The archived state stays outside the grammar as a control flag (see its parameter description).
Required scope: tag.read (Read tags).
query Parameters
includeExtra data to add to the response: usage_count. Send a comma-separated list or repeat the parameter. An unknown name is refused with 400.
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.
nameFilter by name; supports eq and contains operators
entity_typeFilter by entity type; supports eq and in operators
colorFilter by color; supports eq and in operators
created_atFilter by created_at; supports eq, gt, gte, lt, lte operators
updated_atFilter by updated_at; supports eq, gt, gte, lt, lte operators
archivedTri-mode archived flag: true (include archived), only (only archived). Default returns active rows only.
sortOrdering: created_at, name, entity_type, description or color, each with an optional :asc/:desc suffix (default created_at:desc). Tags with no description or no color sort last in both directions. entity_type orders the stored code, not its translated label. An unknown value is rejected. Cursors are bound to the ordering that issued them, so changing sort mid-walk needs a fresh first page. usage_count is not orderable: it is a per-row count over taggings, not a column of tags.
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 tags › Responses
OK
Create a tag
Creates a new tag scoped to the calling organization.
Required scope: tag.write (Manage tags).
query Parameters
includeExtra data to add to the response: usage_count. Send a comma-separated list or repeat the parameter. An unknown name is refused with 400.
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 tag › Request Body
entity_typeEntity kind the tag applies to: CUSTOMER, SUBSCRIPTION, PRODUCT, PLAN, INVOICE, or CREDIT_NOTE.
nameDisplay name; normalized (NFKC, trimmed, collapsed whitespace) and unique per (organization, entity_type).
colorOptional display color as a #RRGGBB hex string.
descriptionOptional free-text description of the tag's purpose.
Create a tag › Responses
Created
Get a tag
Returns a single tag by UUID.
Required scope: tag.read (Read tags).
path Parameters
idTag UUID
query Parameters
includeExtra data to add to the response: usage_count. 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.
Get a tag › Responses
OK
Soft-delete a tag
Marks the tag deleted and cascades to drop all taggings that referenced it. Fails with 409 TAG_REFERENCED while a live audience targets the tag in a rule (promotions target tags only through an audience); the error names the audiences, and the tag can be deleted once it is removed from their rules.
Required scope: tag.write (Manage tags).
path Parameters
idTag UUID
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.
Soft-delete a tag › Responses
No Content
Update a tag
Applies partial updates to a tag. status: archived archives the tag and status: active restores it. Setting description or color to null clears it; an empty string is refused.
Required scope: tag.write (Manage tags).
path Parameters
idTag UUID
query Parameters
includeExtra data to add to the response: usage_count. 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.
Update a tag › Request Body
colorNew display color as #RRGGBB; null clears it; omitted leaves it unchanged.
descriptionNew description; null clears it; omitted leaves it unchanged.
nameNew display name; omitted leaves it unchanged.
statusarchived hides the tag from pickers; active restores it. Omitted leaves it unchanged.
archivedtrue archives the tag, false restores it. Refused together with status. Deprecated: use status instead. Removed on 2026-11-30.
Update a tag › Responses
OK