A subscription is a contract between your business and a customer - it defines which plan they're on, what billing period applies, and how charges are generated over time.
Subscriptions progress through a defined lifecycle: pending → trialing → active → past_due → canceled or expired. Each transition can trigger invoicing, proration, or dunning actions.
Key concepts:
- Plan - the pricing template attached to this subscription
- Billing period -
month,quarter, oryear- determines invoice frequency - Trial - an optional free period before charges begin
- Auto-renew - whether the subscription renews automatically at period end
- Billing anchor day - the day of month that billing cycles align to (e.g., the 1st or 15th)
- Proration - when a subscription changes mid-cycle, charges are adjusted proportionally
- Items - the specific products and quantities included in this subscription
List subscriptions
Cursor-paginated list with optional column filters (status, customer_id, plan_id, …), custom_fields.
query Parameters
auto_renewFilter on auto_renew (boolean). Operators: eq — dot grammar, e.g. auto_renew.eq=value; a bare auto_renew=value means eq.
billing_interval_unitFilter on billing_interval_unit (enum). Operators: eq, in — dot grammar, e.g. billing_interval_unit.in=value; a bare billing_interval_unit=value means eq. A bare comma-separated value is in-sugar: billing_interval_unit=a,b means billing_interval_unit.in=a,b. Legal values: week, month, year.
created_atFilter on created_at (date-time). Operators: eq, gt, gte, lt, lte — dot grammar, e.g. created_at.gt=value; a bare created_at=value means eq.
currencyFilter on currency (string). Operators: eq, in — dot grammar, e.g. currency.in=value; a bare currency=value means eq. A bare comma-separated value is in-sugar: currency=a,b means currency.in=a,b.
current_period_endFilter on current_period_end (date-time). Operators: eq, gt, gte, lt, lte — dot grammar, e.g. current_period_end.gt=value; a bare current_period_end=value means eq.
current_period_startFilter on current_period_start (date-time). Operators: eq, gt, gte, lt, lte — dot grammar, e.g. current_period_start.gt=value; a bare current_period_start=value means eq.
customer_idFilter on customer_id (uuid). Operators: eq, in — dot grammar, e.g. customer_id.in=value; a bare customer_id=value means eq. A bare comma-separated value is in-sugar: customer_id=a,b means customer_id.in=a,b.
deviates_from_planFilter on deviates_from_plan (boolean). Derived boolean predicate: only deviates_from_plan=true|false (eq).
plan_idFilter on plan_id (uuid). Operators: eq, in — dot grammar, e.g. plan_id.in=value; a bare plan_id=value means eq. A bare comma-separated value is in-sugar: plan_id=a,b means plan_id.in=a,b.
plan_versionFilter on plan_version (number). Operators: eq, in — dot grammar, e.g. plan_version.in=value; a bare plan_version=value means eq. A bare comma-separated value is in-sugar: plan_version=a,b means plan_version.in=a,b.
started_atFilter on started_at (date-time). Operators: eq, gt, gte, lt, lte — dot grammar, e.g. started_at.gt=value; a bare started_at=value means eq.
updated_atFilter on updated_at (date-time). Operators: eq, gt, gte, lt, lte — dot grammar, e.g. updated_at.gt=value; a bare updated_at=value means eq.
limitPage size. Values above the server-side cap are clamped (standard default 50, cap 200; a few document-heavy lists use larger windows). Invalid values fall back to the default.
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.
searchCase-insensitive substring match over customer name/email, plan name and the subscription's human reference (e.g. SUB-000123)
statusFilter by status. Filterable fields (status, customer_id, plan_id, plan_version, billing_interval_unit, currency, auto_renew, started_at, current_period_start, current_period_end, created_at, updated_at, deviates_from_plan) accept apifilter operator suffixes; custom_fields.
tagFilter by tag name (repeatable, containment semantics)
countsComma-separated countable fields (status, billing_cycle_anchor_unit) to include per-value counts for
includeComma/repeat includes. 'drift' attaches {versions_behind, latest_version} per row
versions_behind_minKeep only subscriptions at least N versions behind (mutually exclusive with versions_behind)
versions_behindKeep only subscriptions exactly N versions behind
sortOrdering: created_at with an optional :asc/:desc suffix (default created_at:desc). An unknown value is rejected. Cursors are bound to the ordering that issued them, so changing sort mid-walk needs a fresh first page. The legacy values versions_behind_desc | versions_behind_asc are NOT a keyset ordering: they leave the created_at walk in place and reorder only the rows of the page already fetched, by the drift figure computed in Go.
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 subscriptions › Responses
OK
Create a subscription
Creates a subscription for a customer. Items, billing interval and currency derive from the request.
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 subscription › Request Body
customer_idCustomer the subscription bills; required.
auto_renewWhether the subscription renews automatically at period end; false lets it expire when the current period closes.
billing_anchor_dayDay of the month (1-28) each billing period starts on; derived from the activation date when omitted.
billing_interval_countNumber of interval units per billing cycle; defaults to 1.
billing_interval_unitUnit of the billing cycle length: week, month or year; defaults to month. 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.
billing_timingWhen invoices fire relative to the period: in_advance (at period start) or in_arrears (at period end); defaults to in_arrears.
currencyISO 4217 currency this subscription bills in, for its whole life - it is the contract and cannot be changed afterwards. Defaults to the customer's preferred_currency, else the currency of the plan version's first price, else EUR. The organization default is NOT consulted here.
Values for the org's configured custom fields.
descriptionInternal operator-facing description; not shown to buyers.
free_trial_daysLength of the free trial in days before billing starts; 0 or omitted means billing starts immediately.
Products, quantities and prices billed by this subscription; defaults from the plan-version snapshot for plan-based subs when omitted.
Arbitrary caller-supplied key/value pairs.
nameInternal operator-facing subscription name.
payment_terms_daysNet payment window in days for this subscription's invoices (0-365); null inherits the org default.
pending_checkout_session_idProvider checkout session to bind an on_checkout_complete DRAFT to; set by the public-checkout finalizer only.
plan_idPlan to base the subscription on; mutually exclusive with product_id (plan-or-product XOR).
product_idProduct to bill directly; mutually exclusive with plan_id (plan-or-product XOR).
product_versionProduct version to pin; null follows the product head version.
public_descriptionBuyer-facing description shown in checkout and the customer portal.
Per-subscription billing setting overrides; unset keys inherit from customer, then org, then default.
start_atActivation instant; required when start_trigger is start_date, rejected otherwise.
start_triggerWhat activates the DRAFT subscription: immediate, on_checkout_complete, manual or start_date; defaults to immediate.
Locale-keyed overrides for name, description and public_description.
version_change_strategyMoney policy for auto-upgrades: immediate_prorate, next_period or at_phase_change; required when version_track_mode is latest.
version_track_modeHow the subscription follows plan/product versions: pinned or latest. Defaults to LATEST paired with immediate_prorate, so publishing a new plan version DOES migrate this subscription and can charge proration for it. Send pinned explicitly to opt out.
Create a subscription › Responses
Created
Bulk-upgrade a set of subscriptions to a target version
Fans out per-sub change-version calls for each entry in subscription_ids. Honors version_track_mode='pinned' by skipping pinned subs (set force=true to override). Returns the success+skipped breakdown.
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.
Bulk-upgrade a set of subscriptions to a target version › Request Body
strategyMoney policy for each upgrade: immediate_prorate, next_period or at_phase_change.
subscription_idsSubscriptions to upgrade; at least one, at most 500.
forceWhen true, upgrade even subscriptions pinned to their current version.
scheduled_atReserved for future scheduling; rejected with a validation error when set (per-sub scheduling parity is a pending followup).
target_plan_versionPlan version to move plan-based subscriptions to; null leaves plan-based subs untouched.
target_product_versionProduct version to move product-based subscriptions to; null leaves product-based subs untouched.
Bulk-upgrade a set of subscriptions to a target version › Responses
OK
Preview subscription prices
Resolves the effective per-line price for a candidate plan + items + customer combo without creating a subscription.
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.
Preview subscription prices › Request Body
plan_idas_ofDate to price for; omit to price for now. Folded to day granularity.
currencycustomer_idplan_versionPublished plan version to price against; omit to price the plan's current head.
Preview subscription prices › Responses
OK
Get a subscription
Returns a subscription with its enrichment payload (MRR/ARR, attached promotions).
path Parameters
idSubscription 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 subscription › Responses
OK
Update a subscription's editable fields
Applies operator-editable fields (name, description, public_description, translations, metadata, custom_fields, settings) and the version-tracking configuration (version_track_mode pinned/latest + default version_change_strategy). Setting version_track_mode=latest requires a version_change_strategy. Version tracking is a preference, not a movement — a subscription.update Change with a version part actually moves the version. Lifecycle changes are Changes too (subscription.cancel / .pause / .resume).
path Parameters
idSubscription 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 subscription's editable fields › Request Body
billing_timingNew invoice timing (in_advance/in_arrears); editable only while DRAFT, null leaves it unchanged.
clear_settingsSetting keys to reset back to inherit (NULL the column); use to clear an override that Settings alone cannot.
Values for the org's configured custom fields.
descriptionNew internal operator-facing description; null leaves it unchanged.
Arbitrary caller-supplied key/value pairs; replaces the stored map.
nameNew internal operator-facing name; null leaves it unchanged.
public_descriptionNew buyer-facing description; null leaves it unchanged.
Per-subscription billing setting overrides to set or change; null leaves them unchanged.
Locale-keyed overrides for name, description and public_description.
version_change_strategyNew default money policy for auto-upgrades; null leaves it unchanged.
version_track_modeNew version-track mode (pinned/latest); null leaves it unchanged.
Update a subscription's editable fields › Responses
OK
Activate a subscription
Activates a DRAFT subscription, or resumes one paused via a pause phase. For DRAFT subs this overrides the configured start trigger and starts immediately. (Status is DRAFT/ACTIVE/CANCELLED/EXPIRED; "paused" and "trialing" are phase kinds on an ACTIVE subscription, not statuses.)
path Parameters
idSubscription 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.
Activate a subscription › Responses
OK
Get subscription allowance state
The current allowance state for each USAGE product in the subscription's plan.
path Parameters
idSubscription 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 subscription allowance state › Responses
OK
Get how a subscription differs from its plan
Every way the subscription departs from the plan version it is pinned to, with both sides of each comparison: operator-overridden included quantities, purchased quantities outside the plan's authored band, products the plan no longer carries, and entitlement kinds the plan disagrees with. A standard subscription answers 200 with deviates=false. Derived on every read — nothing is stored.
path Parameters
idSubscription 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 how a subscription differs from its plan › Responses
OK
Get a subscription's version-drift summary
How many plan (or product) versions behind a subscription is, the latest active version, the next scheduled version (if any), and an upgradable_to list of candidate versions.
path Parameters
idSubscription 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 subscription's version-drift summary › Responses
OK
List items on a subscription
Returns the subscription's current items: rows whose effective window is still open. Historical rows superseded by a quantity change or removal are excluded.
path Parameters
idSubscription 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 items on a subscription › Responses
OK
List subscription phases
Returns every phase of the subscription — pending, active, and completed. Phases are ENGINE state and are not authored: the chain is derived from the subscription's free_trial_days, and paused/dunning phases are written by the pause/resume and dunning operations. Unpaginated.
path Parameters
idSubscription 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 subscription phases › Responses
OK
List a subscription's plan-version history
Chronological pin-events for a subscription: each row records which plan/product version was pinned at which instant. Cursor-paginated (default 100, max 200 per page).
path Parameters
idSubscription UUID
query Parameters
limitPage size. Values above the server-side cap are clamped (standard default 50, cap 200; a few document-heavy lists use larger windows). Invalid values fall back to the default.
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.
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 subscription's plan-version history › Responses
OK
Set a product's allowance-refresh cadence
Overrides how often the included allowance pool refreshes for one product (e.g. daily). Both fields omitted clears the override (refreshes once per billing cycle).
path Parameters
idSubscription UUID
productIdProduct 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.
Set a product's allowance-refresh cadence › Request Body
refresh_countHow often the included pool refreshes, as a count of refresh_unit; both fields null clears the override.
refresh_unitUnit of the refresh cadence: day, week, month, year or billing_cycle; both fields null clears the override.
Set a product's allowance-refresh cadence › Responses
No Content
Override a product's included quantity
Sets how many units are included for ONE subscription, overriding the plan version's pin. Works for any product the subscription carries, INCLUDING one whose plan pins no included quantity — the catalog authoring no baseline does not stop an operator authoring a number. The next invoice bills this number, and it survives a plan version bump (the subscription then reads as adjusted against the new version). 0 is a valid override meaning nothing is included; use DELETE to go back to the plan's number. 404 when the subscription does not carry the product at all. Rejected for a product configured as a durable credit pool, whose allowance is its balance.
path Parameters
idSubscription UUID
productIdProduct 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.
Override a product's included quantity › Request Body
included_quantityUnits included for this subscription, as a non-negative decimal string. 0 is a valid override meaning nothing is included; to go back to the plan's number use DELETE instead.
Override a product's included quantity › Responses
No Content
Drop a product's included-quantity override
Removes the per-subscription override so the product follows its plan version's included quantity again, now and after every future publish.
path Parameters
idSubscription UUID
productIdProduct 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.
Drop a product's included-quantity override › Responses
No Content
Make a product a durable credit pool
Converts (or creates) the (subscription, product) entitlement into a durable POOL — a cross-period balance that drains as usage is metered. Clears any refresh cadence.
path Parameters
idSubscription UUID
productIdProduct 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.
Make a product a durable credit pool › Request Body
unit_limitMaximum pool balance in units, as a decimal string; null for no unit ceiling.
Make a product a durable credit pool › Responses
No Content
List a subscription's booked proration entries
The booked proration ledger (credits/charges generated by quantity, plan, or version changes) in chronological order. Cursor-paginated (default 100, max 200 per page).
path Parameters
idSubscription UUID
query Parameters
limitPage size. Values above the server-side cap are clamped (standard default 50, cap 200; a few document-heavy lists use larger windows). Invalid values fall back to the default.
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.
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 subscription's booked proration entries › Responses
OK
Simulate proposed subscription changes
Returns a dry-run preview (proration, MRR delta, …) for a candidate change set without persisting. The change set composes: add_items, remove_items, new_plan_id, change_quantity and change_version may be sent together. change_quantity and change_version price the same math a subscription.update Change books (items[{op:quantity}] and version) and require an ACTIVE subscription. A change_version with a deferred strategy (next_period / at_phase_change) books nothing in the current period and honestly prices to zero.
path Parameters
idSubscription 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.
Simulate proposed subscription changes › Request Body
Items to add in this dry run.
Quantity restatements to price; each entry prices as one cross-quantity diff.
A version repin to price onto another plan/product version.
new_plan_idPlan to retarget the subscription onto in this dry run; null leaves the plan unchanged.
Items to remove in this dry run.
Simulate proposed subscription changes › Responses
OK
Get the subscription's forward timeline
ONE ordered answer to "what happens next", unioned from every time rail a subscription has: booked changes (including those filed against its lines and its agreements), phase boundaries, the agreed term end and its notice, negotiated price and ramp edges, item windows, scheduled catalogue publishes and the version pins that hold lines back from them, billing milestones, the renewal and auto-renew clocks, dunning escalation, allowance refreshes and promotion expiries. Every event carries a certainty — fixed (a wall-clock instant), anchored (follows a moving anchor such as period_end) or derived (computed from today's state and shown as expected) — so a prediction is never presented as a booking. Nothing is returned after the subscription's ending, and the ending itself is both the last event and the embedded ending field, resolved by the same rule GET /subscriptions/{id} uses. Default window: now to the ending, or 18 months. Unpaginated; limit caps the events and sets truncated.
path Parameters
idSubscription UUID
query Parameters
fromStart of the window, INCLUSIVE. RFC 3339 (2026-05-01T00:00:00Z) or a bare date (2026-05-01). Defaults to now.
toEnd of the window, EXCLUSIVE — the range is half-open [from, to). Defaults to the subscription's ending, or 18 months out when nothing stops it.
limitPage size. Values above the server-side cap are clamped (standard default 50, cap 200; a few document-heavy lists use larger windows). Invalid values fall back to the default.
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 the subscription's forward timeline › Responses
OK
Grant usage credits to a subscription
Grants additional usage credits to the subscription. For a product configured as a durable credit POOL this writes a purchased entitlement grant; otherwise the credits are injected via a single-use promotion redemption and applied at the next invoice run. Distinct from POST /wallets/{id}/topup, which credits money to a wallet.
path Parameters
idSubscription UUID
Headers
Idempotency-KeyThreaded into the grant as its dedup token: the same key collapses onto one grant, a new key grants again.
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.
Grant usage credits to a subscription › Request Body
product_idProduct to grant usage against.
quantity^-?\d+(\.\d+)?$ · requiredUsage quantity to grant (metered units, NOT money).
descriptionOptional note recorded on the grant.
Grant usage credits to a subscription › Responses
Created
Withdraw a subscription (EU 14-day right of withdrawal)
Cancels a CONSUMER subscription still inside the EU 14-day right-of-withdrawal window (Directive 2011/83/EU) with a full refund. Returns NOT_ELIGIBLE_FOR_WITHDRAWAL when ineligible.
path Parameters
idSubscription 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.
Withdraw a subscription (EU 14-day right of withdrawal) › Responses
OK