Bindings that attach meters to products and map them to pricing variables.
List a product's bindings
Returns every meter binding on the product with each binding's meter summary embedded. Unpaginated.
path Parameters
idProduct 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.
List a product's bindings › Responses
OK
Create a product-meter binding
Wires a meter to a product with a named pricing variable. At most one BILLABLE_QUANTITY binding per product.
path Parameters
idProduct UUID
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 product-meter binding › Request Body
meter_idMeter to bind to the product.
pricing_var_nameFormula variable name to expose the meter result as: a slug, lowercase letter then [a-z0-9_-], 1-64 chars. Required for BILLABLE_QUANTITY and PRICING_VAR, and unused by INFORMATIONAL — but unique per product in EVERY role, so an INFORMATIONAL binding that carries one still reserves it. The slug grammar is enforced by the API, not by this schema, because "" is a legal value for INFORMATIONAL.
roleHow the pipeline consumes the result: BILLABLE_QUANTITY, PRICING_VAR or INFORMATIONAL. Matched case-insensitively: the server also accepts the all-uppercase and all-lowercase form of each value. The form published here is the canonical one and is what reads back.
Additional filter tree AND-ed onto the meter's own filters for this product only.
Create a product-meter binding › Responses
Created
Get a binding
Returns one binding with its meter summary embedded. A binding that exists under a different product than the URL names responds 404.
path Parameters
idProduct UUID
bindingIdBinding 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.
Get a binding › Responses
OK
Delete a binding
Deletes the binding. The URL's product must own it (otherwise 404); already-published product versions keep their snapshot, so the removal reaches billing at the product's next publish.
path Parameters
idProduct UUID
bindingIdBinding 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.
Delete a binding › Responses
No Content
Update a binding
Merge-patch update. Every editable binding field is versioned on the binding's version row, so changes reach billing at the product's next publish. The URL's product must own the binding (otherwise 404).
path Parameters
idProduct UUID
bindingIdBinding 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.
Update a binding › Request Body
Replacement overlay filter tree; {} clears it; omitted leaves it unchanged.
pricing_var_nameNew formula variable name: a slug, lowercase letter then [a-z0-9_-], 1-64 chars. "" RELEASES the name — required when moving to INFORMATIONAL from a role that consumed it, because (product_id, pricing_var_name) is unique regardless of role. Omitted leaves it unchanged. The slug grammar is enforced by the API, not by this schema: "" is a legal value here, so a JSON-Schema pattern would forbid the release.
roleNew binding role (BILLABLE_QUANTITY, PRICING_VAR or INFORMATIONAL); omitted leaves it unchanged. At most one BILLABLE_QUANTITY binding per product. Moving away from a role that consumes pricing_var_name requires saying what happens to the name in the same request. Matched case-insensitively: the server also accepts the all-uppercase and all-lowercase form of each value. The form published here is the canonical one and is what reads back.
Update a binding › Responses
OK
Restore a removed binding
Undoes a removal that has not been released yet: the binding is added back to the product's working draft, on the same id and with the head's config. Refused (409) when the current head does not carry the binding.
path Parameters
idProduct UUID
bindingIdBinding UUID
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.
Restore a removed binding › Responses
OK