APIKey
allowed_ipsIP addresses or CIDR blocks permitted to present the key; empty means unrestricted.
created_atidkey_typeThe key's kind, which its workspace's environment decides. The key starts with this value and an underscore.
namescopesThe permissions the key carries, always an explicit list.
statusWhether the key was revoked. An active key past expires_at no longer authenticates.
workspace_idWho minted the key: the person's id, name and email. Absent for a key the system minted. Sent without include=created_by until 2026-11-30; after that only with include=created_by, and without display (the object is a UserRef).
created_by_idThe user who minted the key. Absent for a key the system minted, and for one whose creator's account is gone.
expires_atWhen the key stops authenticating. Absent for a key that does not expire.
last4The last four characters of the key, kept for recognizing it. Absent for a key minted before identifiers were kept.
last_used_atWhen the key last authenticated a request, to the minute. Absent when it never has.
replaced_by_idThe key a rotation minted to replace this one; this key stops at expires_at.
replaces_idThe key this one was minted to replace.
key_prefixThe first 8 characters of the key: its kind followed by an underscore ("sk_live_", "sk_test_"). Deprecated: use key_type instead. Removed on 2026-11-30.
APIKeyAccess
presetFULL_ACCESS when the key carries exactly the default grant, READ_ONLY when exactly its read permissions, CUSTOM otherwise.
permission_countHow many permissions the key carries: the length of scopes. Deprecated: use scopes instead. Removed on 2026-11-30.
APIKeyActor
emailThe person's email address.
idnameThe person's name. Absent when the user has not set one: show the email.
displayThe person's name, or their email when no name is known. Deprecated: use name, else email instead. Removed on 2026-11-30.
APIKeyWithPlaintext
allowed_ipsIP addresses or CIDR blocks permitted to present the key; empty means unrestricted.
created_atidkeyThe key. Returned this once and never stored: record it now.
key_typeThe key's kind, which its workspace's environment decides. The key starts with this value and an underscore.
namescopesThe permissions the key carries, always an explicit list.
statusWhether the key was revoked. An active key past expires_at no longer authenticates.
workspace_idWho minted the key: the person's id, name and email. Absent for a key the system minted. Sent without include=created_by until 2026-11-30; after that only with include=created_by, and without display (the object is a UserRef).
created_by_idThe user who minted the key. Absent for a key the system minted, and for one whose creator's account is gone.
expires_atWhen the key stops authenticating. Absent for a key that does not expire.
last4The last four characters of the key, kept for recognizing it. Absent for a key minted before identifiers were kept.
last_used_atWhen the key last authenticated a request, to the minute. Absent when it never has.
replaced_by_idThe key a rotation minted to replace this one; this key stops at expires_at.
replaces_idThe key this one was minted to replace.
key_prefixThe first 8 characters of the key: its kind followed by an underscore ("sk_live_", "sk_test_"). Deprecated: use key_type instead. Removed on 2026-11-30.
messageOnly in the rotate answer: a sentence saying when the rotated key stops. Deprecated: no replacement. Removed on 2026-11-30.
new_keyOnly in the rotate answer: the new key, the same value as key. Deprecated: use key instead. Removed on 2026-11-30.
old_key_expiryOnly in the rotate answer: when the rotated key stops authenticating. Deprecated: use expires_at of the rotated key (replaces_id) instead. Removed on 2026-11-30.
AcceptanceRequirementKind
AccessPermissionChangeItem
kindThe change's kind, which names its shape.
permissionThe permission, by its catalog name (GET /v1/permissions).
AccessPreset
Requests also accept the new spelling: each value in lower case (custom for CUSTOM). The listed spelling is deprecated in requests and accepted until 2026-11-30.
AccessRoleChangeItem
kindThe change's kind, which names its shape.
The role, by its id and the name it had when the change was made.
AccessTextChangeItem
kindThe change's kind, which names its shape.
afterThe text after the change; absent when there is none.
beforeThe text before the change; absent when there was none.
AccountingExport
created_atWhen the export ran.
idThe export run; the X-Audit-Id header of the download that produced it.
invoice_countNumber of invoices included in the export.
kindArtifact kind produced: bookings, master_data, or invoices_pdf.
line_countNumber of booking lines produced.
organization_idproviderProvider id the export ran against.
user_idUser who ran the export.
warningsNon-fatal issues found during the export (e.g. missing VAT IDs); empty when there were none.
file_sha256SHA-256 of the generated file, for tamper-evidence and dedup.
The invoice-issue dates exported, both included; absent when unbounded.
The same counts and warnings as the run's own fields. Deprecated: use invoice_count, line_count, warnings instead. Removed on 2026-11-30.
AccountingExportCatalogEntry
display_nameproviderAccountingExportDescriptor
extensionFile extension of the produced file (without the dot).
kindArtifact kind this descriptor produces: bookings, master_data, or invoices_pdf.
labelHuman-readable name of the export shown on its card.
mime_typeMIME type of the produced file.
User-tunable options for this export (e.g. grouping, posting_mode).
descriptionLonger explanation of what the export contains.
AccountingExportPeriod
first_dayFirst invoice-issue date exported.
last_dayLast invoice-issue date exported.
AccountingExportSummary
invoice_countNumber of invoices included in the export.
line_countNumber of booking lines produced across all invoices.
warningsNon-fatal issues surfaced during export (e.g. missing VAT IDs).
AccountingIntegration
configProvider-specific configuration; GET /accounting/integrations lists each provider's settings schema.
created_atdisplay_nameHuman-readable name for this integration.
idorganization_idproviderRegistered accounting provider id (e.g. datev, lexware, sage).
statusactive: exports may run against this integration. disabled: they are refused with a hint to enable it in Settings.
updated_atPer config key that overrides an organization fact: the value that applies and its source. Sent with include=layered; absent for a provider with no such key.
is_enabledtrue when status is active. Deprecated: use status instead. Removed on 2026-11-30.
AccountingIntegrationChange
kindWhat the change is about: the name, the switch, or one setting.
afterThe value after the act, a text as it is and any other value as its compact JSON; absent when there is none.
beforeThe value before the act, a text as it is and any other value as its compact JSON; absent when there was none.
For enabled: the switch before and after the act.
keyFor a setting: its key in the provider's settings schema, a nested one dotted (accounts.revenue_de).
AccountingIntegrationFlagSides
afterThe switch after the act.
beforeThe switch before the act; absent for an integration the act configured first.
AccountingProvider
display_nameproviderThe organization's integration with this provider, in the shape GET /accounting/integrations/{provider}/settings answers. Absent until it is first saved.
The same value as integration. Deprecated: use integration instead. Removed on 2026-11-30.
AccountingSettingsField
keyStable identifier of the config field, used as the JSON key in the stored config.
labelHuman-readable label rendered next to the input.
requiredWhether the field must be supplied for a valid config.
typeInput type: string, number, bool, select, account, or custom_field_ref.
defaultDefault value applied when the field is left unset.
groupVisual grouping the field belongs to (e.g. "Mandantendaten").
helpLonger help text explaining the field.
inheritsThe organisation fact an empty value inherits (e.g. default_currency); the integration's layered block says what applies.
Selectable options; present only when type is select.
placeholderPlaceholder text shown in an empty input.
AccountingSettingsOption
labelHuman-readable label shown for the option.
valueValue stored in the config when this option is chosen.
AccountingSettingsSchema
Ordered config fields the provider exposes; the settings UI renders them in order.
Actor
typeWho acted: user, api_key, system, job, webhook, customer or unknown. A customer is the organization's customer acting on their own account in the customer portal.
customer_idThe customer who acted, when type is customer.
emailkey_idkey_prefixlabelnamepictureuser_idAddCustomDomainInputBody
hostnameThe host your customers will see, e.g. pay.example.com. Not the bare domain your website runs on.
AddMailSuppressionRequest
emailThe recipient address to suppress. Added with reason "manual".
AddProductRequest
product_idProduct to attach to the plan.
cadenceHow often a subscription sold from the plan bills this line: every_period (the default when omitted) or once, on the first paid invoice.
default_quantityQuantity a new subscription seeds for this product when the caller passes no explicit item; omit to seed 1.
included_quantity^-?\d+(\.\d+)?$Quantity bundled into the base price before per-unit billing applies (the included allowance/seat floor); null means none.
max_quantityHighest quantity a buyer may pick for this product; omit for no plan-level ceiling.
min_quantityLowest quantity a buyer may pick for this product; omit for 1.
product_track_modeHow this membership tracks the product version: latest (auto-follow head) or pinned; omitted seeds from the org default.
refresh_countPlan-level default allowance-refresh cadence count; null (with refresh_unit) means one whole-period pool.
refresh_unitUnit for the refresh cadence: day, week, month, year or billing_cycle.
rollover_enabledWhen true, unused included allowance carries forward into later periods.
rollover_expiry_periodsNumber of periods after which rolled-over allowance expires; null means it never expires.
rollover_max^-?\d+(\.\d+)?$Cap on accumulated rolled-over allowance; null means uncapped.
unit_limit^-?\d+(\.\d+)?$Ceiling on a POOL's unit balance; POOL only.
AddRevisionRequest
kindWhat this offer does to the subscription: create it (new), or cut its live revision and offer the follow-on (renegotiation).
adopt_draftBind the subscription's open draft to this offer as it is, instead of cutting the live revision or minting an empty subscription. Renegotiation: refused with cut_at. New: needs subscription_id naming a subscription that was never activated.
cut_atWhen the renegotiation takes effect. Omit for now.
nameName for the subscription this offer creates. Ignored when renegotiating.
subscription_idThe subscription being renegotiated, or the never-activated one a new offer adopts. Required for kind=renegotiation and for kind=new with adopt_draft, refused otherwise.
AddTagsRequest
tag_idsThe tags to add. Each must be a tag for this kind of record.
AdjustWalletRequest
The amount, {value, currency}, in the wallet's currency: positive on a debit, signed (and never zero) on an adjustment.
sourceWhat originates the movement: one of PAYMENT, REFUND, PROMOTION, INVOICE, CHARGE, FEE, MANUAL, TRANSFER.
Requests also accept the new spelling: each value in lower case (charge for CHARGE). The listed spelling is deprecated in requests and accepted until 2026-11-30.
reasonOptional free-text explanation stored on the ledger entry.
referenceOptional external reference; a repeated (source, reference) is treated as an idempotent replay.
AdoptedSignature
nameThe name drawn into every signature field the signer applies, in Dancing Script.
initialsThe initials drawn into every initials field the signer applies. Required when one is applied.
AdvanceTestClockRequest
frozen_atThe instant to advance the clock to. It must be after the clock's frozen_at.
AllowanceGivenBackLot
forfeited^-?\d+(\.\d+)?$ · requiredOf those, the units forfeited again at once because the lot had lapsed and been forfeited; zero when the lot keeps them.
grant_idThe entitlement grant (the allowance lot) the units came back to.
product_idThe product the lot holds units of.
quantity^-?\d+(\.\d+)?$ · requiredThe units that came back to the lot.
AllowanceGivenBackPayload
correction_idThe correcting document (credit note or corrective) that took them back.
given_back_atWhen the units came back, on the billing clock.
invoice_idThe issued document whose allowance draws came back.
Every allowance lot that got units back.
organization_idThe organization whose allowance came back.
subscription_idThe subscription whose allowance came back.
workspace_idThe workspace that owns the subscription.
AllowanceRolledOverPayload
invoice_idThe invoice the roll-over was computed against.
organization_idperiod_endThe end of the billing period the allowance carried into.
period_startThe start of the billing period the allowance carried into.
product_idThe metered product the allowance belongs to.
quantity^-?\d+(\.\d+)?$ · requiredThe unused allowance quantity carried forward.
subscription_idThe subscription whose allowance rolled over.
expires_atWhen the rolled-over allowance expires; omitted when it never does.
workspace_idThe workspace that owns the subscription.
AllowanceStateResponse
Per-product allowance state for the subscription.
subscription_idThe subscription this allowance snapshot is for.
The billing period the snapshot covers. Absent when the subscription has no billing period now (a trial before its first paid phase, a deal with no paid phase); products is then empty.
AnalyticsCurrencyList
currenciesISO 4217 codes this workspace has analytics data in, ascending. Read from the data — an organization bills in whatever currencies its charges, invoices and payments carry — so it cannot go stale. EMPTY is a real answer: a workspace that has billed nothing has no books.
AnalyticsOverview
currencyThe window the tiles describe, half-open: start included, end not.
The immediately preceding window of equal length: what each tile's previous value is reduced over.
fromThe same value as period.start. Deprecated: use period.start instead. Removed on 2026-11-30.
previous_fromThe same value as previous_period.start. Deprecated: use previous_period.start instead. Removed on 2026-11-30.
previous_toThe same value as previous_period.end. Deprecated: use previous_period.end instead. Removed on 2026-11-30.
toThe same value as period.end. Deprecated: use period.end instead. Removed on 2026-11-30.
AnalyticsOverviewTile
availableFalse when this metric is declared but not yet servable. The tile is still returned, with a reason — a missing number that says why is more useful than a plausible wrong one.
keylabelpartialpreviousThe same reduction over the immediately preceding window of equal length (previous_period).
series_kindunitvalueDecimal string.
notesreasonWhy the tile is unavailable.
delta_absvalue minus previous. Compute it from those two fields. Deprecated: no replacement. Removed on 2026-11-30.
delta_pct(value - previous) / previous × 100; absent when previous is zero. Compute it from those two fields: a change from nothing is undefined. Deprecated: no replacement. Removed on 2026-11-30.
reductionThe reduction in English words. series_kind says the same: a flow is summed over the window, a stock is the level at its end. Deprecated: use series_kind instead. Removed on 2026-11-30.
AnswerReason
ApprovalActions
can_decideWhether the caller may approve or reject this request right now.
self_decide_overrideTrue when can_decide is true only because the caller holds the permission approval.self_decide and raised this request themselves. The decision is then recorded as a self-approval override, and a comment is required (422 SELF_APPROVAL_REASON_REQUIRED without one).
cannot_decide_reasonWhy not, as the code the decision endpoint would answer with (SELF_APPROVAL, MISSING_DOMAIN_PERMISSION, …). Show it next to a disabled control.
ApprovalCheckpoint
checkpoint_iddomain_permissionThe permission a decider must hold to decide these requests. An approver must be able to perform the operation themselves.
eligible_decider_countHow many people may decide under the approver role this workspace resolves.
enabledWhether the checkpoint is switched on for the caller's workspace, as the settings ladder resolves approval.
expires_after_secondsHow long a request stays decidable. Zero under EXPIRE_HOLD, where another system owns the clock.
expiry_policyminimum_decidersHow many eligible deciders enabling requires. Two, because nobody may decide their own request.
subject_kindthreshold_kindAMOUNT_THRESHOLD offers the operator an amount + currency; NO_THRESHOLD gates every command while enabled.
api_key_noticeWhat enabling this checkpoint means for API-key callers. Show it next to the switch before it is turned on. Sent with include=display; until 2026-11-30 also without being asked.
domain_permission_labeldomain_permission as a label for people, followed by the permission. Sent with include=display; until 2026-11-30 also without being asked.
eligible_decider_namesUp to five of the eligible deciders, by name. Sent with include=display; until 2026-11-30 also without being asked.
expiry_noticeThe expiry rule as a sentence, to show verbatim. Sent with include=display; until 2026-11-30 also without being asked.
scopeWhat this checkpoint does not intercept, in words. Sent with include=display; until 2026-11-30 also without being asked.
configurableAlways true: a checkpoint that has no organization switch is not listed. Deprecated: no replacement. Removed on 2026-11-30.
ApprovalCommand
referenceThe domain's reference axis. On wallet.adjust it is the operator's own external reference; on invoice.refund it is that attempt's dedup token and must NOT be reused on a resubmission.
refund_scopeRefund only: what the approved refund takes back. whole reverses the document: its supply comes back, what was paid is returned and the unpaid rest comes off what the buyer owes — the request's amount is the paid part, the most it may return. amount returns the request's amount as a stated figure. A refund by named lines is never parked. Absent on every other checkpoint.
skip_gatewayRefund only: the credit note was to be issued inline instead of calling the payment provider.
sourceDomain-owned enum the operator chose: a wallet transaction source, or a refund's refunds_reason_check classification. Prefill a resubmission from it.
ApprovalDecision
decided_atdecided_byUser id of the decider, as text. From 2026-11-30 decided_by is the person as a UserRef {id, name, email}, sent with include=decisions.decided_by: read the id from decided_by_id.
decisionidself_approval_overrideTrue when the decider was the requester and the decision was permitted only by the break-glass permission approval.self_decide. Such a row always carries a comment. Render it as an override, never as an ordinary approval.
commentThe decider's own words. Always present when self_approval_override is true.
decided_by_idThe user who decided.
decided_by_nameThe decider's name, else their email address. Absent when the id names no user. Deprecated: use decided_by.name (a UserRef from 2026-11-30) instead. Removed on 2026-11-30.
ApprovalFact
label_keyMessage key for the left-hand side. Always copy: there is no such thing as a data label.
unusualTrue for the things that should stop a fast approver — a full refund, a quote far below list, the consequence of an expiry.
text_keyMessage key for a value that is prose the product wrote.
valueA value somebody ELSE wrote — a reason note, a reference, an id, a date. Rendered verbatim; never translated.
ApprovalJob
statusNOT_APPLICABLE while the job does not apply to the request, PENDING while it runs, DONE when it succeeded, FAILED when it ran out of attempts.
completed_atWhen the job succeeded.
errorWhy the job failed. Present only when status is FAILED.
ApprovalLine
descriptionCatalog list price captured when the line was authored. Display only — it is not a discount threshold. Absent on manually authored lines, which have no list price by construction.
quantity^-?\d+(\.\d+)?$Decimal number encoded as a string to preserve precision.
ApprovalOutcomePayload
checkpoint_idThe checkpoint that parked the operation.
entity_idThe id of the subject the request parked.
entity_typeThe kind of subject the request parked.
organization_idThe organization the request belongs to.
request_idThe approval request.
stageWhich half the fact is about: the approved operation's apply, or the release of what the request had parked.
statusHow the request closed: APPROVED for the apply; REJECTED, CANCELLED or EXPIRED for the release.
customer_idThe customer the subject belongs to, where it has one.
errorOn a failure: what the run reported. The request keeps it until a retry succeeds.
retried_byOn a retry: the person who re-armed the run.
workspace_idThe workspace that owns the approval request.
ApprovalPending
already_pendingTrue when a request for this subject was already waiting: the call raised nothing new and the id is the existing request's. A double-clicked button lands here, which is a no-op rather than a conflict — the partial unique index on (organization, checkpoint, subject) settles it in the database.
The parked approval request. Read it whole with GET /v1/approvals/{id}, or wait for the approval.* webhook event (approval.applied, approval.request_rejected, approval.request_expired, …) whose request_id is its id.
stateAlways approval_pending. The operation has NOT been carried out: no money moved, no ledger row was written, no document was sent, and none of it will happen unless a person approves the request.
approval_request_idThe same value as request.id. Deprecated: use request.id instead. Removed on 2026-11-30.
checkpoint_idThe same value as request.checkpoint_id. Deprecated: use request.checkpoint_id instead. Removed on 2026-11-30.
subject_idThe same value as request.subject.id. Deprecated: use request.subject.id instead. Removed on 2026-11-30.
ApprovalProcess
current_stepZero-based index of the first station the subject is standing at, or -1 when none is. A flow is a graph and can have two branches running at once, which is why this and gate_step are separate.
gate_stepZero-based index of the station this checkpoint gates. For "where is this blocked", use this — not current_step. -1 when the process has no gate station: the checkpoint does not apply to this subject and did not take it through the gate (a refused request on a subject that went on without approval), so its gate stations are left out.
liveTrue when the position was just read from the subject (detail view). False when it was derived from the approval request alone (list view), which is exact for a PENDING request — the subject is at the gate by construction — and is why the queue omits a process for anything else.
per_subjectTrue when the steps are authored per subject (a schedule flow's own steps): render label verbatim. False when the steps are compiled in, in which case key is a stable translation axis.
The subject's stations, in the order they happen.
ApprovalProcessStep
keyStable identity of the station. A translation axis when per_subject is false; an author's own step key when it is true.
labelServer rendering, always usable. The fallback whenever key means nothing to the reader.
stateCURRENT on the gated step of a pending request is the thing the operator came to see. FAILED is a rejection or an apply that did not succeed.
ApprovalRequest
The durable job that carries out an approved operation. A failed apply can be retried and is never silent.
checkpoint_idThe compiled-in checkpoint that parked this operation.
created_atheadline_keyDotted path into the dashboard message catalogue, from its root, e.g. "approvalsPage.summary.invoiceRefund.headline". Render it with headline_args.
idinitiated_byUser id of the person who raised the request, as text. They may not decide it unless they hold the break-glass permission approval.self_decide, in which case actions.can_decide is true, actions.self_decide_override is true and the decision is recorded as an override. From 2026-11-30 initiated_by is the person as a UserRef {id, name, email}, sent with include=initiated_by: read the id from initiated_by_id.
statusThe record the operation acts on. Link to it with subject.type and subject.id, and subject.parent_id where the type needs one.
summary_stateDEGRADED means the summary could not be built when the request was raised; the gate still applied. Open the linked record before deciding.
updated_atThe durable job that releases whatever the request parked, for a request closed without approval (rejected, canceled or expired). While it is FAILED the subject is still parked; it can be retried.
What the caller may do with this request right now. Sent only with include=actions.
The value the checkpoint's threshold was compared against. Absent for checkpoints with no money axis.
The parameters the requester submitted, for prefilling a corrected resubmission. Not what an approver decides on — that is facts. Absent when the checkpoint's command has none of these fields.
Who decided and why: the whole trail, oldest first, so the last entry is the decision that closed the request. Empty when nobody decided (pending, expired, canceled). Sent with include=decisions; until 2026-11-30 also without being asked.
expires_atWhen the request closes undecided. Nothing is ever approved by expiry.
The typed statements the decision turns on. Sent with include=facts; a single request also sends them without being asked until 2026-11-30.
gate_reasonWhy the checkpoint parked the operation, recorded at the raise: EVERY_COMMAND, it requires approval for every one; AT_THRESHOLD, the amount is at or above threshold; UNCOMPARABLE, the amount cannot be compared with threshold (another currency, or none). Absent on a request raised before this was recorded and on an author-placed gate — say the threshold was not recorded, never substitute today's setting.
The data the headline is rendered with, by argument name. Text (names, dates, ids) is substituted verbatim and never translated; money is formatted by the reader in their own locale.
initiated_by_idThe user who raised the request. The list filter initiated_by matches it. Absent on a request no person raised.
The money lines behind the request. Sent with include=lines; a single request also sends them without being asked until 2026-11-30.
Where the subject stands in its own lifecycle, with the gated step marked. On a list row it is derived from the request alone and sent only for a PENDING request (live is false); on a single request it is read from the subject (live is true). Absent when it cannot be derived: render the row without a stepper. Sent with include=process; until 2026-11-30 also without being asked.
reasonThe requester's own words, where the underlying operation has them — wallet.adjust's ledger reason, invoice.refund's free-text note. A refund's five-value classification is NOT this; it travels in command.source.
resolved_atsubline_keyMessage key for the secondary line, or absent when there is none.
The threshold in force when the request was raised. Absent under EVERY_COMMAND and wherever gate_reason is absent.
applied_atThe same value as apply.completed_at. Deprecated: use apply.completed_at instead. Removed on 2026-11-30.
apply_errorThe same value as apply.error. Deprecated: use apply.error instead. Removed on 2026-11-30.
apply_stateThe same value as apply.status. Deprecated: use apply.status instead. Removed on 2026-11-30.
can_decideThe same value as actions.can_decide. Deprecated: use actions.can_decide (include=actions) instead. Removed on 2026-11-30.
cannot_decide_reasonThe same value as actions.cannot_decide_reason. Deprecated: use actions.cannot_decide_reason (include=actions) instead. Removed on 2026-11-30.
initiated_by_nameThe requester's name, else their email address. Absent when the id names no user. Deprecated: use initiated_by.name (a UserRef from 2026-11-30) instead. Removed on 2026-11-30.
self_decide_overrideThe same value as actions.self_decide_override. Deprecated: use actions.self_decide_override (include=actions) instead. Removed on 2026-11-30.
subject_idThe same value as subject.id. The list filter keeps the name subject_id. Deprecated: use subject.id instead. Removed on 2026-11-30.
subject_kindThe same value as subject.type. The list filter keeps the name subject_kind. Deprecated: use subject.type instead. Removed on 2026-11-30.
subject_parent_idThe same value as subject.parent_id. Deprecated: use subject.parent_id instead. Removed on 2026-11-30.
withdraw_errorThe same value as withdraw.error. Deprecated: use withdraw.error instead. Removed on 2026-11-30.
withdraw_stateThe same value as withdraw.status. Deprecated: use withdraw.status instead. Removed on 2026-11-30.
withdrawn_atThe same value as withdraw.completed_at. Deprecated: use withdraw.completed_at instead. Removed on 2026-11-30.
ApprovalRequestApprovedPayload
checkpoint_idThe checkpoint that parked the operation.
decided_byThe person who approved. Never a machine: an API key cannot decide.
entity_idThe id of the subject that was approved.
entity_typeThe kind of subject that was approved.
organization_idThe organization the request belongs to.
request_idThe approval request that was approved.
self_approval_overrideTrue when the approver was the requester, permitted only by the break-glass permission approval.self_decide. Such a decision always carries a comment — the API refuses one without.
commentThe approver's own words. Optional on approve — REQUIRED when self_approval_override is true.
customer_idThe customer the subject belongs to, where it has one: a quote's, an invoice's or a wallet's customer, or the customer of the subscription a gated change acts on.
initiated_byThe person who raised the request. Present so a subscriber can check self_approval_override against the two ids rather than trusting the flag alone.
workspace_idThe workspace that owns the approval request.
ApprovalRequestCancelledPayload
causeWhy the request closed: the requester withdrew it, or its subject retired (a voided quote, an ended change) or changed under the approver, so there was nothing left to decide.
checkpoint_idThe checkpoint that parked the operation.
entity_idThe id of the subject whose request was cancelled.
entity_typeThe kind of subject whose request was cancelled.
organization_idThe organization the request belongs to.
request_idThe approval request that was cancelled.
cancelled_byThe person who withdrew the request. Absent when it was retired with its subject.
commentTheir own words, if they gave any.
customer_idThe customer the subject belongs to, where it has one: a quote's, an invoice's or a wallet's customer, or the customer of the subscription a gated change acts on.
workspace_idThe workspace that owns the approval request.
ApprovalRequestCreatedPayload
checkpoint_idThe checkpoint that parked the operation (quote.send, invoice.refund, wallet.adjust, schedule_flow.gate).
entity_idThe id of the subject awaiting approval.
entity_typeThe kind of subject awaiting approval (QUOTE, REFUND, WALLET_ADJUSTMENT, SCHEDULE_FLOW_STEP).
organization_idThe organization the request belongs to.
request_idThe approval request that was created.
customer_idThe customer the subject belongs to, where it has one: a quote's, an invoice's or a wallet's customer, or the customer of the subscription a gated change acts on.
expires_atDeadline. Absent when the checkpoint holds without a deadline of its own.
The data the headline is rendered with, by argument name. A text argument (a customer name, an id) is never translated: a name is a name in every language. A money argument is an amount with its currency, for the reader to format in their own locale.
headline_keyMessage key for the one line describing what needs deciding, as the approver sees it. A dotted path into the dashboard's message catalogue; render it in your own copy or ignore it and use headline_args.
initiated_byThe operator whose action was parked. Empty only for a flow gate the reconciler healed back into existence.
workspace_idThe workspace that owns the approval request.
ApprovalRequestExpiredPayload
checkpoint_idThe checkpoint that parked the operation.
entity_idThe id of the subject whose request expired.
entity_typeThe kind of subject whose request expired.
expired_atInstant the request was resolved EXPIRED.
organization_idThe organization the request belongs to.
request_idThe approval request that expired undecided.
customer_idThe customer the subject belongs to, where it has one: a quote's, an invoice's or a wallet's customer, or the customer of the subscription a gated change acts on.
workspace_idThe workspace that owns the approval request.
ApprovalRequestRef
checkpoint_idThe checkpoint that parked the operation (for example invoice.refund, wallet.adjust, quote.send).
idstatusApprovalRequestRejectedPayload
checkpoint_idThe checkpoint that parked the operation.
commentWhy it was rejected. Always present: a rejection with no reason is refused at the API.
decided_byThe person who rejected.
entity_idThe id of the subject that was rejected.
entity_typeThe kind of subject that was rejected.
organization_idThe organization the request belongs to.
request_idThe approval request that was rejected.
self_approval_overrideTrue when the decider was the requester, permitted only by the break-glass permission approval.self_decide.
customer_idThe customer the subject belongs to, where it has one: a quote's, an invoice's or a wallet's customer, or the customer of the subscription a gated change acts on.
initiated_byThe person who raised the request. Present so a subscriber can check self_approval_override against the two ids rather than trusting the flag alone.
workspace_idThe workspace that owns the approval request.
ApprovalSubject
idThe record's id.
typeThe kind of record the operation acts on.
parent_idThe record the subject lives under, for the kinds that need one to be addressed: the customer of a wallet (/customers/{parent_id}/wallets/{id}). Absent for a quote, an invoice and a change, which are addressable by id alone, and on a request whose parent could not be determined: render no link then, never a guess.
AssemblyRefusal
codeWhy assembly produced no document, as the oracle's own stable token.
detailDeveloper-readable explanation. Not for display: a client words its sentence from code and the identifiers beside it.
price_keyThe price key the refusal is about, beside product_id.
product_idThe product the refusal is about; absent when it is about the document or an entry naming no product.
AttachIdentityProviderRequest
aliasprovider_iddisplay_nameenabledhide_on_loginAudience
content_hashHash of the canonical rule document. Two definitions that select the same population share it, so re-typing "de" as "DE" or reordering the values inside a rule is correctly recognised as no change.
created_atWhen the audience was created.
The saved rule set: either match_all, or a root rule group. Never both, and never neither.
idAudience UUID.
nameOperator-facing name. Unique within the workspace.
organization_idOwning organization.
purposesWhich surfaces may point at this audience. Never empty. "email" is both mail tiers, "schedule" is a scheduled change's scope, "rollout" is the e-invoice rollout target, "documents" is a document-template block gated on the recipient (visible_when.audience_id). "promotion" is a promotion whose enrolment this audience decides.
revisionBumped on every rule write whose canonical content hash actually moved. A rename never bumps it, and neither does a rules write that changes nothing — the broadcast re-fire confirm compares (revision, count), so a spurious bump would refuse a send for a population that never moved.
updated_atWhen the audience was last written, by either a rename or a rules write.
workspace_idOwning workspace. An audience is workspace-scoped, so a sandbox audience and a live one never see each other.
descriptionWhat this population is for. Optional.
The promotions whose enrollment this audience decides, draft and live. Sent on get-audience and update-audience-rules only; the other operations leave it out. The same rows are the kind=promotion entries of GET /audiences/{id}/usage. Deprecated: use GET /audiences/{id}/usage instead. Removed on 2026-11-30.
AudienceChange
kindWhat the change is about: the name, the description, the match-all switch, a condition, the grouping or a purpose.
afterFor the name or the description: its value after the act; absent when it was cleared.
beforeFor the name or the description: its value before the act; absent when there was none.
For a condition added or removed: the condition.
For a regrouping: the whole definition before the act and after it.
For the match-all switch: before the act and after it.
purposeFor a purpose added or removed: the surface.
AudienceCondition
dimensionWhich fact the condition tests.
operatorHow it compares.
valuesWhat it compares against, as the rule states them.
AudienceDefinition
match_allTarget every customer. Mutually exclusive with root.
Root rule group. Required unless match_all is set.
AudienceGroup
Child groups and leaves. Must not be empty.
opHow the children combine: and | or.
negateInvert the whole group.
AudienceGroupingSides
The whole definition after the act.
The whole definition before the act.
AudienceLeaf
dimensionWhich fact this rule tests, from the closed dimension vocabulary.
operatorComparator; must be one the dimension declares.
valuesValues for the comparator. Always strings; UUIDs and timestamps are marshalled as text and parsed by the dimension's declared kind.
AudienceMatchAllSides
afterWhether it matches every customer after the act.
beforeWhether it matched every customer before the act; absent on a creation.
AudienceMember
customer_idCustomer UUID.
customer_typeThe customer's type, as on the customer.
emailCustomer email address.
nameCustomer display name.
countryBilling-address country, upper-cased. Absent when the customer has no billing country on file.
AudienceMembership
audience_idThe audience that answered.
audience_revisionWHICH revision of the rules answered. The server reads the definition itself, so this is the audience as it is NOW — not as the client last saw it. Log it beside the answer: "audience 3f2a… revision 7 said no" survives the next edit of that audience and "the audience said no" does not.
memberTRUE inside the audience, FALSE outside it, NULL when the customer id names no live customer of this organization. Null is NOT false: render it as unknown. A soft-deleted customer is null, never false, because the audience predicate excludes deleted rows and would otherwise report a deletion as an exclusion.
customer_foundWhether the customer id names a live customer this organization can see. False exactly when member is null, so read member instead. Deprecated: use member instead. Removed on 2026-11-30.
AudiencePreview
The matched/mailable/sendable ladder, taken in one statement so the rungs cannot disagree with each other.
A bounded sample of matching customers, ordered by customer id. It samples the MATCHED population — the top rung — so the sample and the headline number describe the same set.
AudiencePreviewCounts
mailableMatched, narrowed to customers who could receive email at all (active status, non-empty address). Null when this deployment has no mail layer wired to contribute the condition — null means NOT MEASURED HERE, never zero and never "same as matched".
matchedCustomers the audience rules select. A suspended customer with no mailbox is still a member of the audience.
sendableAlways null on this endpoint. Who would receive a promotional email depends on suppressions and marketing consent, which are checked only when an email is sent. Deprecated: no replacement. Removed on 2026-11-30.
AudienceReference
kindWhat kind of thing holds the reference. "promotion" is a promotion whose enrolment this audience decides, draft or live; "mail" is an email narrowed to this audience, either one kind of email or the workspace-wide default; "change" is a scheduled change whose scope is this audience and which has not run yet; "setting" is a setting whose value is this audience id, today only the e-invoice rollout target.
nameThe referencing row's operator-facing name. Present for kind=promotion. Empty for kind=mail, whose wording the client owns.
idThe referencing row's UUID. Present for kind=promotion and kind=change.
keyFor kind=mail: the anchor key of the email narrowed to this audience, e.g. "invoice.finalized"; ABSENT means the workspace-wide email audience (the setting mail.house.audience_id), which narrows every kind at once. For kind=setting: the setting key, e.g. "einvoice_rollout_audience_id".
AudienceReferenceList
Everything currently pointing at this audience. Empty means the audience can be deleted. From 2026-11-30 the operation answers {data: [AudienceReference], pagination} instead of this wrapper.
AudienceRevision
audience_idThe audience this revision belongs to.
content_hashCanonical content hash at this revision.
created_atWhen this revision was written.
What the rules said at this revision, as stored — unmarshalled from the revision document and never re-derived from the live rule rows.
revisionRevision number. Revision 1 is the definition the audience was created with.
created_byWho wrote it. Absent for a migration or a background job, which have no signed-in principal to record.
AuditEntityType
AuditEvent
event_typeidoccurred_atWhen the act was recorded.
organization_idcausation_idcorrelation_idWhat the recorded change did, field by field: each entry names its subject and states before → after. Every entry is an item of one change family — the typed vocabulary of the feature whose edit the row records — discriminated by kind, which is unique across families. Families: access, accounting_integration, audience, brand, catalog_header, catalog_version, change, checkout_link, clause, custom_field, customer, customer_provider_link, dunning_policy, einvoicing_channel, einvoicing_profile_rule, identity_provider, invoice, mail_binding, mail_provider, marketplace_seller, meter, organization, organization_domain, payment_gateway, payment_method, pricing_input, promotion, quote_edit, quote_preset, revision, setting, share, signing_provider, subscription_defaults, tag, template, wallet_settings, webhook_endpoint, webhook_secret.
domaindomain_atIn a sandbox on a test clock: the simulated instant the act happened at, as the clock read it. Absent on the wall. Lists filter and sort by occurred_at.
effective_atWhen the recorded act takes effect — a catalog version's effective instant, a subscription line's switch — when it states one. Absent for an act that takes effect when it is recorded.
entityentity_identity_nameDisplay name of the subject entity, resolved server-side. Absent when the entity has no name, no longer exists, or is of a type this endpoint does not resolve — render the id in that case. Sent without include=display until 2026-11-30; after that only with include=display.
entity_typepayloadrequest_idretention_groupThe retention group the row is kept under — evidence, security or operational — as its event type declares it; how long it is kept is the organization's retention for that group. Absent for a type the registry no longer declares, whose rows no group's retention deletes.
severityEvery entity the row is filed under: its own entity when that is a kind rows are filed under (AuditSubjectType), and each one the act was about besides (the subscription an invoice billed, the customer it was sent to, the quote a signing request was sent for). Absent for a row filed under none. The rows of one subject are what ?subject_type=&subject_id= returns.
summarytrace_idHow the row's operation (correlation_id) started: the endpoint a request called, the job that ran, the webhook that arrived. Absent for an operation that recorded none. GET /audit-events/operations/{id} reads the whole operation. Sent without include=trigger until 2026-11-30; after that only with include=trigger.
verbvisibilityactor_emailDeprecated: use actor.email instead. Removed on 2026-11-30.
actor_key_idDeprecated: use actor.key_id instead. Removed on 2026-11-30.
actor_key_prefixDeprecated: use actor.key_prefix instead. Removed on 2026-11-30.
actor_labelDeprecated: use actor.label instead. Removed on 2026-11-30.
actor_nameDeprecated: use actor.name instead. Removed on 2026-11-30.
actor_pictureDeprecated: use actor.picture instead. Removed on 2026-11-30.
actor_typeDeprecated: use actor.type instead. Removed on 2026-11-30.
actor_user_idDeprecated: use actor.user_id instead. Removed on 2026-11-30.
AuditEventType
retention_groupThe retention group rows of the type are kept under; how long they are kept is the organization's retention for that group.
severityHow much a row of the type matters; what ?severity= filters by.
typeThe event type, as AuditEvent.event_type spells it and ?event_type= takes it.
visibilityWho may read a row of the type: the organization's operators, or its customer too.
descriptionOne line that says what a row of the type records. Absent for a type without a label.
domainThe area the type is filed under. Absent for a type without a label.
entityThe kind of record the act is about. Absent for a type without a label.
verbWhat happened to the record. Absent for a type without a label.
AuditOperation
The operations this one armed that have run — the scheduled runs a request or a clock advance set off — oldest first, at most 50.
children_moreMore operations were armed than children lists.
The operation's audit rows in the order they happened, at most 500.
events_moreThe operation wrote more rows than events lists.
idThe point the operation entered the system: the request a client sent, or the payload a provider's webhook delivered. Absent when neither was kept.
The operation that armed this one, when it is recorded in this workspace.
How the operation started. Absent for an operation that recorded none (written before triggers were recorded): its events are all there is.
AuditOperationEntry
kindrequest: a request a client sent to the API or the portal. webhook: a payload a provider's webhook delivered.
bodyThe JSON body or payload, the values of secret-named keys (password, token, secret, api_key, card_number, …) masked. Absent when none was sent or kept.
bytesThe body's size as sent, in bytes.
event_typeA webhook's event type at its provider.
methodA request's HTTP method.
noteWhy a body that was sent is not here: larger than 32 KB, not JSON, cleared by the audit retention, or cleared by a customer's erasure.
providerA webhook's provider.
targetThe path and query a request was sent to, the values of secret-named query parameters masked. Absent for a portal request, whose path may be the signer's link token.
AuditOperationEvent
caused_byThe id of the row of the nearest recorded event this one is a consequence of, among events — through events that keep no audit row. Absent for an act the trigger did directly.
AuditSubject
idtypeThe kind of entity: one of the kinds rows are filed under (AuditSubjectType).
AuditSubjectType
AuditTrigger
Who acted when the operation first wrote, as the audit trail names an actor.
idThe operation: its trace id, which every row it wrote carries as correlation_id.
kindHow the operation started: api (a request to the API, from the dashboard or an API key), portal (a customer's portal request), webhook (a provider's webhook), job (a background run), schedule (a run that fell due), clock_advance (a sandbox's test clock run forward), support (a platform support operator), system.
sourceThe trigger in one string: a request's method and route template (POST /v1/invoices/{id}/finalize), a webhook's provider, a job's topic, else its kind. What ?trigger_source= matches.
started_atWhen the operation started: the request arrived, the run began.
domain_atIn a sandbox on a test clock: the operation's simulated instant.
The job run that started the operation. Absent for any other start.
methodA request's HTTP method.
parent_idThe operation that armed this one: a scheduled run's arming request, or the clock advance that made it due.
request_idrouteA request's route template — never the path it was called with.
The provider webhook that started the operation. Absent for any other start.
actor_customer_idDeprecated: use actor.customer_id instead. Removed on 2026-11-30.
actor_key_prefixDeprecated: use actor.key_prefix instead. Removed on 2026-11-30.
actor_labelDeprecated: use actor.label instead. Removed on 2026-11-30.
actor_typeWho acted when the operation first wrote. Deprecated: use actor.type instead. Removed on 2026-11-30.
actor_user_idDeprecated: use actor.user_id instead. Removed on 2026-11-30.
job_idA job run's job. Deprecated: use job.id instead. Removed on 2026-11-30.
job_topicA job run's topic. Deprecated: use job.topic instead. Removed on 2026-11-30.
webhook_event_idA webhook's event id at its provider. Deprecated: use webhook.event_id instead. Removed on 2026-11-30.
webhook_providerA webhook's provider. Deprecated: use webhook.provider instead. Removed on 2026-11-30.
AuditTriggerJob
topicThe job's topic.
idThe job. Absent when the run recorded none.
AuditTriggerSource
kindlatest_atWhen the latest of them started.
operationsHow many operations started this way since the bound.
sourceThe value ?trigger_source= takes.
AuditTriggerWebhook
providerThe webhook's provider.
event_idThe webhook's event id at its provider.
AuthorSubscriptionRevisionDraftRequest
Every active phase of the draft, in order. They replace the draft's active phases; the phases a cut superseded are kept as history.
reasonWhy the revision exists: signed quote, renegotiation, operator edit.
BasisSplit
The gross-priced lines, added up; the tax is included.
The net-priced lines, added up.
BeforeAfterInt
afterThe value after the write; absent when there is none.
beforeThe value before the write; absent when there was none.
BeforeAfterRevisionDiffEnd
The value after the write; absent when there is none.
The value before the write; absent when there was none.
BeforeAfterRevisionDiffExit
The value after the write; absent when there is none.
The value before the write; absent when there was none.
BeforeAfterRevisionDiffOrigin
The value after the write; absent when there is none.
The value before the write; absent when there was none.
BeforeAfterRevisionDiffPhase
The value after the write; absent when there is none.
The value before the write; absent when there was none.
BeforeAfterRevisionDiffStart
The value after the write; absent when there is none.
The value before the write; absent when there was none.
BeforeAfterString
afterThe value after the write; absent when there is none.
beforeThe value before the write; absent when there was none.
BeforeAfterThen
afterThe value after the write; absent when there is none.
beforeThe value before the write; absent when there was none.
BelowOrganizationValue
idpolicyvalueThe value of a string, int or bool setting, in its wire spelling. Empty for a list or money setting, whose value is value_list or value_money.
allows_nothingPresent and true for an allow-list (allowed identity providers, allowed email domains) whose organizations' lists share no entry: nothing is allowed, and value_list is absent. It is never the empty list, which allows everything. Absent on every other value.
namePresent when the setting holds a secret (a webhook URL that is its own bearer token): whether a value is set, and nothing else. The value itself is never returned, and value is then empty.
value_listA list setting's value, in order. An empty array is the empty list, which is a value. Absent for every other type.
A money setting's amount and currency. Absent for every other type, and for the money value with no amount.
BelowSetting
keyThe setting's key.
The organizations below that hold their own value, with the value and its policy.
countHow many organizations below hold their own value. Deprecated: use the length of organizations instead. Removed on 2026-11-30.
BillingAddress
citycountryline1postal_codeline2stateBillingAlignment
kindWhere the billing periods fall: start counts from the first paid phase's start, day_of_month cuts on day, last_day on every month's last day.
dayThe day of the month the periods start on; present only with day_of_month.
BillingBlockPayload
attemptsHow many times this window has been refused. 1 on subscription.billing_blocked.
codeThe refusal's stable token — an assembly refusal code, or the input an INDETERMINATE could not determine. Alert on this.
detailThe refusal's own sentence, including what it declined to substitute.
organization_idperiod_endExclusive end of that window.
period_startFirst instant of the window that cannot be billed.
subscription_idThe subscription whose renewal is blocked.
workspace_idThe workspace that owns the subscription.
next_attempt_atWhen the renewal will try this window again. Absent on subscription.billing_unblocked.
BillingCadence
countHow many units one billing period spans (3 with month bills quarterly).
unitThe calendar unit: week, month or year.
BillingDocument
billed_bycut: the billing run drafted it at a cut. early: it was drafted outside the run for the subscription's period (POST /invoices/generate, or a period document from before cuts were billed).
idThe document.
kindAn invoice, or the credit note a cut's credits went on.
statusIts status.
cut_atThe cut it is the document of; absent when billed_by is early.
issued_atWhen it was issued; absent on a draft.
numberIts number; absent on a draft.
BillingPeriod
The documents that billed the period, in the order they were drafted, a reversed one under its status. Empty when none has.
currentNow is inside the period.
period_endEnd instant of the billing period, exclusive.
period_startStart instant of the billing period.
The documents that settled a change inside the period after it was billed.
settles_nextA change inside the period is settled at the next cut (billing-period B2): it is owed, and no document says so yet.
next_cut_atThe next cut, when its invoice bills the period or a part of it.
BindingIdentity
binding_idThe binding's id.
The meter it binds.
BindingRole
Requests also accept the new spelling: each value in lower case (billable_quantity for BILLABLE_QUANTITY). The listed spelling is deprecated in requests and accepted until 2026-11-30.
BrandChange
keyWhat changed: the text's field, the colour slot, the image or the surface.
kindWhat the change is about: a text, a colour, an image or a surface the kit applies to.
afterThe value after the act; absent when none is set.
beforeThe value before the act; absent when none was set.
For a surface: whether the kit is applied there, before and after the act.
modeFor a colour: the mode it is in.
BrandFlagSides
afterThe switch after the act; absent when its kit was removed.
beforeThe switch before the act; absent when the organization had no kit.
Branding
company_nameCompany name shown alongside or in place of the logo.
logo_urlURL of the logo image to render in the document header (https, or a data:image URI).
BreachDailyCount
bucketStart of the day, 00:00 UTC.
countThreshold breaches of the meter that occurred that day.
Breakdown
applied_to_invoice_linesdirect_subscriptionspinned_by_planspinned_by_pricessubscription_historysubscription_linesused_in_invoice_atomsused_in_invoice_linesBreakdownAdjustment
Signed amount this adjustment contributes to the effective price.
labelHuman-readable description of the adjustment.
typeKind of adjustment: override, tier, formula, promotion, or conversion.
BundleGrace
grace_directionBackwards reaches an already-invoiced line; forwards holds the redemption pending until the target arrives.
grace_daysThe window in whole days. Meaningless, and refused, when the direction is none.
BundleItem
productProduct the line must carry.
quantity^-?\d+(\.\d+)?$ · requiredHow much of it the set needs.
price_keyPrice key the line must carry. Empty means any key of this product.
BundleReward
reward_kindfree zeroes the rewarded units (zeroing lane); percent and fixed cut them (price-cut lane).
The per-unit reward, as a money table. For reward_kind=fixed only. The entries price named currencies; the default is one currency-less value spent in whatever currency the bill is in, for every currency the entries do not name. An entry always beats the default, at least one of the two is required, and nothing is ever converted. A bill this table answers for in neither way rewards nothing. It applies to the REWARDED UNITS ONLY.
reward_percent^-?\d+(\.\d+)?$A percent in (0, 100]. For reward_kind=percent only. It applies to the REWARDED UNITS ONLY, never the whole line.
BundleShape
kindThe shape discriminator.
repeatper_set rewards one target per completed set, as ONE firing per target line carrying the summed units.
The legs that must all be present. A line's quantity is consumed at most once across every set of every bundle in one evaluation.
The line the reward lands on.
BuyerPrefill
The intake as the form opens it: the buyer's saved billing and shipping address, VAT id and custom-field answers, with the billing address on the customer record where the buyer saved none.
has_inputTrue when the signer saved at least one thing they entered: a detail, their name or role, a field applied or filled, or an adopted signature. Only then does the page offer to resume. What the form takes from the customer record does not count. Always false on a preview.
The signature the signer adopted (name and initials), when they adopted one.
The signer's own fields in signing_documents as they left them: true for a signature or initials field they applied or a checkbox they ticked, the text of a text field. An applied field is not a signature: nothing is signed until the Accept.
signer_nameThe name the signer typed and saved. Never prefilled from anywhere else: the typed name is the signature.
signer_roleThe role or title the signer typed and saved.
CancelSubscriptionRequest
reasonWhy.
When the cancellation takes effect: now (the default when absent), at a future instant, or at the end of the billing period in force — resolved once, when this is called. A past instant is refused.
CancelWhenAt
atWhen the cancellation takes effect. Must be in the future.
kindThe shape discriminator: plan the cancellation for an instant.
CancelWhenNow
kindThe shape discriminator: end the subscription now.
CancelWhenPeriodEnd
kindThe shape discriminator: plan the cancellation for the end of the billing period in force, resolved once when it is asked for.
CaptureReservationRequest
Partial-capture amount, {value, currency}, in the hold's currency. Omitted: captures the full held amount.
referenceOptional external reference recorded on the capture's ledger entry.
CascadeOrigin
sourceWhat caused the cascade: another version, a formula, a meter or a cost.
cost_keyFor a cost source: the cost's key.
The source, named: the version followed (with its number), the formula or the meter. Absent for a cost, which is named by its key.
followed_kindFor a version source: the kind of the version followed.
CaseEventPayload
What the customer owed when the case opened.
What the customer has paid of it.
case_idThe dunning case.
credit_document_idThe credit note whose wallet entry the chargeback could not take back in full.
customer_idThe customer who owes the money.
dispute_idThe lost dispute.
opened_atorganization_idreasonWhy the customer owes it: DUNNING_CHARGEBACK_SHORTFALL is a lost chargeback that could not take back, from the customer's wallet, money a reversal had returned there, because the wallet had spent it.
routeHow the case is paid. charge: another saved payment method of the customer — never the one charged back — is charged once; top_up: it is deducted from the customer's next top-ups, oldest case first (the customer has no other usable method, the organization switched the charge off, or the charge failed). On a paid case, how it was paid.
statusopen, paid (charged to another payment method of the customer, or deducted from their top-ups — route says which) or reversed (the provider reported the dispute won after it was lost).
workspace_idThe workspace that owns the case.
charge_payment_idThe one charge made for the case on another payment method of the customer. Absent while none was made.
charge_refund_idThe refund of that charge, when the case was reversed after the charge paid it. Absent until the refund is made, which is after the reversal is announced: read the case for it.
closed_atWhen the case left open. Absent while it is open.
reopen_dispute_idThe lost dispute on the case's own charge that reopened it. Absent on a case never reopened.
reopen_reasonWhy the case was reopened: charge_charged_back — the customer charged back the charge to another of their payment methods that had paid it; the case is deducted from their next top-ups and never charged again. Absent on a case never reopened.
reopened_atWhen a paid case was reopened because the customer charged back the charge that paid it. Absent on a case never reopened.
CatalogPriceTier
unit_amount^-?\d+(\.\d+)?$ · requiredMAJOR units in the row's currency: the per-unit rate under VOLUME and STAIRCASE, the price per package under PACKAGE.
basisWhat a computed tier's result is: per_unit (a rate per billed unit) or per_band (the band's whole amount). Absent on a static tier.
package_size^-?\d+(\.\d+)?$PACKAGE only: how many units one package holds.
rate_expressionThe tier's rate expression, when the catalog computes its rate; unit_amount is then its static fallback.
up_to^-?\d+(\.\d+)?$Inclusive upper quantity bound; the tier covers (previous tier's up_to, up_to]. Absent on the open-ended last tier.
CatalogPublishVersionPayload
release_nameOptional name for the version this publish produces, shown beside its number.
release_noteOptional note for the version this publish produces.
CatalogVersionCascadeSource
idThe source's identity — a catalog_versions id for kind=version, a meter id or a cost key otherwise.
kindWhat caused the cascade: version, meter or cost.
entity_idFor kind=version: the source version's entity — what a client links to.
entity_kindFor kind=version: the versioned kind the source version belongs to (product, plan, rate_table, price_formula, tax_rule).
entity_nameFor kind=version: the source entity's display name. Absent when it could not be named.
versionFor kind=version: the source version's display number. Absent on a row that carries none.
CatalogVersionDiffCell
afterThe value on the TO side; null when that side does not carry the cell at all.
beforeThe value on the FROM side; null when that side does not carry the cell at all.
child_keyThe child's key within its family; empty for the entity row.
child_kindThe child family: price, tier, cost, meter, binding, pin, or entity for the version's own fields.
fieldThe field that differs, or * when the whole child was removed.
value_kindHow to read before/after: text, numeric, bool, ref, tree or null.
CatalogVersionFollower
What the follower's next head would carry that its current one does not.
entity_idThe follower entity's id.
kindThe follower's kind.
CatalogVersionHistoryEntry
What the version does differently from the version it replaced in the chain; from is absent for the entity's first version.
The version: number, release label, publisher, when it took or takes effect and when it was recorded.
CatalogVersionRef
entity_idThe version's entity.
kindThe version's kind.
version_idThe version.
entity_nameThe entity's display name.
versionThe version's number.
CatalogVersionRow
created_atWhen the row was opened — for a draft when editing started, for a release when it was armed.
effective_fromeffective_toidThe catalog_versions row id. A client selecting a version writes this, never the number.
originWho made this version: manual (an operator published it), scheduled_release (a scheduled publish fired), cascade (republished automatically because something it depends on published).
published_atstatusThe row's own state: draft, scheduled, published or archived.
versionThe version's display number, or 0 for a row that is not on the chain (a working draft, an archived row).
archived_reasonWhy an archived row left the timeline: canceled, discarded or superseded.
For origin=cascade: what caused this version.
What the version does differently from the version it replaced; from is absent for the entity's first version. Sent only with include=diff (plans and products).
Who published the version — the same actor the audit trail names: an operator, an API key, or the system for a cascade. Absent on a version not yet published and on one published before publishers were recorded.
rank1-based position in the entity's queue of scheduled versions — the order they will fire. Present only on scheduled rows.
recorded_atWhen the publish was captured, on the wall clock (its audit row). published_at is the operation's instant — a sandbox's test clock — and effective_from when it governs. Sent with include=diff on published versions that have an audit row.
release_nameOperator-given name of this version, shown beside its number.
release_noteFree-text note about this version.
scheduled_change_idThe pending catalog.publish_version Change that will publish this version — reschedule or cancel it there.
scheduled_forWhen this scheduled version is due to publish. Present only on a scheduled row.
usage_countPresent only with ?include=usage_count.
CatalogVersionWarning
typeThe warning's code.
fieldThe field it is about, when it is about one.
messageHuman-readable explanation.
ChainStep
The running net after it. Equal to before for a non-firing.
Signed, as the firing would be. Zero for a non-firing.
The line's running net before this step.
kindlanepromotion_idredemption_idreasonWhy the promotion did nothing. Present on a non-firing and absent on a firing.
window_endThe promotion's last day, on a window_closed step whose promotion has one. Absent for an open-ended window and on every other step.
window_startThe promotion's first day, on a window_closed step. Absent on every other step.
Change
created_atgateWhat holds the Change before its instant: none, or approval until a second person releases it. A step of a change plan carries after (it waits for the step before it).
idoperationscopeone (the subject named above), selector (an audience narrowed through that subject) or cascade (everything downstream of a catalog version).
statusA Change is planned from the moment it is created — scheduling is one act and there is no draft stage. On a POST or PATCH of a when=now, scope=one, ungated change this reads applied already: it was applied inside that request and the subject has moved. planned on such a response means the change is waiting for the engine — a cohort (scope=selector) or a gated change — and firing is a later event, not this one.
subjectThe thing this Change acts on, as kind:id, e.g. subscription:3f2a…. From 2026-11-30 subject is an object {type, id}: type is today's kind (subscription, product, plan, rate_table, tax_rule, price_formula) and id the uuid.
Data the title is rendered with, e.g. customer -> Acme GmbH. Names are DATA and stay verbatim in every locale — never translated. attribute, track and gate are the exception: they carry a closed vocabulary's code (quantity, follow, block), which a client says in its own words. Every argument the message uses is present: a name the server could not read falls back to the row's id, never to an English phrase.
title_keyMessage key for what will happen, chosen by the operation, e.g. subscription.pause.named. Render it in the reader's own locale; the frontend catalogue is messages/schedule/
whenWhen the Change acts: now, at a wall clock, or at an anchor of its subject.
applied_atatThe wall clock a when=at Change acts at, as authored: read its calendar fields in zone. Absent for every other when.
audience_idThe saved audience a selector-scoped Change is narrowed by. Linked, not copied: it is re-resolved at fire time.
audience_matchedHow many CUSTOMERS the audience matched when the operator scheduled this. Evidence, not a guard — the population is deliberately re-resolved at fire time — so a screen showing it beside a fresh count is showing real drift and not an error.
audience_revisionThe audience.revision this Change was scheduled against. It is compared at fire time and a rules edit supersedes the Change; compare it with the audience's current revision to show that an edit has happened before it fires.
failure_reasonWhy the last attempt failed. Present only while it is true.
gate_released_atWhen an approval released this change's gate: it now runs at its instant. Absent while the gate holds, and for an ungated change.
The notice period of a when=after_notice Change as it was authored: a calendar duration {count, unit}. Absent for every other when, and for a notice stored in hours before notices were calendar durations.
Id-pins this Change's publish re-captured at its own instant: a rate-table version per slug, a price-formula version per formula. Sent with include=repoints. Absent when it moved none, which is the ordinary case.
resolved_atThe instant this currently resolves to. An anchored when is re-resolved every tick, so this moves when the subject's period does.
subject_labelThe subject in words, e.g. 'Stadtwerke Regensburg · Standard', for showing which one beside the kind. Sent with include=display. Absent when the row cannot be named; render the kind and the id then. Never translated.
What scheduling, rescheduling or cancelling this Change did to the entity's version timeline: versions re-based onto new predecessors, provisional numbers moved, and children a later version takes from an earlier one. Sent with include=timeline_events. Absent when it moved nothing.
zoneThe IANA zone at is read in. Absent for every other when.
ChangeAnchorAvailability
Anchored when kinds this subject has no moment for, mapped to the reason why not.
ChangeCustomerModeRequest
modeTarget wallet settlement mode: PREPAID or POSTPAID.
reasonOptional audit-trail reason for the mode change.
ChangeCustomerTypeRequest
customer_typeTarget buyer classification: BUSINESS, CONSUMER, or UNKNOWN.
reasonAudit-trail reason for the type change. Required.
ChangeCustomerWalletSettlementRequest
wallet_settlementHow the customer's wallets settle spend from now on: PREPAID or POSTPAID.
reasonOptional audit-trail reason for the change.
ChangeDiff
kindWhat the change is about: what the Change runs, the kind of instant, the instant, who it reaches, what it waits on or where it stands.
For what it waits on: before the act and after it.
For the instant it runs at: before the act and after it.
For what the Change runs: before the act and after it.
For who it reaches: before the act and after it.
For where it stands: before the act and after it.
For the kind of instant: before the act and after it.
ChangeEdgeKindRequest
edge_kindThe kind to flip TO. The same kind is refused.
ChangeGateSides
afterThe Change's part after the act.
beforeThe Change's part before the act; absent on its authoring.
ChangeImpact
affecteddownstreamNames for the refs in affected, excluded and downstream, keyed by the ref itself ('subscription:3f2a…'). Partial: a ref with no entry has no name this build can read. Never translated.
ChangeInstantSides
afterThe Change's part after the act.
beforeThe Change's part before the act; absent on its authoring.
ChangeNarrative
keyDotted path into the dashboard's schedule.narrative catalogue, e.g. "subscription.pause.ok".
The data the sentence is rendered with — names, amounts, versions, quantities. Never translated.
ChangeOperation
idreversiblesubjectswhensconflict_classfan_out_subjectsplan_only_fieldsChangeOperationSides
afterThe Change's part after the act.
beforeThe Change's part before the act; absent on its authoring.
ChangeOutcomes
One row per resolved subject, applied first. Empty for a change that has not fired: the outcomes are a record of what happened, not a prediction of what will.
appliedHow many targets have outcome applied. Count targets instead. Deprecated: no replacement. Removed on 2026-11-30.
excludedHow many targets have outcome excluded. Count targets instead. Deprecated: no replacement. Removed on 2026-11-30.
The same lines GET /changes/{id} answers with include=repoints. Absent when the publish moved none. Deprecated: use GET /changes/{id}?include=repoints instead. Removed on 2026-11-30.
skippedHow many targets have outcome skipped. Count targets instead. Deprecated: no replacement. Removed on 2026-11-30.
ChangeRepoint
kindWhich id-pin moved.
product_idThe product version that now carries the new pin — the thing that will bill differently.
referenceThe pin's stable name within the product version: a rate-table slug, or a price formula's id.
sentenceThe line in English, e.g. 'Rate table eu_calls resolved to v3 (was v2 when scheduled)'. Render your own from the parts above when you have a locale to render it in.
from_versionThe version it was pinned to when the Change was scheduled. Absent when unknown.
to_versionThe version the publish captured. Absent when unknown.
ChangeRequest_catalog_publish_version
operationOperation id from GET /v1/changes/operations.
Operation payload; see payload_schema on GET /v1/changes/operations.
subject_idThe thing this Change acts on.
whenWhen kind the operation accepts: now, at, period_end, phase_change, term_end.
atThe WALL CLOCK to act at, required when when=at — NOT an instant. Its calendar fields are read and read and re-anchored in the zone field, so send it with a Z suffix (2027-01-01T00:00:00Z) and name the zone separately. An offset is refused rather than silently discarded.
audience_idThe saved audience a selector-scoped Change is narrowed by. Required when scope=selector and refused otherwise. LINKED, not copied: the population is re-resolved at fire time, because a Change is a single act at one instant and "who is on plan A" must be answered then.
audience_matchedHow many CUSTOMERS the preview reported the audience matching. Recorded and REPORTED, not enforced: a count moves because the world moves — customers sign up, subscriptions cancel — and re-resolving at fire time is the whole point. It is what lets a screen say "you confirmed 1,240; it now matches 1,830".
audience_revisionThe audience.revision the preview reported. Echo it back: any edit to the audience rules bumps it, and a Change scheduled against the old revision is SUPERSEDED at fire time rather than firing at a population nobody previewed. Omit only when scheduling without a preview.
client_tokenCaller's idempotency token.
gatenone (default) runs at its instant. approval holds it until a second person with change.write releases it from the approvals queue — the author cannot release their own.
The notice period for when=after_notice: a calendar duration {count, unit}, counted from the moment of authoring on the calendar in UTC — a month's notice given on 31 January runs out on 28 February.
scopeWho this Change acts on. one (default) is the single subject named by subject_id. selector narrows a saved customer audience to the subjects the operation can act on, and requires audience_id — the subject then names the ENTITY the audience is narrowed through ("everyone in this audience who is on plan A" is subject=plan A, scope=selector).
subject_kindWhich kind of thing subject_id names, when the operation acts on several: product, plan, promotion, rate_table, tax_rule, price_formula.
zoneIANA zone the wall instant is read in.
ChangeRequest_subscription_apply_for_a_while
operationOperation id from GET /v1/changes/operations.
Operation payload; see payload_schema on GET /v1/changes/operations.
subject_idThe thing this Change acts on.
whenWhen kind the operation accepts: now, at, period_end, phase_change, term_end.
atThe WALL CLOCK to act at, required when when=at — NOT an instant. Its calendar fields are read and read and re-anchored in the zone field, so send it with a Z suffix (2027-01-01T00:00:00Z) and name the zone separately. An offset is refused rather than silently discarded.
audience_idThe saved audience a selector-scoped Change is narrowed by. Required when scope=selector and refused otherwise. LINKED, not copied: the population is re-resolved at fire time, because a Change is a single act at one instant and "who is on plan A" must be answered then.
audience_matchedHow many CUSTOMERS the preview reported the audience matching. Recorded and REPORTED, not enforced: a count moves because the world moves — customers sign up, subscriptions cancel — and re-resolving at fire time is the whole point. It is what lets a screen say "you confirmed 1,240; it now matches 1,830".
audience_revisionThe audience.revision the preview reported. Echo it back: any edit to the audience rules bumps it, and a Change scheduled against the old revision is SUPERSEDED at fire time rather than firing at a population nobody previewed. Omit only when scheduling without a preview.
client_tokenCaller's idempotency token.
gatenone (default) runs at its instant. approval holds it until a second person with change.write releases it from the approvals queue — the author cannot release their own.
The notice period for when=after_notice: a calendar duration {count, unit}, counted from the moment of authoring on the calendar in UTC — a month's notice given on 31 January runs out on 28 February.
scopeWho this Change acts on. one (default) is the single subject named by subject_id. selector narrows a saved customer audience to the subjects the operation can act on, and requires audience_id — the subject then names the ENTITY the audience is narrowed through ("everyone in this audience who is on plan A" is subject=plan A, scope=selector).
subject_kindWhich kind of thing subject_id names, when the operation acts on several: product, plan, promotion, rate_table, tax_rule, price_formula.
zoneIANA zone the wall instant is read in.
ChangeRequest_subscription_set_default
operationOperation id from GET /v1/changes/operations.
Operation payload; see payload_schema on GET /v1/changes/operations.
subject_idThe thing this Change acts on.
whenWhen kind the operation accepts: now, at, period_end, phase_change, term_end.
atThe WALL CLOCK to act at, required when when=at — NOT an instant. Its calendar fields are read and read and re-anchored in the zone field, so send it with a Z suffix (2027-01-01T00:00:00Z) and name the zone separately. An offset is refused rather than silently discarded.
audience_idThe saved audience a selector-scoped Change is narrowed by. Required when scope=selector and refused otherwise. LINKED, not copied: the population is re-resolved at fire time, because a Change is a single act at one instant and "who is on plan A" must be answered then.
audience_matchedHow many CUSTOMERS the preview reported the audience matching. Recorded and REPORTED, not enforced: a count moves because the world moves — customers sign up, subscriptions cancel — and re-resolving at fire time is the whole point. It is what lets a screen say "you confirmed 1,240; it now matches 1,830".
audience_revisionThe audience.revision the preview reported. Echo it back: any edit to the audience rules bumps it, and a Change scheduled against the old revision is SUPERSEDED at fire time rather than firing at a population nobody previewed. Omit only when scheduling without a preview.
client_tokenCaller's idempotency token.
gatenone (default) runs at its instant. approval holds it until a second person with change.write releases it from the approvals queue — the author cannot release their own.
The notice period for when=after_notice: a calendar duration {count, unit}, counted from the moment of authoring on the calendar in UTC — a month's notice given on 31 January runs out on 28 February.
scopeWho this Change acts on. one (default) is the single subject named by subject_id. selector narrows a saved customer audience to the subjects the operation can act on, and requires audience_id — the subject then names the ENTITY the audience is narrowed through ("everyone in this audience who is on plan A" is subject=plan A, scope=selector).
subject_kindWhich kind of thing subject_id names, when the operation acts on several: product, plan, promotion, rate_table, tax_rule, price_formula.
zoneIANA zone the wall instant is read in.
ChangeRequest_subscription_set_status
operationOperation id from GET /v1/changes/operations.
Operation payload; see payload_schema on GET /v1/changes/operations.
subject_idThe thing this Change acts on.
whenWhen kind the operation accepts: now, at, period_end, phase_change, term_end.
atThe WALL CLOCK to act at, required when when=at — NOT an instant. Its calendar fields are read and read and re-anchored in the zone field, so send it with a Z suffix (2027-01-01T00:00:00Z) and name the zone separately. An offset is refused rather than silently discarded.
audience_idThe saved audience a selector-scoped Change is narrowed by. Required when scope=selector and refused otherwise. LINKED, not copied: the population is re-resolved at fire time, because a Change is a single act at one instant and "who is on plan A" must be answered then.
audience_matchedHow many CUSTOMERS the preview reported the audience matching. Recorded and REPORTED, not enforced: a count moves because the world moves — customers sign up, subscriptions cancel — and re-resolving at fire time is the whole point. It is what lets a screen say "you confirmed 1,240; it now matches 1,830".
audience_revisionThe audience.revision the preview reported. Echo it back: any edit to the audience rules bumps it, and a Change scheduled against the old revision is SUPERSEDED at fire time rather than firing at a population nobody previewed. Omit only when scheduling without a preview.
client_tokenCaller's idempotency token.
gatenone (default) runs at its instant. approval holds it until a second person with change.write releases it from the approvals queue — the author cannot release their own.
The notice period for when=after_notice: a calendar duration {count, unit}, counted from the moment of authoring on the calendar in UTC — a month's notice given on 31 January runs out on 28 February.
scopeWho this Change acts on. one (default) is the single subject named by subject_id. selector narrows a saved customer audience to the subjects the operation can act on, and requires audience_id — the subject then names the ENTITY the audience is narrowed through ("everyone in this audience who is on plan A" is subject=plan A, scope=selector).
subject_kindWhich kind of thing subject_id names, when the operation acts on several: product, plan, promotion, rate_table, tax_rule, price_formula.
zoneIANA zone the wall instant is read in.
ChangeRequest_subscription_transform
operationOperation id from GET /v1/changes/operations.
Operation payload; see payload_schema on GET /v1/changes/operations.
subject_idThe thing this Change acts on.
whenWhen kind the operation accepts: now, at, period_end, phase_change, term_end.
atThe WALL CLOCK to act at, required when when=at — NOT an instant. Its calendar fields are read and read and re-anchored in the zone field, so send it with a Z suffix (2027-01-01T00:00:00Z) and name the zone separately. An offset is refused rather than silently discarded.
audience_idThe saved audience a selector-scoped Change is narrowed by. Required when scope=selector and refused otherwise. LINKED, not copied: the population is re-resolved at fire time, because a Change is a single act at one instant and "who is on plan A" must be answered then.
audience_matchedHow many CUSTOMERS the preview reported the audience matching. Recorded and REPORTED, not enforced: a count moves because the world moves — customers sign up, subscriptions cancel — and re-resolving at fire time is the whole point. It is what lets a screen say "you confirmed 1,240; it now matches 1,830".
audience_revisionThe audience.revision the preview reported. Echo it back: any edit to the audience rules bumps it, and a Change scheduled against the old revision is SUPERSEDED at fire time rather than firing at a population nobody previewed. Omit only when scheduling without a preview.
client_tokenCaller's idempotency token.
gatenone (default) runs at its instant. approval holds it until a second person with change.write releases it from the approvals queue — the author cannot release their own.
The notice period for when=after_notice: a calendar duration {count, unit}, counted from the moment of authoring on the calendar in UTC — a month's notice given on 31 January runs out on 28 February.
scopeWho this Change acts on. one (default) is the single subject named by subject_id. selector narrows a saved customer audience to the subjects the operation can act on, and requires audience_id — the subject then names the ENTITY the audience is narrowed through ("everyone in this audience who is on plan A" is subject=plan A, scope=selector).
subject_kindWhich kind of thing subject_id names, when the operation acts on several: product, plan, promotion, rate_table, tax_rule, price_formula.
zoneIANA zone the wall instant is read in.
ChangeScopeSides
The Change's part after the act.
The Change's part before the act; absent on its authoring.
ChangeScopeValue
kindHow the Change finds its targets.
audience_idFor an audience scope: the audience.
audience_matchedFor an audience scope: how many customers it matched when the operator confirmed it.
audience_revisionFor an audience scope: the revision of its rules the operator confirmed.
ChangeStatusSides
afterThe Change's part after the act.
beforeThe Change's part before the act; absent on its authoring.
ChangeSubject
idIts id.
typeThe kind of thing: subscription, product, plan, rate_table, tax_rule, price_formula or customer.
ChangeSubjectKind
ChangeSubscriptionStatusRequest
atWhen the transition takes effect. Defaults to now.
reasonWhy.
ChangeTargetOutcome
outcomeapplied: it ran and changed this subject. skipped: the operation looked and decided this subject needed nothing; for a cohort that is a success, because a cohort states a desired end state. excluded: the resolver removed it before the operation saw it.
recorded_atWhen the outcome was recorded: the instant the change resolved to, not the moment the engine reached it.
The subject the change resolved to.
reasonWhy, for the two outcomes that have one. A stable key the client translates, never an English sentence. Absent for applied.
subject_idThe same value as subject.id. Deprecated: use subject.id instead. Removed on 2026-11-30.
subject_kindThe same value as subject.type. Deprecated: use subject.type instead. Removed on 2026-11-30.
ChangeTimelineEvent
kindversion_rebased — this version now ships on top of a different predecessor, or the same one after it changed. field_overridden — this version changes something an earlier scheduled version also changed, and the later instant wins. version_renumbered — its provisional number moved because the timeline in front of it did.
sentenceThe line in English, e.g. 'v3 was renumbered v3 → v4 because the timeline changed in front of it'. Render your own from the parts above when you have a locale to render it in.
version_idThe version this line is about.
childThe overridden child's stable identity: price:
field'*' when the later version REMOVES the child, 'set' when it replaces it. Absent for the whole-version kinds.
from_versionThe provisional number before the change. Absent when there was none.
to_versionThe provisional number the version now carries. Absent when unknown.
ChangeWhenSides
afterThe Change's part after the act.
beforeThe Change's part before the act; absent on its authoring.
ChargeOutcome
ChargebackBearerEventPayload
The disputed amount that moved between the two bearers, as a money object.
atWhen the operator reassigned it.
dispute_idThe dispute that was reassigned.
fromWho bore the chargeback before: seller or platform.
moveWhich reassignment of this dispute this is, counting from 1.
sale_idThe sale whose chargeback was reassigned.
seller_customer_idThe customer whose seller role supplied.
toWho bears it now: seller or platform.
ChargebackBearerRequest
bearerWho should bear it: the seller, whose balance is debited, or this organization, which absorbs it. It must be the one that is NOT bearing it today; asking for the current bearer is refused rather than silently doing nothing.
dispute_idThe dispute being reassigned. It must be one this sale has a chargeback recorded under — read the sale's postings to find it.
ChecklistCondition
ChecklistFinding
document_typeThe kind of document the row is about.
The one change that resolves the row.
grouplegal: required by the law of the organization's country; acceptance: what the web needs for the buyer to accept online; document: an essential quote fact a surface leaves out; presets: what a quote preset carries that the layout has no block for.
basisThe legal citation (legal rows).
factThe quote fact (acceptance, document and presets rows).
presetsThe presets that carry the fact.
requirementThe statutory item (legal rows).
surfacesWhere the fact is missing (document rows).
whenWhen the item is required; absent: always.
ChecklistFix
block_typekindadd_block: insert a block of block_type (after the block 'after' names, else where the reading order puts it; prop/value seed it). turn_on: set the boolean prop of block_id. set: set prop of block_id to value. add_column: add column to the table block_id. show: switch block_id back on (and off hide_on for surface). select: open block_id.
afterblock_idcolumnpropsurfacevalueChecklistRequirement
CheckoutLink
collect_addressWhether the checkout page asks the buyer for a postal address.
collect_phoneWhether the checkout page asks the buyer for a phone number.
collect_vat_idOlder switch for the VAT ID input. It applies only when vat_id_collection is not set on the link or the organization: true shows an optional input, false hides it.
The legal consent step the buyer passes before ordering. Empty means no consent step.
coupon_codesWhether the checkout page takes a coupon code.
created_atWhen the link was created.
The defaults of the customer a checkout through this link creates. A field that is absent takes the organization's default.
deemed_supplier_regimeThe platform rule under which a platform operator, not the seller, accounts for the tax on sales through this link. Empty means no platform rule applies.
idCheckout link ID.
metadataFree-form JSON you attach to the link. The server stores it and does not read it.
organization_idThe organization that owns the link.
plan_idThe plan the link sells. A completed checkout subscribes the buyer to this plan.
slugThe link's path segment in its public url. Unique within the organization.
statusactive: the public checkout page serves the link. archived: the page answers not found.
updated_atWhen the link was last changed.
workspace_idThe workspace the link sells into: its plan's, and the one its public checkout creates the customer and subscription in.
currencyThe currency the checkout charges in. Absent means the organization's default currency.
nameInternal name for the link. Buyers do not see it.
Per-product seat rules on this link; empty means each seat product's own defaults apply. Sent without include=seat_policy until 2026-11-30; after that only with include=seat_policy.
success_urlWhere the buyer is sent after paying. Absent means the portal's default success page.
tax_inclusiveWhether the checkout page first shows prices including tax. The buyer can switch. Absent means the organization's default.
trial_daysFree trial days the new subscription starts with. Absent means no trial.
urlThe public checkout page for this link: send buyers here. Absent when the server has no public portal address configured. The page serves only an active link.
vat_id_collectionWhether the checkout page shows the VAT ID input, and whether the buyer must fill it. Absent means the organization's setting.
default_payment_terms_daysPayment terms in days for the customer a checkout creates. Absent means the organization's default. Deprecated: use customer_defaults.payment_terms_days instead. Removed on 2026-11-30.
default_preferred_providerPayment provider set as preferred on the customer a checkout creates, for example stripe, gocardless, mollie or kontier_payments. Absent means the organization's default. Deprecated: use customer_defaults.preferred_provider instead. Removed on 2026-11-30.
default_wallet_modeWallet mode of the customer a checkout creates. Absent means the organization's default. Deprecated: use customer_defaults.wallet_mode instead. Removed on 2026-11-30.
CheckoutLinkChange
fieldThe field of the link: its address, what it sells with, what the page collects, a default, the tax arrangement, a part of the consent step, a seat rule or a metadata entry.
kindWhat happened to the field: set where the link stated none, changed, or cleared.
What the link states after the act; absent when it states nothing.
What the link stated before the act; absent when it stated nothing.
keyFor a field that holds entries: the entry — a metadata key, a consent item's key (item:locale for a label, item:token for a link), audience:locale for the order button, a product's id for a seat rule.
CheckoutLinkCustomerDefaults
payment_terms_daysPayment terms in days for the customer a checkout creates. Absent means the organization's default.
preferred_providerPayment provider set as preferred on the customer a checkout creates, for example stripe, gocardless, mollie or kontier_payments. Absent means the organization's default.
wallet_modeWallet mode of the customer a checkout creates. Absent means the organization's default.
CheckoutLinkSeatPolicy
adjustablecreated_atidproduct_idupdated_atdefault_qtymax_qtymin_qtylink_idThe checkout link the rule belongs to, the same as the id of the link that carries it. Deprecated: use the id of the checkout link instead. Removed on 2026-11-30.
CheckoutLinkSeatPolicyInput
product_idadjustabledefault_qtymax_qtymin_qtyChildGrant
grantedWhether you have granted this capability to the organization. Below the top-level organization, it can use it only while you hold it yourself.
grantor_holdsWhether your organization may grant this capability. The top-level organization always may; any other organization only while it holds the capability itself, and its grants stop working while it does not.
keyA capability an organization grants each of its direct children by name.
ChildInvitation
created_atemailidrolesThe names of the roles the invitation grants on acceptance.
ChildMember
emailThe person's e-mail address. Empty when the membership has no user row behind it, and on the answer of the deprecated POST …/enabled, which reports only what it changed.
rolesThe names of the roles the member holds in the organization: admin, member, no_access, or a role the organization defined.
statususer_idnameThe person's display name, when they have set one.
ChildMemberList
The invitations nobody has accepted yet. Deprecated: use GET /organization/children/{id}/invitations instead. Removed on 2026-11-30.
ChildOrganization
created_atdepthHow far below the root of the whole tree the organization sits; the root is 0.
edge_kindcustomer: a sale made this edge. affiliate: an operator did.
edge_originsubscription or manual.
ididentity_moderealm_users for every child; own_keycloak_org only after an identity upgrade.
namesignup_emailslugstatusedge_source_idrestrictionWhat is restricting this organization right now: a hold of its own (own), a cascading hold of an organization above it (above), or nothing (none). Sent without include=restriction until 2026-11-30; after that only with include=restriction.
ChildOrganizationList
next_after_created_atnext_after_idChildOrganizationPlace
Root first, parent last. Deprecated: use GET /organization/children/{id}/ancestors instead. Removed on 2026-11-30.
depthHow far below the root the organization sits. Deprecated: use organization.depth instead. Removed on 2026-11-30.
ChildSetDiff
addedchangedremovedClause
attachment_countTotal catalog entities that pull this clause in automatically.
Clause text keyed by locale ("en", "de", …). This is the authoritative content.
bodyREAD-ONLY projection: bodies resolved for the org's default locale, with fallback. Authoritative content is bodies.
created_atidlocalesSorted locales this clause is authored in.
nameplan_idsPlans this clause is attached to.
product_idsProducts this clause is attached to.
quote_preset_idsQuote presets this clause is attached to.
updated_atarchived_atWhen the clause was retired; null means active.
countryISO 3166-1 alpha-2 country the clause is scoped to; null means global.
CloseOrganizationRequest
cascadeClose every organization below this one too. Without it, an open organization anywhere below refuses the close.
CloseOrganizationResult
api_keys_revokedHow many active API keys the close revoked.
closedThe organizations this call closed. Empty when they were closed already.
delegations_revokedHow many outgoing delegations the close revoked.
ClosedEventPayload
api_keys_revokedHow many active API keys this close revoked.
atWhen it happened.
cascadeWhether the operator asked for the whole subtree.
closed_by_organization_idThe organization that closed it.
delegations_revokedHow many outgoing delegations this close revoked.
organization_idThe organization that is now closed.
requested_organization_idThe organization the close was asked for; differs from organization_id for a descendant closed by the cascade.
ComplianceReadiness
advisory_countatblocker_countgoverning_jurisdictionlocaleprofiledregister_dutiesComplianceReadinessFinding
codelabelmessagepartyrule_idseveritysurfacefacthintkindslotComplianceReadinessItem
labelstatefacthintkindslotvalueComplianceReadinessSurface
completemissing_countsurfaceConfigValue
typeThe field's value type, which names the member the value is in.
flagFor type=flag.
intFor type=int.
listFor type=list, in order.
numberFor type=number.
For type=ref: the entity, as it was named when the act was made.
textFor type=text.
ConsentConfig
audience_modeConsentItem
keyrequiredtypeaudiencekindversionConsentKind
CopyProductAsDraftRequest
external_idExternal identifier for the new draft copy.
nameName for the new draft copy; defaults to a derived copy name when omitted.
CorrectInvoiceRequest
original_document_idThe issued document being restated. Required: this operation corrects one document and the path names none.
The atoms to take back and how much of each. An empty list with new entries is a goodwill credit; the whole document is taken back by the reverse operation instead.
Corrected amounts. Under the separate shape they become a replacement invoice; under the single shape they are positive atoms on the corrective itself.
policyThe shape asked for. Read ONLY where the jurisdiction's own law admits both; everywhere else the law decides and this is ignored, because the shape of a legal document is not an operator preference.
reasonWhy the document is being restated: a closed set, persisted on the correcting document (several jurisdictions require the why on it). Empty means OTHER.
Requests also accept the new spelling: each value in lower case (billing_error for BILLING_ERROR). The listed spelling is deprecated in requests and accepted until 2026-11-30.
CorrectedPayload
The corrected amount, negative because the atoms are.
corrected_atcorrection_idThe credit note or corrective that carries the correction.
customer_iddocument_idThe original document that was corrected.
organization_idpolicyseparate or single, as the governing jurisdiction demands (either is resolved before a correction is applied and never appears here).
reversedTrue when every atom was reversed and the original is now reversed.
reasonWhy the correction was issued, from the closed set.
replacement_idThe new invoice stating the corrected amounts, under the separate policy.
subscription_idThe subscription the original document bills, when subscription-billed.
workspace_idCorrection
correction_idThe credit note or corrective carrying the reversal.
original_idThe corrected document.
original_reversedTrue when every atom of the original came back in full. This is not the original's status: a fully reversed document that was already paid stays paid.
policyThe shape that was applied. This is the jurisdiction's answer and not necessarily what was asked for.
The credit note or corrective, with include=correction. Its money is negative because its atoms are. Sent without include=correction until 2026-11-30; after that only with include=correction.
The corrected document as it now stands, with include=original. Its status is reversed only when nothing of it is left standing. Sent without include=original until 2026-11-30; after that only with include=original.
The replacement invoice, with include=replacement. Sent without include=replacement until 2026-11-30; after that only with include=replacement.
replacement_idThe replacement invoice, when the correction stated corrected amounts under the separate shape.
reasonThe stated reason. The credit note carries it as correction_reason. Deprecated: use correction.correction_reason instead. Removed on 2026-11-30.
CorrectionReason
Cost
created_atidkeyFormula-reference key for this cost (e.g. icann_fee, referenced in formulas as cost.icann_fee).
organization_idrequires_continuous_coverageWhen true a subscription referencing this cost must keep it continuously covered (no coverage gaps).
scopeCost scope: PRODUCT (per-product, requires product_id) or ORG (org-wide, feeds price formulas across the whole org).
statusactive, or retired: out of the catalog. A product's cost is retired once a release lands whose head no longer carries the key; an organization's cost when it is removed.
updated_atStatic money value of the cost; set for amount-form costs, null when the cost is a formula.
descriptionOperator-facing description of what this cost represents.
Formula that computes the cost from other costs; set for formula-form costs, null when the cost is a static amount.
Free-form operator key/value metadata.
product_idOwning product for a PRODUCT-scoped cost; null for ORG-scoped costs.
retired_atWhen the cost fell out of the catalogue at a release; null while it is still carried.
Locale-keyed overrides for the cost's description.
CostExpression
currencyISO 4217 result currency the expression evaluates to; must match every referenced cost's currency.
sourcePrice-formula expression source referencing other costs by key (e.g. "cost.buy_com + cost.icann_fee").
CostIdentity
cost_idThe cost's id.
currencyThe currency the amounts are in, stated once.
keyThe cost's key: its name in formulas (cost.
CostSummaryEntry
cost_countNumber of static costs contributing to total_amount.
currencyISO 4217 currency this rollup is denominated in.
total_amount^-?\d+(\.\d+)?$ · requiredSum of the static (amount-form) costs in this currency, MAJOR units; formula-form costs are excluded.
CountersignRequest
consentAcceptance of the signing wording shown before the action. Must be true.
The signature you adopted: the name drawn into your signature fields and your initials. The name defaults to name.
What you did with the offer's fields for your company, keyed by field id: true for a signature or initials field you applied, a string for text, true or false for a checkbox. Date fields take no value. A required field left out is refused. Refusals are 400 VALIDATION on field_values.
localeBCP-47 locale of the wording that was displayed. Defaults to the organisation's.
nameThe name signed under. Defaults to the name on the request.
roleYour role or title (e.g. Geschäftsführerin), printed beside your name on the signed copy.
CouponStanding
CreateAPIKeyRequest
nameHuman-readable label for the key, shown in the dashboard list; at most 80 characters. Leading and trailing whitespace is trimmed. Name it after what uses it, e.g. "Shop backend – order sync".
access_presetA named grant, expanded against the permissions you hold — a key never carries more than its creator: READ_ONLY is every read permission you hold (the least-privilege default), FULL_ACCESS everything you hold. CUSTOM is refused: pass scopes instead. Exactly one of access_preset and scopes is required.
allowed_ipsIP addresses or CIDR blocks permitted to present this key. Omit or pass an empty list to leave the key unrestricted.
expires_atMoment the key stops authenticating; must be in the future. Omit for a non-expiring key.
key_typeKey environment: "sk_live" or "sk_test". Omit it: the workspace's mode decides (sandbox workspaces mint sk_test, live workspaces mint sk_live). A value that disagrees with the workspace's mode is refused (400, field code KEY_TYPE_MODE_MISMATCH).
scopesExplicit permissions, e.g. "customer.read"; each must be one you hold. GET /v1/permissions returns the catalog. An empty list is not all-access. Exactly one of access_preset and scopes is required.
CreateAffiliateRequest
admin_emailWho is invited into the new organization. Required: an organization nobody can enter is not a tenant.
nameThe affiliate's display name.
default_currencyDefaults to the parent's.
default_localeDefaults to the parent's.
The new organization's legal identity: legal name, registered address, identifiers, tax registrations and bank account. Validated whole before anything is written; every refusal names its field under identity.*, and nothing is created when one is refused. Optional: what is missing is reported by the organization's compliance readiness, never refused.
slugOptional; derived from the name when omitted.
CreateAudienceRequest
The rule set. An empty tree is REFUSED rather than interpreted: the two targeting systems that predate this domain read an empty selector as "everyone" and as "nobody" respectively, and the difference between those readings is the entire customer base — so targeting everyone is something the operator states, with match_all.
nameOperator-facing name. Must be unique within the workspace; a taken name is refused as a field error on name, not as a bare conflict.
descriptionWhat this population is for. Optional.
purposesWhich surfaces may point at this audience. OMIT to allow all five, which is what every audience created before this field existed allows. An empty array is refused: an audience marked for nothing could not be used anywhere.
CreateChangeRequest
Decision Table
| Variant | Matching Criteria |
|---|---|
| type = object · operation="subscription.transform" · requires: subject_id, when, payload | |
| type = object · operation="subscription.apply_for_a_while" · requires: subject_id, when, payload | |
| type = object · operation="subscription.set_default" · requires: subject_id, when, payload | |
| type = object · operation="subscription.set_status" · requires: subject_id, when, payload | |
| type = object · operation="catalog.publish_version" · requires: subject_id, when, payload |
operationOperation id from GET /v1/changes/operations.
Operation payload; see payload_schema on GET /v1/changes/operations.
subject_idThe thing this Change acts on.
whenWhen kind the operation accepts: now, at, period_end, phase_change, term_end.
atThe WALL CLOCK to act at, required when when=at — NOT an instant. Its calendar fields are read and read and re-anchored in the zone field, so send it with a Z suffix (2027-01-01T00:00:00Z) and name the zone separately. An offset is refused rather than silently discarded.
audience_idThe saved audience a selector-scoped Change is narrowed by. Required when scope=selector and refused otherwise. LINKED, not copied: the population is re-resolved at fire time, because a Change is a single act at one instant and "who is on plan A" must be answered then.
audience_matchedHow many CUSTOMERS the preview reported the audience matching. Recorded and REPORTED, not enforced: a count moves because the world moves — customers sign up, subscriptions cancel — and re-resolving at fire time is the whole point. It is what lets a screen say "you confirmed 1,240; it now matches 1,830".
audience_revisionThe audience.revision the preview reported. Echo it back: any edit to the audience rules bumps it, and a Change scheduled against the old revision is SUPERSEDED at fire time rather than firing at a population nobody previewed. Omit only when scheduling without a preview.
client_tokenCaller's idempotency token.
gatenone (default) runs at its instant. approval holds it until a second person with change.write releases it from the approvals queue — the author cannot release their own.
The notice period for when=after_notice: a calendar duration {count, unit}, counted from the moment of authoring on the calendar in UTC — a month's notice given on 31 January runs out on 28 February.
scopeWho this Change acts on. one (default) is the single subject named by subject_id. selector narrows a saved customer audience to the subjects the operation can act on, and requires audience_id — the subject then names the ENTITY the audience is narrowed through ("everyone in this audience who is on plan A" is subject=plan A, scope=selector).
subject_kindWhich kind of thing subject_id names, when the operation acts on several: product, plan, promotion, rate_table, tax_rule, price_formula.
zoneIANA zone the wall instant is read in.
CreateCheckoutLinkRequest
plan_idThe plan the link sells.
slugThe link's path segment in its public url. Must be unique within the organization.
collect_addressWhether the checkout page asks the buyer for a postal address. Defaults to false.
collect_phoneWhether the checkout page asks the buyer for a phone number. Defaults to false.
collect_vat_idOlder switch for the VAT ID input, used only when vat_id_collection is not set on the link or the organization. Prefer vat_id_collection.
The legal consent step the buyer passes before ordering. Omit for no consent step.
coupon_codesWhether the checkout takes a coupon code; omitted means it does.
currencyThe currency the checkout charges in. Omit to use the organization's default currency.
deemed_supplier_regimeThe platform rule under which a platform operator, not the seller, accounts for the tax on sales through this link. Omit when no platform rule applies.
default_payment_terms_daysPayment terms in days (0 to 365) for the customer a checkout creates. Omit to use the organization's default.
default_preferred_providerPayment provider to set as preferred on the customer a checkout creates, for example stripe, gocardless, mollie or kontier_payments. Omit to use the organization's default.
default_wallet_modeWallet mode of the customer a checkout creates. Omit to use the organization's default.
metadataFree-form JSON to store on the link.
nameInternal name for the link. Buyers do not see it.
Per-product seat rules. At most one rule per product. Omit to use each seat product's own defaults.
success_urlAbsolute URL the buyer is sent to after paying. Omit to use the portal's default success page.
tax_inclusiveWhether the checkout page first shows prices including tax. Omit to use the organization's default.
trial_daysFree trial days the new subscription starts with. Omit for no trial.
vat_id_collectionWhether the checkout page shows the VAT ID input, and whether the buyer must fill it. Omit to use the organization's setting.
CreateClauseRequest
Clause text keyed by locale ("en", "de", "fr", "es", "it", "pt", "nl", "ja"). At least one required.
nameClause name.
countryISO 3166-1 alpha-2 country scope; null means global.
CreateCostRequest
keyFormula-reference key for the new cost; 1-64 chars matching [a-zA-Z0-9._-].
Static money value; set exactly one of amount or expression.
descriptionOperator-facing description of what this cost represents.
Formula referencing other costs by key; set exactly one of amount or expression.
Free-form operator key/value metadata.
Locale-keyed overrides for the cost's description.
CreateCustomFieldDefinitionRequest
display_nameentity_typesfield_typeRequests also accept the new spelling: each value in lower case (boolean for BOOLEAN). The listed spelling is deprecated in requests and accepted until 2026-11-30.
keyauditabledefault_valuedescriptionfield_groupshow_in_tablesort_ordervisibilityRequests also accept the new spelling: each value in lower case (internal for INTERNAL). The listed spelling is deprecated in requests and accepted until 2026-11-30.
write_accessRequests also accept the new spelling: each value in lower case (admin_only for ADMIN_ONLY). The listed spelling is deprecated in requests and accepted until 2026-11-30.
CreateCustomerContactRequest
categoryWhat this contact receives. Required.
emailThe mailbox to add. Required.
is_primaryWhether mail for this category is addressed here. Omit to let the first contact in a category become its primary and later ones not. true takes the category over from whichever contact currently holds it.
nameOptional display name.
CreateCustomerRequest
customer_typeBuyer classification driving tax treatment and invoicing: BUSINESS, CONSUMER, or UNKNOWN. Required.
emailPrimary contact email; the default recipient for invoices and portal links. Required.
nameCustomer's display / legal name as it appears on invoices. Required.
auto_validate_vatPer-request hint: null = auto-validate VAT after creation when eligible, false = skip the auto-trigger. Still gated by the workspace and per-customer VAT disable flags.
Postal billing address; when provided, line1, city, postal_code and country are required and it is used for tax determination.
contact_nameDisplay name for the primary billing contact - the natural person behind a company account. Defaults to the customer's own name when omitted.
Further recipients, as POST /v1/customers/{id}/contacts adds them, written with the customer. The customer's own email is already its billing primary; list the copies and the other categories here. Each category holds at most 3 addresses.
Values for the organization's configured custom-field definitions.
Default auto-topup amount as {value, currency}, MAJOR units. Currency should match preferred_currency.
default_auto_topup_enabledWhether the auto-provisioned wallet enables automatic top-up.
Default wallet credit limit as {value, currency}, MAJOR units. Currency should match the customer's preferred_currency; it is echoed from preferred_currency on read.
Default low-balance threshold as {value, currency}, MAJOR units. Currency should match preferred_currency.
Default wallet max balance as {value, currency}, MAJOR units. Currency should match preferred_currency.
Default wallet max single-credit as {value, currency}, MAJOR units. Currency should match preferred_currency.
The delivery_* fields grouped as Customer.delivery reads them. Send a fact here or in its flat field, not both.
EN 16931 BG-15 DELIVER TO ADDRESS, when supplies are delivered somewhere other than the billing address; when provided, line1, city, postal_code and country are required.
delivery_location_idEN 16931 BT-71, the deliver-to location identifier (GLN or agreed site code).
delivery_party_nameEN 16931 BT-70, the deliver-to party name.
disabled_providersPayment provider ids that must not be used to charge this customer; each must be a known provider and unique.
einvoice_profileStanding per-customer e-invoice format (e.g. XRECHNUNG_3_0_UBL); omit to inherit. Must name a profile this deployment still offers - see GET /v1/e-invoicing/profiles.
peppol_id, prefer_einvoice and einvoice_profile grouped as Customer.einvoicing reads them. Send a fact here or in its flat field, not both.
external_idCaller-assigned external identifier for cross-referencing in your own systems; must be unique per organization when set.
The customer's registered identifiers as {kind, country, value}; each is checked against its kind's pattern and check digit. At least one is required for BUSINESS customers billed in an EU country other than the organization's own; a domestic business customer needs none. Read them back at GET /v1/customers/{customerId}/identifiers.
localeBCP-47-style locale (one of en, de, fr, es, it, pt, nl, ja) for invoice and communication language.
Free-form key/value metadata for caller use; not interpreted by billing.
payment_terms_daysNet payment terms in days for invoice due dates (0-365); null = inherit the customer-type default, then the organization setting.
peppol_idPeppol participant identifier in scheme:value form used as the buyer endpoint for e-invoice delivery.
prefer_einvoicePer-customer master switch for structured e-invoicing; null = inherit the workspace's rollout audience, true/false decide outright.
preferred_currencyISO 4217 currency the customer is billed in; seeds the auto-provisioned wallet.
preferred_providerPreferred payment provider id tried first when charging; must be a known provider and must not also appear in disabled_providers. Empty is the same as omitting it.
tag_idsTags to attach, as POST /v1/customers/{id}/tags attaches them, written with the customer.
The vat_validation_* fields grouped as Customer.vat_validation reads them. Send a fact here or in its flat field, not both.
vat_validation_disabledWhen true, automatic VAT-ID validation is skipped for this customer; requires vat_validation_disabled_reason.
vat_validation_disabled_reasonReason recorded when vat_validation_disabled is true; required in that case.
The default_* fields grouped as Customer.wallet_defaults reads them. Send a fact here or in its flat field, not both.
wallet_settlementHow the customer's wallets settle spend: PREPAID or POSTPAID. Omit for the workspace default.
Requests also accept the new spelling: each value in lower case (postpaid for POSTPAID). The listed spelling is deprecated in requests and accepted until 2026-11-30.
modeThe same value as wallet_settlement. Send one of the two. Deprecated: use wallet_settlement instead. Removed on 2026-11-30.
Requests also accept the new spelling: each value in lower case (postpaid for POSTPAID). The listed spelling is deprecated in requests and accepted until 2026-11-30.
CreateDocumentTemplateRequest
descriptionFree-text description of the template.
nameTemplate name (required).
The template document: ordered blocks plus theme, branding, and footer.
document_typesDocument types this template can render (subset of {invoice, credit_note, quote, email}); defaults to [invoice] when omitted.
CreateEInvoiceDocumentRequest
credit_note_idDocument to generate the e-invoice for, when it is a credit note; set exactly one of invoice_id or credit_note_id.
invoice_idDocument to generate the e-invoice for, when it is an invoice; set exactly one of invoice_id or credit_note_id.
jurisdictionOptional jurisdiction hint (e.g. DE) recorded on the document and used to pick the archival retention policy. It does NOT select the format - that is what the profile rules do.
profileTarget e-invoice profile (e.g. XRECHNUNG_3_0_UBL). OMIT IT to resolve the format from the customer's preference, then the country rules, then the organization default; supply it only to override that decision for this one document. See GET /v1/e-invoicing/profiles for the accepted values.
reissue_reasonShort operator-facing note recorded on the superseded submission.
supersedes_submission_idThe refused submission this document replaces. Set it when re-issuing after a buyer refusal; the link is refused unless that submission is REFUSED_BY_BUYER and not already superseded.
CreateEInvoiceProfileRuleRequest
countryISO 3166-1 alpha-2 country code of the buyer, upper-case. Matched against the customer's billing address country.
profile_idE-invoice profile buyers matching this rule get. Must be one this deployment offers - see GET /v1/e-invoicing/profiles.
regionSub-national region as an ISO 3166-2 code without the country prefix (BY for Bavaria); a name from GET /v1/e-invoicing/regions is accepted and stored as its code. Only countries listed there have a region axis. Omit for a rule covering the whole country; a region rule outranks its own country-wide rule.
CreateEmbedSessionRequest
customer_idThe customer the embedded page acts for.
kindThe task: payment_method (add or replace a payment method), invoice (pay an open invoice), topup (top up a wallet).
invoice_idkind invoice: the invoice the page opens on.
CreateFXOverrideRequest
source_currencyISO 4217 currency being converted from.
target_currencyISO 4217 currency being converted to; must differ from source_currency.
rate^-?\d+(\.\d+)?$Manual conversion rate (1 source = rate target), greater than zero. Mutually exclusive with snapshot_date.
reasonOptional free-text note explaining the override.
snapshot_datePin the pair to the ECB snapshot of this calendar day. Mutually exclusive with rate.
valid_fromInstant the override begins applying; null means now.
valid_toInstant the override stops applying; null means open-ended.
CreateFileRequest
categoryWhat the document is. Decides the size cap and the accepted formats.
declared_content_typeThe format you believe the file is. The server checks the file's actual bytes when you confirm the upload, and rejects a file that disagrees.
declared_sizeThe file's size in bytes. Checked against the limit for this category before the upload starts, and again against the real size afterwards.
filenameThe file's name, shown in lists.
owner_idThe owning record's UUID.
owner_kindWhat this document hangs off.
visibilityDefaults to internal. Set shared to also show the document to the customer.
CreateInvitationRequest
emailrole_idsThe roles to grant on acceptance, each by its uuid (Role.subject_id) or, for a built-in role, by its name (Role.id today). Empty grants no_access. Send role_ids or role_names, not both.
role_namesThe roles to grant on acceptance, by name. Deprecated: use role_ids instead. Removed on 2026-11-30.
CreateKeySetRequest
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.
CreateMarketplaceSaleRequest
What the buyer pays, with its currency. The seller must have a bank account on file to be paid in.
buyer_customer_idThe customer that is buying. It cannot be the seller.
listing_referenceYour own reference for what is being sold — the storefront's id for the listing. Required: this package never parses or resolves it, so it is the only thing tying the sale back to what was on offer.
seller_customer_idThe customer that is selling. It must already be a verified seller.
whatWhat is being sold: a digital service delivered electronically, another kind of service, a right, or goods. Required — there is no default, because who supplies for tax purposes depends on it.
Requests also accept the new spelling: each value in lower case (ess for ESS). The listed spelling is deprecated in requests and accepted until 2026-11-30.
commission_product_idCharge the fee from this product instead of the one your settings name. Omit to use the setting.
supplied_byState who you believe supplies, and the request is refused if that is not the answer. Omit it — this is decided from what is sold and where the parties are, never chosen.
Requests also accept the new spelling: each value in lower case (agent for AGENT). The listed spelling is deprecated in requests and accepted until 2026-11-30.
CreateMarketplaceSellerRequest
customer_idThe customer to give the seller role to. One seller per customer; a second request is a conflict.
series_code_prefixThe prefix the seller's own document numbers are built from: 1-16 characters of A-Z, 0-9 and '-'. It must not be used by another seller, and must not be one your organization already numbers its own documents from: document numbers are unique across your whole organization whoever issued them, so a shared prefix would stop the seller's first document being numbered.
countryWhere the seller is established, ISO 3166-1 alpha-2. Omit to take it from the customer's billing address; a customer with no address must be given one here.
in_businessWhether the seller trades as a business. Omit to take it from the customer's classification.
mandate_agreed_atWhen the seller agreed to let this organization sell on its behalf.
natural_personWhether the seller is a private individual. Defaults to false.
Where the seller is paid. It can be supplied later.
self_billing_agreed_atWhen the seller agreed to let this organization raise documents in the seller's name.
small_business_schemeThe national small-business exemption the seller declares, e.g. DE_19. Omit for none.
tax_regimeThe VAT regime the seller declares. Defaults to STANDARD.
CreateMeterRequest
functionAggregation applied over the window: SUM, COUNT, MAX, MIN, AVG, UNIQUE_COUNT, LAST, or P95.
keyOrg-unique slug identifying the meter; lowercase letter then [a-z0-9_-], 1-64 chars.
metric_keyEvent ingestion key this meter aggregates over.
nameHuman-readable label for the meter.
When set, defines this as a derived meter computed from other meters via a formula. An empty object is the same as omitting it.
dedup_key_pathJSON-path to the event field used for deduplication; default uses the event's idempotency_key.
dimensionsEvent metadata fields exposed for group-by.
event_schemaJSON-Schema document validating ingested events; null or omitted disables validation. Must compile as a JSON Schema — a document that does not is rejected here rather than failing every later ingest.
Predicate tree restricting which events the meter includes.
late_event_policyWhat ingest does with an event dated before its subscription's current billing period: omitted refuses it (422 USAGE_PERIOD_CLOSED); CLAMP_TO_PERIOD stores a positive one at the start of the current period, where the next invoice bills it.
How the billable quantity is snapped before pricing (increment + mode). Omitted means exact: priced at the metered precision, up to 8 decimal places.
Alert conditions evaluated against the meter's output.
unique_by_fieldEvent field whose distinct values are counted; required for UNIQUE_COUNT.
unit_currency_fieldEvent field carrying the currency when the metric measures money.
unit_labelDisplay label for one metric unit (e.g. "calls").
value_fieldEvent field aggregated; required for SUM/MAX/MIN/AVG/P95/LAST, forbidden for COUNT/UNIQUE_COUNT.
Reset cadence for the aggregation; null aggregates over the whole billing period.
CreateOrganizationContactRequest
categoryWhat this contact receives. Required.
kindWhich arm this row carries. Required.
emailRequired when kind is email; must be absent otherwise.
is_primaryWhether mail for this category is addressed here. Omit to let the first row in a category become its primary.
nameOptional label.
roleRequired when kind is role; must be absent otherwise.
user_idRequired when kind is user; must be absent otherwise.
CreateOrganizationShareRequest
resource_idThe row being offered.
resource_kindThe kind of row being offered.
policydefault lets a descendant keep its own row; locked refuses one. A share is never bounded.
CreatePaymentGatewayRequest
configproviderdisplay_namesupported_currenciesCreatePaymentMethodRequest
customer_idCustomer to attach the payment method to. Required.
providerPayment provider holding this method, e.g. "stripe" or "gocardless". Required.
typeMethod type: CREDIT_CARD, BANK_ACCOUNT, SEPA_DIRECT_DEBIT, SEPA_DIRECT_DEBIT_B2B, ACH_BUSINESS, PAYPAL, or EXTERNAL. Required; the B2B/ACH types require a BUSINESS customer.
is_default_for_auto_payWhen true, make this the method that pays the customer's invoices automatically, replacing the previous one.
Free-form key/value metadata for caller use; not interpreted by billing.
provider_idProvider's own identifier for the stored method; omit when not tracked externally.
is_defaultWhen true, make this the customer's default payment method, demoting any prior default. Deprecated: use is_default_for_auto_pay instead. Removed on 2026-11-30.
CreatePlanRequest
nameInternal operator-facing plan name.
Where the billing periods of a subscription on this plan fall, overriding the organization's default: start, day_of_month with its day (1-28), or last_day. Omit to state none; the organization's default then applies.
Org-defined custom field values for this plan.
default_early_stopWhat a stop inside a billing period paid in advance does with the unused part for a deal on this plan: no_credit or credit_unused. Omit to state none; no_credit then applies.
default_timingWhen a line of this plan is invoiced if the deal states nothing for it: in_advance or in_arrears. Omit to state none; such a line is then invoiced in arrears.
default_version_changeWhen a following subscription line of this plan moves to a newer version if the deal states nothing for it: immediate_prorate, next_period or at_phase_change. Omit to state none; the subscription's default, else next_period, then applies.
descriptionInternal operator-facing description; not shown to buyers.
external_idCaller-supplied external identifier for reconciliation with an upstream system.
Free-form operator key/value metadata.
price_cadence_unitThe billing period this plan's prices are authored for (week, month or year); defaults to month. Subscriptions, quotes and checkouts against this plan must bill on exactly this cadence.
public_descriptionBuyer-facing description shown in checkout and the customer portal.
Locale-keyed overrides for name, description and public_description.
CreatePriceFormulaRequest
expressionThe expression to evaluate for a tier rate; may reference declared variables, cost.
nameDisplay name for the formula.
Variables the expression references, each with a name, type, and optional default.
CreatePriceRequest
currencyThe price's currency (ISO 4217). Every amount of the body - list_price and each tier's unit_amount - is in it.
list_price^-?\d+(\.\d+)?$ · requiredList price in the price's currency. Nominal (often 0) on a tiered price.
product_idThe product to attach this price to.
country_codeCountry to scope this price to; omit to match any country.
Arbitrary dimension key/values that further scope the price.
display_nameCustomer-facing label for this price / price_key.
effective_fromOptional explicit publish timestamp; defaults to now.
effective_toOptional timestamp at which this price version stops being effective.
is_set_priceMarks this as the set price covering every effective key of the product's key set; requires a keyed product and a null price_key.
kindResolution scope: BASE or PLAN_OVERRIDE. Defaults to the most specific scope implied by the ids present. A price is a CATALOG row; a rate agreed with one customer is a subscription negotiated price, not a price.
Free-form key/value metadata to attach to the price.
plan_idPlan to scope a PLAN_OVERRIDE to; required (with a plan version) for kind=PLAN_OVERRIDE, forbidden otherwise.
plan_versionThe NUMBER of the plan version this override applies from — a convenience resolved against the plan's published versions. 0 on a plan that has never published pins the plan's working draft: the override is staged there and ships with the first publish. Prefer plan_version_id.
plan_version_idThe plan version this override applies from. Either this or plan_version is required for kind=PLAN_OVERRIDE; sending both is allowed only when they name the same version.
price_basisWhether list_price and the tier amounts are net of tax (exclusive, the default when omitted) or already contain it (inclusive). An inclusive price is billed as the stated amount: the invoice derives the net and the tax out of it at the resolved rate.
price_keyKeyed variant this price covers on a keyed product; 1-64 chars matching [a-zA-Z0-9._-].
The tier ladder in ascending up_to order; omit it for a flat price, which then needs a non-zero list_price.
valid_fromCustomer-facing start of the price's applicability window; distinct from effective_from.
valid_toCustomer-facing end of the price's applicability window; distinct from effective_to.
CreatePriceTierRequest
unit_amount^-?\d+(\.\d+)?$ · requiredIn the price's currency: the per-unit rate under VOLUME and STAIRCASE, the price per package under PACKAGE.
basisRequired on a tier with a rate_expression or formula_id, refused on a static tier: per_unit (the result is a rate per billed unit; per package under PACKAGE) or per_band (the result is the band's whole amount).
Per-tier numeric overrides of the formula's declared variable defaults.
formula_idOptional reference to a price_formulas row whose expression computes the tier rate; wins over rate_expression and unit_amount.
package_size^-?\d+(\.\d+)?$PACKAGE only, and required there on a tier priced above zero without an expression: how many units one package holds (> 0). Refused under every other pricing model.
rate_expressionOptional arithmetic expression for the tier; overrides unit_amount when set. Its result is read as the tier's basis says: a rate per billed unit (per_unit) or the band's whole amount (per_band).
up_to^-?\d+(\.\d+)?$Inclusive upper quantity bound; the tier covers (previous tier's up_to, up_to]. Omitted on the last tier only, which runs to infinity.
CreateProductMeterBindingRequest
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.
Additional filter tree AND-ed onto the meter's own filters for this product only.
CreateProductRequest
nameInternal operator-facing product name.
pricing_modelPricing model applied to this product: VOLUME, STAIRCASE or PACKAGE. Required.
quantity_sourceWhere the billed quantity comes from: DECLARED (set on the subscription item) or METERED (from the meter evaluator). Required.
unit_labelSingular noun one billed unit is called (e.g. seat, GB). Required.
Org-defined custom field values for this product.
descriptionInternal operator-facing description; not shown to buyers.
external_idCaller-supplied external identifier for reconciliation with an upstream system.
invoiceable_standaloneWhether the product may appear in the manual-invoice picker; absent defaults to true, explicit false marks it subscription-only.
is_systemMarks a product the platform owns rather than the tenant, which the sale pickers exclude. Defaults to false; it is a display marker and carries no privilege.
key_set_excluded_keysKeys subtracted from the linked key set's active entries (subtract-only).
key_set_idOpts the product into keyed pricing by linking it to an org-global key set.
Free-form operator key/value metadata.
public_descriptionBuyer-facing description shown in checkout and the customer portal.
quantity_adjustableWhen true the buyer picks the quantity (seats/licenses); defaults to false (flat charge) and is rejected on METERED products.
requires_product_idsProducts that must also be present for this product to be sold (dependency set).
supply_natureWhat this product is for place-of-supply purposes. Omit to leave it undeclared, which is treated as SERVICES.
Requests also accept the new spelling: each value in lower case (digital_services for DIGITAL_SERVICES). The listed spelling is deprecated in requests and accepted until 2026-11-30.
tax_categoryProduct tax category: which statutory tier the product is billed at. DEFAULT is the country's standard rate; ZERO and EXEMPT are decided by what the supply is and are not tiers. Defaults to DEFAULT.
Requests also accept the new spelling: each value in lower case (default for DEFAULT). The listed spelling is deprecated in requests and accepted until 2026-11-30.
Locale-keyed overrides for name, description and public_description.
CreateQuotePresetRequest
namePreset name.
activeDefaults to true when omitted.
contract_termsdefault_expiry_daysPublic-link lifetime in days for quotes created from this preset.
descriptiondocument_template_idDocument template to render quotes from this preset with. Omit to use the organization's quote default.
note_for_customerplan_idplan_versionWhat quotes from this preset demand of the buyer before signing, destinations included.
require_payment_methodrequire_shippingrequire_vat_idCreateQuoteRequest
Library clauses to snapshot onto the quote; body is an optional override of the library text.
contract_termscopy_contact_idsCustomer contacts copied on the signature request, only beside signer_contact_id.
countersignWhat your organisation does once the buyer has signed. none: nothing. seal: the signed copy is sealed in the organisation's name. person: a member signs for the organisation, and the document shows their signature lines. Omit to use the organisation's default (signing.countersign_default).
countersign_orderWhen a person countersignature is made: after_buyer (the buyer signs first) or before_send (your organisation signs first, the buyer receives the offer signed). Omit to use the organisation's default.
countersigner_user_idThe member who signs for your organisation under person; they must hold quotes.sign_for_org. null: anyone who may (the sender is asked). Omit to use the organisation's default signer.
coupon_codecreated_bycurrencycustom_fieldscustomer_idThe buyer. Required unless from is given; a duplicate omitting it is for the source's customer.
document_template_idDocument template this quote renders through. Omit to inherit the preset's pinned layout, then the organization's quote default.
excluded_clause_idsAuto-attached clause ids to leave off this quote. Each id must be one the catalog attaches to this offer, and must not also appear in clauses.
expires_atfromDuplicate this quote: unset fields are taken from it and every subscription it offers is copied onto the new draft.
kindRequired unless from is given. A duplicate keeps the source's kind, because it keeps the source's subscriptions: omit it, or name the source's own (another is refused with QUOTE_KIND_CONTRADICTS_SOURCE).
localeLanguage the offer is for (en, de, fr, es, it, pt, nl, ja). Drives the PDF, the buyer mail and the language a clause body is snapshotted in. Omit to inherit the customer's locale, then the organization default.
note_for_customerowner_user_idpreset_idreminder_every_daysRemind the buyer of an unsigned offer every N days. Omit for no automatic reminders.
reminder_maxAt most this many reminders; needs reminder_every_days. Omit for the provider's own cap.
What the buyer must answer before signing, each entry naming a custom-field key, WHERE the answer goes after signature (target) and what happens when the destination already holds a value (on_conflict). Omit to inherit the preset's list.
require_payment_methodrequire_shippingrequire_signer_roleAsk the signer for their role or title before signing. Omit to inherit the preset's choice (none).
require_vat_idsignature_modeHow the buyer signs: BASIC (typed name, the default) or OTP (typed name and an emailed code; the offer is not sent while this workspace cannot mail the code). EXTERNAL is refused: a paper signature is recorded with mark-signed in any mode.
signer_contact_idThe customer contact who signs. Omit to send to the customer's Quotes & contracts contacts (their primary signs, the others are copied), else the customer's own email.
sourcestarts_atWhen the offer begins. Omit to begin on signature.
titleCreateRateTableRequest
nameDisplay name for the table.
on_missing_keyBehaviour when no entry matches: 'error', 'zero', or 'default_value'.
slugURL-safe unique identifier formulas reference this table by.
table_typeMatching mode: 'lookup' (exact key match) or 'bracket' (numeric range match).
currencyISO 4217 currency for the entry values; defaults to the org's preferred currency when omitted.
default_value^-?\d+(\.\d+)?$The value returned on a miss, a formula operand; required when on_missing_key=default_value.
descriptionOptional description of the table's purpose.
requires_continuous_coverageWhen true, published versions may not leave a gap in the effective-date timeline.
CreateReportExportRequest
currencyISO 4217 code.
fromInclusive start, YYYY-MM-DD.
grainBucket width. WEEK is the ISO week (Monday 00:00 in the bucketing timezone through Sunday), derived from the day grain; QUARTER and YEAR are derived from the month grain.
metricMetric key, as listed by GET /analytics/metrics.
toExclusive end, YYYY-MM-DD.
dimensionOptional dimension to slice by.
timezoneIANA zone for bucket boundaries. Defaults to the organization's.
CreateReservationRequest
customer_idCustomer whose wallet the hold reserves against.
metric_keyMetric being consumed; must match the product's meter binding.
product_idMetered product being consumed; drives price resolution.
quantity^-?\d+(\.\d+)?$ · requiredNumber of metric units to reserve; must be greater than zero.
subscription_idSubscription the usage is charged under.
Named dimension values used to select a dimensional price tier.
Caller-supplied wholesale cost fed to the price formula's cost.* variables, {value, currency}; its currency must be the price's native currency.
hold_expires_atTTL of the created hold; the wallet auto-releases it if not captured by this instant. Null uses the server default window.
Arbitrary caller-supplied key/value annotations carried on the reserve outcome.
price_keySelects a specific price when the product exposes keyed prices; null uses the default.
Named numeric variables bound into the price formula at resolve time.
wallet_currencyPins the hold to the customer's wallet in this currency; null uses their primary wallet.
idempotency_keyIgnored: the Idempotency-Key header is what collapses retries of the same reserve to one hold. Deprecated: use the Idempotency-Key header instead. Removed on 2026-11-30.
CreateSubscriptionRequest
customer_idThe customer this subscription will bill.
currencyISO 4217 currency for the whole deal. Defaults to EUR.
nameInternal operator-facing name.
on_early_stopWhat a stop inside a billing period paid in advance does with the unused part: no_credit keeps it billed, credit_unused credits it on the closing invoice. Omit to take the plan version's default (no_credit when it states none).
Locale-keyed overrides for name, description and public_description.
CreateSubscriptionRevisionRequest
The ordered phases of revision 1.
reasonWhy this deal exists: signed quote, operator edit.
CreateTagRequest
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.
CreateTaxRegistrationRequest
countryISO 3166-1 alpha-2 of the state the registration is held in, which is not always the organization's own country.
identifierThe number as issued, e.g. GB999999973, CHE-123.456.789 MWST.
schemeScheme identifier out of the closed set the jurisdiction registry owns.
evidence_refWhat proves it: a VIES check id, an HMRC consultation number, an uploaded certificate's document id, or a note.
valid_fromFirst day the registration applies; defaults to today. With the scheme and the country it identifies the registration: a number reissued after a deregistration is a new registration with a new start date.
valid_toLast day it applies; omit it for an open-ended registration.
CreateTaxRuleRequest
jurisdiction_countryrate^-?\d+(\.\d+)?$ · requiredDecimal number encoded as a string to preserve precision.
tax_typeRequests also accept the new spelling: each value in lower case (custom for CUSTOM). The listed spelling is deprecated in requests and accepted until 2026-11-30.
applies_to_customer_typesapplies_to_product_categoriesapplies_to_supply_typesapply_orderis_compoundjurisdiction_regionrequires_continuous_coverageCreateTestClockRequest
frozen_atThe instant the clock starts at; now when absent.
nameThe clock's name; 'Default Clock' when absent.
CreateTestPaymentSimulationRequest
outcomepayment_method_idCreateWalletDiscountLotRequest
What the grant puts in, {value, currency}: a gross face value, tax included, in the wallet's currency.
reasonWhy the credit is granted. Printed as the discount reason (BT-139) on every invoice the lot reduces.
expires_atWhen the lot lapses and whatever is left is forfeited; must be in the future. Omit for a lot that never lapses.
referenceOptional external reference; a repeated reference on the same wallet answers the lot it opened.
CreateWalletHoldRequest
Amount to reserve, {value, currency}; the currency must be the wallet's.
expires_atWhen the wallet auto-releases the hold if it has not been captured.
reasonFree-text explanation of what the hold reserves for.
reference_idIdentifier of the record this hold reserves against; paired with reference_type.
reference_typeType of the record this hold reserves against; paired with reference_id.
reverse_chargeTrue when the captured amount is subject to VAT reverse-charge.
tax_rate^-?\d+(\.\d+)?$Tax rate to apply at capture, as a decimal fraction (0.19 = 19%).
tax_rule_idTax rule to apply when this hold is captured; null for an untaxed hold.
CreateWalletRequest
currencyISO 4217 currency the wallet is denominated in; every limit below must be in it.
customer_idCustomer the new wallet belongs to.
Amount charged on each auto-topup, {value, currency}.
auto_topup_enabledWhether the wallet auto-tops-up when its balance drops below low_balance_threshold.
How far a POSTPAID wallet may go negative, {value, currency}; omit for unlimited, 0 for none.
Balance at which a low-balance event (and auto-topup, if enabled) fires, {value, currency}.
Cap on the cash balance, {value, currency}; omit for no cap.
Largest amount a single cash credit may add, {value, currency}; omit for no cap.
CreateWebhookEndpointRequest
event_typesurldescriptionmanaged_bySet by an automation platform's app when it subscribes: the endpoint is then shown as managed by that platform and edited or removed there.
managed_refThe platform's own id for the subscription (Zap, Make webhook or n8n workflow id). Requires managed_by.
secret_idsigning_methodCreateWebhookSecretRequest
descriptionThe record the secret belongs to. Required, here or as entity_type and entity_id.
signing_methodentity_idThe record's id, under its old name. Deprecated: use entity.id instead. Removed on 2026-11-30.
entity_typeThe kind of record the secret belongs to, under its old name. Sent with entity, both must name the same record. Deprecated: use entity.type instead. Removed on 2026-11-30.
CreateWorkspaceCurrencyRequest
currency_codeISO 4217 currency code to enable.
billing_enabledEnable billing/invoicing in this currency; at least one of billing_enabled or catalog_enabled must be true.
catalog_enabledEnable price/cost authoring in this currency; at least one of billing_enabled or catalog_enabled must be true.
CreateWorkspaceRequest
nameThe workspace's display name.
slugThe workspace's handle, unique in the organization. live and sandbox are reserved.
environmentsandbox. Only sandbox workspaces can be created: an organization has exactly one live workspace. Required unless mode is sent.
modeThe same value as environment. Send one of the two. Deprecated: use environment instead. Removed on 2026-11-30.
CreatedAffiliate
admin_invitedA PROBED fact: an invitation or a membership row exists. false means nobody can sign in yet.
seed_failedAfter-commit seeding steps that did not land. Each is idempotent; repeat the create to repair them.
CreatedCustomer
created_atcustomer_typeBuyer classification driving tax treatment and invoicing: BUSINESS, CONSUMER, or UNKNOWN.
EN 16931 BG-13 delivery information: where supplies to this customer are delivered when that is not the billing address.
The customer's three e-invoicing settings: where a structured document is delivered, whether one is produced, and its format.
emailPrimary contact email; the default recipient for invoices and portal links.
idlocaleBCP-47-style locale (one of en, de, fr, es, it, pt, nl, ja) driving invoice and communication language.
nameCustomer's display / legal name as it appears on invoices.
organization_idplatform_selfTrue on the single row that represents the organization itself, the counterparty a marketplace seller's self-billed document is addressed to. Hidden from the customer list unless platform_self is filtered for explicitly, and never issued a portal link.
preferred_currencyISO 4217 currency the customer is billed in; seeds the auto-provisioned wallet and is echoed as the currency of the wallet-default amounts on read.
statusLifecycle status: active, suspended (billing paused), or churned; only active customers can be billed.
tag_idsThe ids of the tags on the record, in name order. Add include=tags to get the tags themselves.
updated_atThe state of the customer's VAT-ID validation.
The settings a new wallet of this customer starts with. Each amount is in the customer's preferred_currency.
wallet_settlementHow the customer's wallets settle spend: PREPAID spends only funded balance, POSTPAID may spend against credit up to the wallet's credit limit. All of the customer's wallets share it.
Postal billing address used for tax determination and invoice rendering; null when no address is on file.
Values for the organization's configured custom-field definitions.
deleted_atSoft-delete timestamp (RFC3339); null for live customers, set once the customer has been soft-deleted.
disabled_providersPayment provider ids that must not be used to charge this customer.
external_idCaller-assigned external identifier for cross-referencing the customer in your own systems; unique per organization when set, null when unused.
Free-form key/value metadata for caller use; not interpreted by billing.
payment_terms_daysNet payment terms in days used to compute invoice due dates; null = inherit the customer-type default, then the organization's payment_terms_days setting (default 30).
preferred_providerPreferred payment provider id (e.g. "stripe", "gocardless") tried first when charging this customer; null = organization default routing.
The tags on the record, in name order. Sent without include=tags until 2026-11-30; after that only with include=tags.
The customer's primary wallet. Its discount_lots are not sent here (GET /wallets/{id}?include=discount_lots lists them), except as the empty list of the wallet POST /customers just opened. Sent only with include=wallet; POST /customers sends it without being asked until 2026-11-30. Absent when the customer has no wallet.
The same customer as the top-level fields. Deprecated: use the customer's fields at the top level of the answer instead. Removed on 2026-11-30.
Default auto-topup amount as {value, currency}, MAJOR units. Currency echoes preferred_currency on read. Deprecated: use wallet_defaults.auto_topup.amount instead. Removed on 2026-11-30.
default_auto_topup_enabledWhether new wallets seeded from this customer enable automatic top-up; null = leave the wallet default. Deprecated: use wallet_defaults.auto_topup.enabled instead. Removed on 2026-11-30.
Default wallet credit limit as {value, currency}, MAJOR units. Currency echoes preferred_currency on read. Deprecated: use wallet_defaults.limits.credit_limit instead. Removed on 2026-11-30.
Default low-balance threshold as {value, currency}, MAJOR units. Currency echoes preferred_currency on read. Deprecated: use wallet_defaults.limits.low_balance_threshold instead. Removed on 2026-11-30.
Default wallet max balance as {value, currency}, MAJOR units. Currency echoes preferred_currency on read. Deprecated: use wallet_defaults.limits.max_balance instead. Removed on 2026-11-30.
Default wallet max single-credit as {value, currency}, MAJOR units. Currency echoes preferred_currency on read. Deprecated: use wallet_defaults.limits.max_single_credit instead. Removed on 2026-11-30.
EN 16931 BG-15 DELIVER TO ADDRESS: where supplies to this customer are actually delivered, when that is not the billing address; null means delivered to the billing address. Deprecated: use delivery.address instead. Removed on 2026-11-30.
delivery_location_idEN 16931 BT-71, the deliver-to location identifier (a GLN or a site code agreed with the buyer); null emits nothing. Deprecated: use delivery.location_id instead. Removed on 2026-11-30.
delivery_party_nameEN 16931 BT-70, the deliver-to party name (e.g. "Acme GmbH - Warehouse North"); null emits no name rather than restating the buyer name. Deprecated: use delivery.party_name instead. Removed on 2026-11-30.
einvoice_profileStanding per-customer e-invoice format (e.g. XRECHNUNG_3_0_UBL); null = inherit, resolving through the country rules to the workspace default profile. Not the same as prefer_einvoice (whether to produce one) or peppol_id (where to send it). Deprecated: use einvoicing.profile instead. Removed on 2026-11-30.
modeWallet settlement mode: PREPAID (spend limited to funded balance) or POSTPAID (spend allowed against credit). Deprecated: use wallet_settlement instead. Removed on 2026-11-30.
peppol_idPeppol participant identifier in scheme:value form used as the buyer endpoint for e-invoice delivery; null when the customer is not on Peppol. Deprecated: use einvoicing.peppol_id instead. Removed on 2026-11-30.
prefer_einvoicePer-customer master switch for structured e-invoicing. null = inherit the workspace's rollout audience; false = never auto-generate; true = always auto-generate, whether or not the customer is in the audience. Deprecated: use einvoicing.prefer instead. Removed on 2026-11-30.
vat_validation_disabledWhen true, automatic VAT-ID validation is skipped for this customer. Deprecated: use vat_validation.disabled instead. Removed on 2026-11-30.
vat_validation_disabled_reasonOperator-supplied reason recorded when vat_validation_disabled is true; null otherwise. Deprecated: use vat_validation.disabled_reason instead. Removed on 2026-11-30.
vat_validation_statusOutcome of the last VAT-ID validation: UNVALIDATED, PENDING, VALID, INVALID, ERROR, MANUAL (operator override), or MAINTENANCE (VIES unavailable). Deprecated: use vat_validation.status instead. Removed on 2026-11-30.
CreatedEInvoiceDocument
byte_sizeSize of the stored artifact in bytes.
content_hashHex-encoded content hash of the artifact bytes.
content_typeMIME type of the stored artifact (e.g. application/xml, application/pdf).
created_atidThe e-invoice document's id.
invoice_idThe document this artifact was generated for. Every kind — invoice, credit note, corrective — is a row of the one document root, so this is the anchor for all of them; document_kind says which.
jurisdictionJurisdiction the artifact was rendered for (e.g. DE).
profileProfile the artifact was rendered as (e.g. XRECHNUNG_CII).
statusclean when the artifact passed validation; quarantined when validation findings held it back (quarantine_reason says why, GET /e-invoicing/documents/{id}/findings lists them).
syntaxSerialization syntax of the artifact (e.g. UBL, CII).
document_kindKind of the anchoring document, so a client can route a credit note's row to /credit-notes/{id}. Absent when the anchor no longer resolves (deleted or outside the caller's scope).
The anchoring document (invoice, credit note or corrective), sent with include=invoice. Absent when the document was deleted or is outside your scope.
profile_sourceWhich level of the resolution chain chose the profile: invoice_override (a human chose it for this document), customer (the buyer's standing preference), jurisdiction_rule (a country/region rule matched) or org_default. Absent on documents issued before this was recorded - absent means unknown, not org_default.
profile_source_detailWhich ROW chose the profile, in the operator's words: "customer
quarantine_reasonReason the artifact was quarantined; empty when it passed validation.
document_idThe persisted e-invoice document row created by this generation. Deprecated: use id instead. Removed on 2026-11-30.
Validation findings raised while rendering; present even on success as warnings. Deprecated: use GET /e-invoicing/documents/{id}/findings instead. Removed on 2026-11-30.
invoice_numberHuman number of the anchoring document (e.g. RE-2025-0413 or a credit note's number). Empty when it is still a draft, was deleted, or is outside the caller's scope - fall back to invoice_id. Deprecated: use invoice.number (include=invoice) instead. Removed on 2026-11-30.
quarantinedTrue when validation findings held the artifact back from being marked deliverable. Deprecated: use status instead. Removed on 2026-11-30.
storage_bucketObject-storage bucket the artifact was written to. Internal; download the bytes with GET /e-invoicing/documents/{id}/raw. Deprecated: no replacement. Removed on 2026-11-30.
storage_keyObject-storage key of the artifact within the bucket. Internal; download the bytes with GET /e-invoicing/documents/{id}/raw. Deprecated: no replacement. Removed on 2026-11-30.
CredentialField
keyConfig key this value is stored under, e.g. api_key.
requiredWhether a provider can be connected without it.
secretTrue when reads return a masked hint rather than the value.
CreditApplication
What was applied, as a positive currency-tagged amount.
applied_atcreated_atcredit_document_idThe credit note or corrective the credit came from.
idtarget_document_idThe document whose balance it reduced.
created_byThe operator who applied it; null for an automatic application.
CreditApplicationsEnvelopeBody
Credit applications that have reduced this document's amount due.
Pagination block; this collection is returned unpaginated with a total count.
Document-level credit rollup.
CreditGrant
idThe grant row this credit comes from.
quantity^-?\d+(\.\d+)?$ · requiredAmount of usage credit granted, in metered units.
sourceOrigin of the credit: the granting promotion's name, or a top-up.
expires_atInstant the credit expires; null for non-expiring credit.
CreditNoteSearchHit
display_namePrimary label shown for the hit in the results list.
entity_typeKind of the matched entity; it names the shape of data.
idIdentifier of the matched entity.
scoreRelevance score from the search engine; higher ranks first.
tag_idsThe ids of the tags on the matched entity. Add include=tags to get the tags themselves.
The owning customer. Sent only with include=customer, and only when the entity has an owning customer.
customer_idOwning customer's id; empty for catalog entities that have no owning customer.
Entity-type-specific payload with the fields needed to render the hit. Sent without include=data until 2026-11-30; after that only with include=data.
referenceThe short per-organization human reference an operator would say out loud: an invoice's or credit note's number, a subscription's SUB-000123, a quote's QUO-2026-000078. Absent for a kind that is named rather than numbered (customer, product, plan, payment, dispute) and for a draft invoice, which has no number until it is finalized.
secondary_textSupporting line shown under the display name (e.g. an invoice number or email).
Tags attached to the matched entity. Sent without include=tags until 2026-11-30; after that only with include=tags.
customer_nameOwning customer's display name; empty for catalog entities. Deprecated: use customer.name (include=customer) instead. Removed on 2026-11-30.
CreditWalletRequest
Amount to credit, {value, currency}; the currency must be the wallet's.
sourceWhat originates the credit: one of PAYMENT, REFUND, PROMOTION, INVOICE, CHARGE, FEE, MANUAL, TRANSFER. PROMOTION grants price-reduction credit (goodwill, welcome credit, a make-good) as a discount lot and moves no cash; every other source is the customer's own money entering the cash balance, and MANUAL is money the customer paid outside the product — never a gift.
Requests also accept the new spelling: each value in lower case (charge for CHARGE). The listed spelling is deprecated in requests and accepted until 2026-11-30.
reasonFree-text explanation stored with the credit. Required for PROMOTION: it is printed as the discount reason (BT-139) on every invoice the credit reduces.
referenceOptional external reference; a repeated (source, reference) is treated as an idempotent replay.
expires_atFor PROMOTION credits, when the granted credit lapses; must be in the future. Null = never. Deprecated: use POST /wallets/{id}/discount-lots instead. Removed on 2026-11-30.
grant_kindRequired when source is PROMOTION. PRICE_REDUCTION is the only kind accepted: the credit opens a discount lot that reduces the customer's next invoices before tax, and is never a payment. A reward or referral grant is a different tax treatment and is refused. Deprecated: use POST /wallets/{id}/discount-lots instead. Removed on 2026-11-30.
Requests also accept the new spelling: each value in lower case (price_reduction for PRICE_REDUCTION). The listed spelling is deprecated in requests and accepted until 2026-11-30.
CurrencyReferences
costsCost entries authored in this currency.
credit_notesCredit notes issued in this currency.
customersCustomers whose preferred currency is this code.
invoicesInvoices issued in this currency.
pricesCatalog prices authored in this currency.
subscriptionsSubscriptions priced in this currency.
totalSum of all reference counts; when greater than zero the currency cannot be removed.
walletsWallets denominated in this currency.
CustomDomain
created_athostnameidThe two records to create: the CNAME carries the traffic, the TXT proves you hold the domain.
statuspending: the DNS records are not seen yet; active: served, links use it; failed: the records disappeared, the host is no longer served.
last_checked_atlast_errorverified_atCustomFieldChange
fieldThe field of the definition: its label, type, validation, an option, its default, access, display or status.
kindWhat happened to the field: set where the definition stated none, changed, or cleared.
What the definition states after the act; absent when it states nothing.
What the definition stated before the act; absent when it stated nothing.
keyFor an option of an ENUM field: the option's value.
CustomFieldConflictPolicy
Requests also accept the new spelling: each value in lower case (flag for FLAG). The listed spelling is deprecated in requests and accepted until 2026-11-30.
CustomFieldDefinition
auditablecreated_atdisplay_nameentity_typesfield_typeRequests also accept the new spelling: each value in lower case (boolean for BOOLEAN). The listed spelling is deprecated in requests and accepted until 2026-11-30.
idkeyorganization_idshow_in_tablesort_orderstatusupdated_atversionvisibilityRequests also accept the new spelling: each value in lower case (internal for INTERNAL). The listed spelling is deprecated in requests and accepted until 2026-11-30.
write_accessRequests also accept the new spelling: each value in lower case (admin_only for ADMIN_ONLY). The listed spelling is deprecated in requests and accepted until 2026-11-30.
archived_atWhen the definition was archived. Sent only on an archived definition.
default_valuedeprecated_atdescriptionfield_groupusage_countHow many records hold a value for this field. Sent only with include=usage_count.
deleted_atWhen the definition was archived (the same value as archived_at). Deprecated: use archived_at instead. Removed on 2026-11-30.
CustomFieldEntityType
Requests also accept the new spelling: each value in lower case (customer for CUSTOMER). The listed spelling is deprecated in requests and accepted until 2026-11-30.
CustomFieldTarget
Requests also accept the new spelling: each value in lower case (customer for CUSTOMER). The listed spelling is deprecated in requests and accepted until 2026-11-30.
CustomFieldType
Requests also accept the new spelling: each value in lower case (boolean for BOOLEAN). The listed spelling is deprecated in requests and accepted until 2026-11-30.
CustomFieldVisibility
Requests also accept the new spelling: each value in lower case (internal for INTERNAL). The listed spelling is deprecated in requests and accepted until 2026-11-30.
CustomFieldWriteAccess
Requests also accept the new spelling: each value in lower case (admin_only for ADMIN_ONLY). The listed spelling is deprecated in requests and accepted until 2026-11-30.
Customer
created_atcustomer_typeBuyer classification driving tax treatment and invoicing: BUSINESS, CONSUMER, or UNKNOWN.
EN 16931 BG-13 delivery information: where supplies to this customer are delivered when that is not the billing address.
The customer's three e-invoicing settings: where a structured document is delivered, whether one is produced, and its format.
emailPrimary contact email; the default recipient for invoices and portal links.
idlocaleBCP-47-style locale (one of en, de, fr, es, it, pt, nl, ja) driving invoice and communication language.
nameCustomer's display / legal name as it appears on invoices.
organization_idplatform_selfTrue on the single row that represents the organization itself, the counterparty a marketplace seller's self-billed document is addressed to. Hidden from the customer list unless platform_self is filtered for explicitly, and never issued a portal link.
preferred_currencyISO 4217 currency the customer is billed in; seeds the auto-provisioned wallet and is echoed as the currency of the wallet-default amounts on read.
statusLifecycle status: active, suspended (billing paused), or churned; only active customers can be billed.
tag_idsThe ids of the tags on the record, in name order. Add include=tags to get the tags themselves.
updated_atThe state of the customer's VAT-ID validation.
The settings a new wallet of this customer starts with. Each amount is in the customer's preferred_currency.
wallet_settlementHow the customer's wallets settle spend: PREPAID spends only funded balance, POSTPAID may spend against credit up to the wallet's credit limit. All of the customer's wallets share it.
Postal billing address used for tax determination and invoice rendering; null when no address is on file.
Values for the organization's configured custom-field definitions.
deleted_atSoft-delete timestamp (RFC3339); null for live customers, set once the customer has been soft-deleted.
disabled_providersPayment provider ids that must not be used to charge this customer.
external_idCaller-assigned external identifier for cross-referencing the customer in your own systems; unique per organization when set, null when unused.
Free-form key/value metadata for caller use; not interpreted by billing.
payment_terms_daysNet payment terms in days used to compute invoice due dates; null = inherit the customer-type default, then the organization's payment_terms_days setting (default 30).
preferred_providerPreferred payment provider id (e.g. "stripe", "gocardless") tried first when charging this customer; null = organization default routing.
The tags on the record, in name order. Sent without include=tags until 2026-11-30; after that only with include=tags.
The customer's primary wallet. Its discount_lots are not sent here (GET /wallets/{id}?include=discount_lots lists them), except as the empty list of the wallet POST /customers just opened. Sent only with include=wallet; POST /customers sends it without being asked until 2026-11-30. Absent when the customer has no wallet.
Default auto-topup amount as {value, currency}, MAJOR units. Currency echoes preferred_currency on read. Deprecated: use wallet_defaults.auto_topup.amount instead. Removed on 2026-11-30.
default_auto_topup_enabledWhether new wallets seeded from this customer enable automatic top-up; null = leave the wallet default. Deprecated: use wallet_defaults.auto_topup.enabled instead. Removed on 2026-11-30.
Default wallet credit limit as {value, currency}, MAJOR units. Currency echoes preferred_currency on read. Deprecated: use wallet_defaults.limits.credit_limit instead. Removed on 2026-11-30.
Default low-balance threshold as {value, currency}, MAJOR units. Currency echoes preferred_currency on read. Deprecated: use wallet_defaults.limits.low_balance_threshold instead. Removed on 2026-11-30.
Default wallet max balance as {value, currency}, MAJOR units. Currency echoes preferred_currency on read. Deprecated: use wallet_defaults.limits.max_balance instead. Removed on 2026-11-30.
Default wallet max single-credit as {value, currency}, MAJOR units. Currency echoes preferred_currency on read. Deprecated: use wallet_defaults.limits.max_single_credit instead. Removed on 2026-11-30.
EN 16931 BG-15 DELIVER TO ADDRESS: where supplies to this customer are actually delivered, when that is not the billing address; null means delivered to the billing address. Deprecated: use delivery.address instead. Removed on 2026-11-30.
delivery_location_idEN 16931 BT-71, the deliver-to location identifier (a GLN or a site code agreed with the buyer); null emits nothing. Deprecated: use delivery.location_id instead. Removed on 2026-11-30.
delivery_party_nameEN 16931 BT-70, the deliver-to party name (e.g. "Acme GmbH - Warehouse North"); null emits no name rather than restating the buyer name. Deprecated: use delivery.party_name instead. Removed on 2026-11-30.
einvoice_profileStanding per-customer e-invoice format (e.g. XRECHNUNG_3_0_UBL); null = inherit, resolving through the country rules to the workspace default profile. Not the same as prefer_einvoice (whether to produce one) or peppol_id (where to send it). Deprecated: use einvoicing.profile instead. Removed on 2026-11-30.
modeWallet settlement mode: PREPAID (spend limited to funded balance) or POSTPAID (spend allowed against credit). Deprecated: use wallet_settlement instead. Removed on 2026-11-30.
peppol_idPeppol participant identifier in scheme:value form used as the buyer endpoint for e-invoice delivery; null when the customer is not on Peppol. Deprecated: use einvoicing.peppol_id instead. Removed on 2026-11-30.
prefer_einvoicePer-customer master switch for structured e-invoicing. null = inherit the workspace's rollout audience; false = never auto-generate; true = always auto-generate, whether or not the customer is in the audience. Deprecated: use einvoicing.prefer instead. Removed on 2026-11-30.
vat_validation_disabledWhen true, automatic VAT-ID validation is skipped for this customer. Deprecated: use vat_validation.disabled instead. Removed on 2026-11-30.
vat_validation_disabled_reasonOperator-supplied reason recorded when vat_validation_disabled is true; null otherwise. Deprecated: use vat_validation.disabled_reason instead. Removed on 2026-11-30.
vat_validation_statusOutcome of the last VAT-ID validation: UNVALIDATED, PENDING, VALID, INVALID, ERROR, MANUAL (operator override), or MAINTENANCE (VIES unavailable). Deprecated: use vat_validation.status instead. Removed on 2026-11-30.
CustomerAuditEvent
event_typeidoccurred_atdomainentityentity_identity_typepayloadverbCustomerChange
fieldThe fact: a field of the customer's record, a metadata entry or a custom field value.
kindWhat happened to the fact: held where there was none, changed, or no longer held.
What the customer's record holds after the edit; absent when it holds nothing.
What the customer's record held before the edit; absent when it held nothing.
keyFor metadata and custom_field: the entry's key.
CustomerContact
categoryWhat this contact receives: billing, quotes_contracts, dunning, legal_notices or technical.
created_atcustomer_idemailThe mailbox. Stored as entered; uniqueness within a category is case-insensitive.
idis_primaryWhether mail for this category is addressed here. At most one contact per (customer, category) can be primary; a category with no primary falls back to the billing contact.
organization_idpositionThe slot within the category, 1 to 3. The primary normally holds 1; the others are copied on the mail in position order.
updated_atupdated_by_kindWhich side last changed this contact: operator (a tenant user), portal (the customer, self-service) or system (the automatic mirror of the account's main address).
workspace_idThe workspace the contact belongs to; always the owning customer's workspace, so a sandbox customer's contact stays in sandbox.
nameOptional display name for the person or team behind the address.
CustomerCreatedPayload
created_atcustomer_idThe customer that was created.
emailThe customer's email address.
organization_idpreferred_currencyThe customer's preferred billing currency, ISO-4217.
wallet_idThe default wallet provisioned for the customer.
external_idThe caller-supplied external id, when provided.
workspace_idThe workspace that owns the customer.
CustomerCurrencyChangedPayload
changed_atWhen the billing currency changed.
customer_idThe customer whose billing currency changed.
fromThe ISO 4217 billing currency before the change - the only record of it that survives the write.
organization_idtoThe ISO 4217 billing currency after the change.
actor_idThe actor who performed the currency change, when known.
workspace_idThe workspace that owns the customer.
CustomerDelivery
EN 16931 BG-15 deliver-to address; null means delivered to the billing address.
location_idEN 16931 BT-71, the deliver-to location identifier (a GLN or a site code agreed with the buyer); null emits nothing.
party_nameEN 16931 BT-70, the deliver-to party name; null emits no name.
CustomerDeliveryInput
EN 16931 BG-15 deliver-to address; when provided, line1, city, postal_code and country are required.
location_idEN 16931 BT-71, the deliver-to location identifier (GLN or agreed site code).
party_nameEN 16931 BT-70, the deliver-to party name.
CustomerEInvoicing
peppol_idPeppol participant identifier in scheme:value form, the buyer endpoint for e-invoice delivery; null when the customer is not on Peppol.
preferWhether structured e-invoices are produced: null follows the workspace's rollout audience; false never; true always.
profileStanding e-invoice format (e.g. XRECHNUNG_3_0_UBL); null inherits, resolving through the country rules to the workspace default profile.
CustomerEInvoicingInput
peppol_idPeppol participant identifier in scheme:value form, the buyer endpoint for e-invoice delivery (WHERE a document goes).
preferWhether structured e-invoices are produced for this customer (WHETHER); omit to follow the workspace's rollout audience.
profileStanding e-invoice format (e.g. XRECHNUNG_3_0_UBL), WHAT SHAPE a document has; omit to inherit. Must name a profile this deployment still offers - see GET /v1/e-invoicing/profiles.
CustomerIntegrationLink
external_idThe customer's identifier in the provider's system.
kindWhich family of integration the handle belongs to.
providerProvider id, e.g. stripe, gocardless, datev.
dashboard_urlDeep link to the customer's record in the provider's own dashboard, when the provider has one.
linked_atWhen the handle was first created, when known.
CustomerIntegrationLinkList
External handles, payment providers first, then accounting. Empty when the customer has never been synced anywhere.
CustomerMerge
invoices_countNumber of invoices moved from source to target.
payment_methods_countNumber of payment methods reassigned from source to target.
payments_countNumber of payments reassigned from source to target.
source_customer_idCustomer whose records were (or would be) moved and then retired.
subscriptions_countNumber of subscriptions moved from source to target. A deleted subscription moves with them, still deleted, and is not counted.
target_customer_idSurviving customer that absorbs the source's records.
usage_events_countNumber of usage events reassigned from source to target.
wallets_merged_countNumber of source wallets that had a same-currency counterpart on the target and were combined into it.
wallets_moved_countNumber of source wallets with no target counterpart that were moved to the target wholesale.
Subscription-plan conflicts that block a MOVE_ALL merge; populated on PREVIEW and on a rejected merge, empty when the merge can proceed.
The target customer after the merge; present only on a completed MOVE_ALL merge, null on PREVIEW.
CustomerModeChangedPayload
changed_atWhen the wallet mode changed.
customer_idThe customer whose wallet mode changed.
fromThe wallet mode before the change (e.g. PREPAID, POSTPAID).
organization_idtoThe wallet mode after the change (e.g. PREPAID, POSTPAID).
actor_idThe actor who performed the mode change, when known.
reasonWhy the wallet mode was changed.
Per-wallet balance snapshots captured at the moment of the change.
workspace_idThe workspace that owns the customer.
CustomerOverview
One preview group per customer-owned entity type that has records.
The customer's own hit; absent when the caller may not read customers or the customer is not indexed.
The customer's own hit; the same value as profile. Deprecated: use profile instead. Removed on 2026-11-30.
CustomerOverviewGroup
entity_typeEntity type this group previews (e.g. invoice, subscription).
has_moreTrue when the customer has more records of this type than the preview shows.
hitsRecency-ordered preview of the customer's records of this type.
CustomerProviderLinkChange
kindWhat the change is about: the provider customer the link names.
providerThe payment provider, e.g. stripe or gocardless.
afterThe provider's customer id the link names after the act.
beforeThe provider's customer id the link named before the act.
CustomerRef
idThe customer's id.
nameThe customer's name, as indexed.
CustomerSearchHit
display_namePrimary label shown for the hit in the results list.
entity_typeKind of the matched entity; it names the shape of data.
idIdentifier of the matched entity.
scoreRelevance score from the search engine; higher ranks first.
tag_idsThe ids of the tags on the matched entity. Add include=tags to get the tags themselves.
The owning customer. Sent only with include=customer, and only when the entity has an owning customer.
customer_idOwning customer's id; empty for catalog entities that have no owning customer.
referenceThe short per-organization human reference an operator would say out loud: an invoice's or credit note's number, a subscription's SUB-000123, a quote's QUO-2026-000078. Absent for a kind that is named rather than numbered (customer, product, plan, payment, dispute) and for a draft invoice, which has no number until it is finalized.
secondary_textSupporting line shown under the display name (e.g. an invoice number or email).
Tags attached to the matched entity. Sent without include=tags until 2026-11-30; after that only with include=tags.
customer_nameOwning customer's display name; empty for catalog entities. Deprecated: use customer.name (include=customer) instead. Removed on 2026-11-30.
CustomerType
Requests also accept the new spelling: each value in lower case (business for BUSINESS). The listed spelling is deprecated in requests and accepted until 2026-11-30.
CustomerTypeChangedPayload
changed_atWhen the customer type changed.
customer_idThe customer whose type changed.
fromThe customer type before the change (BUSINESS, CONSUMER or UNKNOWN).
organization_idreasonWhy the customer type was changed.
toThe customer type after the change (BUSINESS, CONSUMER or UNKNOWN).
actor_idThe actor who performed the type change, when known.
workspace_idThe workspace that owns the customer.
CustomerVATValidation
disabledWhen true, automatic VAT-ID validation is skipped for this customer.
statusOutcome of the last VAT-ID validation: UNVALIDATED, PENDING, VALID, INVALID, ERROR, MANUAL (operator override) or MAINTENANCE (VIES unavailable).
disabled_reasonThe reason recorded when disabled is true; null otherwise.
CustomerVATValidationInput
disabledWhen true, automatic VAT-ID validation is skipped for this customer; requires disabled_reason.
disabled_reasonReason recorded when disabled is true; required in that case.
CustomerValue
typeThe fact's value type, which names the member the value is in.
For type=address.
amount^-?\d+(\.\d+)?$For type=money, in currency.
currencyFor type=money: the amount's currency, the customer's.
flagFor type=flag.
listFor type=list, in order.
numberFor type=number.
textFor type=text.
CustomerWalletDefaultAutoTopup
Amount charged on each auto-topup of a new wallet. Null means the wallet default.
enabledWhether a new wallet tops up automatically. Null means the wallet default.
CustomerWalletDefaultAutoTopupInput
Default auto-topup amount as {value, currency}, major units, in preferred_currency.
enabledWhether a new wallet tops up automatically.
CustomerWalletDefaultLimits
How far a new POSTPAID wallet may go negative on spend.
Balance at which a new wallet fires a low-balance event (and auto-topup, if enabled).
Cap on a new wallet's cash balance.
Largest amount a single cash credit may add to a new wallet.
CustomerWalletDefaultLimitsInput
Default wallet credit limit as {value, currency}, major units, in preferred_currency.
Default low-balance threshold as {value, currency}, major units, in preferred_currency.
Default wallet max balance as {value, currency}, major units, in preferred_currency.
Default largest single cash credit as {value, currency}, major units, in preferred_currency.
CustomerWalletDefaults
How a new wallet tops itself up.
The limits a new wallet starts with.
CustomerWalletDefaultsInput
How a new wallet tops itself up.
The limits a new wallet starts with.
CutLine
What took money off the line before its amount, one entry per origin. Empty when nothing reduced it.
The line's net amount after its allowances: negative on a credit.
period_endEnd instant of that span, exclusive.
period_startStart instant of the span the line bills.
quantity^-?\d+(\.\d+)?$ · requiredThe quantity the line bills: the old terms' on a credit, the new terms' on a charge. Negative on a credit.
titleThe line's heading, composed on the server in the reader's language.
period_daysThe days of the billing period prorated_days is a share of.
product_idThe catalog product the line bills.
prorated_daysWhen the span is less than the billing period: its whole days, of period_days.
roleSet on a line that is not the period's own bill: settlement_credit takes back what the period's start billed over the part that changed (or a phase change's prepaid remainder); settlement_charge bills the terms in force over that part; stop_credit credits the unused part at a stop under credit_unused; prepaid bills a prepaid phase. Absent on a period's advance or arrears line.
CutSubscriptionRevisionRequest
atThe cut instant; omit it to cut at now. The phase containing it is split; everything after it is superseded and kept for history. It may not be in the past — a renegotiation takes effect at or after now.
reasonWhy the revision exists.
replace_draftDiscard the open draft and cut the live revision anyway. Without it an open draft refuses the cut.
DNSRecord
nametypeThe DNS record type: cname or txt (lower case on the wire; your DNS provider writes it CNAME / TXT).
valueDataEnvelopeAdjustWalletData
Outcome-dependent: on 200 the posted WalletTransaction; on 202 an ApprovalPending because this workspace requires human approval for wallet adjustments — nothing has been applied yet (follow it with GET /approvals/{id} or the approval.* webhook event whose request_id is approval_request_id).
DataEnvelopeCreditWalletData
Source-dependent: on 200 the posted WalletTransaction (the customer's own money entered the cash balance); on 201 the DiscountLot a PROMOTION grant opened. The 201 ends on 2026-11-30: grant price-reduction credit with POST /wallets/{id}/discount-lots, and this operation answers the WalletTransaction only.
DataEnvelopeIngestUsageEventData
Outcome-dependent: on 201 the created UsageEvent (single-event body) or the BatchIngestResult (batch body); on 202 the UsageEventQueuedResponse when the event settles a reservation and is processed asynchronously (the hold's state is observable at GET /wallets/{id}/holds).
DataEnvelopeSendQuoteData
Outcome-dependent: the QuoteDTO (status SENT) on 200, when the quote.send checkpoint did not gate; the ApprovalPendingDTO on 202, when it did and the quote is parked in PENDING_APPROVAL awaiting a decision.
DataEnvelopeSubmitQuoteData
Outcome-dependent: the QuoteDTO (status APPROVED) on 200, when the quote.send checkpoint did not gate; the ApprovalPendingDTO on 202, when it did and the quote is parked in PENDING_APPROVAL awaiting a decision.
DebitWalletRequest
The amount, {value, currency}, in the wallet's currency: positive on a debit, signed (and never zero) on an adjustment.
sourceWhat originates the movement: one of PAYMENT, REFUND, PROMOTION, INVOICE, CHARGE, FEE, MANUAL, TRANSFER.
Requests also accept the new spelling: each value in lower case (charge for CHARGE). The listed spelling is deprecated in requests and accepted until 2026-11-30.
reasonOptional free-text explanation stored on the ledger entry.
referenceOptional external reference; a repeated (source, reference) is treated as an idempotent replay.
DeclaredAllowanceState
billable_quantityUnits billed: held minus included, never below zero.
included_quantityUnits included free, after any operator override.
quantity_heldUnits this subscription carries, as stated by the operator.
unrealized_quantityIncluded units the customer is not using; zero once they hold at least the included amount.
DeclineCountersignInputBody
reasonWhy your organisation does not sign. Recorded on the request's chronology and told to the offer's owner.
DefaultTrackSides
afterThe default after the act.
beforeThe default before the act; absent when none was stated.
DefaultVersionChangeSides
afterThe default after the act.
beforeThe default before the act; absent when none was stated.
DelegationEventPayload
atWhen this happened.
delegation_idThe stored grant this happened to.
directionWhich way the grant points. Always downward today.
grantee_org_idThe organization whose members receive it.
grantee_roleThe role a member must hold in the grantee to receive it.
grantor_org_idThe organization that gave the right away. Always above the target.
organization_idThe organization this event is about — the delegation's target.
target_org_idThe organization that may be entered.
target_roleThe role assumed in the target.
expires_atWhen it stops on its own; absent means it stops only when revoked.
reasonThe operator's free-text reason for the grant.
revoked_atWhen it was withdrawn. Only on organization.delegation_revoked.
revoked_by_org_idThe organization that withdrew it — the grantor, or the target refusing it.
revoked_reasonWhy it was withdrawn, in the operator's words.
DependentPlan
plan_idstaleTrue when the plan's version in force carries an older product version than the product's version in force.
track_modeHow the plan's membership follows the product: latest (it republishes with the product) or pinned (it holds its version).
pinned_versionThe product version the plan's version in force carries; absent when it carries none.
The plan. Sent only with include=plan.
current_versionThe product's version in force, the same on every row. Deprecated: use head_version.number of GET /products/{id} instead. Removed on 2026-11-30.
plan_nameThe plan's name. Deprecated: use plan.name (include=plan) instead. Removed on 2026-11-30.
plan_statusThe plan's status: draft, active or archived. Deprecated: use plan.status (include=plan) instead. Removed on 2026-11-30.
DependsOn
conditioneffectfield_keyvalueDescribedBuyer
country^[A-Z]{2}$ · requiredISO 3166-1 alpha-2 country the buyer is in. It places the supply and selects country-specific prices.
customer_typeWhether the buyer is a BUSINESS or a CONSUMER.
Requests also accept the new spelling: each value in lower case (business for BUSINESS). The listed spelling is deprecated in requests and accepted until 2026-11-30.
vat_idThe buyer's VAT id. A stated id makes the buyer a VAT-registered business for the tax; it is not checked against VIES.
Dimension
nameThe dimension's name.
valueIts value: the text itself, or the canonical JSON of a non-text value.
DimensionKey
DiscountLot
created_atWhen the lot was granted; with the expiry it decides the order lots are drawn in.
What the grant put in, {value, currency}: a gross face value, tax included.
idThe lot: one grant of price-reduction credit.
reasonWhy the credit was granted. Printed as the discount reason (BT-139) on every invoice the lot reduces.
What the lot still holds, {value, currency}: granted less what invoices drew and less what expired.
wallet_idThe wallet the lot belongs to; the lot is always in the wallet's currency.
expires_atWhen the lot lapses and whatever is left is forfeited; null never lapses.
granted_by_user_idThe operator who granted the credit; null for a lot the system made.
DisputeChangedPayload
What the provider disputes.
dispute_idThe dispute that was upserted and needs re-indexing.
organization_idpayment_idThe charge the dispute is on.
statusWhere the dispute stands, as the provider reported it.
customer_idThe customer the disputed charge was collected from.
invoice_idThe invoice the disputed charge paid, when it paid one.
outcomeHow the provider ruled; absent until it has.
DisputeSearchData
amountThe disputed amount in major units, at the currency's scale.
currencypayment_idThe payment the dispute is about.
reasonThe reason the provider gives.
statusDisputeSearchHit
display_namePrimary label shown for the hit in the results list.
entity_typeKind of the matched entity; it names the shape of data.
idIdentifier of the matched entity.
scoreRelevance score from the search engine; higher ranks first.
tag_idsThe ids of the tags on the matched entity. Add include=tags to get the tags themselves.
The owning customer. Sent only with include=customer, and only when the entity has an owning customer.
customer_idOwning customer's id; empty for catalog entities that have no owning customer.
Entity-type-specific payload with the fields needed to render the hit. Sent without include=data until 2026-11-30; after that only with include=data.
referenceThe short per-organization human reference an operator would say out loud: an invoice's or credit note's number, a subscription's SUB-000123, a quote's QUO-2026-000078. Absent for a kind that is named rather than numbered (customer, product, plan, payment, dispute) and for a draft invoice, which has no number until it is finalized.
secondary_textSupporting line shown under the display name (e.g. an invoice number or email).
Tags attached to the matched entity. Sent without include=tags until 2026-11-30; after that only with include=tags.
customer_nameOwning customer's display name; empty for catalog entities. Deprecated: use customer.name (include=customer) instead. Removed on 2026-11-30.
DisputeStatus
DocumentGeneratedPayload
archive_record_idThe archival record id for the written artifact.
byte_sizeThe artifact size in bytes.
chain_hashThe archival hash-chain value at this artifact.
chain_seqThe artifact's position in the tamper-evident archival hash chain.
content_hashHex-encoded sha256 over the artifact bytes.
content_typeThe artifact MIME type.
generated_atWhen the artifact was generated.
jurisdictionThe jurisdiction the document was rendered for.
kindThe document kind that was rendered.
organization_idsource_idThe id of the source record.
source_kindThe kind of source record the document was rendered from.
storage_bucketThe object-storage bucket the artifact was written to.
storage_keyThe object-storage key of the artifact.
profileThe rendering profile used, when profile-specific.
workspace_idThe workspace that owns the source record.
DocumentKind
DocumentRegenerationQueued
document_idThe document whose artifact regeneration was queued.
messageHuman-readable acknowledgement that the job was enqueued.
DocumentRequestedPayload
idempotency_keyThe consumer-side de-duplication key for this render request.
kindThe document kind to render.
organization_idrequested_atWhen the document was requested.
source_idThe id of the source record.
source_kindThe kind of source record the document is rendered from (e.g. INVOICE, CREDIT_NOTE).
jurisdictionThe jurisdiction the document is rendered for, when applicable.
profileThe rendering profile, when profile-specific.
workspace_idThe workspace that owns the source record.
DocumentTemplate
created_atdefault_forDocument types this template is the org's favorite for: a subset of document_types, empty for most templates.
descriptionFree-text description of the template.
document_typesDocument types this template can render: a non-empty subset of {invoice, credit_note, quote, email}.
idis_systemTrue for built-in system templates, which cannot be edited or deleted.
nameHuman-readable template name.
organization_idQuote inputs this layout prints, derived from its blocks. Empty unless the template renders quotes.
statusLifecycle status. A printed template is active or archived; an email template is draft, published or archived.
The template document: ordered blocks plus theme, branding, and footer.
updated_atversionOptimistic-concurrency version, bumped on every update.
anchor_keyThe mail kind this email template renders for, e.g. "invoice.finalized". Empty on printed templates. Stable technical identifier, not a label — show anchor_name.
anchor_nameThe mail kind's human name in the request locale, e.g. "Invoice finalized". Resolved server-side from the code-owned registry; empty on printed templates.
deleted_atSoft-delete timestamp; null for live templates.
DocumentTemplateView
created_atdefault_forDocument types this template is the org's favorite for: a subset of document_types, empty for most templates.
descriptionFree-text description of the template.
document_typesDocument types this template can render: a non-empty subset of {invoice, credit_note, quote, email}.
idis_systemTrue for built-in system templates, which cannot be edited or deleted.
nameHuman-readable template name.
organization_idWhether this template is the organization's own, a share from an organization above it, or a Kontier built-in.
Quote inputs this layout prints, derived from its blocks. Empty unless the template renders quotes.
statusLifecycle status. A printed template is active or archived; an email template is draft, published or archived.
The template document: ordered blocks plus theme, branding, and footer.
updated_atversionOptimistic-concurrency version, bumped on every update.
anchor_keyThe mail kind this email template renders for, e.g. "invoice.finalized". Empty on printed templates. Stable technical identifier, not a label — show anchor_name.
anchor_nameThe mail kind's human name in the request locale, e.g. "Invoice finalized". Resolved server-side from the code-owned registry; empty on printed templates.
deleted_atSoft-delete timestamp; null for live templates.
DraftAdopted
initialsThe initials the signer adopted so far.
nameThe name the signer adopted so far.
DraftHandle
created_atdraft_version_idupdated_atversionbase_version_idrelease_namerelease_noteupdated_byDraftInvoiceRequest
buyer_referenceBuyer's routing reference (Leitweg-ID / PO number) for B2G and e-invoicing (BT-10).
currencyISO 4217 currency. Required for a manual document; a subscription supplies its own.
customer_idThe customer to bill. Required for a manual document, and inferred from the subscription otherwise.
delivery_dateDate of supply (BT-72, Leistungsdatum §14 UStG). A manual document stating no period bills this day, so it is also the date its tax rate is read at.
due_datePayment due date. Omitted, it is resolved from the payment-terms ladder at finalize.
Manual inputs stated at draft time, for a caller that has them in hand. An operator adds them one at a time instead.
localeRendering locale; null inherits the org default.
The caller's own key/value pairs, e.g. an external system's ids. At most 50 keys, each at most 40 characters; a value is at most 500 bytes as JSON. The keys supplier_iban, supplier_bic, payment_terms, supplier_register_court, supplier_register_number, refund_iban and refund_method are refused: they are the organization's legal facts, set in its profile. A template binding invoice.metadata.
period_endEnd instant of that period, exclusive.
period_startStart instant of the period to bill. The window arrives already anchored; assembly computes no anchor. A manual document stating neither period_start nor period_end bills the supply day: delivery_date, else today.
replace_draftAdmit replacing an existing DRAFT for the same subscription period. Without it a taken period is refused, and an ISSUED document is refused either way.
subscription_idThe subscription to bill. Its deal atoms are assembled for the period.
DraftedPayload
currencycustomer_idThe customer billed on the document.
document_idThe document that now exists in draft.
drafted_atWhen the draft was created.
kindinvoice, credit_note or corrective.
organization_idThe pre-tax subtotal.
The total tax.
The grand total.
originHow the document came to exist. Absent when the writer declared none.
original_document_idThe document a credit note or a corrective restates; absent on an invoice.
subscription_idThe subscription that drove the draft, when subscription-billed.
workspace_idDunningCase
What the customer owed when the case opened.
What the customer has paid of it.
created_atcredit_document_idThe credit note whose wallet entry the chargeback could not take back in full.
customer_idThe customer who owes the money.
dispute_idThe lost dispute that opened the case.
idThe dunning case.
opened_atWhen the case opened.
reasonWhy the customer owes it. DUNNING_CHARGEBACK_SHORTFALL: a dispute you lost could not take back, from the customer's wallet, money a reversal or a refund had already returned there, because the wallet had spent it.
routeHow the case is paid. charge: another saved payment method of the customer — never the one charged back — is charged once, and no top-up touches the case meanwhile. top_up: the case is deducted from the customer's next top-ups, oldest case first — the customer has no other usable method, your organization's dunning.case_payment setting is top_up_only, or the charge failed.
statusopen: still owed. paid: the charge to another payment method of the customer paid it, or the customer's top-ups did — route says which. reversed: the payment provider reported the dispute won after it was lost, so nothing is owed: the wallet got back what the chargeback and the top-ups took, and a charge that paid the case is refunded.
The charge to another saved payment method of the customer. Absent while the case was never routed to a charge.
closed_atWhen the case was paid or reversed. Absent while it is open.
Why and when the case was reopened. Absent on a case never reopened.
charge_method_idThe payment method the case is charged to, when it was routed to a charge. Absent otherwise. Deprecated: use charge.method_id instead. Removed on 2026-11-30.
charge_payment_idThe one charge made for the case. Absent while none was made; a failed one stays named after the case moved to top-ups. Deprecated: use charge.payment_id instead. Removed on 2026-11-30.
charge_refund_idThe refund of that charge: the case was reversed after the charge paid it, or the customer's chargeback of the charge was won back after top-ups had paid the case. Absent otherwise. Deprecated: use charge.refund_id instead. Removed on 2026-11-30.
What is still owed: amount less amount_paid while the case is open, zero once it is paid or reversed. A reversed case keeps the amount_paid it had; that money went back to the customer. Deprecated: use amount minus amount_paid while status is open instead. Removed on 2026-11-30.
reopen_dispute_idThe lost dispute on the case's own charge that reopened it. Absent on a case never reopened. Deprecated: use reopening.dispute_id instead. Removed on 2026-11-30.
reopen_reasonWhy the case was reopened. Absent on a case never reopened. Deprecated: use reopening.reason instead. Removed on 2026-11-30.
reopened_atWhen the case was reopened: the customer charged back the charge that had paid it. Absent on a case never reopened. Deprecated: use reopening.at instead. Removed on 2026-11-30.
DunningCaseCharge
method_idThe payment method the case is charged to — never the one charged back.
payment_idThe one charge made for the case. Absent while none was made; a failed one stays named after the case moved to top-ups.
refund_idThe refund of that charge: the case was reversed after the charge paid it, or the customer's chargeback of the charge was won back after top-ups had paid the case. Absent otherwise.
DunningCaseReopening
atWhen the case was reopened: the customer charged back the charge that had paid it.
dispute_idThe lost dispute on the case's own charge that reopened it.
reasonWhy the case was reopened. charge_charged_back: the customer charged back the charge to another of their payment methods that had paid it, so the case is owed again — deducted from their next top-ups and never charged again.
DunningPolicy
created_atidThe dunning policy.
nameorganization_idThe organization that owns the policy. Under a share it is the organization above that shares it.
statusactive: the policy chases unpaid invoices. inactive: it is kept but chases nothing.
The steps, in ascending days_after_due.
updated_atdeleted_atWhat would apply if this organization's own dunning policy were removed: source 'shared' with the sharing organization named, or 'none' for the built-in ladder. Sent with include=provenance, on the organization's policy only, while provenance.source is 'own'.
plan_idThe plan this policy overrides the organization's policy for. Absent on the organization's policy.
Whether this policy is the organization's own or a share from an organization above it. Sent with include=provenance. GET /dunning-policy sends it without include=provenance until 2026-11-30; after that only with include=provenance.
is_activeTrue when status is active. Deprecated: use status instead. Removed on 2026-11-30.
DunningPolicyActiveChangeItem
kindThe change's kind, which names its shape.
afterWhether the policy runs after the write.
beforeWhether the policy ran before the write.
DunningPolicyNameChangeItem
kindThe change's kind, which names its shape.
afterThe policy's name after the write.
beforeThe policy's name before the write.
DunningPolicyStepChangeItem
kindThe change's kind, which names its shape.
positionThe step's place in the ladder, from 1.
The step at this place after the write; absent when the ladder has none there.
The step at this place before the write; absent when the ladder had none there.
DunningStep
actiondays_after_dueemail_eventRequired for action send_email: a free label of the operator's choosing (e.g. payment_reminder, payment_overdue). It selects no template — every send_email step sends the same dunning email — and is passed through as email_event on the dunning.step.email webhook payload, so a subscriber can tell the steps apart.
noticeRequests also accept the new spelling: each value in lower case (collection_handoff for COLLECTION_HANDOFF). The listed spelling is deprecated in requests and accepted until 2026-11-30.
DunningStepPayload
actionThe action the step performed.
customer_idThe customer billed on the invoice.
days_after_dueThe step's SCHEDULE threshold: how many days after the due date this step was configured to fire.
days_overdueHow many whole days past its due date the invoice ACTUALLY was when the step fired. Equal to days_after_due when the step ran on its scheduled day; greater when it ran later — an organization hold deferred it, the governing jurisdiction withheld it until a later day, or a policy edit made it due after its day had passed.
invoice_idThe overdue invoice the dunning step acted on.
organization_idstep_countHow many steps the dunning policy in force has in total.
step_indexThe 0-based index of this step in the dunning schedule.
timestampWhen the step fired.
email_eventThe email sub-event name, for email steps only.
next_actionThe action of the next step in the ladder that is a notice or a consequence (a retry of the saved payment method is skipped over); absent when none is left.
next_days_after_dueHow many days after the due date that next step is scheduled for; absent when none is left.
subscription_idThe subscription the invoice billed; absent for an invoice no subscription produced.
workspace_idThe workspace that owns the invoice.
EInvoiceDocument
byte_sizeSize of the stored artifact in bytes.
content_hashHex-encoded content hash of the artifact bytes.
content_typeMIME type of the stored artifact (e.g. application/xml, application/pdf).
created_atidThe e-invoice document's id.
invoice_idThe document this artifact was generated for. Every kind — invoice, credit note, corrective — is a row of the one document root, so this is the anchor for all of them; document_kind says which.
jurisdictionJurisdiction the artifact was rendered for (e.g. DE).
profileProfile the artifact was rendered as (e.g. XRECHNUNG_CII).
statusclean when the artifact passed validation; quarantined when validation findings held it back (quarantine_reason says why, GET /e-invoicing/documents/{id}/findings lists them).
syntaxSerialization syntax of the artifact (e.g. UBL, CII).
document_kindKind of the anchoring document, so a client can route a credit note's row to /credit-notes/{id}. Absent when the anchor no longer resolves (deleted or outside the caller's scope).
The anchoring document (invoice, credit note or corrective), sent with include=invoice. Absent when the document was deleted or is outside your scope.
profile_sourceWhich level of the resolution chain chose the profile: invoice_override (a human chose it for this document), customer (the buyer's standing preference), jurisdiction_rule (a country/region rule matched) or org_default. Absent on documents issued before this was recorded - absent means unknown, not org_default.
profile_source_detailWhich ROW chose the profile, in the operator's words: "customer
quarantine_reasonReason the artifact was quarantined; empty when it passed validation.
invoice_numberHuman number of the anchoring document (e.g. RE-2025-0413 or a credit note's number). Empty when it is still a draft, was deleted, or is outside the caller's scope - fall back to invoice_id. Deprecated: use invoice.number (include=invoice) instead. Removed on 2026-11-30.
EInvoiceDocumentCounts
Map of invoice id to the number of e-invoice documents that exist for it.
EInvoiceFinding
found_atWhen the finding was first recorded.
idThe finding's id.
messageHuman-readable description of the finding.
rule_idIdentifier of the validation rule that produced the finding (e.g. an EN 16931 business rule code).
rule_setThe rule set the rule belongs to (e.g. EN16931, XRECHNUNG, PEPPOL).
severityHow serious the finding is. An ERROR finding quarantines the document.
statusopen until an operator resolves the finding (PATCH /e-invoicing/findings/{id}), then resolved.
resolution_notesOperator-supplied notes captured when the finding was resolved.
resolved_atWhen an operator marked the finding resolved; null while still open.
xpathXPath into the e-invoice XML where the finding applies; empty when not element-specific.
EInvoiceProfile
containerXML for a bare XML document, PDF_A3 for a hybrid PDF with the XML embedded.
hybridTrue when producing this profile additionally requires a configured mustangserver.
idStable identifier, e.g. XRECHNUNG_3_0_UBL. Use this value wherever a profile is required.
nameHuman-readable label.
syntaxUBL, CII or PDF_A3_CII.
EInvoiceProfileID
EInvoiceProfileRule
countryISO 3166-1 alpha-2 country code of the buyer.
created_atidprofile_idE-invoice profile buyers matching this rule get.
updated_atregionSub-national region; empty means the rule covers the whole country. A region rule outranks its own country-wide rule.
EInvoiceRegion
codeISO 3166-2 code without the country prefix, e.g. BY. This is what a rule stores.
nameEnglish name.
local_nameOfficial local spelling where it differs from the English name.
EInvoiceRolloutDecision
decided_atWhen the gate decided. Moves if the source event is redelivered, because the row then describes the decision that governed the latest attempt.
generateWhat the gate decided, BEFORE rendering. true with no document in GET /e-invoicing/documents?invoice_id= beside it means rendering never completed — the rollout said yes and the pipeline did not finish, which is a diagnosis and not a contradiction.
reasonWHICH mechanism answered, from a closed vocabulary: customer.prefer_einvoice, rollout_audience.not_a_member, rollout_audience.unresolved, rollout_audience.unset, rollout_audience.no_customer, workspace.auto_generate_einvoice, workspace.auto_generate_einvoice_unset. It is the same string the worker logs as rollout_reason. Note that workspace.auto_generate_einvoice_unset (never configured) is deliberately distinct from workspace.auto_generate_einvoice written false.
reason_detailWHICH ROW decided, in the words an operator can act on: "audience
credit_note_idThe credit note this decision was made about.
customer_idThe buyer the decision was made about. Absent when the source event named no customer, which is itself one of the reasons.
invoice_idThe invoice this decision was made about. Exactly one of invoice_id / credit_note_id is present.
EInvoiceSubmission
attemptsHow many times the document was sent.
channelThe network or authority the document went through.
created_atWhen the submission was created.
document_idThe e-invoice document that was submitted (GET /e-invoicing/documents/{id}).
idThe submission's id.
profile_idThe e-invoice profile the submitted document has.
reissuableTrue when the buyer refused the document and no replacement was issued yet: POST /e-invoicing/documents with supersedes_submission_id answers it.
simulatedTrue when nothing was transmitted: the document belongs to a sandbox workspace whose channel is configured live, so the acceptance was simulated instead of asked of the authority or network.
stateWhere the submission is: DRAFT, READY_TO_SUBMIT, SUBMITTING, SUBMITTED, ACK_PENDING, ACCEPTED, REJECTED, REFUSED_BY_BUYER, DISPUTED, FAILED_TRANSIENT, FAILED_PERM or ARCHIVED.
updated_atWhen the submission last changed.
authority_document_idThe reference the authority or network minted for the document.
clearance_kindHow the far side clears the document, where the channel distinguishes it.
reasonWhy the submission is where it is: the authority's message for a refusal, the last error for a failure. Absent on the happy path.
reason_codeThe far side's own code for the reason, verbatim.
validation_reportThe far side's validation report, as text.
terminalTrue when the state is final: ACCEPTED, REJECTED, REFUSED_BY_BUYER, FAILED_PERM or ARCHIVED. Deprecated: use state instead. Removed on 2026-11-30.
EInvoiceSubmissionHistory
anchor_idThe invoice or credit note the submissions belong to.
Every submission, newest first.
EInvoiceSyntax
EInvoicingChannel
channelThe network or authority the channel delivers through.
countryThe seller's country, ISO 3166-1 alpha-2.
created_atWhen the channel was configured.
idThe channel's id.
statusactive: documents go out through this channel; disabled: they do not, and the settings are kept.
updated_atWhen the channel last changed.
credentials_refNames the stored credential the channel authenticates with (GET /organization/einvoicing/channel-credentials). Never the secret.
endpoint_urlThe provider's base URL. Absent means the adapter's default.
last_self_test_atWhen the channel was last tested against its endpoint.
last_self_test_statusWhat the last test found.
modetest or live. Absent means test: the other default would have a first save send real invoices to a real authority under credentials nobody has confirmed.
participant_idThe seller's own address on a network that is not Peppol.
participant_schemeThe seller's own address scheme on a network that is not Peppol. A PEPPOL channel sends from the organization's PEPPOL identifier.
regionNarrows the channel below the country. Absent means the whole country.
is_enabledWhether documents go out through this channel. Deprecated: use status instead. Removed on 2026-11-30.
EInvoicingChannelChange
kindWhat the change is about: a field of a delivery channel, or a stored credential's label or secret.
afterThe value after the act; absent when there is none.
beforeThe value before the act; absent when there was none.
For enabled: the switch before and after the act.
For test or live: before and after the act.
For a credential's secret: that it was set, replaced or cleared. Its value is never in the trail.
For the transport: before and after the act.
EInvoicingChannelCredential
idThe stored credential: what its audit trail is filed under.
refThe locator a channel's credentials_ref points at.
labelOperator-facing name — which contract this is. Never the secret.
EInvoicingChannelCredentialList
The credentials on file. The secrets themselves are never returned by any endpoint.
EInvoicingChannelFlagSides
afterThe switch after the act.
beforeThe switch before the act; absent for a channel the act created.
EInvoicingChannelKind
valueThe transport, as a channel's channel field names it.
EInvoicingChannelList
The organization's channels.
The transports a channel can deliver through. Deprecated: use GET /organization/einvoicing/channel-kinds instead. Removed on 2026-11-30.
peppol_idThe organization's Peppol ID (scheme:value) from its identifiers; every PEPPOL channel sends from it. Absent when none is held. Deprecated: use the PEPPOL identifier of GET /organization/identifiers instead. Removed on 2026-11-30.
EInvoicingChannelModeSides
afterThe mode after the act.
beforeThe mode before the act; absent for a channel the act created.
EInvoicingChannelTransportSides
afterThe transport after the act.
beforeThe transport before the act; absent for a channel the act created.
EInvoicingDocumentGeneratedPayload
byte_sizeThe document size in bytes.
content_hashHex-encoded sha256 over the document bytes.
document_idThe e-invoicing document that was generated.
generated_atWhen the document was generated.
jurisdictionThe jurisdiction the document was generated for.
organization_idprofileThe e-invoicing profile the document conforms to (e.g. XRECHNUNG, PEPPOL_BIS).
storage_bucketThe object-storage bucket the document was written to.
storage_keyThe object-storage key of the document.
syntaxThe document syntax (e.g. UBL, CII).
credit_note_idThe source credit note, when the document is a credit note.
invoice_idThe source invoice, when the document is an invoice.
reissue_reasonWhy the document was re-issued, in the operator's words.
supersedes_submission_idThe refused submission this document replaces, when the generate answered a buyer refusal.
workspace_idThe workspace that owns the document.
EInvoicingDocumentQuarantinedPayload
document_idThe e-invoicing document that was quarantined.
error_rule_idsThe validation rule ids the document failed.
organization_idprofileThe e-invoicing profile the document was validated against.
quarantine_reasonWhy the document was quarantined, in words: the first failing rule and how many more.
quarantined_atWhen the document was quarantined.
credit_note_idThe source credit note, when the document is a credit note.
invoice_idThe source invoice, when the document is an invoice.
workspace_idThe workspace that owns the document.
EInvoicingProfileRuleChange
kindWhat the change is about: the profile the rule's buyers get.
afterThe profile id after the act.
beforeThe profile id before the act; absent for a rule the act created.
EUVATRate
country_codeISO 3166-1 alpha-2 of the member state.
effective_fromFirst day the standard rate applies.
parking_rateThe parking rate as a fraction; 0 when there is none.
reduced_rateThe first reduced rate as a fraction; 0 when there is none.
reduced_rate_2The second reduced rate as a fraction; 0 when there is none.
standard_rateThe standard rate as a fraction, e.g. 0.19 for 19 %.
super_reducedThe super-reduced rate as a fraction; 0 when there is none.
effective_toLast day the standard rate applies; absent while it is in force without an end.
country_nameThe same value as country_code. Deprecated: use country_code instead. Removed on 2026-11-30.
EUVATRateList
One row per EU member state.
countThe number of rows in rates. Deprecated: use the length of rates instead. Removed on 2026-11-30.
EffectiveSetting
categoryThe catalog category the setting belongs to.
keyThe setting's key.
labelThe setting's name, in English.
sourceoverride when a level set the value; default when it is the platform default.
typeThe value type, which names the field the value travels in.
valueThe value of a string, int or bool setting, in its wire spelling. Empty for a list or money setting, whose value is value_list or value_money.
allows_nothingPresent and true for an allow-list (allowed identity providers, allowed email domains) whose organizations' lists share no entry: nothing is allowed, and value_list is absent. It is never the empty list, which allows everything. Absent on every other value.
The bound a bounded policy carries. Sent with include=provenance; sent without being asked until 2026-11-30.
The nearest level at or above the source that bounds what a level below may write. Sent with include=provenance; sent without being asked until 2026-11-30.
granted_by_parentTrue when this setting is a capability your parent organization grants you: it is read-only here, and only your parent can grant or revoke it. Sent with include=provenance; sent without being asked until 2026-11-30.
What the setting resolves to once this level stops deciding it (DELETE /organization/settings/{key}); present only for a value this organization set. Sent with include=provenance; sent without being asked until 2026-11-30.
The topmost level that locked the value; nothing below it may write it. Sent with include=provenance; sent without being asked until 2026-11-30.
policyThe policy the supplying level carries for the levels below; absent for the platform default. Sent with include=provenance; sent without being asked until 2026-11-30.
Present when the setting holds a secret (a webhook URL that is its own bearer token): whether a value is set, and nothing else. The value itself is never returned, and value is then empty.
The level that supplied the value; absent for the platform default. Sent with include=provenance; sent without being asked until 2026-11-30.
value_listA list setting's value, in order. An empty array is the empty list, which is a value. Absent for every other type.
A money setting's amount and currency. Absent for every other type, and for the money value with no amount.
EmbedAllowedOrigin
created_atoriginscheme://host[:port] whose pages may frame the /embed/* payment pages.
EmbedOrigins
originsOrigins (scheme://host[:port]) whose pages may frame the /embed/* payment pages. Empty: embedded nowhere.
EmbedSession
expires_atkindtokenThe session, for Kontier.mount(target, {kind, session: token}). A bearer for the portal API narrowed to the task; keep it in memory, never in a cookie or a log.
EndPromotionRequest
reasonWhy it ended. Defaults to manual, which is what an operator ending it now means; the other two are the system reaching a boundary the operator set.
EndRegistrationRequest
countryThe state the registration is held in.
schemeThe scheme of the registration to end.
valid_toYYYY-MM-DD, the last day the registration was in force. Defaults to today.
EntityName
idThe entity's uuid
kindThe entity kind
display_nameThe row's human name
referenceThe short human id, e.g. SUB-000123
refThe reference as supplied, 'kind:uuid'. Deprecated: use kind and id instead. Removed on 2026-11-30.
EntryDiff
keyThe entry's key.
afterIts value after; absent when the entry was removed.
beforeIts value before; absent when the entry was added.
EntryState
price_basisWhether the unit price is net of tax (exclusive) or already holds it (inclusive).
quantity^-?\d+(\.\d+)?$ · requiredHow many units are charged.
period_endThe end of the span the charge is for, when stated.
period_startThe start of the span the charge is for, when stated.
price_keyThe key of the product's price the charge is billed under, when it names one.
product_idThe catalog product the charge is for, when it names one.
tax_category_codeThe tax category the charge is taxed under, when stated.
tax_rate^-?\d+(\.\d+)?$The tax rate the charge states, as a fraction (0.13 = 13%), when it states one. Absent when the rate is determined.
titleThe charge's heading.
unit_labelWhat one unit is called, when stated.
unit_price^-?\d+(\.\d+)?$The price of one unit, in the document's currency, as the operator stated it. Absent when the charge names a product and left its price to the catalog: the product's published price at the charge's start, which the document's lines state.
EvaluateMeterRequest
subscription_idSubscription to evaluate against. Required: usage_events are keyed by (product, subscription), so "what does this meter compute" is not a well-formed question without one.
fromInclusive start. Defaults to the subscription's current period start; required when the subscription has no current period (a trial before its first paid phase, a deal with no paid phase).
include_headAlso evaluate the LIVE meter row alongside the billed snapshot, so an unpublished edit is visible as a difference. Defaults to true; set false to skip the second aggregation.
product_idWhich of the subscription's metered products to scope to. Optional when exactly one of them bills through this meter; required when more than one does.
toExclusive end. Defaults to the subscription's current period end; required when the subscription has no current period.
EventFiredPayload
cut_atWhere the switch strategy placed the cut.
fired_atThe crossing instant.
metricThe metric that crossed its threshold.
organization_idpositionThe phase's position in the revision, 0-based.
revisionThe live revision the phase belongs to.
stopsTrue when the phase's then is stop, which cancels the subscription.
subscription_idThe subscription whose phase's event fired.
workspace_idThe workspace that owns the subscription.
FXOverride
created_atidorganization_idWhen the override takes precedence over the policy-selected ECB rate: from start, until end; no end means open-ended.
source_currencyISO 4217 currency being converted from.
target_currencyISO 4217 currency being converted to.
updated_atworkspace_idWorkspace this override applies within.
deleted_atWhen the override was soft-deleted; null unless deleted.
rate^-?\d+(\.\d+)?$Manual conversion rate (1 source = rate target); set only in manual-rate mode.
reasonOptional free-text note explaining why the override exists.
snapshot_dateCalendar day whose ECB snapshot the pair resolves against; set only in snapshot-pin mode, absent in manual-rate mode.
valid_fromInstant the override begins taking precedence over the policy-selected ECB rate. Deprecated: use period.start instead. Removed on 2026-11-30.
valid_toInstant the override stops applying; null means open-ended. Deprecated: use period.end instead. Removed on 2026-11-30.
FXSnapshot
created_atidrate^-?\d+(\.\d+)?$ · requiredPublished conversion rate: 1 source = rate target.
snapshot_dateCalendar day this rate snapshot represents (plain date, no clock or zone).
sourceRate provider that published this snapshot (e.g. API_ECB).
source_currencyISO 4217 currency being converted from.
target_currencyISO 4217 currency being converted to.
FXSyncStatus
distinct_dates_last_yearNumber of distinct days with a stored snapshot over the last calendar year.
latest_snapshot_dateMost recent day with a stored snapshot; absent before the first sync.
Fact
inheritedWhat applies when this place sets nothing.
inherited_sourcesourcevaluefieldThe field of the source layer that holds the value, e.g. support_email or legal_name.
inherited_fieldFieldCondition
opThe comparison. An audience condition takes only present or absent.
audience_idThe saved audience whose membership decides the block (a recipient condition). Absent on a document condition.
field_pathThe field the condition inspects (a document condition). Absent on an audience condition.
valueThe comparand for eq and neq; ignored otherwise.
FieldDiffAmount
after^-?\d+(\.\d+)?$The value in the version compared TO; absent when that version states none.
before^-?\d+(\.\d+)?$The value in the version compared FROM; absent when that version states none.
FieldDiffBasis
afterThe value in the version compared TO; absent when that version states none.
beforeThe value in the version compared FROM; absent when that version states none.
FieldDiffBillingAlignment
The value in the version compared TO; absent when that version states none.
The value in the version compared FROM; absent when that version states none.
FieldDiffBillingIntervalUnit
afterThe value in the version compared TO; absent when that version states none.
beforeThe value in the version compared FROM; absent when that version states none.
FieldDiffBindingRole
afterThe value in the version compared TO; absent when that version states none.
beforeThe value in the version compared FROM; absent when that version states none.
FieldDiffBool
afterThe value in the version compared TO; absent when that version states none.
beforeThe value in the version compared FROM; absent when that version states none.
FieldDiffCadence
afterThe value in the version compared TO; absent when that version states none.
beforeThe value in the version compared FROM; absent when that version states none.
FieldDiffCostScope
afterThe value in the version compared TO; absent when that version states none.
beforeThe value in the version compared FROM; absent when that version states none.
FieldDiffCurrency
afterThe value in the version compared TO; absent when that version states none.
beforeThe value in the version compared FROM; absent when that version states none.
FieldDiffDecimal
after^-?\d+(\.\d+)?$The value in the version compared TO; absent when that version states none.
before^-?\d+(\.\d+)?$The value in the version compared FROM; absent when that version states none.
FieldDiffEarlyStop
afterThe value in the version compared TO; absent when that version states none.
beforeThe value in the version compared FROM; absent when that version states none.
FieldDiffInt
afterThe value in the version compared TO; absent when that version states none.
beforeThe value in the version compared FROM; absent when that version states none.
FieldDiffListDimension
The value in the version compared TO; absent when that version states none.
The value in the version compared FROM; absent when that version states none.
FieldDiffListTier
The value in the version compared TO; absent when that version states none.
The value in the version compared FROM; absent when that version states none.
FieldDiffMeterFunction
afterThe value in the version compared TO; absent when that version states none.
beforeThe value in the version compared FROM; absent when that version states none.
FieldDiffPinPolicy
afterThe value in the version compared TO; absent when that version states none.
beforeThe value in the version compared FROM; absent when that version states none.
FieldDiffProductTrackMode
afterThe value in the version compared TO; absent when that version states none.
beforeThe value in the version compared FROM; absent when that version states none.
FieldDiffQuantityBand
The value in the version compared TO; absent when that version states none.
The value in the version compared FROM; absent when that version states none.
FieldDiffRef
The value in the version compared TO; absent when that version states none.
The value in the version compared FROM; absent when that version states none.
FieldDiffRefreshCadence
The value in the version compared TO; absent when that version states none.
The value in the version compared FROM; absent when that version states none.
FieldDiffString
afterThe value in the version compared TO; absent when that version states none.
beforeThe value in the version compared FROM; absent when that version states none.
FieldDiffTime
afterThe value in the version compared TO; absent when that version states none.
beforeThe value in the version compared FROM; absent when that version states none.
FieldDiffTiming
afterThe value in the version compared TO; absent when that version states none.
beforeThe value in the version compared FROM; absent when that version states none.
FieldDiffVersionChangeStrategy
afterThe value in the version compared TO; absent when that version states none.
beforeThe value in the version compared FROM; absent when that version states none.
File
categoryWhat the document is. Decides the size cap and the accepted formats.
created_atWhen the file was added.
declared_content_typeThe format the uploader said this was, before any byte was checked. Never render this as the file's type — use content_type.
filenameThe name the uploader gave the file. Display only.
idFile UUID.
owner_idThe owning record's UUID.
owner_kindWhat this document hangs off.
sourceWho put the document here.
statuspending_upload while the bytes are still expected, ready once the server has checked them, quarantined when they did not match, deleted after removal.
visibilityinternal = operator surfaces only. shared = also visible to the customer on the portal and, for a quote, on the offer page.
byte_sizeThe size the server measured. Absent until the upload has been confirmed.
content_sha256SHA-256 of the stored file, computed by the server. Absent until the upload has been confirmed.
content_typeThe format the server determined from the file's own bytes. Absent until the upload has been confirmed.
has_signing_fieldsSigning fields are placed on the document, so it cannot be made internal (409 FILE_HAS_SIGNING_FIELDS). Sent with include=has_signing_fields. The owner listings send it without being asked until 2026-11-30; after that date only with include=has_signing_fields.
For a customer's document that a completed signature linked there: the quote it was signed on. Sent with include=origin. The owner listings send it without being asked until 2026-11-30; after that date only with include=origin.
retention_untilWhen set, the file is removed automatically after this date.
uploaded_byThe user who uploaded it, when a user did.
FileCategory
FileOrigin
idThe quote's UUID.
numberThe quote's number.
typeWhat the document came from.
kindWhat the document came from. Deprecated: use type instead. Removed on 2026-11-30.
FileOwnerKind
FileURL
expires_atAfter this moment the link stops working.
urlA temporary link to the file's bytes.
FileWithUploadURL
categoryWhat the document is. Decides the size cap and the accepted formats.
created_atWhen the file was added.
declared_content_typeThe format the uploader said this was, before any byte was checked. Never render this as the file's type — use content_type.
expires_atAfter this moment the upload URL stops working and the upload must be started again.
filenameThe name the uploader gave the file. Display only.
idFile UUID.
owner_idThe owning record's UUID.
owner_kindWhat this document hangs off.
sourceWho put the document here.
statuspending_upload while the bytes are still expected, ready once the server has checked them, quarantined when they did not match, deleted after removal.
upload_urlPUT the file's bytes here, then call the confirm endpoint. Use it once: after the file is confirmed, uploading through this link again does not replace the document — it makes the file unreadable and it must be uploaded again.
visibilityinternal = operator surfaces only. shared = also visible to the customer on the portal and, for a quote, on the offer page.
byte_sizeThe size the server measured. Absent until the upload has been confirmed.
content_sha256SHA-256 of the stored file, computed by the server. Absent until the upload has been confirmed.
content_typeThe format the server determined from the file's own bytes. Absent until the upload has been confirmed.
has_signing_fieldsSigning fields are placed on the document, so it cannot be made internal (409 FILE_HAS_SIGNING_FIELDS). Sent with include=has_signing_fields. The owner listings send it without being asked until 2026-11-30; after that date only with include=has_signing_fields.
For a customer's document that a completed signature linked there: the quote it was signed on. Sent with include=origin. The owner listings send it without being asked until 2026-11-30; after that date only with include=origin.
retention_untilWhen set, the file is removed automatically after this date.
uploaded_byThe user who uploaded it, when a user did.
The same file as the top-level fields. Deprecated: use the file's fields at the top level of the answer instead. Removed on 2026-11-30.
FilterNode
opRequests also accept the new spelling: each value in lower case (and for AND). The listed spelling is deprecated in requests and accepted until 2026-11-30.
fieldvalueFilterOperator
Requests also accept the new spelling: each value in lower case (and for AND). The listed spelling is deprecated in requests and accepted until 2026-11-30.
FinalizedPayload
What is still owed after issue.
customer_iddocument_idThe document that was finalized.
finalized_atkindnumberThe number assigned at finalize.
organization_iddue_dateThe payment due date, when set.
original_document_idThe document a credit note or a corrective restates; absent on an invoice.
subscription_idThe subscription the document bills, when subscription-billed.
workspace_idFinding
messagerule_idseverityxpathFiringRecordedPayload
Signed amount as a money object; negative is money off.
customer_idThe customer whose money moved.
firing_idThe ledger row.
lanezeroing, price_cut, threshold or rebate.
occurred_atThe BILLING clock of the row, not when it was written.
organization_idpromotion_idThe promotion.
redemption_idThe hold that produced it.
reversalWhether this row reverses an earlier one (a clawback).
statuspending, settled or voided.
target_idThe line, invoice or hold it points at.
target_kindbill_line, finalised_invoice or hold — which decides how it is rendered.
price_keyThe price key of the line it touched.
productThe product of the line it touched.
subscription_idThe subscription whose bill the row touched; absent when it touched none.
workspace_idFiringTarget
kindbill_line: an open bill's line. finalised_invoice: a line of an issued invoice, for a reward paid back later; this value is spelled finalized_invoice from 2026-11-30. hold: a reservation.
hold_idinvoice_idline_idThe bill or invoice line. For an open bill it is the deterministic line identity, which carries no foreign key because the line is not persisted yet.
Footer
show_page_numbersWhen true, renders page numbers in the footer. Omitted on a request means false.
textFooter text rendered at the bottom of the document.
FormulaDebugStep
expressionThe sub-expression that was evaluated, e.g. min(5, 3).
node_typeThe kind of node: variable, number_literal, binary_op, function_call and others.
positionThe byte offset of the sub-expression in the expression.
resultThe value it evaluated to, as text: a decimal string or true/false.
FormulaInput
familyTrue when the input is a family read under a key of its own, such as cost.
kindThe value type the input binds: number, money (in the price's own currency), or text.
layersThe price layers whose formulas may read the input: product (a product's own price), plan (a plan override), deal (an agreed subscription price).
nameThe name a formula reads the input by; for a family (cost) the prefix, read as cost.
FormulaVariable
nameThe variable name referenced in the formula expression.
typeThe variable's value type: number, string, or boolean.
default^-?\d+(\.\d+)?$Default value applied when the caller supplies no binding: a currency-neutral number (a factor or a quantity), never a money amount.
FreePeriodsShape
kindThe shape discriminator.
periodsHow many periods are free. A period is spent only when money actually moved (06 O9): a line that was already zero records a non-firing and costs no period.
FreeUnitsShape
kindThe shape discriminator.
productProduct the line must carry.
units^-?\d+(\.\d+)?$ · requiredHow many units are free.
units_windowWhether the allowance refills each period or is spent once.
price_keyPrice key the line must carry. Empty means any key of this product.
Governing
jurisdictionISO 3166-1 alpha-2 country whose invoicing law governs this document (VAT Directive art. 219a, or its non-EU analogue).
legal_basis_keyStable key of the provision the exemption or reverse charge rests on (e.g. VATD_ART_196). Absent for a plain domestic taxable supply.
provenanceOrdered identifiers of the resolver branches that fired, for audit.
resolved_atWhen the resolution ran. Absent on a document whose values were backfilled from its stored tax facts rather than resolved.
seller_establishment_countryISO 3166-1 alpha-2 country of the seller's business seat. Document retention follows this, not the governing jurisdiction.
tax_systemTax system the governing country runs: EU_VAT, CH_MWST, UK_VAT, NO_MVA, JP_CT, or UNKNOWN.
tax_treatmentWhat the supply is: DOMESTIC, REVERSE_CHARGE_AT_RECIPIENT, INTRA_EU_SUPPLY_EXEMPT, EXPORT_EXEMPT, OUTSIDE_SCOPE, OSS_DESTINATION, or NOT_TAXABLE_SMALL_BUSINESS.
Grant
consumed_quantity^-?\d+(\.\d+)?$ · requiredDecimal number encoded as a string to preserve precision.
created_atentitlement_ididorganization_idquantity^-?\d+(\.\d+)?$ · requiredDecimal number encoded as a string to preserve precision.
sourceworkspace_idcharge_iddedup_keyeffective_fromexpires_atgranted_bynatureoriginorigin_ref_idprice_keyreasonrevoked_atrevoked_reasonGrantOrganizationDelegationRequest
grantee_roleThe role somebody must hold in that organization to receive the access.
target_org_idThe organization to give access to. It must be below yours.
target_roleThe role the people you name will hold there. It must be a role that organization has: admin, member, no_access, or one it defined itself.
expires_atWhen the access should end on its own. Omit to keep it until you withdraw it.
grantee_org_idWhose people receive the access. Defaults to your own organization. If you name another, it must be yours or one between yours and the target.
reasonWhy you are giving it. The organization you are giving access to can see this.
GrantUsageRequest
product_idProduct to grant usage against.
quantity^-?\d+(\.\d+)?$ · requiredUsage quantity to grant (metered units, NOT money).
descriptionOptional note recorded on the grant.
GrantUsageResponse
The entitlement grant created. PURCHASED for a durable credit pool, GRANTED for a per-period allowance.
HeaderChange
fieldThe field: a text, a translation, the unit, how the quantity is sourced or adjusted, the pricing model, the price cadence, the tax category or supply nature, a switch, a required product, the external id or a metadata entry.
kindWhat happened to the field: set where the entity stated none, changed, or cleared.
What the entity states after the act; absent when it states nothing.
What the entity stated before the act; absent when it stated nothing.
keyFor a field that holds entries: a translation's
HeaderChangeKind
HeaderField
HealthChangedPayload
connection_idThe connection whose health changed.
kindWhat kind of connection this is (payment_gateway, mail_provider, signing_provider).
new_stateThe health after the check (ok, failed).
occurred_atWhen the check ran.
organization_idprevious_stateThe health before the check (ok, failed, unknown).
providerThe vendor behind the connection.
detailWhat the check reported.
display_nameThe operator's own name for this connection.
workspace_idThe workspace that owns the connection.
HoldEventPayload
atWhen this happened.
cascadesWhether it reaches the whole subtree below the organization.
effectsWhat this hold stops where it applies: sign_in, sell, bill, collect, mail, provision.
hold_idThe hold row this happened to.
kindarrears, compliance or freeze.
organization_idThe organization the hold restricts.
placed_by_organization_idThe organization that placed it — an ancestor, or the root.
starts_atWhen the restriction begins.
ends_atWhen it stops on its own; absent means it stops only when released.
reasonThe operator's free-text reason.
released_atWhen it was released. Only on organization.hold_released.
Identifier
checksum_availableTrue when the kind has a check digit the server runs. False means nothing could check the number, not that it passed.
countryThe country that issued the number, ISO 3166-1 alpha-2.
idThe identifier's id.
kindThe registry kind (GET /identifier-kinds lists them).
labelThe kind's name in the holder's country and your locale, ready to show.
normalized_valueThe number without punctuation, as it is compared.
valid_fromThe first day the number is valid.
valueThe number as it was entered and as it prints.
verified_statusUNVERIFIED, VERIFIED, REFUSED or UNAVAILABLE: what the issuing authority last said about the number.
slotThe single-valued fact the kind fills; absent for every other kind.
valid_toThe last day the number was valid; absent while it is live.
verification_refThe consultation number the authority issued, when it issued one.
verified_atWhen the authority was last asked.
verified_by_sourceWhich authority service answered.
verifierThe authority service that can confirm the number; absent when none exists.
IdentifierCheck
checksum_okchecksum_rankindlabelnormalized_valueokpattern_okcountrynotereasonIdentifierInput
kindRegistry kind of the identifier (GET /v1/customers/{customerId}/identifiers lists the kinds the customer may hold).
valueThe number as its holder writes it; checked against the kind's pattern and, where one exists, its check digit.
countryISO 3166-1 alpha-2 country whose register issued the number; may be omitted for a kind bound to one country.
IdentifierKindOption
idThe kind, as an identifier's kind names it.
labelThe kind's name as a picker lists it, unique among the kinds offered beside it.
required_onThe documents the law requires the number on: INVOICE, CREDIT_NOTE, QUOTE, MAIL_FOOTER, PORTAL_IMPRINT.
countryThe country whose register issues the kind; absent for a kind bound to no country.
hintThe statutory source, and for a buyer the condition under which the number is required.
pattern_noteWhat a valid number looks like.
slotThe single-valued fact the kind fills; absent for every other kind.
verifierThe authority service that can confirm a number of this kind.
IdentifierList
The party's identifiers.
The kinds this party may hold. Deprecated: use GET /identifier-kinds?holder=…&country=… instead. Removed on 2026-11-30.
IdentityProvider
aliasenabledidKeycloak's own id of the identity provider: what its audit rows are filed under.
provider_iddisplay_namehide_on_loginIdentityProviderChange
kindWhat the change is about: the display name, a switch, a configuration value, a secret or a certificate.
afterThe value after the act; absent when there is none.
beforeThe value before the act; absent when there was none.
For enabled and hidden-on-login: the switch before and after the act.
keyFor a configuration value, secret or certificate: its configuration key, as Keycloak spells it (issuer, clientId, clientSecret, signingCertificate, …).
For a secret or a certificate: that it was set, replaced or cleared. Its value is never in the trail.
IdentityProviderFlagSides
afterThe switch after the act.
beforeThe switch before the act; absent for a provider the act attached.
ImprintLineKind
IncomingDelegation
grantee_org_idThe organization whose members hold it.
grantee_roleThe role they must hold there.
grantor_org_idThe organization the access comes from. Always above this one.
kindstructural means somebody's admin role in an organization above this one reaches in by itself; delegated means somebody wrote a grant.
revocableWhether this organization can withdraw it. A structural right cannot be withdrawn from here; a stored grant can.
target_roleThe role they hold here while they are in.
created_atWhen it was given. Absent for a structural right.
expires_atWhen it ends on its own.
grantor_org_nameThe name of the organization the access comes from. Sent with include=display; sent without being asked until 2026-11-30, after that only with include=display.
idThe stored grant. Absent for a structural right, which has no row.
reasonWhy it was given, in the grantor's own words.
IngestUsageEventBatchRequest
Usage events to ingest in one call; 1-1000 per batch, one external_cost_currency per (subscription, metric) group.
IngestUsageEventRequest
customer_idCustomer that consumed the metric.
metric_keyMetric this event records usage for; must match the product's meter binding.
product_idMetered product the event is billed under.
quantity^-?\d+(\.\d+)?$ · requiredNumber of metric units to record. A negative quantity is a correction: it takes back usage recorded at the same timestamp with the same fields, never more than is recorded there, only in the subscription's current billing period, only on SUM meters over quantity, and never with hold_id or external_cost_amount.
subscription_idSubscription the usage is charged against.
Named dimension values used to select the price tier.
event_keyThe event's own key: a replay with the same key records nothing again. Required, here or as idempotency_key.
Caller-supplied wholesale cost (COGS) fed to cost-plus formulas, {value, currency}; one currency per (subscription, metric) group.
hold_idReserve hold this event captures against; null for direct (non-reserve) ingest. Single-event body only: a batch refuses any event that names a hold. A retry with the same event_key and hold_id answers with the outcome_id its first attempt queued.
Arbitrary caller-supplied key/value annotations carried on the event.
price_keyPrice key selecting a tier for keyed products; required when the product exposes keyed prices.
Named numeric variables bound into the price formula at finalize time.
timestampWhen the usage occurred; omitted or zero stamps the server's ingest time. Set explicitly for backfill, inside the subscription's current billing period: an earlier one is refused (422 USAGE_PERIOD_CLOSED), or moved to the period's start where the meter's late_event_policy is CLAMP_TO_PERIOD.
wallet_currencyISO 4217 currency pinning the event to a specific wallet; the wallet must exist for (customer_id, wallet_currency). Null uses the customer's preferred-currency cascade.
external_cost_amount^-?\d+(\.\d+)?$Caller-supplied wholesale cost (COGS) fed to cost-plus formulas, major units; requires external_cost_currency. Sent with external_cost, both must state the same cost. Deprecated: use external_cost instead. Removed on 2026-11-30.
external_cost_currencyISO 4217 currency of external_cost_amount; one currency per (subscription, metric) group. Deprecated: use external_cost instead. Removed on 2026-11-30.
idempotency_keyThe event's own key, under its old name. Sent with event_key, both must be the same. Deprecated: use event_key instead. Removed on 2026-11-30.
InheritedValue
valueThe value of a string, int or bool setting, in its wire spelling. Empty for a list or money setting, whose value is value_list or value_money.
allows_nothingPresent and true for an allow-list (allowed identity providers, allowed email domains) whose organizations' lists share no entry: nothing is allowed, and value_list is absent. It is never the empty list, which allows everything. Absent on every other value.
Present when the setting holds a secret (a webhook URL that is its own bearer token): whether a value is set, and nothing else. The value itself is never returned, and value is then empty.
value_listA list setting's value, in order. An empty array is the empty list, which is a value. Absent for every other type.
A money setting's amount and currency. Absent for every other type, and for the money value with no amount.
IntegrationAction
keydestructiveread_onlyreturns_filewhile_pausedIntegrationCategory
IntegrationConnectRequest
Field values keyed by the descriptor's field keys. A secret field left empty on update keeps the stored value.
enabledWhether the connection is active. Defaults to true on connect.
verifyProbe the vendor before answering. A failed probe still saves the connection, marked failing.
IntegrationField
keyrequiredtypeadvanceddefaultgrouphiddenmultilineplaceholderIntegrationImpact
has_inboundWhether the vendor's callback URL stops working.
keeps_historyActivity history is kept.
linksExternal objects recorded; kept read-only after disconnect.
scheduled_syncWhether a scheduled sync stops.
sinks_eventsHow many event types stop being delivered.
IntegrationLink
connectorentity_identity_kindexternal_ididsynced_atexternal_urlsync_hashIntegrationRun
connectoridkindstarted_atstatustriggeractionentity_identity_kinderror_codeerror_detailexternal_reffinished_atsummaryIntegrationView
availabilitycapabilitiescategoryhealthkindmarknameVendor's own product name, unlocalised.
slugstatuschecked_atconnected_atconnected_byconnection_iddocs_urlhealth_detailinbound_pathPath the vendor posts callbacks to, for connectors that receive them.
keywordsmanaged_bymanaged_countHow many active things a managed row stands for (webhook endpoints, API keys).
managed_detailmin_planphaseA native integration's stage beyond its status: not offered on this deployment, or connected while the vendor still verifies the account.
roadmapMasked hints of stored secrets, keyed by field; values are never returned.
sink_eventssync_every_minutesunmet_prerequisitesvendor_urlIntegrationsCatalog
categoriesInvitation
created_atemailidinvited_byorganization_idrole_idsThe roles the invitation grants on acceptance, by Role.id: the name of a built-in role (admin, member, no_access) or the uuid of a custom role. From 2026-11-30 every entry is the role's uuid (Role.subject_id), built-in roles too.
role_namesThe names of the roles the invitation grants on acceptance. Deprecated: use role_ids instead. Removed on 2026-11-30.
InviteChildAdminRequest
emailWho is invited as an admin of the organization.
Invoice
Credit applied. On an invoice, what has been credited TO it; on a credit note, what has been applied AWAY from it.
total - amount_paid - amount_credited. On a credit note this is the credit still unapplied, which is zero once it is issued: the original absorbs what it still owed and the rest is money given back (amount_paid).
Money settled against this document. Negative on a credit note, where it is money given back.
created_atcurrencyISO 4217 currency. One currency per document: an atom priced in another is a refusal, never a conversion.
customer_idThe customer this document bills.
idkindWhat this document is: an invoice (EN 16931 type 380), a credit note (381) or a corrective (384). The kind decides what atoms it may hold, never the sign of its money — the atoms carry that.
organization_idstatusPlace in the document machine (03 §5). draft and discarded are the only statuses without a number.
Sum of the atoms' net amounts. Negative on a credit note, because its atoms are.
tag_idsThe ids of the tags on the record, in name order. Add include=tags to get the tags themselves.
Sum of the atoms' tax amounts.
subtotal + tax_total.
updated_atworkspace_idWhat the lines' allowances (lots and promotions) took off this document, net: the sum of lines[].allowances[].amount. Already deducted from subtotal; never subtract it again. Present whenever lines are.
buyer_legal_nameThe buyer's name as it stood at finalize.
buyer_referenceBuyer's routing reference (Leitweg-ID / PO number) for B2G and e-invoicing.
buyer_vat_idThe buyer's VAT identification number as it stood at finalize.
correction_reasonWhy this credit note or corrective restates its original, as the correction stated it. Absent on an invoice: an invoice corrects nothing.
credit_destinationOn a credit note or corrective: where the money beyond what the original still owed went. wallet = returned to the customer's wallet in the document's currency (an operator's correction or reversal, or a refund to the wallet); payment_method = back over the rail that took it (a gateway refund, or a chargeback). Absent on an invoice, on a marketplace credit, and on a credit note issued before the wallet took over credit-note remainders.
customer_profile_at_issueWhat the buyer WAS at finalize, so a later profile change cannot re-classify a closed document.
deleted_atSoft-delete timestamp; null for live documents.
delivery_dateDate of supply (BT-72, Leistungsdatum §14 UStG). Stated by the seller; nothing else can reconstruct it.
due_dateDate payment is due.
The operator's stored manual inputs, with include=inputs. Until 2026-11-30 a draft's item read and edits send them without being asked; after that only with include=inputs.
fx_provisionalTrue while a draft's total rests on a provisional exchange rate: the invoice_issue policy pins at finalize, so this figure is the rate of the last assembly and finalize will replace it.
Governing invoicing law, resolved once at finalize and frozen. Read-only; absent on drafts and where resolution was refused.
issued_atWhen the document was finalized; null while it is a draft.
issuer_customer_idThe seller, when it is not the organization itself; null means the organization issues in its own name.
last_dunning_step_atWhen the last dunning step ran.
last_dunning_step_indexZero-based index of the most recent dunning step executed; null if never dunned.
legal_basis_codeThe provision the tax treatment rests on.
The presented lines, with include=lines; include=lines.atoms adds each line's atoms under it. Until 2026-11-30 the item read and the writes send the lines without being asked (see the include parameter of each operation); after that only with include=lines.
localeLocale the document is rendered in (en, de, ...); null inherits the org default.
The caller's own key/value pairs. Written at create or by PATCH while the document is a draft, and frozen at issue, because the document can PRINT them (see the request field).
numberThe legal document number, minted at finalize from the series that governs the kind; null while the document is a draft.
originHow this document came to exist. Empty means the writer declared none.
The row that caused this document. A kind AND an id, or neither.
original_document_idThe document this credit note or corrective restates.
overdue_atWhen the dunning sweep found the document past its due date.
The operator's stored field replacements, with include=inputs. Until 2026-11-30 a draft's item read and edits send them without being asked; after that only with include=inputs.
paid_atWhen the balance reached zero.
period_endLast day of the service period this document bills.
period_startFirst day of the service period this document bills; null on a manual document that bills no span.
resolution_anchor_atThe instant this document's prices were resolved at. A replay answers every windowed lookup as it answered then.
reversed_atWhen every atom of this document came back through a correction.
subscription_idThe subscription the deal atoms were assembled from; null on a manual document.
supplier_legal_nameThe issuer's legal name as it stood at finalize.
supplier_tax_numberThe issuer's domestic tax number as it stood at finalize.
supplier_vat_idThe issuer's VAT identification number as it stood at finalize.
supply_typeTax supply classification: DOMESTIC, INTRA_EU_B2B and so on.
The tags on the record, in name order. Sent without include=tags until 2026-11-30; after that only with include=tags.
tax_category_codeEN 16931 tax category code (BT-151): S, Z, E, AE, K, G or O.
tax_exemption_reasonThe authority's own wording for the exemption or reverse charge, derived from legal_basis_code where the jurisdiction has one.
written_off_atWhen the document was declared uncollectible.
The atoms again, as one flat list: the same atoms include=lines.atoms puts under their lines. GET /invoices/{id}/atoms is the flat list. Deprecated: use lines[].atoms (include=lines.atoms) instead. Removed on 2026-11-30.
presentation_frozenTrue once the lines are the legal text, which is every status but draft: a draft re-derives its lines on every change; a finalized document never does. Deprecated: use status instead. Removed on 2026-11-30.
InvoiceAging
as_ofThe instant the report describes. Bands are aged against THIS date, not against today.
Always all five bands, in aging order, zero-filled. A missing band is indistinguishable from an empty one, so they are all present.
currencytotalTotal open receivable across all bands.
InvoiceAgingBand
amountOpen amount in this band, in the response currency.
bandAging band: current, 1-30, 31-60, 61-90, 90+ (days past due).
invoice_countHow many invoices are in this band.
shareamount / total, 0..1. Compute it from those two fields. Deprecated: no replacement. Removed on 2026-11-30.
InvoiceAtom
billed_quantity^-?\d+(\.\d+)?$ · requiredquantity minus what the allowance and the credit grants covered.
consumed_credit^-?\d+(\.\d+)?$ · requiredUnits this atom drew from credit grants; the sum of credit_draws.
consumed_included^-?\d+(\.\d+)?$ · requiredUnits this atom drew from the line's included allowance.
currencyISO 4217 currency this atom's decimals are denominated in.
idline_idThe line this atom is projected into. Every atom belongs to exactly one.
period_endEnd instant of that segment, exclusive. The atoms of one line tile its period with no gap and no overlap.
period_startStart instant of the segment this atom prices.
quantity^-?\d+(\.\d+)?$ · requiredQuantity for this segment. Negative on a reversing atom.
reversed_quantity^-?\d+(\.\d+)?$ · requiredHow much of this atom's quantity the document's crediting documents have already taken back, as a positive magnitude. Zero when none; a further reversal may take at most quantity minus this.
sourceWhat produced this atom.
subtotal^-?\d+(\.\d+)?$ · requiredMAJOR units.
tax_amount^-?\d+(\.\d+)?$ · requiredMAJOR units.
tax_rate^-?\d+(\.\d+)?$ · requiredRate as a fraction.
unit_price^-?\d+(\.\d+)?$ · requiredMAJOR units. Positive even on a reversing atom: the sign lives on the quantity.
Per-grant draw, because finalize settles each grant by id.
entry_idThe draft's stored entry this atom was assembled from - the input an edit of its line addresses. Absent on every atom no entry stated.
exchange_rate_base_leg_idFor a triangulated cross-pair rate, the snapshot the rate was divided by — so a consumer can verify the quotient rather than only reference it.
exchange_rate_idThe FX snapshot this atom's reporting leg was pinned to; null when the document is already in the reporting currency.
exemption_codeThe provision behind a zero or exempt rate on this atom.
The formula versions the price evaluation resolved against.
fx_policyWhich instant the policy pinned the rate at.
fx_provisionalTrue for an invoice_issue pin taken on a DRAFT: the rate of the last assembly, not the rate finalize will freeze.
override_idThe negotiated override that displaced the catalog price.
plan_price_idThe plan price of the subscription's pinned plan version for this segment.
price_idThe catalog price that answered.
price_keyStable key of the price component.
product_idThe catalog product; empty on a manual or rounding atom.
product_version_idThe product version in force for this segment.
The rate-table versions the price evaluation resolved against.
reverses_atom_idThe atom this one takes back. A reversing atom copies its original's unit price, tax rule, rate and FX pin, and negates the quantity.
tax_category_codeEN 16931 tax category code (BT-151).
The tax rule tax_rule_version_id is a version of, with include=tax_rule (on the document: include=lines.atoms.tax_rule). Absent on an atom no catalog rule taxed.
tax_rule_version_idThe tax rule version resolved for this atom under the seller's operation context: the version that billed it (GET /tax-rules/{id}/versions lists a rule's versions).
Per-tier steps when the atom was priced by a tiered, volume or package model.
titleSet on a manual atom only; a deal atom's text is its line's.
unit_labelSet on a manual atom only.
tax_rule_idThe tax rule version resolved for this atom. Despite the name, this is a version id, not a tax rule id. Deprecated: use tax_rule_version_id instead. Removed on 2026-11-30.
InvoiceCharge
invoice_idThe document that was charged.
outcomeWhat happened: charged (the saved method was charged; the provider webhook settles the document), declined (the provider refused; reason says why. The decline is recorded against the document, and the retry steps of its dunning policy, if the policy has any, charge the saved method again on their days), checkout_required (no saved method; send the customer to checkout_url), no_payment_method (no saved method and no hosted flow for the provider), awaiting_sepa_file (the customer pays by a SEPA mandate collected with the seller's own SEPA files: nothing was charged, the next file collects the document), awaiting_sepa_prenotice (the customer pays by a SEPA mandate on a payment provider: Kontier sent them the pre-notification of the amount and the day, and the debit runs on that day).
checkout_urlProvider hosted-checkout URL to send the customer to, when outcome is checkout_required.
providerPayment provider the charge or checkout went through.
reasonThe provider's decline reason, when declined.
InvoiceCreditDraw
grant_idThe grant the units came from.
quantity^-?\d+(\.\d+)?$ · requiredUnits taken from it.
sourceWhat created the grant.
InvoiceCreditSummary
The document's gross total, as a currency-tagged amount.
Total minus credited and refunded, floored at zero.
What has been applied to this document, as a positive currency-tagged amount.
What this document's credit notes gave back to the customer instead of applying it, as a positive currency-tagged amount: a refund of a paid document. Zero when none.
InvoiceDateChangeItem
kindThe change's kind, which names its shape.
afterThe date after the edit; absent when it was cleared.
beforeThe date before the edit; absent when there was none.
InvoiceEntry
idprice_basisWhether unit_price is a net taxable base (exclusive) or an amount the tax is already inside (inclusive).
quantity^-?\d+(\.\d+)?$ · requiredDecimal number encoded as a string to preserve precision.
period_endperiod_startSpan this entry bills; defaults to the document's period.
price_keyPrice component the entry names.
product_idThe catalog product this entry prices against; empty for an ad-hoc entry, which then carries its own title.
tax_category_codeEN 16931 tax category code the entry declared; empty when it takes the document's own determination.
tax_rate^-?\d+(\.\d+)?$The tax rate the entry states itself, as a fraction (0.13 = 13%). Absent when the rate is determined; the rate that billed is the tax_rate of the line and the atom the entry produced.
titleThe entry's own heading, required when it names no product.
unit_labelWhat one unit is called, for display; empty when the line shows the bare quantity.
unit_price^-?\d+(\.\d+)?$The price per unit the entry STATES, in MAJOR units of the document's currency; a stated price always wins. Absent when the entry left its price to the catalog: it is then billed at its product's published price in force at the entry's start (period_start, else the document's), resolved when the draft is assembled - on creation and on every edit - and kept by finalize; the resolved rate is the unit_price of the line and the atom it produced.
InvoiceEntryChangeItem
currencyThe currency both sides' unit prices are in: the document's.
entry_idThe charge's own id; it survives every restatement.
kindThe change's kind, which names its shape.
The charge as it is stated after the edit; absent when it was withdrawn.
The charge as it was stated before the edit; absent when it was added.
InvoiceEntryInput
quantity^-?\d+(\.\d+)?$ · requiredQuantity, as a decimal string.
period_endperiod_startSpan this entry bills; defaults to the document's period.
price_basisWhether unit_price is a net taxable base (exclusive, the default) or an amount the tax is already inside (inclusive). Under inclusive the document states a base and a tax that add up to the stated figure exactly. It qualifies a stated unit_price only: an entry left to the catalog bills on the catalog price's basis.
price_keyPrice component to name.
product_idThe catalog product to price against. Omitted, the entry must carry a title, and it is taxed under the document's own determination unless it declares a tax category.
tax_category_codeEN 16931 tax category code (BT-151). Declared, it states the entry's treatment; omitted, the entry takes the document's own determination, as a product of the default tax category does.
tax_rate^-?\d+(\.\d+)?$A rate the entry states itself, as a fraction (0.13 = 13%). Stated, it is the line's rate and the jurisdiction's rules are not asked; the category is then S unless tax_category_code says otherwise. Omitted, the rate is determined. A positive rate under a category other than S, or a zero rate under S or no category, is refused (TAX_RATE_CONTRADICTS_CATEGORY); a rate below 0, of 1 or more, or finer than six decimals is refused (TAX_RATE_INVALID); S stated on a document whose supply is zero-rated is refused (TAX_CATEGORY_CONTRADICTS_DOCUMENT). A correction's new_entries may state only a rate the original billed.
titleThe entry's heading. Required when the entry names no product.
unit_labelWhat one unit is called, for display. Omitted, the line shows the bare quantity.
unit_price^-?\d+(\.\d+)?$Price per unit in MAJOR units of the document's currency. Stated, it wins. Omitted, the entry is priced from its product's catalog: the published price in force at the entry's start (period_start, else the document's), for this quantity, never the plan price or a rate the subscription negotiated. It is resolved whenever the draft is assembled (creation and every edit) and finalize keeps it. Omitting it requires product_id (ENTRY_PRICE_MISSING otherwise) and bills on the catalog price's own basis, whatever price_basis says; a correction's new_entries must state it.
InvoiceLine
What took money off this line before its subtotal: a wallet price-reduction lot or a promotion, one entry per origin (the line allowances, BG-27). Empty when nothing reduced the line. billed_quantity x unit_price - the sum of these amounts = subtotal.
billed_quantity^-?\d+(\.\d+)?$ · requiredquantity - included_quantity: what this line actually charges for.
currencyISO 4217 currency of this line's money fields; always the document's.
The line's text, composed once on the server in the reader's language. A client renders these; it does not compose its own.
idThe line's identity, derived from its bucket so it is stable across a draft's re-derivations.
positionOrder on the document.
price_basisHow the line's price was stated: net (exclusive), or a gross the tax was divided out of (inclusive). subtotal and tax_amount are net and tax either way; on an inclusive line they add up to the stated price exactly.
quantity^-?\d+(\.\d+)?$ · requiredWhat the customer consumed.
sourceWhat produced the atoms under this line: the subscription (deal), an operator entry (manual), a correction (credit) or the charge-increment adjustment (rounding).
Sum of the line's atoms' net amounts.
Sum of the line's atoms' tax.
tax_rate^-?\d+(\.\d+)?$ · requiredTax rate as a fraction (0.19 = 19%). One rate per line: the bucket never merges across rates.
titleThe line's heading, selected by the presentation policy from the product name, the price display name or a stated custom title.
Price per unit. A RATE, so it keeps its scale and is not rounded at the minor unit.
The priced facts this line projects, when the caller asked for them.
included_quantity^-?\d+(\.\d+)?$Units an allowance covered and which are therefore not billed; present whenever the line drew on an allowance, and absent on a line that has none.
key_labelThe price key's customer-facing label from the key registry; empty when the policy does not show the key.
period_daysThe days of the billing period prorated_days is a share of. Present exactly when prorated_days is.
period_endEnd instant of that span, exclusive.
period_startStart instant of the span the line's atoms tile; present when the policy shows the period.
periodsFor a phase paid in advance as a whole (or the credit taking part of one back): how many billing periods the line covers, one per period's share. Absent on every other line.
price_keyStable key of the price component behind this line.
product_idThe catalog product that priced this line; empty on a manual line with no product.
prorated_daysWhen the line bills part of a billing period by whole days: the days it bills, of period_days. Absent on a line that bills a whole period, usage, a one-time charge, or several periods (periods).
segment_noteTrue when the grouping is per-segment and this line covers only part of the period, so a renderer can say so.
tax_category_codeEN 16931 tax category code (BT-151).
unit_codeUN/ECE unit code (BT-130). C62 (one) is the default.
unit_labelWhat one unit is called (seat, GB, call), from the product.
InvoiceLineAllowance
How much the line's net fell (BT-136). Positive on an invoice; it carries the line's sign on a crediting document.
labelThe printed reason (BT-139): the lot's reason or the promotion's customer-facing name.
origin_idThe wallet lot, or the promotion grant, the reduction came from.
sourceWhat reduced the line: lot (a price-reduction lot in the customer's wallet) or promotion.
InvoiceLineDisplay
localeThe language the composed strings are in: the request's negotiated locale, or en.
quantityThe billed count with the product's unit label.
textTitle and detail joined the way a single-line reader wants them, with the detail in brackets. What the PDF prints in its description column.
titleThe heading: the line's title with its key label joined when the policy shows the key.
detailWhat the structured fields say about the heading — the span, the allowance split, the segment note — as one clause, with no brackets.
periodThe span alone, for a layout that gives the period its own column. The same derivation the detail carries, never a second one.
InvoiceOrigin
InvoiceOriginRef
idThe row's id.
kindWhat kind of row the id names.
InvoiceOverride
fieldWhich field is replaced.
idtargetWhat the override addresses.
target_idThe atom or line whose field is replaced. Atom ids are stable across a draft's re-assembly, which is what lets an override survive the re-run it triggers.
valueThe replacement, as text: a decimal for quantity and unit_price, the heading for title.
InvoiceOverrideChangeItem
fieldWhich field is replaced.
kindThe change's kind, which names its shape.
target_idThe priced fact (atom) the replacement addresses; its id survives every re-derivation.
afterThe replacement after the edit; absent when it was withdrawn.
beforeThe replacement before the edit; absent when there was none.
titleThe heading of the line the charge is billed on, as the document stated it after the edit.
InvoicePayment
What was settled, as a positive currency-tagged amount.
created_atidkindHow the money arrived: over a gateway, recorded with no gateway behind it (an operator's receipt), or out of the customer's wallet balance.
occurred_atWhen the money moved, not when the record was written.
stateGateway lifecycle state (pending, succeeded, failed, …); always succeeded for a manual payment.
failure_messageThe provider's reason, when the payment failed.
initiatorWho started a gateway payment: the customer or the merchant.
noteThe operator's note on a manual payment.
providerThe gateway provider, for a gateway payment.
recorded_by_user_idThe operator who recorded a manual payment.
referenceThe external event's reference, which is half of a payment's replay identity.
sourceWhat the settlement was filed under (BANK_TRANSFER, CASH, WIRE, …). Absent on a gateway payment, and on a settlement recorded before the instrument was kept.
InvoicePaymentAttemptFailedPayload
attempt_numberThe 1-based index of this payment attempt.
customer_idThe customer billed on the document.
error_typeThe classified failure category: the payment provider's code read through its decline vocabulary.
invoice_idThe document whose payment attempt failed.
occurred_atWhen the attempt failed.
organization_idproviderThe payment gateway that processed the attempt.
error_codeThe provider-specific error code, when available.
error_messageThe provider-specific error message, when available.
next_retry_atWhen the next retry is scheduled; absent when terminal.
workspace_idThe workspace that owns the document.
InvoicePaymentFailedTerminalPayload
customer_idThe customer billed on the document.
invoice_idThe document whose payment failed terminally.
last_attempt_idThe id of the final failed payment attempt.
last_error_typeThe classified failure category of the final attempt.
occurred_atWhen the terminal failure was recorded.
organization_idtotal_attemptsThe total number of payment attempts made.
last_error_messageThe error message of the final attempt, when available.
workspace_idThe workspace that owns the document.
InvoicePromotionFiringList
Every standing promotion row of the invoice in lane order: PENDING while it is a draft, SETTLED once issued, plus any reversal and any reward paid back later against its finalised lines (target kind finalised_invoice). Match a row to its invoice lines by product and price_key. Released (voided) reservations are not listed.
What promotions took off this invoice itself, POSITIVE, one entry per currency, net of reversals: the bill_line firings above, sign flipped. Rewards paid back later are not in it. Deprecated: use the sum of the firings with target.kind bill_line instead. Removed on 2026-11-30.
InvoiceRef
idstatusPlace in the document machine. draft and discarded are the only statuses without a number.
numberThe legal document number; null while the document is a draft.
InvoiceRefund
statusWhat the request came to. refunded (200): the credit note is issued, the original's balance is reduced, and the money goes back over the chosen rail; a gateway refund settles with the provider afterwards (GET /invoices/{id}/payments). The correction fields are set. approval_pending (202): an approval checkpoint parked the refund and nothing has been refunded; the request fields are set, and GET /approvals/{id} or the approval.* webhook event follows it.
already_pendingTrue when a request for this subject was already waiting: the call raised nothing new and the id is the existing request's. A double-clicked button lands here, which is a no-op rather than a conflict — the partial unique index on (organization, checkpoint, subject) settles it in the database.
The credit note or corrective, with include=correction. Its money is negative because its atoms are. Sent without include=correction until 2026-11-30; after that only with include=correction.
correction_idThe credit note or corrective carrying the reversal.
The corrected document as it now stands, with include=original. Its status is reversed only when nothing of it is left standing. Sent without include=original until 2026-11-30; after that only with include=original.
original_idThe corrected document.
original_reversedTrue when every atom of the original came back in full. This is not the original's status: a fully reversed document that was already paid stays paid.
policyThe shape that was applied. This is the jurisdiction's answer and not necessarily what was asked for.
The replacement invoice, with include=replacement. Sent without include=replacement until 2026-11-30; after that only with include=replacement.
replacement_idThe replacement invoice, when the correction stated corrected amounts under the separate shape.
The parked approval request. Read it whole with GET /v1/approvals/{id}, or wait for the approval.* webhook event (approval.applied, approval.request_rejected, approval.request_expired, …) whose request_id is its id.
approval_request_idThe same value as request.id. Deprecated: use request.id instead. Removed on 2026-11-30.
checkpoint_idThe same value as request.checkpoint_id. Deprecated: use request.checkpoint_id instead. Removed on 2026-11-30.
reasonThe stated reason. The credit note carries it as correction_reason. Deprecated: use correction.correction_reason instead. Removed on 2026-11-30.
stateapproval_pending on a parked refund, absent on a refund that ran. Deprecated: use status instead. Removed on 2026-11-30.
subject_idThe same value as request.subject.id. Deprecated: use request.subject.id instead. Removed on 2026-11-30.
InvoiceRefundRailReach
instrumentThe most this rail can carry of this refund, never more than refundable. For gateway it is the provider charge less what already went back over the provider: a document paid 30 by card and 12 by bank transfer returns at most 30 over the gateway.
InvoiceRefundRails
default_instrumentThe rail the money came in on, which is the one to offer first: gateway when a provider charge can return all of refundable, otherwise wallet. A refund that names no instrument runs on it.
The rails that can take this refund, each with the most it can carry. wallet is always listed; gateway only when a succeeded provider charge can still return some of the money.
What the document can still give back: what it was paid, net of what its credit notes have returned or hold to return. A refund without an amount returns this.
InvoiceReversal
atom_idThe atom to reverse. It must belong to the addressed document.
quantity^-?\d+(\.\d+)?$ · requiredHow much of it comes back, as a POSITIVE magnitude. The reversing atom's own quantity is negative; the sign belongs to the atom and not to the request.
InvoiceSearchData
amount_dueWhat is still open, in major units. Negative on a credit note: the credit not yet applied.
currencyISO 4217 code of the document's currency.
customer_idThe customer the document is for.
kindreversedTrue when a correction took the document back in full.
statustotalThe document's total in major units.
InvoiceSearchHit
display_namePrimary label shown for the hit in the results list.
entity_typeKind of the matched entity; it names the shape of data.
idIdentifier of the matched entity.
scoreRelevance score from the search engine; higher ranks first.
tag_idsThe ids of the tags on the matched entity. Add include=tags to get the tags themselves.
The owning customer. Sent only with include=customer, and only when the entity has an owning customer.
customer_idOwning customer's id; empty for catalog entities that have no owning customer.
Entity-type-specific payload with the fields needed to render the hit. Sent without include=data until 2026-11-30; after that only with include=data.
referenceThe short per-organization human reference an operator would say out loud: an invoice's or credit note's number, a subscription's SUB-000123, a quote's QUO-2026-000078. Absent for a kind that is named rather than numbered (customer, product, plan, payment, dispute) and for a draft invoice, which has no number until it is finalized.
secondary_textSupporting line shown under the display name (e.g. an invoice number or email).
Tags attached to the matched entity. Sent without include=tags until 2026-11-30; after that only with include=tags.
customer_nameOwning customer's display name; empty for catalog entities. Deprecated: use customer.name (include=customer) instead. Removed on 2026-11-30.
InvoiceTextChangeItem
kindThe change's kind, which names its shape.
afterThe value after the edit; absent when it was cleared.
beforeThe value before the edit; absent when there was none.
InvoiceTierStep
amount^-?\d+(\.\d+)?$ · requiredMAJOR units: what this step contributed to the atom's subtotal.
indexThe step's position in the ladder, from 0. Steps are ordered and the order is what makes them a ladder.
quantity^-?\d+(\.\d+)?$ · requiredHow much of the atom's quantity fell inside this step.
unit_amount^-?\d+(\.\d+)?$ · requiredThe rate inside this step, in MAJOR units.
up_to^-?\d+(\.\d+)?$The quantity this step runs to, inclusive. Absent on the final, unbounded step.
IssuePortalLinkRequest
return_path^/portal(/[A-Za-z0-9…Optional portal page the customer lands on after sign-in, e.g. /portal/invoices, /portal/quote/
scopeOptional task the link is for: add_payment_method, pay_invoice, topup_wallet, manage_subscription, checkout_subscription or quote:
ttl_secondsOptional link lifetime in seconds: at least 60, at most the deployment's link TTL (30 minutes unless configured otherwise), which is also the default. An integrator that redirects the customer at once should ask for 60 to 120.
Job
attemptscreated_atdeferralsHow many times this job has been deferred. A deferral never spends an attempt.
idmax_attemptsnot_beforeOperational wall time: the job is not admitted before it (its arm, a retry's backoff, a deferral). Never the instant the work belongs to — that is due_at.
organization_idprioritystatusWhere the job stands. A job an operator paused is blocked with paused_at set.
topicupdated_atversionworkspace_idcorrelation_idWhy this job is waiting rather than failing. Absent means it is not waiting on anything outside itself.
due_atThe instant the work belongs to, on the job's clock (test_clock_id, or the wall clock). The job runs with it as its operation instant. Absent for work with no instant of its own.
The error the job last stopped on. Absent when it has none.
finished_atheartbeat_atleased_untilpaused_atSet while an operator holds the job (admin pause): it stays blocked and is not admitted until resumed. The paused deadline is measured from it.
payloadpicked_byready_atWhen the job first became ready to run (both instants reached). Every deadline the reaper enforces is measured from it; cleared by a retry or a deferral.
resultstarted_attest_clock_idThe workspace test clock due_at is read on. Absent means the wall clock.
deferred_detailThe reason's qualifier as an operator reads it. Deprecated: use deferral.detail instead. Removed on 2026-11-30.
deferred_reasonWhy this job is waiting rather than failing. Absent means it is not waiting on anything outside itself. Deprecated: use deferral.reason instead. Removed on 2026-11-30.
error_classDeprecated: use error.class instead. Removed on 2026-11-30.
error_codeDeprecated: use error.code instead. Removed on 2026-11-30.
error_detailsDeprecated: use error.details instead. Removed on 2026-11-30.
error_messageDeprecated: use error.message instead. Removed on 2026-11-30.
time_domainThe workspace test clock due_at is read on. Absent means the wall clock. Deprecated: use test_clock_id instead. Removed on 2026-11-30.
JobDeadLetteredPayload
attemptsHow many times the job ran before it stopped.
job_idThe job that stopped retrying.
max_attemptsThe attempt ceiling configured for this job.
occurred_atWhen the job stopped retrying.
organization_idpermanentTrue when the handler declared the failure unrecoverable rather than running out of attempts.
topicThe kind of work the job was doing.
error_classThe handler's classification of the failure.
error_codeThe handler's error code, when it set one.
error_messageWhat the job said when it stopped.
workspace_idThe workspace that owns the job.
JobDeferral
reasonWhy the job is waiting rather than failing.
detailThe reason's qualifier, for example the hold kinds that stopped this organization's scheduled work.
JobDeferralReason
JobError
classThe error's class: whether it is worth retrying.
codeThe error code.
detailsStructured details, when the error carries any.
messageThe error message.
JobRun
attemptcreated_atidjob_idstarted_atSet when this attempt ended in a deferral rather than a success or a failure.
The error this attempt ended in. Absent when it did not fail.
finished_atdeferred_detailThe deferral reason's qualifier for this attempt. Deprecated: use deferral.detail instead. Removed on 2026-11-30.
deferred_reasonSet when this attempt ended in a deferral rather than a success or a failure. Deprecated: use deferral.reason instead. Removed on 2026-11-30.
error_classDeprecated: use error.class instead. Removed on 2026-11-30.
error_codeDeprecated: use error.code instead. Removed on 2026-11-30.
error_detailsDeprecated: use error.details instead. Removed on 2026-11-30.
error_messageDeprecated: use error.message instead. Removed on 2026-11-30.
KeySet
created_atidnameDisplay name of the key set.
organization_idslugURL-safe unique identifier for the key set, matching ^[a-z0-9][a-z0-9_-]{0,63}$.
statusactive: products may link the set. archived: no product links it and none may link it again. Archiving is final; set it with PATCH /key-sets/{id}.
updated_atdeleted_atSoft-delete timestamp; null for live sets.
descriptionOptional description of what this set of keys represents.
The keys the set defines, ordered by key. Sent with include=entries. The item read and every write send it without include=entries until 2026-11-30; after that only with include=entries.
entry_countNumber of keys defined in the set, retired ones included. Sent with include=entry_count. Sent without include=entry_count until 2026-11-30; after that only with include=entry_count.
product_countNumber of products that link the set; the set cannot be archived while it is above zero. Sent with include=product_count. Sent without include=product_count until 2026-11-30; after that only with include=product_count.
lifecycle_statusThe same value as status. Deprecated: use status instead. Removed on 2026-11-30.
KeySetEntry
created_atdisplay_nameCustomer-facing label for the key.
idkeyThe key identifier (matching ^[a-zA-Z0-9._-]{1,64}$); the validated domain of prices.price_key once a product references the set.
key_set_idThe key set this entry belongs to.
statusEntry lifecycle: active or retired.
tagsFree-form tags for grouping and filtering keys.
updated_atFree-form key/value metadata attached to the entry.
KeySetEntryInput
keyThe key identifier (matching ^[a-zA-Z0-9._-]{1,64}$); the conflict target for the upsert.
display_nameCustomer-facing label for the key; defaults to the key itself when empty.
Free-form key/value metadata for the key.
statusEntry status: active or retired; defaults to active.
tagsFree-form tags for the key.
KeySetReference
product_idA product that links the key set.
The product. Sent only with include=product.
product_nameDisplay name of the product. Deprecated: use product.name (include=product) instead. Removed on 2026-11-30.
KontierPaymentsAccount
can_receive_payoutsWhether Mollie pays settlements out to the account's bank.
can_take_paymentsWhether Mollie accepts payments on this account now.
dashboard_urlThe account's Mollie dashboard.
nameonboarding_statusWhere Mollie's verification of the business stands.
organization_idMollie organization id (org_…).
countryemailonboarding_urlWhere the owner completes Mollie's onboarding.
KontierPaymentsCapability
namepayments or settlements.
statusunrequested, pending, enabled or disabled.
reasonKontierPaymentsConnectRequest
intentcreate opens a new Mollie account (co-branded sign-up); connect links an existing one (login).
return_toDashboard path to land on afterwards; defaults to Kontier Payments' page in the integrations hub.
KontierPaymentsConnectResponse
authorize_urlMollie's hosted sign-up or login page for Kontier. Valid for 60 minutes.
KontierPaymentsDisconnectResponse
disconnectedrevokedWhether Mollie confirmed Kontier's access was revoked.
KontierPaymentsGateway
enabledidis_defaultmodeKontierPaymentsMethod
descriptionenabledWhether the method is switched on for the profile (in any activation state).
idMollie's method id, e.g. ideal, creditcard, bancontact.
imageMollie's SVG of the method's mark.
statusactivated, pending-boarding, pending-review, pending-external or rejected; absent when switched off.
KontierPaymentsMethodInputBody
enabledSwitch the method on (true) or off (false) for the profile.
KontierPaymentsNewProfile
emailnameThe shop or brand name customers see.
phoneThe business phone number, international format (+49…).
websiteThe website payments are taken for (https://…).
KontierPaymentsProfile
idnamereviewA pending review of changes, when Mollie has one open.
statusMollie's verification of the profile: unverified, verified or blocked.
websiteKontierPaymentsProfileInputBody
profile_idOne of the connected account's website profiles (pfl_…).
KontierPaymentsRequirement
capabilityWhat it unlocks: payments or settlements.
idMollie's name of the task, e.g. needs-data or process-first-payment.
statuscurrently-due, past-due or requested.
due_dateWhen the task is due, as Mollie states it: an RFC 3339 date-time with an offset (e.g. 2024-05-14T01:29:09+00:00), not a calendar day. Absent when Mollie sets no deadline.
urlWhere in Mollie's dashboard the task is done.
KontierPaymentsStatus
availableWhether this deployment can connect accounts (the Mollie Connect app is configured).
connectedWhether this workspace has a Kontier Payments account.
testmodeWhether payments run in Mollie test mode (sandbox workspaces) or live mode.
The connected Mollie account; absent when not connected.
Whether the account can take payments and receive payouts.
The payment gateway row the connection charges through.
The payment methods of the chosen profile and their activation state.
problemWhy the account could not be read just now, in the operator's terms; the stored connection is unchanged.
The website profile payments are made on; absent until one exists.
Every website profile of the account, to choose from.
What the account owner still has to do at Mollie, with deep links.
LateEventPolicy
Requests also accept the new spelling: each value in lower case (clamp_to_period for CLAMP_TO_PERIOD). The listed spelling is deprecated in requests and accepted until 2026-11-30.
LegalIdentity
The bank account printed on invoices, as PUT /v1/organization/payment-details records it.
Registered identifiers as {kind, country, value}: the VAT id, the tax number, the commercial-register number and any other (EORI, LEI, Peppol). Each is checked against its kind's pattern and check digit; an organization holds one VAT id, one tax number and one register number. Check one in advance at POST /v1/organization/identifiers/validate.
The registered address. Its country is the organization's country; line1, city, postal_code and country are required together.
legal_nameThe registered legal name printed as the seller on every document; the display name is printed when omitted.
main_emailThe organization's main contact address.
phoneThe organization's public phone number.
Tax registrations the organization holds, as PUT /v1/organization/tax-profile/registrations records them: a VAT number held in another state, OSS, IOSS.
LegalIdentityBank
account_nameAccount holder name printed with the IBAN.
bicBIC / SWIFT code.
ibanIBAN; spaces are allowed and dropped.
LegalIdentityRegistration
countryISO 3166-1 alpha-2 of the state the registration is HELD IN, which is not always the organization's own.
identifierThe number as issued.
schemeThe register the organization is entered in.
valid_fromThe first day the registration is in force; today when omitted.
LibraryClauseChange
fieldThe field of the clause: its name, its country, a language's text, or whether it is archived.
kindWhat happened to the field: set where the clause stated none, changed, or cleared.
What the clause states after the act; absent when it states nothing.
What the clause stated before the act; absent when it stated nothing.
keyFor a body: the language it is written in.
Limit
at_ceilingcountsoverwindowaudienceceiling^-?\d+(\.\d+)?$Decimal number encoded as a string to preserve precision.
negotiated_pricesperiodsLineAmount
catalogTrue when the price the amount is computed from is the catalog's list price (rung 3), false when the deal agreed it.
kindrecurring: billed every period, amount is per period; one_time: billed once; prepaid: the whole phase paid in advance at its opening, amount is for the whole span; usage: the product is metered and the line bills reported usage, no amount; needs_quantity: a declared line whose quantity is not set yet, no amount until it is; unpriced: no single amount can be stated (an agreed tier ladder, a price the catalog states only at invoicing, a prepaid span the schedule could not read).
What the invoice would charge: the line's quantity priced as billing prices it (a list price walked by the catalog's ladder at that quantity, an agreed rate or ladder under the product's pricing model), less the included units at the rate the quantity earned, rounded to the currency, in the deal's currency. Present only for kind recurring, one_time and prepaid.
For kind=recurring: the billing period the amount is per — the phase's billing cadence, else the period of the line's next charge. Absent when neither names one, and for every other kind.
price_basisWhether amount is net (exclusive) or already contains the tax (inclusive). Present with amount.
LineCatalogPrice
currencyThe price row's own currency: tiers are in it. Differs from the deal's currency when the row is converted (converted_from).
list_unit_amount^-?\d+(\.\d+)?$ · requiredThe list price per unit in the deal's currency, converted when converted_from is present: what the line's Price cell shows.
price_basisWhether the row's amounts are net of tax (exclusive) or already contain it (inclusive). An agreed price that states no basis takes this one.
price_idThe price row the resolver chose.
pricing_modelThe pricing model the row's ladder is walked under.
The row's ladder, in its own currency (currency). A flat price is one open tier.
converted_fromThe currency the row is converted from, at the invoice rate, into the deal's currency: present only when the row is not in the deal's currency (it then equals currency).
LineDiscountShape
discount_kindpercent takes a share off; fixed takes an amount off; override replaces the price and never raises it above list.
kindThe shape discriminator.
The cut (fixed) or the replacement price (override), as a money table. Required for discount_kind=fixed and override, refused for percent. The entries price named currencies; the default is one currency-less value spent in whatever currency the bill is in, for every currency the entries do not name. An entry always beats the default, at least one of the two is required, and nothing is ever converted. A bill this table answers for in neither way records a currency_mismatch non-firing.
first_n_periodsCut only the redemption's first n billing periods.
The bill's net before any promotion must reach this, as a money table. The entries price named currencies; the default is one currency-less value spent in whatever currency the bill is in, for every currency the entries do not name. An entry always beats the default, at least one of the two is required, and nothing is ever converted. A bill this table answers for in neither way records a non-firing rather than converting.
percent^-?\d+(\.\d+)?$A percent in (0, 100]. For discount_kind=percent only; refused for the money arms.
LineSchedule
billedTrue when the revision has invoiced charge: on the live deal, its cut came at or before the read's instant. A draft or a quote's offer has invoiced nothing of its own — only what the live deal billed before the draft's cut — so a charge whose instant has passed is still to bill there. False without a charge.
cadenceHow often the line bills inside this phase, as the schedule read it: every period, once at the phase's opening, or once at its event end.
Where the line ends on this phase: the end of the consecutive phases holding it here as a recurring line (this phase alone for a one-time or event line), their last running phase's, a later date and the stop applied. A line that leaves and comes back in a later phase is two such stretches.
timingWhen the line's charges are invoiced in this phase, as the schedule read it. A metered line is always invoiced in arrears.
billed_throughThe end of what the line's invoices so far cover — the periods billed, a prepaid phase up to the stop once its credit is due. Absent while nothing covering a span is billed, and on a draft or a quote's offer for whatever comes from its cut on.
This phase's one-time, event or whole-phase charge of the line, once its instant is known.
eventThe milestone an on-event line's charge waits for, as the deal names it.
invoices_remainingHow many invoices still bill the line in the phases of ends, after what the revision has invoiced: the distinct cuts its remaining charges there are due at. Absent when the count is not known: a line that bills until the subscription ends, until an event, or from a start not known yet.
The line's first dated charge still to be invoiced; its due is the next invoice that bills the line. Absent when none is dated.
waitsWhat this phase's one-time, event or whole-phase charge waits for while its instant is not known: the phase's start, or its event.
LineScheduleCharge
atThe instant the charge is for: a period's start, a phase's opening, an event's crossing.
dueThe cut whose invoice bills the charge.
kindWhat the charge bills: a period, a one-time charge, an event's charge or a whole phase paid in advance.
For a whole phase paid in advance that the deal stops inside: the part from the stop to the phase's end, credited on the next invoice.
What a period or whole-phase charge covers; absent for a one-time or event charge.
LineScheduleEnd
phaseThe position of the phase whose end this is — the last phase of the consecutive phases that hold the line here: for on_event the phase whose event ends it, for after_start the phase whose start is not known yet.
stateat: the line ends at a known instant; open: it bills until the subscription ends; on_event: when an event that has not happened yet ends its last phase; after_start: a duration after a start not known yet.
atThe first instant the line no longer bills, for state=at: the cut that closes its last period.
no_later_thanFor state=on_event or after_start: the latest the end can be — a later phase's date or the stop. Absent when nothing bounds it.
MailBindingChange
kindWhat the change is about: whether it is sent, the wording or starter, the recipient rule, a copy address, an inherit mode or the audience.
afterThe value after the act; absent when none is set.
beforeThe value before the act; absent when none was set.
For enabled: the switch before and after the act.
keyFor a copy address: the address.
For the wording and the audience: what was named before and after the act, each by its name when the act was made.
MailBindingFlagSides
afterThe switch after the act; absent when the settings were removed.
beforeThe switch before the act; absent when nothing was stored.
MailBindingRefSides
What is named after the act; absent when nothing is.
What was named before the act; absent when nothing was.
MailBlockedRetryOutcome
detailWhy this one could not be re-driven.
idsubjecttemplate_keyMailBlockedRetryResult
already_resentMessages left alone because an earlier retry or resend of them already went out. Nothing was sent again.
has_moreTrue when the batch cap was reached and more blocked mail remains. Call again. Messages counted in skipped_too_old are NOT part of this — pressing again will never send those.
max_age_daysHow many days back this retry reached.
retriedMessages rebuilt and re-queued. Each produced a NEW message; the blocked one is left as history.
skipped_no_recipientMessages blocked for a missing address, which a retry cannot fix.
skipped_too_oldMessages left alone because they are older than the retry reaches. Their content would be weeks out of date; re-issue them from the invoice, credit note or reminder they came from.
unrecoverableMessages with no source document to rebuild from — a one-off or test send. They stay blocked.
One entry per unrecoverable message.
MailBlockedSummary
Counts keyed by block reason. The key "unrecorded" covers rows whose reason predates the column.
max_age_daysHow many days back a retry reaches. Anything blocked before that is counted in skipped_too_old.
retryableHow many of these a retry could actually send once the configuration is fixed.
skipped_no_recipientBlocked for a missing address. A retry cannot help; someone has to add an address.
skipped_too_oldBlocked for a reason a retry could fix, but too old to be sent now. Re-issue these from the invoice, credit note or reminder they came from instead.
totalBlocked messages found by this scan. Suppressed messages and emails nobody switched on (anchor_not_configured) are never counted — they are not a problem to fix.
truncatedTrue when the backlog is larger than one scan; the counts are a floor, not an exact total.
oldest_atWhen the oldest blocked message was created. Absent when there are none.
MailConsent
basisexpress_consent | soft_opt_in | withdrawn | none.
emailidpurposestateopted_in | soft_opt_in | opted_out | unknown.
updated_atcustomer_ideffective_atsourcewithdrawn_atMailConsentEvent
actor_kindWho moved it: operator | system | recipient | checkout | backfill.
basisexpress_consent | soft_opt_in | withdrawn | none.
consent_idcreated_atemailfrom_stateThe state before this transition. Empty means there was no prior record.
idoccurred_atpurposesyntheticTrue for the single row seeded per recipient when the history was introduced: it re-states the state as it stood then and is NOT evidence of a transition we observed. Surfaces must say so.
to_stateopted_in | soft_opt_in | opted_out | unknown.
actor_idThe user behind the change, when there was one.
captured_ipcaptured_user_agentcustomer_idevidence_refThe checkout acceptance snapshot backing an express opt-in.
origin_sale_refThe sale that founded a soft opt-in.
proof_textThe exact statement the recipient agreed to.
sourceWhere the change came from: checkout | sale | objection | api | esp_unsubscribe.
MailMessage
created_atdelivery_visibilityWhether this message's transport reports back what happened after handover. 'reported' — status may still advance, so an empty event list means nothing has arrived YET. 'not_reported' — the transport has no delivery callback (a tenant's own SMTP server), so 'sent' is TERMINAL and no bounce or complaint will ever be detected for it. 'not_applicable' — nothing was handed to any transport (a blocked or suppressed row), so the question does not arise. Derived from this row's own provider, so it stays correct for historical rows after the sending account changes.
idorganization_idstatussubjecttoworkspace_idbccblock_reasoncccorrelation_iderror_detaillocaleproviderprovider_message_idrecipient_kindsent_atsent_through_parentTrue when the message went out through the sending account the parent organization shares, not this organization's own.
source_idsource_kindtemplate_keyMailMessageEvent
created_atevent_typeidoccurred_atproviderprovider_event_idprovider_message_idrecipientdelivery_codefailure_reasonMailMessageResend
body_replayedTrue when the body was re-rendered from source; false on the envelope-only fallback.
new_idempotency_keyThe deterministic idempotency key of the row the pipeline will mint.
noteHuman-readable summary of what was replayed and re-attached.
organization_idThe organization the resend was enqueued for.
original_idThe original mail message id that was resent.
reattachedFilenames of documents re-resolved and re-attached to the resend.
MailProviderChange
kindWhat the change is about: the name, a switch, the sender identity, a source range, a credential or the webhook secret.
afterThe value after the act; absent when there is none. Never stated for a secret.
beforeThe value before the act; absent when there was none. Never stated for a secret.
For enabled, default and offered: the switch before and after the act.
keyFor a credential: its key in the account's credential bag (smtp_host, api_key, …). For a source range: the range, in CIDR notation. For another sender address: the address.
For a secret credential or the webhook secret: that it was set, replaced or cleared. Its value is never in the trail.
MailProviderFlagSides
afterThe switch after the act.
beforeThe switch before the act; absent for an account the act connected.
MailSandboxCapture
created_atmessage_idThe mail message the content was withheld with.
subjecttobccbody_htmlThe rendered HTML body, as it would have been sent.
body_textThe rendered plain-text body, as it would have been sent.
ccMailSentCopy
archive_record_idThe legal-archive record the copy is kept under.
body_htmlbody_sha256SHA-256 of the archived document, hex.
frommessage_idThe mail message.
rfc_message_idThe Message-Id header the mail went out with.
sent_atsubjecttobccbody_textccfrom_nameThe extra headers the mail carried.
reply_toMailSentCopyAttachment
content_typefilenamesha256SHA-256 of the bytes that were sent, hex.
MailSuppression
emailprovenanceHow well evidenced this entry is. 'vendor_authenticated' — the report arrived on a single-use signed envelope from the provider that we spent, which is the strongest evidence available; note the provider signs the envelope and not the report itself, so this is not proof of the report's contents. 'vendor_asserted' — the provider cannot prove its reports came from it, so this is an unverified claim: it does stop sending, and it is the kind to check before you trust it. 'operator' — somebody on your side added it by hand.
reasoncreated_atidorganization_idThe organization the suppression belongs to.
source_event_idworkspace_idThe workspace whose sending identity recorded this entry.
MandateCreditor
creditor_idThe SEPA creditor identifier (Gläubiger-ID).
nameThe creditor the debits carry.
on_behalf_ofMandateOffer
offeredWhether this seller collects by SEPA Direct Debit at all.
holder_namelead_daysThe pre-notification period the text promises, in calendar days.
localerailWho collects: own, mollie, kontier_payments or stripe.
referenceThe mandate reference the text names; empty when the provider issues it after signing.
schemeThe scheme the text below is for.
schemesThe schemes this customer may sign: CORE, and B2B only where the rail collects it and the customer is a business.
textThe mandate text, exactly as it will be stored when accepted.
text_versionSend it back with the signature: a page showing an older text is refused.
MarkMarketplacePayoutPaidRequest
bank_referenceThe bank's own reference for the transfer you made. Required: it is what the payment is evidenced by.
MarkSignedRequest
executed_file_idThe uploaded signed copy, from POST /v1/files with owner_kind=quote and category=uploaded_signed_copy.
signer_nameWho signed the paper copy.
signer_emailTheir email, if known. Defaults to the customer's.
MarketplaceAccountKind
MarketplaceLedgerAccountBalance
accountplatform_custody is buyers' money held before a sale completes; seller_payable is owed to one seller; commission_income is this organization's fees; chargeback_loss is disputes it absorbed; psp_receivable is money the payment provider has not settled yet; bank is settled money; tax_payable is VAT this organization owes out of money it held: its own VAT on a deemed supply and the VAT on withheld commissions.
On its natural side: held and owed amounts read positive.
seller_customer_idWhose balance this is. Only present on amounts owed to a seller.
MarketplaceLedgerBalance
One balance per account. Amounts are shown on their natural side, so money held or owed reads positive.
currencyISO 4217.
The books' own cross-check. It is zero when everything balances; anything else means the ledger disagrees with itself and is worth raising.
MarketplaceMovementCause
idThe record's id.
typeWhat kind of record caused it: a payment, refund, dispute, statement, payout or sale on a sale's postings; a recorded movement (posting) or the previous statement on a statement's lines.
MarketplacePayout
What is being transferred, with its currency.
created_atidThe payout.
seller_customer_idThe seller being paid.
statement_idThe statement it pays.
statusprepared is waiting to be transferred; paid means it has been. submitted, reconciled and returned belong to bank-file and provider transfers, which this deployment does not yet make.
updated_atbank_referenceThe bank's reference for the transfer, recorded when it was marked paid. It is the only evidence the transfer happened.
paid_atWhen the transfer was recorded as made.
returned_reasonWhy the bank sent the transfer back. Absent unless it did.
The statement it pays: its id and number. Sent with include=statement.
statement_numberThe number of the statement it pays. Deprecated: use statement.number instead. Removed on 2026-11-30.
MarketplacePostingKind
MarketplaceSale
buyer_customer_idThe customer that bought.
What this organization charges for the sale.
The documents this sale produced. Which of them exist depends on who supplied.
What the buyer pays.
idThe sale.
listing_referenceYour own reference for what was sold. This system stores it and never interprets it.
How much of the gross has been given back so far. A sale can be refunded in parts.
seller_customer_idThe customer that sold. Its name, address and tax identifiers live on that customer.
statusagreed is waiting for the buyer's payment; funded means we hold the money; completed means it was delivered, the seller was credited and the documents were issued; cancelled and refunded are final.
Who supplied, on what basis, and what was supplied. Decided when the sale was agreed and never changed afterwards.
When each step happened.
complete_byThe deadline for marking this sale delivered. After it, the sale is cancelled automatically and the buyer is refunded. Set when the buyer pays.
payment_idThe buyer's payment. Absent until it has paid.
MarketplaceSaleCheckout
payment_idThe payment this checkout opened. Read it to follow what happens, and quote it when asking about the attempt.
statussucceeded means the buyer has paid and the sale becomes funded on its own; requires_action means the buyer still has a bank challenge to finish; pending and processing mean it is in flight; failed and cancelled collected nothing.
next_actionThe payment provider's instruction for finishing a bank challenge, exactly as it gave it. Present only while the buyer has one outstanding; hand it to the provider's browser SDK.
MarketplaceSaleDocs
commission_invoice_idThis organization's invoice to the seller for the fee. Absent when the fee is nothing.
inbound_document_idThe document from the seller to this organization. Only exists where this organization is treated as the supplier.
sale_document_idThe document the buyer receives. Issued in the seller's name when the seller supplied, and in this organization's name when it is treated as the supplier.
MarketplaceSaleFee
The fee this organization charges on the sale, taken out of what the seller is paid.
on_refundWhat happens to the fee when the sale is refunded: given back in proportion, or kept. Decided when the sale was agreed.
product_idThe product that priced the fee, as it was when the sale was agreed. It may since have been changed or archived; the sale keeps the price it was agreed at.
MarketplaceSaleMoments
agreed_atWhen the sale was created and who-supplied was decided.
cancelled_atWhen it was cancelled.
completed_atWhen it was marked delivered.
funded_atWhen the buyer's payment succeeded.
refunded_atWhen the last of the gross was refunded. Absent while a sale is only partly refunded.
MarketplaceSalePosting
The payment, refund, dispute, statement, payout or sale that caused it.
The two or four sides of the movement. They always add up.
idoccurred_atWhen the money moved, which can be earlier than when it was recorded.
whatfund is the buyer's money arriving; release credits the seller and takes the fee; cancel returns it before completion; refund and commission_refund give it back afterwards; chargeback is a lost dispute; settlement and payout are money reaching a bank.
caused_by_idThe payment, refund, dispute, statement, payout or sale that caused it. Deprecated: use caused_by.id instead. Removed on 2026-11-30.
caused_by_kindWhat caused the movement. Deprecated: use caused_by.type instead. Removed on 2026-11-30.
MarketplaceSalePostingEntry
accountdirectionseller_customer_idMarketplaceSaleSupply
byWho supplied, for tax. AGENT: the seller supplied the buyer and this organization acted for it. DEEMED_SUPPLIER: the law treats this organization as the supplier, so it owes the tax on the sale to the buyer. BUY_SELL is not produced.
whatWhat was sold: a digital service delivered electronically, another kind of service, a right, or goods.
whyThe legal ground the answer rests on, as a stable code. Show it beside the answer rather than instead of it.
regimeThe statutory platform rule that made this organization the supplier. Absent unless one applied.
MarketplaceSeller
countryWhere the seller is established, ISO 3166-1 alpha-2. This is the country whose invoicing rules bind it, not where it ships from.
created_atcustomer_idThe customer whose seller role this is. Name, address and tax identifiers live on that customer, not here.
idThe seller record.
in_businessWhether the seller trades as a business, and so is expected to hold a VAT ID.
natural_personWhether the seller is a private individual rather than a company. It decides whether a sale in the seller's own name produces an invoice or a receipt.
series_code_prefixThe prefix the seller's own document numbers are built from. Unique across the organization's sellers.
statuspending cannot sell yet; verified can; suspended cannot start new sales but its paid ones still complete; closed is final.
tax_regimeThe VAT regime the seller has declared for itself.
updated_atmandate_agreed_atWhen the seller agreed to let this organization sell on its behalf. Absent when it has not.
The bank account the seller is paid into, masked. Absent when no account is on file.
self_billing_agreed_atWhen the seller agreed to let this organization raise documents in the seller's name. Required before a sale where the organization is treated as the supplier.
small_business_schemeThe national small-business exemption the seller has declared, e.g. DE_19. Absent when it claims none.
verification_methodWhat verified the seller: nothing was checked, its VAT ID was checked, or somebody verified it by hand.
verified_atWhen the seller was first verified. Kept through a suspension, because it records what happened.
payout_account_holderThe account holder's name as the seller gave it. Deprecated: use payout_account.holder_name instead. Removed on 2026-11-30.
payout_account_maskedThe seller's account, masked to its last four characters. Absent when no account is on file; the full number is never returned. Deprecated: use payout_account.iban_masked instead. Removed on 2026-11-30.
payout_account_setWhether the seller has given a bank account to be paid into. Deprecated: use payout_account instead. Removed on 2026-11-30.
MarketplaceSellerCountryChangeItem
kindThe change's kind, which names its shape.
afterWhere the seller is established, ISO 3166-1 alpha-2, after the edit; absent when there is none.
beforeWhere the seller is established, ISO 3166-1 alpha-2, before the edit; absent when there was none.
MarketplaceSellerFlagChangeItem
kindThe change's kind, which names its shape.
afterWhether it holds after the edit.
beforeWhether it held before the edit.
MarketplaceSellerInstantChangeItem
kindThe change's kind, which names its shape.
afterWhen it was agreed after the edit; absent when there is none.
beforeWhen it was agreed before the edit; absent when there was none.
MarketplaceSellerPayoutAccount
iban_maskedThe account number, masked to its last four characters. The full number is never returned.
holder_nameThe account holder's name as the seller gave it.
MarketplaceSellerPostureRequest
countryWhere the seller is established, ISO 3166-1 alpha-2.
in_businessWhether the seller trades as a business.
natural_personWhether the seller is a private individual.
tax_regimeThe VAT regime the seller declares.
small_business_schemeThe national small-business exemption the seller declares. Empty for none.
MarketplaceSellerRegimeChangeItem
kindThe change's kind, which names its shape.
afterThe declared VAT regime after the edit; absent when there is none.
beforeThe declared VAT regime before the edit; absent when there was none.
MarketplaceSellerSchemeChangeItem
kindThe change's kind, which names its shape.
afterThe declared small-business exemption after the edit; absent when there is none.
beforeThe declared small-business exemption before the edit; absent when there was none.
MarketplaceSellerSecretChangeItem
kindThe change's kind, which names its shape.
That the identifier was set, replaced or cleared. Its value is never in the trail.
MarketplaceSellerTextChangeItem
kindThe change's kind, which names its shape.
afterThe text after the edit; absent when there is none.
beforeThe text before the edit; absent when there was none.
MarketplaceStatement
created_atidThe statement.
The window the movements were drawn from.
seller_customer_idThe seller this statement pays. Its name, address and tax identifiers live on that customer.
statusfinalized means the statement is fixed and the seller has been sent it; paid means its payout has been transferred. A statement is never withdrawn — a correction is stated on the next period's statement.
What the period came to, in the statement's one currency.
updated_atfinalized_atWhen the statement was fixed and sent.
The individual movements the totals are the sum of. Sent with include=lines, on the list and on one statement. Sent without include=lines on GET /marketplace/statements/{id} until 2026-11-30; after that only with include=lines. The same movements are at GET /marketplace/statements/{id}/lines.
numberThe statement's own number, e.g. PS-2026-000017. Absent until it is finalized.
paid_atWhen its payout was marked transferred.
MarketplaceStatementLine
Signed as the seller reads it: a sale adds, a fee, a refund and a dispute take away.
What the movement came from: a recorded money movement (posting), or the previous statement in the case of the brought-forward balance (statement).
idkindWhat the movement is: a completed sale, this organization's fee, tax on that fee, a correction, money given back to a buyer, a dispute the seller bore, an amount held back, or the balance brought forward from the previous statement.
occurred_atWhen the money moved, which can be earlier than when the statement was drawn.
caused_by_idThe movement or statement it came from. Deprecated: use caused_by.id instead. Removed on 2026-11-30.
caused_by_kindWhat the movement came from: a recorded money movement, or the previous statement in the case of the brought-forward balance. Deprecated: use caused_by.type instead. Removed on 2026-11-30.
MarketplaceStatementLineKind
MarketplaceStatementPeriod
endsFirst instant AFTER the period, not included. A movement at exactly this instant belongs to the next statement.
startsFirst instant of the period, included.
MarketplaceStatementRef
idThe statement.
numberThe statement's own number, e.g. PS-2026-000017.
MarketplaceStatementTotals
Corrections and amounts held back, as they were recorded.
What the previous statement left unpaid because it was below the minimum worth transferring. Negative when the seller owed.
Disputes the seller bore.
This organization's fee. Negative where it was withheld, positive where a refund gave it back.
VAT on the fee, withheld with it: negative when withheld, positive when a refund gives it back. Zero when the fee's invoice carries no VAT.
What the seller's completed sales in this period came to.
The carried balance plus the six above: what this period leaves the seller owed. A payout is prepared for it when it reaches the minimum worth transferring.
What was given back to buyers in this period.
MarketplaceSupplyReason
Member
emailrole_idsThe roles the member holds, by Role.id: the name of a built-in role (admin, member, no_access) or the uuid of a custom role. From 2026-11-30 every entry is the role's uuid (Role.subject_id), built-in roles too.
statuspending, active or suspended. pending until the invited person signs in for the first time; suspended members keep their roles but cannot sign in.
user_idnamerolesThe names of the roles the member holds. Deprecated: use role_ids instead. Removed on 2026-11-30.
MergeConflict
plan_idPlan both subscriptions are on, which is what makes them conflict.
source_subscription_idSubscription on the source customer that blocks the merge because it shares a plan with a target subscription.
target_subscription_idSubscription on the target customer that shares the plan with the source subscription.
MergeCustomerRequest
source_customer_idCustomer whose records are moved and which is then retired; must differ from target_customer_id.
strategyPREVIEW to compute the merge result without applying it, or MOVE_ALL to perform the merge.
target_customer_idSurviving customer that absorbs the source's records.
MergeStrategy
Requests also accept the new spelling: each value in lower case (move_all for MOVE_ALL). The listed spelling is deprecated in requests and accepted until 2026-11-30.
Meter
created_atfunctionAggregation applied over the window: SUM, COUNT, MAX, MIN, AVG, UNIQUE_COUNT, LAST, or P95.
idkeyOrg-unique slug identifying the meter, e.g. "api_calls".
metric_keyEvent ingestion key this meter aggregates over.
nameHuman-readable label for the meter.
organization_idupdated_atTime window over which the aggregation is computed.
workspace_idWorkspace the meter belongs to.
When set, this is a derived meter computed from other meters via a formula.
dedup_key_pathJSON-path to the event field used for deduplication; default uses the event's idempotency_key.
dimensionsEvent metadata fields exposed for group-by.
event_schemaJSON-Schema document validating ingested events; null disables validation.
Predicate tree restricting which events the meter includes.
late_event_policyWhat ingest does with an event dated before its subscription's current billing period: omitted refuses it (422 USAGE_PERIOD_CLOSED); CLAMP_TO_PERIOD stores a positive one at the start of the current period, where the next invoice bills it.
How the billable quantity is snapped before pricing (increment + mode). Absent means exact: priced at the metered precision, up to 8 decimal places. Never applied to usage views, analytics, thresholds or pricing variables.
Alert conditions evaluated against the meter's output.
unique_by_fieldEvent field whose distinct values are counted; set for UNIQUE_COUNT.
unit_currency_fieldEvent field carrying the currency when the metric measures money.
unit_labelDisplay label for one metric unit (e.g. "calls").
value_fieldEvent field aggregated; set for SUM/MAX/MIN/AVG/P95/LAST.
MeterAggregationDefinition
functionAggregation applied: SUM, COUNT, MAX, MIN, AVG, UNIQUE_COUNT, LAST or P95.
metric_keyEvent ingestion key selected. Never snapshotted — identity, not aggregation config.
Reset cadence; an absent duration aggregates over the whole period.
Set when this is a derived meter computed from other meters.
The meter's own predicate.
The binding's predicate, AND-ed onto the meter's for this product only.
unique_by_fieldEvent field whose distinct values are counted.
value_fieldEvent field aggregated.
MeterBreach
comparatorHow observed_value was compared against threshold_value: gt, gte, lt, lte or eq.
idmeter_idThe meter whose threshold was crossed.
meter_keyThe meter's key when the threshold was crossed. Kept with the event, so it stays readable after the meter is deleted.
observed_valueThe meter's value that crossed it, as an exact decimal string.
occurred_atWhen the threshold was crossed.
organization_idthreshold_nameThe name of the threshold that was crossed; empty when it has none.
threshold_valueThe threshold's target value, as an exact decimal string.
delivered_atWhen the meter.threshold_breached event was delivered to the webhook endpoints subscribed to it. Absent while delivery is pending.
product_idThe product the usage was reported under.
subscription_idThe subscription whose usage crossed the threshold.
MeterChange
kindWhat the change is about: a text, the aggregation, the filter, the window, a group-by field, the late-event policy, the event schema, the formula, the rounding or an alert condition.
afterFor a text: its value after the act; absent when it was cleared.
beforeFor a text: its value before the act; absent when there was none.
dimensionFor a group-by field added or removed: the event metadata field.
event_schemaFor the event schema: whether one was set where there was none, replaced by another, or cleared.
For the event filter: before the act and after it.
For a derived meter's formula: before the act and after it.
For the aggregation: before the act and after it.
For the late-event policy: before the act and after it.
For the billable-quantity rounding: before the act and after it.
For an alert condition: before the act and after it.
For the aggregation window: before the act and after it.
MeterEvaluation
meter_idThe meter evaluated.
The period evaluated: the request's from and to, else the subscription's current billing period.
subscription_idThe subscription whose usage was evaluated.
Where the invoice would NOT simply carry the totals above, for this subscription and period. Each entry is a step the pipeline runs AFTER the resolver returned these numbers. Empty means none of the steps this endpoint can evaluate applies - it is not a guarantee that the invoice's lines match these buckets one for one, because one step is not readable from here: whether the billing period SEGMENTS. Segmentation depends on the org's price/tax/FX resolution policy and on boundaries (a tax-rule change, a daily FX split) the preview does not load, and a segmented period bills one line per segment for every aggregation function. The two segmentation causes that ARE readable - a non-additive function, and a product on the latest track whose version can flip mid-period - are reported.
What the invoice pipeline computes for this subscription and period: the product-version snapshot. Absent when the published version does not bill this meter — see billed_absent_reason.
billed_absent_reasonWhy billed is absent.
What the LIVE meter row computes. Not billing truth. Absent when the request did not ask for it.
head_differs_from_billedTrue when head and billed produced different BUCKET SETS - i.e. a meter edit has not reached this subscription's product version yet. Compared per (reset window, price_key, wallet_currency) rather than on one flat total, because each of those three axes fans out into its own invoice line: a reset cadence changed from 24h to 12h keeps the total and changes the bill. Absent when only one side ran.
product_idThe metered product the evaluation was scoped to. usage_events carry product_id, so the same meter under two products measures two different numbers. Absent when the subscription has several candidate products and none of their published versions bills this meter.
fromInclusive start of the period evaluated. Deprecated: use period.start instead. Removed on 2026-11-30.
meter_keyThe evaluated meter's key. Deprecated: use meter_id instead. Removed on 2026-11-30.
toExclusive end of the period evaluated. Deprecated: use period.end instead. Removed on 2026-11-30.
MeterEvaluationBucket
event_countHow many usage events fell into this bucket.
price_keyKeyed-billing axis the events carried; null when the events were not keyed.
valueThe aggregated quantity, as an exact decimal string. Not money — a count of units.
wallet_currencyPer-event wallet pin; null means the customer's preferred-currency cascade applies.
The reset window this bucket aggregates.
fromInclusive start of the reset window this bucket aggregates. Deprecated: use window.start instead. Removed on 2026-11-30.
toExclusive end of the reset window this bucket aggregates. Deprecated: use window.end instead. Removed on 2026-11-30.
MeterEvaluationRun
One row per (reset window, price_key, wallet_currency) group.
is_billing_truthTrue when an invoice actually consumes this number: a product-version snapshot AND a role of BILLABLE_QUANTITY (the line's quantity) or PRICING_VAR (bound into the price formula). False for the live meter row - which is what you are editing, and which no invoice reads until the consuming products are republished - and false for an INFORMATIONAL binding, which the pipeline evaluates and then consumes nowhere.
sourceWhich definition produced these numbers.
totalSum of every bucket's value, as an exact decimal string. What it means for the invoice: for a BILLABLE_QUANTITY binding the pipeline fans these buckets out into one line per (reset window, price_key, wallet_currency), so this is the sum of those lines' quantities rather than any single line's. Two pipeline steps re-partition AFTER the resolver returns and can break even that identity - a sub-period allowance-refresh cadence and a segmented billing period; whenever either applies to this request it is named in total_caveats.
The reset windows the period tiled into, in order. They tile the period exactly.
binding_idThe product-meter binding whose overlay was applied.
product_version_idThe product version whose snapshot was evaluated. Absent on the live run.
roleHow the pipeline consumes this binding: BILLABLE_QUANTITY, PRICING_VAR or INFORMATIONAL.
MeterEventPreview
event_interpreted_asWhich of the two readings the endpoint took of the event object: METADATA means the object itself was treated as the event's properties; INGEST_ENVELOPE means it was treated as an ingest body, whose properties are its metadata member (none when it has no metadata) and whose other fields are usage_events columns no filter path resolves against.
filter_checkedTrue when a non-empty filter_tree was supplied. An empty tree matches every event by definition and is not probed.
indeterminateTrue when the whole-tree predicate evaluated to SQL NULL. The event is still not counted.
Per-leaf verdicts in tree order.
matchedWhether the compiled predicate — the same SQL the invoice's WHERE clause carries — counts this event. True when no filter was supplied. Meaningless when filter_error is set.
schema_checkedTrue when an event_schema was supplied and compiled. False means no schema was tested, not that the event passed one.
Why the schema rejected the event. Empty when it did not.
schema_validWhether the event satisfies the supplied JSON Schema. Meaningless when schema_checked is false.
filter_errorSet when the tree as a whole could not be evaluated because at least one leaf could not be — see that leaf's error. The per-leaf verdicts of the leaves that DID evaluate are still reported; the whole-tree verdict is not, because it is the combined predicate that failed.
MeterFilter
opAND or OR for a group; the comparison for a condition.
A group's members.
fieldA condition's event field.
valuesA condition's comparison value, as text; each member of a list.
MeterFilterLeafResult
fieldThe leaf's dotted path into the event's metadata.
indeterminateTrue when the comparison evaluated to SQL NULL rather than false — almost always because the field is absent from the event. The leaf still does not match; this says why. Meaningless when error is set.
matchedWhat a WHERE clause would do with this leaf. A SQL NULL counts as not matched. Meaningless when error is set.
opThe leaf's comparison operator.
pathChild-index route from the tree root to this leaf, so an editor can line the verdict up with the node being edited. Empty for a single-leaf tree.
errorSet when Postgres refused to EVALUATE this leaf rather than returning true, false or NULL: gt/gte/lt/lte cast the value to numeric, so a present-but-non-numeric value ({"duration":"10s"}) is a cast failure; a malformed jsonpath and an invalid regex fail the same way. The leaf has no verdict - the filter itself needs fixing.
MeterFilterSides
The filter after the act; absent when every event counts.
The filter before the act; absent when every event counted.
MeterFormula
expressionArithmetic expression over the variable names, e.g. "max(0, calls - free)". Omit with variables omitted to send the empty formula {}, which CLEARS composed_of.
Maps each short name used in expression to the source meter id it draws from.
MeterFormulaSides
The formula after the act; absent when the meter became a plain one.
The formula before the act; absent when the meter was a plain one.
MeterFunction
Requests also accept the new spelling: each value in lower case (avg for AVG). The listed spelling is deprecated in requests and accepted until 2026-11-30.
MeterFunctionSides
afterThe setting after the act; absent when it was cleared.
beforeThe setting before the act; absent when it was unset, or on a creation.
MeterLatePolicySides
afterThe setting after the act; absent when it was cleared.
beforeThe setting before the act; absent when it was unset, or on a creation.
MeterRef
functionAggregation applied over the window.
idkeyOrg-unique slug identifying the meter.
nameHuman-readable label for the meter.
unit_labelDisplay label for one metric unit.
MeterRoundingSides
The rounding after the act; absent when the quantity is exact.
The rounding before the act; absent when the quantity was exact.
MeterSchemaIssue
messagepathJSON pointer into the event, empty for the document root.
MeterThresholdBreachedPayload
comparatorThe comparison operator that defines the breach.
meter_idThe meter that breached its threshold.
meter_keyThe meter's stable key.
observed_value^-?\d+(\.\d+)?$ · requiredThe observed meter value that crossed the threshold.
organization_idproduct_idThe metered product the meter belongs to.
subscription_idThe subscription whose meter breached the threshold.
threshold_nameThe name of the configured threshold that was crossed.
threshold_value^-?\d+(\.\d+)?$ · requiredThe configured threshold value.
window_endThe end of the evaluation window.
window_startThe start of the evaluation window.
workspace_idThe workspace that owns the meter.
MeterThresholdSides
The condition after the act; absent when it was removed.
The condition before the act; absent when it was added.
MeterTotalCaveat
codeWhich re-partitioning step may apply.
messageWhat it does to the number, in one sentence.
MeterWindow
endFirst instant after the reset window, not included.
startFirst instant of the reset window, included.
fromInclusive start of the reset window. Deprecated: use start instead. Removed on 2026-11-30.
toExclusive end of the reset window. Deprecated: use end instead. Removed on 2026-11-30.
MeterWindowSides
The setting after the act; absent when it was cleared.
The setting before the act; absent when it was unset, or on a creation.
MethodChange
KindMethodChangeKind
MethodFlagChange
afterThe value after the change; absent when there is none.
beforeThe value before the change; absent when there was none.
MethodMetadataChange
keyThe entry's key.
afterThe value after the change; absent when there is none.
beforeThe value before the change; absent when there was none.
MethodSecretChange
That the identifier was set, replaced or cleared. Its value is never in the trail.
MethodStatusChange
afterThe value after the change; absent when there is none.
beforeThe value before the change; absent when there was none.
MethodTextChange
afterThe value after the change; absent when there is none.
beforeThe value before the change; absent when there was none.
Metric
additivityWhether a coarser figure may be derived by summing finer buckets. A semi-additive metric (any stock) may not.
availableFalse for a metric that is declared but not yet served. Present rather than absent so the catalogue does not appear to shrink and grow between releases.
descriptiondimensionsThe closed set this metric may be sliced by. Anything else is refused.
grainskeylabelseries_kindunitderived_fromWhen set, this metric is computed from another at read time rather than stored.
MetricBreakdown
dimensionlabelmetricseries_kindDescending by value, with the folded 'Other' tail last regardless of size — a residual sitting mid-list reads as a real category.
totalunitreductionThe reduction in English words. series_kind says the same: a flow is summed over the window, a stock is the level at its end. Deprecated: use series_kind instead. Removed on 2026-11-30.
MetricBreakdownSlice
is_otherTrue for the folded tail of a top_n request, so it can be rendered differently rather than string-matched.
seriesvalueDecimal string.
sharevalue / total, 0..1. Compute it from those two fields; a share cannot be re-aggregated, so a subset's share is the sum of its values over total. Deprecated: no replacement. Removed on 2026-11-30.
MetricMeta
as_ofThe instant this answer is true as of. For a live query, when it ran. Once rollups exist it is the MINIMUM watermark across every source read — never the freshest — because freshness cascades downward and reporting the level you happened to hit is how a stale month passes for current.
basisWhere the number came from. Rollups land metric by metric, so a mixed response is normal rather than exceptional.
partialTrue when a source was knowingly incomplete. See notes.
timezoneThe IANA zone that actually produced the buckets — which may differ from the one configured, if that could not be resolved.
timezone_fallbackTrue when the configured timezone was unusable and UTC was substituted. Reported rather than hidden.
complete_fromEarliest instant the series is known to be complete from. Absent means unbounded.
currencyISO 4217 code every value is denominated in. Absent for count metrics.
notesPlain-language qualifications on this answer. A number bounded by an accrual horizon or served in a substituted timezone says so here.
MetricPoint
bucketStart of the bucket, in the timezone reported in meta.
imputedTrue when this point was CARRIED FORWARD rather than observed. Only ever true for a stock: a level persists through a bucket in which nothing happened, and that is not the same claim as a measurement.
seriesSeries name. 'total' when unsliced; 'Other' is the folded tail of a top-N breakdown.
valueDecimal STRING, never a JSON number: money is decimal and a float round-trip loses cents.
MetricSeries
grainBucket width: day, week, month, quarter or year.
labelmetricseries_kindA STOCK is a level at an instant and must never be summed across buckets; a FLOW is additive over time. This is the difference between a correct chart and one that adds up balances.
series_namesEvery series present, sorted, with 'Other' last. Lets a client build a stable legend without scanning the points.
unitMoney
currencyvalue^-?\d+(\.\d+)?$ · requiredMonetary amount in MAJOR units (e.g. euros, not cents), encoded as a canonical decimal string with trailing zeros trimmed. "10", "10.0" and "10.00" are all valid encodings of the same amount, and the digit count does NOT indicate the currency's minor-unit scale (EUR 49.50 is emitted as "49.5"; KWD 3.100 as "3.1"). Parse into a decimal type and compare numerically — never as strings. Use the sibling "currency" (ISO 4217) to decide display precision.
MoneyEntry
currencyvalue^-?\d+(\.\d+)?$ · requiredDecimal number encoded as a string to preserve precision.
MoneyTable
default^-?\d+(\.\d+)?$Decimal number encoded as a string to preserve precision.
NamedLevel
idkindnameThe organization's display name, when the level is an organization this deployment can name. Empty otherwise.
NarrowPromotionRequest
audience_idPoint at a different audience.
customer_excludesReplace the explicit exclude list.
customer_includesReplace the explicit include list.
descriptionReplace the ceilings. A ceiling below what is already counted in its largest bucket is refused with the figure named, so the operator can end the promotion instead.
nameon_narrowingWhether existing holders keep firing to their own end or end at the next bill.
public_descriptionwindow_endBring the last day forward. Refused when it is later than the current end, and clearing it is refused outright.
NegotiatedRung
unit_amount^-?\d+(\.\d+)?$ · requiredMAJOR units, in the currency of the object that carries this ladder: the per-unit rate under VOLUME and STAIRCASE, the price per package under PACKAGE.
A formula that computes this rung's rate from plan_price, product_price, costs and rate tables; unit_amount is 0 when set. Null on a fixed rung.
formula_drivenRead-only, and only ever set on a catalog ladder: this tier's catalog rate is computed at billing time (formula or rate expression), so unit_amount is its static fallback rather than the rate that would be charged. Ignored on an agreed ladder.
package_size^-?\d+(\.\d+)?$PACKAGE only: how many units one package holds, as on the catalog tier. Null under every other pricing model.
up_to^-?\d+(\.\d+)?$Inclusive upper quantity bound; the rung covers (previous rung's up_to, up_to]. Absent on the open-ended final rung.
NextInvoice
Its lines, in the order the invoice will print them, the settlements of changes inside periods already billed among them. Empty when nothing is next.
currencyISO 4217 currency of every amount.
cut_atThe cut the invoice is the invoice of: when it is billed. Absent when no cut is next or it bills nothing.
period_endEnd instant of that span, exclusive.
period_startStart instant of the span its windows cover.
Net of tax.
The tax the invoice will charge.
What the invoice will ask.
NoticeKind
Requests also accept the new spelling: each value in lower case (collection_handoff for COLLECTION_HANDOFF). The listed spelling is deprecated in requests and accepted until 2026-11-30.
OSSThresholdState
crossed_atWhen the threshold was approached or crossed.
currencyThe seller's local currency, ISO-4217.
Cross-border EU revenue accumulated so far this year, as a money object.
organization_idseller_countryThe seller's country of establishment, ISO-3166 alpha-2.
The EU OSS revenue threshold (EUR 10,000), always denominated in EUR, as a money object.
yearThe calendar year the threshold is tracked for.
workspace_idThe workspace this threshold state belongs to.
OpenDraftInputBody
base_version_idThe version the working draft is authored on top of — the live head, or one of the entity's scheduled versions. Omit for the head.
OpenPeriod
startFirst instant of the period, included.
endFirst instant after the period, not included; absent while the period is open-ended.
Organization
company_size_tierThe size category an e-invoicing mandate binds this seller under (GE, ETI, PME or MICRO); null when not declared.
created_atWhen the organization was created.
default_currencyThe currency new prices and documents use unless they name one (ISO 4217).
default_date_formatiso, us or eu; null inherits.
default_first_day_of_weekmonday, sunday or saturday; null inherits.
default_languageDefault document language for people in this organization; null inherits.
default_localeThe language documents are issued in unless the customer names one.
default_number_formatHow numbers are written; null inherits.
default_timezoneThe IANA time zone billing days and periods are counted in.
idThe organization's id.
legal_nameThe registered name; null when only the trading name is set.
main_emailWhere mail for this organization lands when no recipient list in its category answers.
nameThe name the organization trades under.
peppol_idThe electronic address (EN 16931 BT-34) in scheme:value form; null when none is on file.
phoneThe organization's public number; null when none is set.
sales_audienceWho the organization sells to: b2b, b2c or both; null until it was chosen.
signup_emailThe address the organization signed up with. An account fact, not a mailbox mail is sent to.
slugThe organization's unique short name, used in URLs.
statusopen while the organization operates; closed once it was closed for good.
support_emailThe support address printed on documents; null when none is set.
tax_inclusiveWhether the public checkout shows prices including tax by default; null when not set (shown excluding tax).
tax_numberThe national tax number (EN 16931 BT-32) that applies today; null when none is on file.
vat_idThe VAT identification number (EN 16931 BT-31) that applies today; null when none is on file. Manage the numbers with /organization/identifiers.
vat_id_collectionWhether the public checkout asks the buyer for a VAT id by default: hidden, optional or required; null when not set (optional).
The registered name (legal_name, else name) with the field that answered: the value the seal's name and the bank account holder inherit. Sent with include=provenance; sent without being asked until 2026-11-30.
OrganizationChange
fieldThe fact: a field of the company profile, the tax profile or the legal identity, the edge to the parent, or a workspace's name.
kindWhat happened to the fact: stated where there was none, changed, or no longer stated.
What the organization states after the act; absent when it states nothing.
What the organization stated before the act; absent when it stated nothing.
OrganizationContact
categoryWhat this contact receives: quotes_contracts, approvals, finance, operations or reports.
created_atidis_primaryWhether mail for this category is addressed here. At most one row per (workspace, category) can be primary.
kindWhether this row names a shared mailbox, a person, or a role expanded at send time.
organization_idpositionThe slot within the category, 1 to 3. The primary normally holds 1; the others are copied on the mail in position order.
updated_atworkspace_idThe workspace these recipients apply to, so a sandbox alert does not reach the live finance desk.
emailThe mailbox, when kind is email.
nameOptional label for the row, e.g. "Finance desk".
roleThe organisation role, when kind is role. Every active member holding it receives the mail.
user_idThe member, when kind is user.
OrganizationContactCategory
OrganizationDelegation
created_atdirectionWhich way the access points. Always downward today: an organization can reach into one below it, never the reverse.
granted_byThe person who gave it.
grantee_org_idThe organization whose members receive it.
grantee_roleThe role a person must hold in that organization to receive it.
grantor_org_idThe organization that gave the right away. Always above the target.
idThe grant.
statusWhether the grant is in force.
target_org_idThe organization they may work in.
target_roleThe role they hold while they are in it.
updated_atexpires_atWhen it ends on its own; absent means it ends only when withdrawn.
reasonWhy, in the grantor's own words.
revoked_atWhen it was withdrawn.
revoked_byThe person who withdrew it.
revoked_reasonWhy it was withdrawn.
target_org_nameThe name of the organization the access points at. Sent on the list with include=display; sent without being asked until 2026-11-30, after that only with include=display.
OrganizationDomainChange
keyThe domain, in lower case.
kindWhat happened to the domain.
afterWhether the domain is verified after the act; absent when the list no longer holds it.
beforeWhether the domain was verified before the act; absent when the list did not hold it.
OrganizationHold
cascadesWhether it reaches every organization below the one it was placed on.
created_ateffectsWhat it stops where it applies: sign_in, sell, bill, collect, mail, provision.
idThe hold.
kindWhy the restriction is in place.
organization_idThe organization the hold restricts.
placed_by_organization_idThe organization that placed it.
reachWhose requests it stops: session (a person), api_key (an integration), job (scheduled work the platform runs for the organization).
starts_atWhen the restriction begins.
ends_atWhen it stops on its own; absent means it stops only when released.
placed_aboveThe hold was placed by an organization above this one and reaches it from there. Sent with include=actions; sent without being asked until 2026-11-30, after that only with include=actions.
placed_by_user_idThe operator who placed it; absent when a system consumer did.
reasonThe operator's own note.
releasableThis organization placed the hold and may release it. Sent with include=actions; sent without being asked until 2026-11-30, after that only with include=actions.
released_atWhen it was released.
released_by_user_idThe operator who released it.
OrganizationIdentifier
countryThe state whose register or authority issued it.
kindThe identifier's kind (a VAT id, a tax number, a register number of a country).
valueThe number as its holder writes it.
valid_fromThe first day it is in force; absent when it holds from any day.
valid_toThe last day it is in force; absent when it has no end.
verifiedWhat an authority last said of the number.
OrganizationRef
idThe organization's id.
legal_nameThe registered name; null when only the trading name is set.
nameThe name the organization trades under.
peppol_idThe electronic address (EN 16931 BT-34) in scheme:value form; null when none is on file.
tax_numberThe national tax number (EN 16931 BT-32) that applies today; null when none is on file.
vat_idThe VAT identification number (EN 16931 BT-31) that applies today; null when none is on file.
OrganizationRegistration
countryThe state the registration is held in.
schemeThe scheme the registration is held under.
valid_fromThe first day it is in force.
evidenceThe operator's reference to the evidence of the registration.
identifierThe registration number, when the scheme issues one.
valid_toThe last day it is in force; absent when it is open.
OrganizationRepresentative
nameThe person's name.
roleThe office, in the jurisdiction's own words.
OrganizationValue
typeThe fact's value type, which names the member the value is in.
For type=address.
amount^-?\d+(\.\d+)?$For type=money, in currency.
currencyFor type=money: the amount's currency.
edge_kindFor type=edge_kind: customer — a sale made the edge; affiliate — an operator did.
flagFor type=flag.
For type=identifier.
For type=registration.
For type=representatives, in the order the organization declared.
textFor type=text.
OverrideInvoiceRequest
fieldWhich field to replace.
target_idThe atom to override.
valueThe replacement, as text: a decimal for quantity and unit_price, the heading for title.
OwnSetting
categorykeylabelpolicyWhat the organizations below may do with this value.
typevalueThe value of a string, int or bool setting, in its wire spelling. Empty for a list or money setting, whose value is value_list or value_money.
allows_nothingPresent and true for an allow-list (allowed identity providers, allowed email domains) whose organizations' lists share no entry: nothing is allowed, and value_list is absent. It is never the empty list, which allows everything. Absent on every other value.
The bound a bounded policy carries.
Present when the setting holds a secret (a webhook URL that is its own bearer token): whether a value is set, and nothing else. The value itself is never returned, and value is then empty.
value_listA list setting's value, in order. An empty array is the empty list, which is a value. Absent for every other type.
A money setting's amount and currency. Absent for every other type, and for the money value with no amount.
PageGeometry
cropThe CropBox (the visible page), [llx, lly, urx, ury] in PDF points; equal to media when the page has none.
mediaThe MediaBox, [llx, lly, urx, ury] in PDF points.
pagePage number, from 1.
rotateThe page's /Rotate. Always 0 for a page that was accepted.
PageMargins
bottom^-?\d+(\.\d+)?$Bottom margin in millimetres (mm), greater than zero. Absent keeps the page default.
left^-?\d+(\.\d+)?$Left margin in millimetres (mm), greater than zero. Absent keeps the page default.
right^-?\d+(\.\d+)?$Right margin in millimetres (mm), greater than zero. Absent keeps the page default.
top^-?\d+(\.\d+)?$Top margin in millimetres (mm), greater than zero. Absent keeps the page default.
PaginationBlock
cursorOpaque continuation token for the next page; pass it back verbatim as ?cursor=. Null when there is no further page or the list paginates by offset. Cursors are stateless and do not expire, but are only valid for the list and filters that produced them.
has_moreTrue when another page exists. This is the authoritative continuation signal; prefer it over total_count arithmetic.
Optional facet counts, keyed facet then value (e.g. counts.status.active). Present only on lists that declare facets.
total_countBest-effort total for the whole (filtered) list. Keyset lists compute it on the first page only and omit it afterwards; offset lists always set it; small bounded sub-lists set it to the returned length. Absent means unknown, not zero - use has_more to drive paging.
PauseMovedDate
atThe date as it stands now. It moves later by exactly the paused time.
fieldWhich end of the phase carries the fixed date.
positionZero-based index of the phase on the live revision.
Payment
The amount charged, in the payment's currency.
created_atcustomer_idThe customer the payment is taken from.
idinitiatorWho started the payment: the customer (on a checkout or the portal) or the merchant (an automatic or operator charge).
organization_idproviderThe payment provider that processes the payment.
purposeWhat the payment pays for; purpose_ref_id names it. On 2026-11-30 purpose becomes an object {type, id}: type is today's value, id the record purpose_ref_id names today (absent for method_verification).
statusWhere the payment stands: pending, requires_action (the customer must act; see next_action), processing, succeeded, failed or cancelled.
updated_atworkspace_idattempt_numberWhich attempt at the charge this is, from 1. Sent without include=provenance until 2026-11-30; after that only with include=provenance.
confirmed_atWhen the payment was confirmed for processing.
decline_codeThe card issuer's decline code, when the provider reports one.
failed_atWhen the payment failed.
failure_codeThe provider's code for why the payment failed. Present only on a failed payment.
failure_messageThe provider's explanation of the failure.
idempotency_keyThe key the charge was sent to the provider with. Sent without include=provenance until 2026-11-30; after that only with include=provenance.
metadataKey-value data stored with the payment.
next_actionThe provider's instruction to the customer while status is requires_action (for example a 3-D Secure redirect), as the provider sent it.
parent_payment_idThe earlier payment this one retries. Sent without include=provenance until 2026-11-30; after that only with include=provenance.
payment_method_idThe saved payment method charged. Absent for a payment the customer completes on the provider's hosted page.
provider_payment_idThe provider's id of the payment. Absent until the provider has created it.
purpose_ref_idThe record the payment pays for: the invoice (invoice_payment), the marketplace sale (marketplace_sale), the dunning case (dunning_case) or the wallet (wallet_topup). Absent for method_verification. Removed on 2026-11-30, when purpose.id carries it.
succeeded_atWhen the payment succeeded.
currencyThe currency of amount. Deprecated: use amount.currency instead. Removed on 2026-11-30.
stateThe same value as status. Deprecated: use status instead. Removed on 2026-11-30.
PaymentChangedPayload
organization_idpayment_idThe payment that was created or changed and needs re-indexing.
PaymentDetails
bank_account_nameAccount holder override; empty inherits the registered name.
bank_bicBIC / SWIFT code.
bank_ibanIBAN, stored without spaces.
invoice_contact_emailEN 16931 BT-43 override; empty inherits the support, else the main, address.
invoice_contact_nameEN 16931 BT-41 override; empty inherits the organisation's name.
invoice_contact_phoneEN 16931 BT-42 override; empty inherits the organisation's phone.
What each overridable field resolves to and where the value comes from. Sent with include=layered; sent without being asked until 2026-11-30.
PaymentErrorType
PaymentGateway
configProvider-specific credential document. Stripe: api_key (required), stripe_account_id, webhook_secret, api_base. GoCardless: access_token, webhook_secret. Secret values are masked on every read.
created_atdisplay_nameThe name the gateway is shown under.
idis_defaultWhether payments go through this gateway when more than one could take them; at most one gateway per workspace.
modelive when the credential moves real money, test when it reaches the provider's test environment. Read from the credential, never set.
organization_idproviderThe payment provider, e.g. stripe or gocardless (GET /payment-gateways/catalog lists them).
statusactive: the gateway takes payments; disabled: it takes none until it is active again.
supported_currenciesThe currencies this gateway charges, a subset of what its provider can charge.
updated_atworkspace_idThe workspace the gateway charges in: a sandbox workspace holds only test credentials.
last_verified_atWhen the credential was last checked against the provider (POST /payment-gateways/{id}/verify). Absent when it was never checked, also right after the credential was replaced.
last_verify_detailWhat the last check found. Never contains the credential.
last_verify_okWhether the provider accepted the credential at the last check.
Key-value data stored with the gateway.
is_enabledtrue when status is active. Deprecated: use status instead. Removed on 2026-11-30.
PaymentGatewayCredentialChangeItem
keyThe credential's key in the provider's credential document, e.g. api_key or webhook_secret.
kindThe change's kind, which names its shape.
afterFor a public key: its value after the act; absent when there is none. Never stated for a secret.
beforeFor a public key: its value before the act; absent when there was none. Never stated for a secret.
For a secret: that it was set, replaced or cleared. Its value is never in the trail, so before and after are absent.
PaymentGatewayCurrencyChangeItem
currencyThe currency, ISO 4217, in the lower-case form the provider takes it.
kindThe change's kind, which names its shape.
PaymentGatewayFlagChangeItem
kindThe change's kind, which names its shape.
afterWhether it holds after the act.
beforeWhether it held before the act.
PaymentGatewayModeChangeItem
kindThe change's kind, which names its shape.
afterThe mode after the act.
beforeThe mode before the act; absent on a creation.
PaymentGatewayTextChangeItem
kindThe change's kind, which names its shape.
afterThe display name after the act; absent when there is none.
beforeThe display name before the act; absent when there was none.
PaymentGatewayVerification
checked_atdetailWhat was checked and, when ok=false, what the vendor said. Never contains the credential.
okPaymentMethod
created_atcustomer_idCustomer this payment method belongs to.
idis_default_for_auto_payWhether this method pays the customer's invoices automatically; at most one method per customer.
is_default_for_topupWhether wallet top-ups are charged to this method; at most one method per customer.
organization_idproviderPayment provider that holds this method, e.g. "stripe" or "gocardless"; sepa_direct for a mandate collected by your own SEPA files.
statusLifecycle status: active, expired, or removed.
typeMethod type. A method a provider attached (a Stripe card, a GoCardless mandate) carries the type its provider's spelling maps to: card is CREDIT_CARD, a SEPA debit SEPA_DIRECT_DEBIT (SEPA_DIRECT_DEBIT_B2B under a B2B mandate), any other bank debit BANK_ACCOUNT. The B2B/ACH types require a BUSINESS customer.
updated_atThe bank account's details, for a direct-debit or bank-account method; absent otherwise.
The card's details, for a card method; absent otherwise.
Free-form key/value metadata for caller use; not interpreted by billing.
provider_idProvider's own identifier for the stored method (e.g. a Stripe payment-method id); null when not tracked externally.
provider_method_idProvider-side identifier used to charge this method. Resolved from provider_method_id, falling back to provider_id for methods recorded through the API.
account_last4Last four digits of the bank account or IBAN. Deprecated: use bank_account.last4 instead. Removed on 2026-11-30.
bank_nameBank name for direct-debit and bank-account methods. Deprecated: use bank_account.bank_name instead. Removed on 2026-11-30.
display_brandCard brand for card methods (e.g. "visa"). Deprecated: use card.brand instead. Removed on 2026-11-30.
exp_monthCard expiry month (1-12). Deprecated: use card.exp_month instead. Removed on 2026-11-30.
exp_yearCard expiry year. Deprecated: use card.exp_year instead. Removed on 2026-11-30.
is_defaultThe same value as is_default_for_auto_pay. Deprecated: use is_default_for_auto_pay instead. Removed on 2026-11-30.
last4Last four digits of the card number. Deprecated: use card.last4 instead. Removed on 2026-11-30.
PaymentMethodBankAccount
bank_nameThe bank's name, when the provider reports it.
last4Last four digits of the account number or IBAN.
PaymentMethodCard
brandCard brand, e.g. visa.
exp_monthExpiry month, 1-12.
exp_yearExpiry year.
last4Last four digits of the card number.
PaymentMethodEventPayload
customer_idThe customer the method belongs to.
occurred_atWhen the write was made.
organization_idpayment_method_idThe payment method.
typeThe method's type, e.g. CREDIT_CARD or SEPA_DIRECT_DEBIT.
On an operator's edit: what it changed about the method, each before and after; an identifier of the instrument only as set, replaced or cleared.
default_forOn default_set: the default slot the method now fills — auto_pay or topup.
last4The last four digits shown for the method (a card's number or a bank account's), when known.
providerThe provider that holds the method, e.g. stripe or gocardless.
PaymentMethodFlagChangeItem
kindThe change's kind, which names its shape.
afterWhether it holds after the edit.
beforeWhether it held before the edit.
PaymentMethodMetadataChangeItem
keyThe entry's key.
kindThe change's kind, which names its shape.
afterThe entry's value after the edit, as JSON text unless it is a string; absent when it was removed.
beforeThe entry's value before the edit, as JSON text unless it is a string; absent when it was added.
PaymentMethodSecretChangeItem
kindThe change's kind, which names its shape.
That the identifier was set, replaced or cleared. Its value is never in the trail.
PaymentMethodStatusChangeItem
kindThe change's kind, which names its shape.
afterThe status after the edit.
beforeThe status before the edit.
PaymentMethodTextChangeItem
kindThe change's kind, which names its shape.
afterThe value after the edit; absent when there is none.
beforeThe value before the edit; absent when there was none.
PaymentMethodType
Requests also accept the new spelling: each value in lower case (ach_business for ACH_BUSINESS). The listed spelling is deprecated in requests and accepted until 2026-11-30.
PaymentOutcome
PaymentProviderCapabilities
charging_delay_secondsWorst-case seconds between first charge attempt and money movement. 0 for card-only.
refund_window_secondsSeconds after a charge during which a refund can still be initiated. 0 means unbounded by the provider.
requires_mandate_for_ddWhether direct debit needs a signed mandate first.
supported_method_typesMethod types an instrument can be created as here: card, one entry per direct-debit scheme, and the bank-redirect methods (ideal, bancontact) whose first payment yields a mandate. This is the axis routing decides on.
supports_cardsWhether card brands can be charged.
supports_countriesISO 3166-1 alpha-2 billing-address countries, upper-case.
supports_currenciesISO 4217 codes, lower-case.
supports_debitsDirect-debit schemes this provider can debit under, e.g. sepa_core, bacs.
supports_hosted_checkoutWhether the public checkout-link flow can use this provider.
supports_off_sessionWhether a saved method can be charged without the customer present.
PaymentProviderCatalogEntry
availableFalse when no gateway factory exists yet: shown as coming soon, not connectable.
Config keys this provider's credential document accepts.
display_nameVendor's own name, unlocalised.
idProvider slug, e.g. stripe.
What the provider can do. Absent while a provider is coming soon.
PaymentProviderCatalogEntryList
Every provider the API accepts, available first.
PaymentPurpose
PaymentRecordedPayload
What settled.
What is left.
customer_iddocument_idinstrumentcash or credit.
organization_idrecorded_atsettledTrue when this settlement brought the balance to zero.
payment_idThe provider charge that settled the document, when one did.
payment_method_idThe saved method the charge was taken from, when known.
providerThe gateway, for a cash settlement.
referenceThe provider's event reference, for a cash settlement.
subscription_idworkspace_idPaymentSearchData
amountThe payment's amount in major units, at the currency's scale.
currencycustomer_idThe customer who paid.
providerThe payment provider that processed it.
purposestatePaymentSearchHit
display_namePrimary label shown for the hit in the results list.
entity_typeKind of the matched entity; it names the shape of data.
idIdentifier of the matched entity.
scoreRelevance score from the search engine; higher ranks first.
tag_idsThe ids of the tags on the matched entity. Add include=tags to get the tags themselves.
The owning customer. Sent only with include=customer, and only when the entity has an owning customer.
customer_idOwning customer's id; empty for catalog entities that have no owning customer.
Entity-type-specific payload with the fields needed to render the hit. Sent without include=data until 2026-11-30; after that only with include=data.
referenceThe short per-organization human reference an operator would say out loud: an invoice's or credit note's number, a subscription's SUB-000123, a quote's QUO-2026-000078. Absent for a kind that is named rather than numbered (customer, product, plan, payment, dispute) and for a draft invoice, which has no number until it is finalized.
secondary_textSupporting line shown under the display name (e.g. an invoice number or email).
Tags attached to the matched entity. Sent without include=tags until 2026-11-30; after that only with include=tags.
customer_nameOwning customer's display name; empty for catalog entities. Deprecated: use customer.name (include=customer) instead. Removed on 2026-11-30.
PayoutAccountRequest
ibanThe account number in IBAN form. Send it in full; it is never returned in full.
bicThe bank's BIC, where the transfer needs one.
holder_nameThe account holder's name, as the bank has it.
PayoutEventPayload
What was transferred: the statement's net, as a money object.
atWhen the operator marked it paid.
bank_referenceThe transfer's reference at the platform's bank. In phase 1 this is the only evidence the transfer happened.
numberThat statement's number.
payout_idThe payout row.
seller_customer_idThe customer whose seller role was paid.
statement_idThe statement it settles.
PendingSettlement
One line per credit and per charge, in the order the invoice will print them. Empty when nothing is pending.
currencyISO 4217 currency of every amount; the subscription's.
cut_atThe cut whose invoice will carry the settlement: when it is billed. Absent when nothing is pending.
The lines' amounts together, net of tax: positive when the customer owes more, negative when they get money back. Absent when nothing is pending.
Period
endFirst instant after the period, not included: the cut that closes it.
startFirst instant of the period, included.
Permission
assignableTrue when a custom role may grant this permission.
default_grantTrue when a blanket grant carries this permission: the built-in admin role and an API key's FULL_ACCESS preset. An API key's READ_ONLY preset is the default-grant permissions ending in .read.
grouplabelpermissionsystemdescriptionPermissionCatalog
assignable_permissionsDeprecated: use permissions[].assignable instead. Removed on 2026-11-30.
default_grant_permissionsThe permissions a blanket grant carries - the built-in admin role and an API key's FULL_ACCESS preset: the assignable set minus the break-glass permissions. An API key's READ_ONLY preset is exactly its permissions ending in .read. Deprecated: use permissions[].default_grant instead. Removed on 2026-11-30.
PhaseEnd
kindHow the window closes.
atThe closing date, for kind=date.
Counted from the phase's start on the calendar in UTC, for kind=duration.
For kind=event.
fired_atWhere the switch strategy placed the cut once the event fired. The one fact recorded on a live subscription.
What an after_duration switch adds to the crossing.
The period a period_end switch falls back to when the deal has no billing calendar at the crossing; otherwise it waits for the billing window's end.
switchWhat the crossing does to the window, for kind=event.
PhaseEnteredPayload
entered_atThe instant the phase's window opened.
organization_idpositionThe phase's position in the revision, 0-based.
revisionThe live revision the phase belongs to.
subscription_idThe subscription whose phase opened.
workspace_idThe workspace that owns the subscription.
PhaseTotals
needs_quantity_linesHow many declared lines have no quantity set yet and are in no total. Counted here and not in unpriced_lines.
Every one-time charge of the phase, added up; zero when it has none.
one_time_basisrecurring_basis, for one_time.
What the lines paid for the whole phase in advance cost for its span, added up; zero when it has none.
prepaid_basisrecurring_basis, for prepaid.
What each billing period of the phase invoices for its recurring lines with an amount; zero when it has none.
recurring_basisWhether recurring is net (exclusive) or already contains the tax (inclusive); mixed when its lines mix net and gross prices, and recurring is then zero, because a sum of net and gross amounts is neither.
unpriced_linesHow many lines state no single amount for a reason other than usage or a missing quantity, and are in no total.
usage_linesHow many lines bill reported usage (their product is metered) and are in no total.
recurring_split, for one_time.
The billing period recurring is per. Absent when no recurring line names one.
recurring_split, for prepaid.
Present only when recurring_basis is mixed: the net and the gross recurring lines, each added up on its own basis.
PhaseWindow
endThe window's closing instant; null for an open end and for an unfired event.
startThe window's opening instant; null while it is unknown behind an unfired event.
statepast, current, future or pending, relative to the read's clock; skipped when a later date arrived before the phase opened, or when the subscription was cancelled before it opened; unstarted when the subscription has never been activated and the clock alone would call the window current or past; paused for the window the clock calls current while the subscription is paused. A cancelled subscription has no current window: the one open at the cancellation reads past.
end_latestFor an unknown closing (an unfired event): the latest it can be. A later phase's date wins — the phase ends there if the event has not fired.
start_latestFor an unknown opening: the latest it can be. A later phase's date wins — if the phase has not opened by then, it is skipped.
fromThe window's opening instant; absent when it is still unknown behind an unfired event. Deprecated: use start instead. Removed on 2026-11-30.
from_knownFalse when the opening instant is unknown. Deprecated: use start != null instead. Removed on 2026-11-30.
from_latestFor an unknown opening: the latest it can be. Deprecated: use start_latest instead. Removed on 2026-11-30.
toThe window's closing instant; absent for an open end. Deprecated: use end instead. Removed on 2026-11-30.
to_knownFalse when the closing instant is unknown. Deprecated: use end != null instead. Removed on 2026-11-30.
to_latestFor an unknown closing (an unfired event): the latest it can be. Deprecated: use end_latest instead. Removed on 2026-11-30.
PhraseMoneyArg
kindThe shape discriminator: an amount the reader formats in their own locale.
The amount, with its currency.
PhraseTextArg
kindThe shape discriminator: data rendered verbatim in every locale.
textThe value, verbatim: a name, a number, a reference.
PlaceOrganizationHoldRequest
kindarrears stops the organization selling; compliance stops its people signing in; freeze stops everything and reaches the whole subtree below it.
ends_atWhen it stops on its own. Omit for a hold that stops only when you release it.
reasonYour own note about why. Visible to you and to the organizations above you.
starts_atWhen the restriction begins. Defaults to now.
Plan
created_atidnameInternal operator-facing plan name.
organization_idprice_cadence_unitThe billing period this plan's prices were authored for (week, month or year). A subscription, quote or checkout that bills on a different cadence is refused — nothing scales a resolved amount by period length.
requires_continuous_coverageWhen true a subscription must keep this plan continuously covered (no coverage gaps).
statusThe plan's own lifecycle: draft (nothing published yet), active (its head version is published) or archived (retired by the operator). A scheduled release is a version state, never the plan's: see scheduled_versions.
tag_idsThe ids of the tags on the record, in name order. Add include=tags to get the tags themselves.
updated_atarchived_atTimestamp the plan was archived, if it has been.
Where the billing periods of a subscription on this plan fall, overriding the organization's default: start, day_of_month with its day, or last_day. A subscription copies it when it first goes live with a paid phase that bills this plan. Absent: the plan states none and the organization's default applies.
Org-defined custom field values for this plan.
default_early_stopWhat a stop inside a billing period paid in advance does with the unused part for a deal on this plan: no_credit keeps it billed, credit_unused credits it on the closing invoice. A deal may override it. Absent: the plan states none and no_credit applies.
default_timingWhen a line of this plan is invoiced if the deal states nothing for it: in_advance at the start of its billing period, in_arrears at its end. Usage is always billed in arrears. Absent: the plan states none and such a line is invoiced in arrears.
default_version_changeWhen a subscription line of this plan that follows the catalog moves to a newer version if the deal states nothing for it: immediate_prorate at the instant it takes effect (pro-rated), next_period at the next billing period, at_phase_change at the next phase change. Absent: the plan states none; the subscription's default, else next_period, applies.
descriptionInternal operator-facing description; not shown to buyers.
external_idCaller-supplied external identifier for reconciliation with an upstream system.
The version in force: its id, number and status. Absent while the plan has never been published.
Free-form operator key/value metadata.
The products on the plan, with the terms each is offered on. Sent only with include=products; include=products.product adds each one's product.
public_descriptionBuyer-facing description shown in checkout and the customer portal.
Every version scheduled to publish, in the order they will publish. Their rows are FROZEN — they no longer answer GET /{kind}/{id}/draft — so the entity's working draft is free for immediate changes while they stand. The version numbers are PROVISIONAL: head + rank, recomputed whenever the timeline moves.
The tags on the record, in name order. Sent without include=tags until 2026-11-30; after that only with include=tags.
Locale-keyed overrides for name, description and public_description.
Products the plan's version in force still offers but which are no longer attached to the plan. They keep being sold through quotes, checkout and subscriptions until the plan is published again. Sent only with include=unpublished_removals.
deleted_atAlways null: a deleted plan is not found. Deprecated: no replacement. Removed on 2026-11-30.
deprecated_atNo operation sets it: a plan has no deprecated state. A plan taken out of sale has status archived and an archived_at. Deprecated: use archived_at instead. Removed on 2026-11-29.
head_version_idThe id of the version in force; absent while the plan has never been published. Deprecated: use head_version.id instead. Removed on 2026-11-30.
lifecycleDerived entity state: draft, published or archived. It is NEVER 'scheduled' — pending releases live on scheduled_versions, and an entity with one is still whatever it already was and still editable. Deprecated: use status instead. Removed on 2026-11-30.
published_atWhen the version in force was published; absent while the plan has never been published. Deprecated: use published_at of GET /plans/{id}/versions/{head_version.number} instead. Removed on 2026-11-30.
published_byThe id of the user who published the version in force. Deprecated: use published_by of GET /plans/{id}/versions/{head_version.number} instead. Removed on 2026-11-30.
versionThe number of the version in force; 0 while the plan has never been published. Deprecated: use head_version.number instead. Removed on 2026-11-30.
PlanClonedPayload
cloned_atWhen the plan was copied.
organization_idplan_idThe id of the newly created copy.
source_plan_idThe plan the copy was made from.
nameThe name of the new copy.
source_plan_nameThe name of the plan the copy was made from, at the copy.
workspace_idThe workspace that owns the plan.
PlanCreatedPayload
created_atorganization_idplan_idThe plan that was created.
nameThe plan name at creation.
price_cadence_unitThe billing period the plan's prices are authored for.
workspace_idThe workspace that owns the plan.
PlanDeletedPayload
deleted_atWhen the plan was deleted.
organization_idplan_idThe plan that was deleted.
nameThe plan name at deletion.
workspace_idThe workspace that owns the plan.
PlanDetail
The plan, as every other plan operation answers it.
The products on the plan. Deprecated: use plan.products (include=products) instead. Removed on 2026-11-30.
Products the plan's current head version still offers but which are no longer attached to the plan. Deprecated: use plan.unpublished_removals (include=unpublished_removals) instead. Removed on 2026-11-30.
PlanOverridePendingPublish
plan_idThe plan the override is scoped to.
plan_versionThe plan version the override row pins to.
price_idThe PLAN_OVERRIDE price row that exists but did not price this line.
reasonWhy it did not apply, in one line the operator can act on.
PlanPricePreviewItem
product_idProduct this line prices.
quantityNumber of units to price (e.g. seat count).
negotiated_price_basisWhether the agreed rate and tiers are net (exclusive) or already contain the tax (inclusive). Omit to read them on the basis of the catalog price they replace. Ignored when the line agrees no rate.
The agreed tier ladder for this line; omit for a flat rate or for the catalog price.
negotiated_unit_amount^-?\d+(\.\d+)?$The agreed per-unit rate for this line, as a decimal string in major units; omit for the catalog price or when negotiated_tiers carries the ladder.
price_keyKey-set entry to price under; set only for keyed products. Two lines of one keyed product resolve two different prices.
PlanPricePreviewLine
cadenceHow often the plan bills this line: every_period, or once on the first invoice.
currencyprice_basisWhether the catalog price this line is billed at is net (exclusive) or already contains the tax (inclusive). With a customer_id or buyer, unit_amount and total_amount are net; with neither, no tax is split out and an inclusive line states its gross there with tax_amount 0. Under inclusive, total_amount_with_tax is the amount the price states.
pricing_modelRequests also accept the new spelling: each value in lower case (package for PACKAGE). The listed spelling is deprecated in requests and accepted until 2026-11-30.
product_idproduct_namequantityquantity_sourceRequests also accept the new spelling: each value in lower case (declared for DECLARED). The listed spelling is deprecated in requests and accepted until 2026-11-30.
tax_rate^-?\d+(\.\d+)?$ · requiredDecimal number encoded as a string to preserve precision.
The catalog's authored tier ladder for this line, including rungs this quantity does not reach; empty for a flat price.
errorincluded_quantityPer-rung walk steps showing how this line's amount was built for the quoted quantity.
PlanPricePreviewRequest
plan_idas_ofDate to price for; omit to price for now. Folded to day granularity.
A buyer described instead of named, priced with the tax that buyer would pay. Mutually exclusive with customer_id.
currencycustomer_idStored customer to price for: their prices, and tax at their VAT position. Mutually exclusive with buyer.
plan_versionPublished plan version to price against; omit to price the plan's current head.
PlanPricePreviewResponse
currencyprice_cadence_unitPlanProduct
cadenceHow often a subscription sold from the plan bills this line: every_period bills it each billing period; once bills it one time, on the first paid invoice. on_event is a term of a deal and is refused here.
Head-state cost summaries for the attached product (reflects the product's current costs, not a publish snapshot).
created_atidin_head_versionTrue when the plan's current head version contains this product. False means the membership is not part of what the plan currently offers — it was added after the head version was published (or the plan has no published version yet) — so quotes, checkout and subscriptions built from the pinned version exclude it until the plan is published again.
Head-state meter-binding summaries for the attached product (reflects the product's current bindings, not a publish snapshot).
organization_idplan_idPlan this membership belongs to.
Head-state price summaries for the attached product.
product_idProduct attached to the plan by this membership.
product_track_modeWhether this membership auto-follows the product head (latest) or holds its snapshotted version (pinned).
default_quantityQuantity a new subscription seeds for this product when the caller passes no explicit item; null seeds 1.
included_quantity^-?\d+(\.\d+)?$Quantity bundled into the base price before per-unit billing applies (the included allowance/seat floor); null means none.
max_quantityHighest quantity a buyer may pick for this product; null means no plan-level ceiling.
min_quantityLowest quantity a buyer may pick for this product; null means 1.
The product. Sent only with include=product (on a Plan: include=products.product).
product_head_version_idProduct's current live head version; when it differs from product_version_id the plan's pin trails the product's live head.
product_version_idProduct version pinned for this product by the plan's current head version; null while the product is in the plan's draft and not yet published, and on rows published before plans pinned product versions.
refresh_countPlan-level default allowance-refresh cadence count; null (with refresh_unit) means one whole-period pool.
refresh_unitUnit for the refresh cadence: day, week, month, year or billing_cycle.
rollover_enabledWhen true, unused included allowance carries forward into later periods.
rollover_expiry_periodsNumber of periods after which rolled-over allowance expires; null means it never expires.
rollover_max^-?\d+(\.\d+)?$Cap on accumulated rolled-over allowance; null means uncapped.
unit_limit^-?\d+(\.\d+)?$Ceiling on a POOL's unit balance; POOL only.
pricing_modelPricing model of the attached product: VOLUME, STAIRCASE or PACKAGE. Deprecated: use pricing_model of GET /products/{id} instead. Removed on 2026-11-30.
product_nameName of the attached product. Deprecated: use product.name (include=product) instead. Removed on 2026-11-30.
product_statusThe attached product's status. An archived product in a plan is still sold by every version that carries it. Deprecated: use product.status (include=product) instead. Removed on 2026-11-30.
quantity_adjustableWhen true the buyer picks the product's quantity (seats/licenses); false is a flat charge. Deprecated: use quantity_adjustable of GET /products/{id} instead. Removed on 2026-11-30.
quantity_sourceWhere the product's billed quantity comes from: DECLARED (set on the subscription item) or METERED (from the meter evaluator). Deprecated: use quantity_source of GET /products/{id} instead. Removed on 2026-11-30.
unit_labelSingular noun one billed unit of the product is called (e.g. seat, GB). Deprecated: use unit_label of GET /products/{id} instead. Removed on 2026-11-30.
PlanProductCostSummary
cost_idID of the product cost summarized here.
keyFormula-reference key of the cost (referenced in formulas as cost.
requires_continuous_coverageWhen true a subscription referencing this cost must keep it continuously covered.
scopeCost scope: PRODUCT (per-product) or ORG (org-wide).
Static money value of the cost; null when the cost is a formula.
descriptionOperator-facing description of what this cost represents.
Formula that computes the cost; null when the cost is a static amount.
PlanProductMeterBindingSummary
binding_idID of the product-meter binding summarized here.
meter_idMeter the binding consumes.
meter_keyMeter's reference key (joined from the meters table for display).
pricing_var_nameFormula variable name the meter result is exposed as.
roleBinding role: BILLABLE_QUANTITY, PRICING_VAR or INFORMATIONAL.
meter_nameHuman-readable meter name (joined from the meters table for display).
PlanProductPriceSummary
currencyISO 4217 currency of the price.
is_overrideTrue when this row is the plan's own override — the value of record for billing; false rows are copies of the catalog price.
list_price^-?\d+(\.\d+)?$ · requiredList price, MAJOR units, in the currency field.
price_idID of the price row captured in this plan-version snapshot.
country_codeISO 3166-1 alpha-2 country the price applies to, when country-scoped.
display_nameCustomer-facing label for the price key.
price_keyKey selecting this price within a keyed product; null for unkeyed products.
PlanPublishBlocker
codeThe refusal's machine-readable code, e.g. override_rate_table_pin.
messageThe refusal, written to the operator; it names the remedy, which can be on another entity than the plan.
PlanPublishImpact
Why a publish now would be refused: the first refusal the publish itself hits, with its code and a message that names the remedy. Empty when a publish now would succeed.
pinned_subscribersplan_idsubscriptions_affectedPlanPublishImpactStrategies
at_phase_changeat_phase_change_heldimmediate_proratenext_periodon_resumePaused subscribers with a following line this version changes: it moves when the subscription resumes.
product_droppedFollowing subscribers with a line whose product this version drops: that line keeps billing the last plan version that carried it.
PlanPublishPreflightResult
okTrue when a publish right now would succeed.
codemessagePlanRef
idnameInternal operator-facing plan name.
statusThe plan's own lifecycle: draft (nothing published yet), active (its head version is published) or archived (retired by the operator). A scheduled release is a version state, never the plan's: see scheduled_versions.
PlanSearchData
statusversionThe plan's current published version number.
PlanSearchHit
display_namePrimary label shown for the hit in the results list.
entity_typeKind of the matched entity; it names the shape of data.
idIdentifier of the matched entity.
scoreRelevance score from the search engine; higher ranks first.
tag_idsThe ids of the tags on the matched entity. Add include=tags to get the tags themselves.
The owning customer. Sent only with include=customer, and only when the entity has an owning customer.
customer_idOwning customer's id; empty for catalog entities that have no owning customer.
Entity-type-specific payload with the fields needed to render the hit. Sent without include=data until 2026-11-30; after that only with include=data.
referenceThe short per-organization human reference an operator would say out loud: an invoice's or credit note's number, a subscription's SUB-000123, a quote's QUO-2026-000078. Absent for a kind that is named rather than numbered (customer, product, plan, payment, dispute) and for a draft invoice, which has no number until it is finalized.
secondary_textSupporting line shown under the display name (e.g. an invoice number or email).
Tags attached to the matched entity. Sent without include=tags until 2026-11-30; after that only with include=tags.
customer_nameOwning customer's display name; empty for catalog entities. Deprecated: use customer.name (include=customer) instead. Removed on 2026-11-30.
PlanSubscribersMigratedPayload
migrated_atWhen the migration completed.
organization_idplan_idThe plan whose subscribers were migrated.
target_versionThe plan version subscribers were migrated onto.
total_flaggedThe number of subscriptions flagged for manual review instead of migrated.
total_migratedThe number of subscriptions migrated.
workspace_idThe workspace that owns the plan.
PlanUpdatedPayload
What the edit changed of the fields that take effect at once: the catalog_header change family.
organization_idplan_idThe plan that was updated.
updated_atnameThe plan name after the update.
workspace_idThe workspace that owns the plan.
PlanVersionProduct
cadenceHow often a subscription sold from the plan bills this line: every_period bills it each billing period; once bills it one time, on the first paid invoice. on_event is a term of a deal and is refused here.
Price summaries frozen into this plan version for the product.
pricing_modelProduct pricing model frozen at publish: VOLUME, STAIRCASE or PACKAGE.
product_idProduct captured in this plan-version snapshot.
product_nameProduct name frozen at publish time.
default_quantityQuantity a new subscription seeds for this product when the caller passes no explicit item; null seeds 1.
included_quantity^-?\d+(\.\d+)?$Quantity bundled into the base price before per-unit billing applies (the included allowance/seat floor); null means none.
max_quantityHighest quantity a buyer may pick for this product; null means no plan-level ceiling.
min_quantityLowest quantity a buyer may pick for this product; null means 1.
product_track_modeThe plan membership's track rule (latest or pinned) frozen at publish; null means this version snapshotted none and a line's track falls to the subscription default.
product_version_idProduct version in force when the plan was published; null on rows published before plans pinned product versions.
refresh_countPlan-level default allowance-refresh cadence count; null (with refresh_unit) means one whole-period pool.
refresh_unitUnit for the refresh cadence: day, week, month, year or billing_cycle.
rollover_enabledWhen true, unused included allowance carries forward into later periods.
rollover_expiry_periodsNumber of periods after which rolled-over allowance expires; null means it never expires.
rollover_max^-?\d+(\.\d+)?$Cap on accumulated rolled-over allowance; null means uncapped.
Locale-keyed overrides frozen at publish time.
unit_limit^-?\d+(\.\d+)?$Ceiling on a POOL's unit balance; POOL only.
PlanVersionSnapshot
archived_reasonbase_version_idThe version this one is built on — the predecessor for a release, the base for a draft.
created_ateffective_fromeffective_toentity_ididkindThe versioned kind: product, plan, rate_table, price_formula or tax_rule.
originprice_cadence_unitThe billing period this version's prices were authored for (week, month or year).
The products this version carries, with the terms they are offered on and the prices it bills them at.
published_atrankrelease_namerelease_notescheduled_change_idscheduled_forstatusversionThe display number, or null while the row is off the chain.
The alignment a subscription copies when it first goes live with a paid phase that bills this version: start, day_of_month with its day, or last_day. Absent: the version states none and the organization's default applies.
default_early_stopThe early-stop term a deal on this version stops under unless it states its own: no_credit or credit_unused. Absent: the version states none and no_credit applies.
default_timingWhen a line of this version is invoiced if the deal states nothing for it: in_advance or in_arrears. Absent: the version states none and such a line is invoiced in arrears.
default_version_changeWhen a following subscription line of this version moves to a newer version if the deal states nothing for it: immediate_prorate, next_period or at_phase_change. Absent: the version states none.
Who published the version — the same actor the audit trail names. Absent until it is published.
descriptionThe plan's current internal description: a live value, not part of the version. Deprecated: use description of GET /plans/{id} instead. Removed on 2026-11-30.
The plan's current operator metadata: a live value, not part of the version. Deprecated: use metadata of GET /plans/{id} instead. Removed on 2026-11-30.
nameThe plan's current name: a live value, not part of the version. Deprecated: use name of GET /plans/{id} instead. Removed on 2026-11-30.
plan_idThe plan this version belongs to; the same id as entity_id. Deprecated: use entity_id instead. Removed on 2026-11-30.
PlannedQuoteDocument
The facts each block renders, one entry per block that renders any, in reading order: the block's own content the quote has, and the facts of other blocks its properties switch on. A quote block with no entry renders nothing.
The layout in reading order — the template's repeat header, body and repeat footer — upgraded to catalog blocks, without the blocks this surface does not draw. Render each in turn; a quote block renders only the facts assigned to it.
What each drawn block states besides its facts, by block id: a quote block's heading (the operator's, else its default in the document language), a compliance block's identity lines, a key_value or custom_field block's label/value rows, a legal_notice's or a text block's prose with its field chips filled in. A block with nothing to state has no entry.
The quote as a document: every fact it states, worded and computed on the server.
PortalLink
expires_atWhen the link expires (RFC3339). The link signs the customer in once; it is refused after the first use and after this time.
tokenRaw signed portal-access JWT, also embedded in the URL.
urlPortal sign-in URL to redirect the customer to; embeds the signed, single-use access token.
PortalProjection
display_nameorg_slugcheckout_layoutDark-mode CSS vars (page, ink and status values derived for the dark theme), stamped under .dark; absent when the org has not adopted the portal surface. The brand primary, accent and radius are theme-invariant and travel only in vars.
favicon_urllogo_dark_urlThe seller's logo for a dark page, shown instead of logo_url while the buyer reads in dark mode. Absent when no dark logo was uploaded; logo_url is then used in both themes.
logo_urlprivacy_urlsupport_emailsupport_urlterms_urlPortalSettings
allow_add_payment_methodA customer may save a new payment method from the portal.
allow_cancel_subscriptionA customer may cancel or withdraw from a subscription in the portal.
allow_invoice_payA customer may pay an open invoice from the portal.
allow_wallet_topupA customer may top up a wallet from the portal.
show_billing_settingsThe portal shows the customer's billing details.
show_invoicesThe portal shows the customer's invoices.
show_payment_methodsThe portal shows the customer's saved payment methods.
show_subscriptionsThe portal shows the customer's subscriptions.
show_walletsThe portal shows the customer's wallets.
Presentation
custom_titleThe title, when title_source is custom. Locale overrides live in the product's translations under presentation_custom_title.
groupingWhich atoms share one line: per_product, per_key or per_segment. Null inherits the organisation's setting.
show_keyPrint the price key's registry label beside the title. Null inherits.
show_periodPut the atoms' span on the line. Null inherits.
show_unitPut the product's unit label on the line. Null inherits.
title_sourceWhich catalog field becomes the line's title. Null inherits the organisation's setting.
unit_codeUN/ECE Rec 20/21 unit code for BT-130 (e.g. HUR hour, E34 gigabyte, C62 one). Null inherits.
PreviewAudienceRequest
The rule set to count and sample. Taken by VALUE and not by id, so the builder can preview unsaved editor state.
limitHow many matching customers to sample. Default 25. The counts are exact regardless of this bound — it caps the sample, never the arithmetic.
PreviewBillRequest
currencyThe bill's currency. An amount ceiling or a min_spend in another currency is refused, never converted.
The lines IN THE ORDER THE INVOICE WILL SHOW THEM. Order is load-bearing: a threshold crosses at a particular line.
PreviewDocumentTemplateRequest
document_typeThe one document type to render; defaults to the first type the template declares.
document_typesDocument types the unsaved draft renders; defaults to the stored template's. Read only with template_json.
scenarioThe sample offer a quote preview renders: simple (the default), ramp, usage, update, multi_subscription or reverse_charge. Read only when the preview renders a quote.
Unsaved template draft to preview instead of the stored template.
PreviewLineRequest
chargeFree periods only zero recurring lines, so the kind is not guessed from the price.
net^-?\d+(\.\d+)?$ · requiredThe line total before any promotion. It need not equal unit_net times quantity: proration and rounding already happened.
productThe line's product id, as the scope matches on.
quantity^-?\d+(\.\d+)?$ · requiredHow many units.
unit_net^-?\d+(\.\d+)?$ · requiredThe net of one unit, in the bill's currency. The unit-counted shapes price their allowance off this.
idAn id to address this line by in the chain. Minted when absent.
negotiatedThe price was agreed by hand. A promotion whose policy is exclude records a non-firing on it.
price_keyThe line's price key.
subscription_idThe subscription the line belongs to. An anchored redemption fires only on its own subscription's lines.
tagsThe product's tags, for a tag-scoped promotion.
PreviewLineResult
line_idThe line's net after every lane. Never below zero.
PreviewMeterEventRequest
A usage-event-shaped object, read one of two ways. Send a metadata object (optionally with dimension_vars) and it is treated as an ingest BODY: metadata is bound to the usage_events metadata column the filter compiler reads, dimension_vars to its own column, and every other top-level field is envelope no filter can reach. Send a flat object and it IS the metadata — the properties, without the envelope around them. Two or more envelope-only field names (customer_id, product_id, subscription_id, metric_key, price_key, idempotency_key, hold_id, wallet_currency, price/cost fields) also mark it a body; a single one does not, so a bag holding quantity or timestamp stays properties. The response reports which reading was taken in event_interpreted_as.
event_schemaJSON Schema to validate the event against, as a document rather than a meter reference, for the same reason. Omit to skip schema checking.
The predicate to test. Sent in the body rather than referenced by meter id because the question is asked while AUTHORING — in the create sheet where no meter exists yet, and on unsaved draft trees in the filter workbench. An empty tree matches everything.
PreviewPriceFormulaRequest
debugWhen true, the response includes a step-by-step evaluation trace.
expressionAd-hoc expression to evaluate; either this or formula_id is required.
formula_idA stored formula to evaluate; either this or expression is required.
Variable bindings supplied to the evaluation, keyed by variable name: a number (or a decimal string) for a numeric variable, text for a string one.
PreviewPriceRequest
product_idProduct whose price to resolve.
quantity^-?\d+(\.\d+)?$ · requiredQuantity to price; must be positive. Drives the tier walk and formula tier_quantity binding.
at_timePoint in time to resolve at; the cascade honours each price's valid_from/valid_to against this instant. Defaults to now.
country_codeCountry context; country-specific prices outrank generic ones.
currencyCurrency to pin the resolution to; filters the cascade to prices in this currency rather than converting. SEND THIS whenever the product is priced in more than one currency: currency is not a ranking term in the cascade, so an unpinned resolve over a multi-currency slot picks a stable but arbitrary row (and that row becomes the FX source). A pin the catalog cannot satisfy is not an error - it degrades to the catalog currency and converts into the pinned one, reporting conversion_applied and the pre-conversion amounts under original.
customer_idThe customer this resolution is for. It scopes currency preference and the audit record; it does not select a price — the catalog has no customer-scoped prices.
Dimension values used to match a price's custom_dimensions scope.
plan_idPlan scope; when set, plan_version is required and PLAN_OVERRIDE rows for that plan become eligible.
plan_versionThe exact plan version PLAN_OVERRIDE rows must match; required when plan_id is set.
price_keyKeyed variant to resolve on a keyed product; falls back to the set price when no exact key price exists.
Named numeric/string variables supplied to tier formulas and rate expressions during resolution.
subscription_idSubscription context for the resolution, when resolving for an existing sub.
PreviewPromotionsRequest
The bill to evaluate.
period_endThe bill's period end, inclusive.
period_startThe bill's period start, inclusive.
atThe billing instant the ceilings are counted as of. Defaults to now on the caller's clock, which in a sandbox is the workspace's virtual calendar.
customer_idWhose held promotions are evaluated. Optional when a promotion draft is supplied: with no customer the draft is evaluated ALONE, as if published and held by nobody (no live promotions, no redemption history, no audience membership), and the response says so with draft_only.
An unpublished draft to evaluate as if it were live, alongside the customer's held promotions. Nothing is persisted.
subscription_idNarrows which redemptions may fire to the unanchored ones and the ones anchored here.
PreviewQuoteDocumentRequest
document_typesDocument types the unsaved draft renders; defaults to the stored template's. Read only with template_json.
scenarioThe sample offer: simple (the default), ramp, usage, update, multi_subscription or reverse_charge.
surfaceThe surface to plan for: print (the default) or web.
Unsaved template draft to plan instead of the stored template.
Price
created_atcurrencyThe price's currency (ISO 4217). Every amount of the price — list_price and each tier's unit_amount — is in it.
effective_fromWhen the product version this price is read from became effective on the billing timeline.
idkindResolution scope of this price: BASE or PLAN_OVERRIDE; the more specific kind wins the resolve cascade.
list_price^-?\d+(\.\d+)?$ · requiredList price in the price's currency. A rate, kept at its full precision. Nominal (often 0) for tiered and formula pricing, where the real amount comes from the tier walk.
organization_idprice_basisWhether list_price and the tier amounts are net of tax (exclusive) or already contain it (inclusive). An inclusive price is billed as the stated amount: the invoice derives the net and the tax out of it at the resolved rate.
product_idThe product this price belongs to.
statusLifecycle status: draft, scheduled, active, or retired (the price fell out of the catalogue at a release that no longer carried it, or the working draft removed it).
updated_atcountry_codeCountry this price is scoped to; null matches any country and country-specific rows outrank generic ones.
display_nameCustomer-facing label for this price / price_key.
is_set_priceMarks the single row covering every effective key of the product's key set; the resolver falls back to it when no exact key price matches.
Free-form key/value metadata attached to the price.
plan_idPlan this override is scoped to; set only when kind=PLAN_OVERRIDE.
price_keyThe keyed variant this price covers on a keyed product; null on unkeyed prices and on the set price.
The product this price belongs to. Sent only with include=product.
Costs referenced by this price's tier expressions. Sent with include=referenced_costs. Sent without include=referenced_costs until 2026-11-30; after that only with include=referenced_costs.
The tier ladder ordered by ascending up_to; drives quantity-based pricing.
deleted_atAlways null: a deleted price is not returned. Deprecated: no replacement. Removed on 2026-11-30.
product_nameDisplay name of the owning product. Deprecated: use product.name (include=product) instead. Removed on 2026-11-30.
quantity_sourceHow the owning product's billable quantity is sourced: DECLARED (the caller states it) or METERED (usage supplies it). Absent when the product could not be read. Deprecated: use Product.quantity_source (GET /products/{id}) instead. Removed on 2026-11-30.
PriceBreakdown
Ordered adjustments applied to the list price to reach the effective price.
The final price after all adjustments.
The starting list price before any adjustments.
PriceFormula
created_atexpressionThe expression evaluated to produce a tier rate; may reference declared variables, cost.
idis_systemTrue for built-in system formulas that organizations cannot edit or delete.
nameDisplay name of the formula.
organization_idupdated_atDeclared variables (name, type, optional default) the expression may reference, in the author's order.
The version in force: its id, number and status. Absent while the formula has never been published.
Every version scheduled to publish, in the order they will publish. Their rows are FROZEN — they no longer answer GET /{kind}/{id}/draft — so the entity's working draft is free for immediate changes while they stand. The version numbers are PROVISIONAL: head + rank, recomputed whenever the timeline moves.
statusThe entity's own state: draft (never published), active (a published version is in force) or archived. A release on the calendar does not change it: see scheduled_versions.
head_version_idThe id of the version in force; absent while the formula has never been published. Deprecated: use head_version.id instead. Removed on 2026-11-30.
lifecycleDerived entity state: draft, published or archived. It is NEVER 'scheduled' — pending releases live on scheduled_versions, and an entity with one is still whatever it already was and still editable. Deprecated: use status instead. Removed on 2026-11-30.
versionThe number of the version in force; 0 while the formula has never been published. Deprecated: use head_version.number instead. Removed on 2026-11-30.
PriceFormulaDraftContent
expressionThe expression this version should evaluate.
The variables this version should declare, in the order they should be shown.
PriceFormulaPreview
expressionThe expression that was evaluated.
result^-?\d+(\.\d+)?$ · requiredThe evaluated result.
The numeric variable bindings the evaluation used: the request's, over the formula's declared defaults.
Step-by-step evaluation trace, present only when debug was requested.
formula_idThe formula that was evaluated, when formula_id was supplied.
formula_versionThe formula version that was evaluated, when a stored formula was used.
The text variable bindings the evaluation used.
PriceFormulaVersionSnapshot
archived_reasonbase_version_idThe version this one is built on — the predecessor for a release, the base for a draft.
created_ateffective_fromeffective_toentity_idexpressionThe expression this version evaluates.
idis_systemTrue for a built-in formula organizations cannot edit or delete.
kindThe versioned kind: product, plan, rate_table, price_formula or tax_rule.
originpublished_atrankrelease_namerelease_notescheduled_change_idscheduled_forstatusThe variables this version declares, in the order they were authored.
versionThe display number, or null while the row is off the chain.
Who published the version — the same actor the audit trail names. Absent until it is published.
formula_idThe formula this version belongs to; the same id as entity_id. Deprecated: use entity_id instead. Removed on 2026-11-30.
nameThe formula's current name: a live value, not part of the version. Deprecated: use name of GET /price-formulas/{id} instead. Removed on 2026-11-30.
PriceIdentity
currencyThe currency every amount of this change is in, stated once. When the currency itself changed, the before amounts are in currency.before.
The price's custom dimensions, by name.
price_idThe price's id.
country_codeThe country the price is for; absent for every country.
price_keyThe price's key, when it has one.
PriceKind
Requests also accept the new spelling: each value in lower case (base for BASE). The listed spelling is deprecated in requests and accepted until 2026-11-30.
PriceRef
currencyThe price's currency (ISO 4217). Every amount of the price — list_price and each tier's unit_amount — is in it.
idkindResolution scope of this price: BASE or PLAN_OVERRIDE; the more specific kind wins the resolve cascade.
country_codeCountry this price is scoped to; null matches any country and country-specific rows outrank generic ones.
display_nameCustomer-facing label for this price / price_key.
plan_idPlan this override is scoped to; set only when kind=PLAN_OVERRIDE.
price_keyThe keyed variant this price covers on a keyed product; null on unkeyed prices and on the set price.
PriceReferencedCost
idThe cost this price's tier expressions reference.
keyThe cost key, referenced in tier formulas as cost.
The cost's flat amount, when the cost is a fixed value.
The cost's own expression, when the cost is itself computed.
cost_idThe cost row this price's tier expressions reference. Deprecated: use id instead. Removed on 2026-11-30.
PriceResolution
cachedTrue when this resolution was served from the resolver cache.
conversion_appliedTrue when a currency conversion was applied to reach the resolution currency; original then carries the amounts before it.
currencyThe resolution's currency (ISO 4217): every amount of the resolution is in it, except original's, which are in the price's own.
override_appliedTrue when a customer-specific rate changed the resolved amount.
price_basisWhether the amounts are net of tax (exclusive) or already contain it (inclusive), as the price row that supplied them states: the product version's price, or the plan's override.
price_idThe price row the cascade selected as the winner.
pricing_modelThe pricing model that shaped the tier walk (e.g. VOLUME, STAIRCASE, PACKAGE).
quantity^-?\d+(\.\d+)?$ · requiredThe quantity the resolution was computed for.
tier_expr_appliedTrue when at least one tier rate came from a rate expression or formula rather than a static unit_amount.
total_amount^-?\d+(\.\d+)?$ · requiredTotal amount for the quantity in the resolution's currency, rounded at its minor-unit scale. Authoritative for what is charged.
unit_amount^-?\d+(\.\d+)?$ · requiredEffective per-unit amount at the resolved quantity, in the resolution's currency. This is a RATE and may carry more fractional digits than the currency's minor-unit scale (up to 8). When conversion_applied is true it is rounded independently of total_amount, so unit_amount * quantity is NOT guaranteed to equal total_amount - do not re-derive one from the other.
Optional list-price-to-effective-price adjustment breakdown for display.
exchange_rate^-?\d+(\.\d+)?$The exchange rate applied when a conversion occurred: 1 unit of the original currency = exchange_rate units of the resolution currency.
exchange_rate_base_leg_idFor a triangulated cross-pair rate, the EUR→original exchange-rate row the applied rate was divided by.
exchange_rate_idThe exchange-rate row used for the conversion.
Maps a tier's formula_id to the pinned formula version whose expression must be substituted; populated only for version-pinned subscriptions.
fx_policy_appliedFX timing policy that selected the exchange rate.
The amounts before conversion, in the currency the price is denominated in; present exactly when conversion_applied is true.
override_idThe subscription negotiated price that supplied the applied rate.
override_sourceWhere the applied rate came from: NEGOTIATED, a subscription-scoped negotiated price.
Set when an active PLAN_OVERRIDE price for this plan version exists but was not applied because the plan version has not published it yet; republish the plan to make it effective.
plan_price_idPlan-version price row the value was read from; null when the catalog supplied it.
product_version_idThe product version whose revision rows this resolution was read from; null on the replay path.
Maps a rate-table slug to the pinned catalog_version_headers id captured at the resolved product version's anchor; populated only for version-pinned subscriptions.
Per-tier walk steps showing how the total was built; amounts in the resolution's currency.
The resolved tier ladder; its amounts are in the resolution's currency.
PriceResolutionOriginal
The total before conversion, {value, currency}.
The per-unit amount before conversion, {value, currency}: a rate, kept at its full precision.
PriceTier
idtier_orderZero-based position of this tier in the ascending ladder; tiers are evaluated in this order.
unit_amount^-?\d+(\.\d+)?$ · requiredIn the currency of the enclosing price or resolution: the per-unit rate under VOLUME and STAIRCASE, the price per package under PACKAGE. A rate, kept at its full precision (up to 8 decimals).
up_to^-?\d+(\.\d+)?$ · requiredInclusive upper quantity bound; the tier covers (previous tier's up_to, up_to]. Null marks the open-ended final tier (infinity).
basisWhat the tier's expression or formula yields: per_unit (a rate per billed unit; per package under PACKAGE) or per_band (the band's whole amount). Absent on a static tier.
created_atPer-tier numeric overrides of the formula's declared variable defaults.
formula_idOptional reference to a price_formulas row whose expression computes the tier rate; takes precedence over rate_expression and unit_amount.
formula_version_idThe catalog_version_headers row this tier is pinned to — captured at product publish from the version active at the version's anchor. A pinned subscription bills this exact formula version; a latest-track one dereferences formula_id to the formula's live head instead, so the two can differ.
package_size^-?\d+(\.\d+)?$PACKAGE only: how many units one package holds. Absent under every other pricing model.
rate_expressionOptional arithmetic expression for the tier; overrides unit_amount when set. Its result is read as the tier's basis says: a rate per billed unit (per_unit) or the band's whole amount (per_band).
updated_atprice_idThe parent price this tier belongs to. Deprecated: use the enclosing Price.id or PriceResolution.price_id instead. Removed on 2026-11-30.
PricingInputChange
fieldThe field: an input's words, a rate table's settings and rows, a formula's expression and variables, a tax rule's scope and rate, a key set's keys, an FX override's pair, rate and window, or a currency's scopes.
kindWhat happened to the field: a value where there was none, another value, or none any more.
The field's value after the act; absent when it holds none any more.
The field's value before the act; absent when it held none, or on a creation.
itemFor a key set key's metadata: the metadata key.
keyFor a field that holds entries: the entry — a rate table row's lookup key or a bracket's lower bound, a variable's name, a metadata key, a key set's key, a currency's code.
PricingInputValue
typeThe value's type, which names the member the value is in.
dateFor type=date.
flagFor type=flag.
instantFor type=instant.
listFor type=list: the tokens, in their canonical order. An empty list is a value: nothing is named.
number^-?\d+(\.\d+)?$For type=number: a decimal.
textFor type=text.
PricingModel
Requests also accept the new spelling: each value in lower case (package for PACKAGE). The listed spelling is deprecated in requests and accepted until 2026-11-30.
Problem
codeStable machine-readable error code. Branch on this, not on detail text.
detailstatustitletypeField-level failures; present when code=VALIDATION. Field codes (REQUIRED, INVALID_FORMAT, UNKNOWN_FIELD, TOO_SHORT, ...) are a separate, smaller vocabulary from Problem.code.
instanceEvery reason a document could not be assembled, in the order they were found; present when a draft, preview, edit or correction was refused (code INVOICE_ASSEMBLY_REFUSED, or the narrower code the first refusal maps to). Refusal codes are a separate vocabulary from Problem.code.
request_idCorrelation id of the failed request - the same value as the X-Request-Id response header. Quote it in support tickets.
Product
created_atidinvoiceable_standaloneWhen true the product is eligible to appear in the manual-invoice picker.
is_systemTrue for a product the platform owns rather than the tenant. Sale pickers exclude them; the marketplace fee-product picker still offers them. It carries no privilege.
nameInternal operator-facing product name. Until 2026-11-30 the list and the item read send it in the language of the Accept-Language header when a translation exists, unless the request names include=localized; after that date it is always the stored name, and localized.name carries the translation.
organization_idThe product rung of the invoice presentation ladder; the same object the update body replaces. Null fields inherit the organization's setting.
pricing_modelPricing model applied to this product: VOLUME, STAIRCASE or PACKAGE. PACKAGE requires quantity_source METERED.
quantity_adjustableWhen true the buyer picks the quantity (seats/licenses); false is a flat charge.
quantity_sourceWhere the billed quantity comes from: DECLARED (set on the subscription item) or METERED (from the meter evaluator).
statusThe product's own state: draft (nothing published yet), active (its head version is published) or archived (retired by the operator). A scheduled release is a version state, never the product's: see scheduled_versions.
tag_idsThe ids of the tags on the record, in name order. Add include=tags to get the tags themselves.
tax_categoryProduct tax category: DEFAULT, REDUCED, REDUCED_2, SUPER_REDUCED, PARKING, ZERO or EXEMPT.
unit_labelSingular noun one billed unit is called (e.g. seat, GB).
updated_atNamed, non-billable cost variants that price formulas can reference. Sent without include=costs until 2026-11-30; after that only with include=costs. GET /products/{id}/costs lists them too.
Org-defined custom field values for this product.
descriptionInternal operator-facing description; not shown to buyers.
external_idCaller-supplied external identifier for reconciliation with an upstream system.
The version in force: its id, number and status. Absent while the product has never been published.
key_set_excluded_keysKeys subtracted from the linked key set's active entries (subtract-only).
key_set_idNon-null marks the product as keyed, linking it to an org-global key set whose entries define its price-key domain.
name, description and public_description in the language of the request's Accept-Language header. Sent only with include=localized; with it, name, description and public_description are the stored text.
Free-form operator key/value metadata.
The product's active prices. Sent only with include=prices.
public_descriptionBuyer-facing description shown in checkout and the customer portal.
requires_product_idsProducts that must also be present for this product to be sold (dependency set).
Every version scheduled to publish, in the order they will publish. Their rows are FROZEN — they no longer answer GET /{kind}/{id}/draft — so the entity's working draft is free for immediate changes while they stand. The version numbers are PROVISIONAL: head + rank, recomputed whenever the timeline moves.
supply_natureWhat the product is for place-of-supply purposes: GOODS, SERVICES or DIGITAL_SERVICES. Empty means undeclared, treated as SERVICES.
The tags on the record, in name order. Sent without include=tags until 2026-11-30; after that only with include=tags.
Locale-keyed overrides for name, description and public_description.
active_price_countNumber of active prices currently attached to the product. Deprecated: use prices (include=prices) instead. Removed on 2026-11-30.
allowed_pricing_modelsPricing models the product's quantity source admits (PACKAGE requires METERED). Deprecated: use pricing_model (PACKAGE requires quantity_source METERED) instead. Removed on 2026-11-30.
Per-currency rollup of the product's static costs; formula-form costs are excluded. Deprecated: use costs[].amount summed per currency (include=costs) instead. Removed on 2026-11-30.
deleted_atAlways null: a deleted product is not found. Deprecated: no replacement. Removed on 2026-11-30.
lifecycleDerived entity state: draft, published or archived. It is NEVER 'scheduled' — pending releases live on scheduled_versions, and an entity with one is still whatever it already was and still editable. Deprecated: use status instead. Removed on 2026-11-30.
versionCurrent published version number of the product; 0 while it has never been published. Deprecated: use head_version.number instead. Removed on 2026-11-30.
ProductActivatedPayload
activated_atWhen the product was activated.
organization_idproduct_idThe product that was activated.
nameThe product name at activation.
workspace_idThe workspace that owns the product.
ProductAllowanceState
billable_usage^-?\d+(\.\d+)?$ · requiredUsage above all allowance that is billed as overage, snapped by the meter's quantity rounding — the quantity the invoice line will carry.
consumed_allowance^-?\d+(\.\d+)?$ · requiredTotal allowance consumed across all sources.
consumed_credits^-?\d+(\.\d+)?$ · requiredUsage-credit allowance consumed.
consumed_plan^-?\d+(\.\d+)?$ · requiredPlan allowance consumed.
consumed_purchased^-?\d+(\.\d+)?$ · requiredPurchased balance consumed.
consumed_rollover^-?\d+(\.\d+)?$ · requiredRolled-over allowance consumed.
credit_allowance^-?\d+(\.\d+)?$ · requiredTotal usage-credit (granted) allowance available.
plan_allowance^-?\d+(\.\d+)?$ · requiredIncluded allowance from the plan, in metered units.
product_idThe product this allowance state is for.
product_nameDisplay name of the product.
purchased_allowance^-?\d+(\.\d+)?$ · requiredDurable balance the customer purchased; consumed after every free rung.
remaining_allowance^-?\d+(\.\d+)?$ · requiredUnused plan allowance remaining in the period.
rollover_allowance^-?\d+(\.\d+)?$ · requiredAllowance carried over from prior periods.
total_allowance^-?\d+(\.\d+)?$ · requiredSum of plan, rollover and credit allowance.
total_usage^-?\d+(\.\d+)?$ · requiredTotal metered usage in the current period.
Per-grant attribution behind credit_allowance (source, quantity, optional expiry); omitted when empty.
Seat/declared-quantity projection; null for metered products.
included_quantity_sourceProvenance of plan_allowance: PLAN (the plan version's pin) or OPERATOR (a deliberate per-subscription override).
plan_pin_quantity^-?\d+(\.\d+)?$The plan version's own included quantity for this product, for comparison against an OPERATOR override; null when the plan pins none.
refresh_countSub-period refresh cadence count (e.g. 1 with unit=day refreshes daily); null refreshes once per billing cycle.
refresh_unitUnit of the refresh cadence; null refreshes once per billing cycle.
unit_labelBillable meter's unit label (e.g. AI credits, API calls); empty when the meter sets none.
ProductArchivedPayload
archived_atWhen the product was archived.
organization_idproduct_idThe product that was archived.
nameThe product name at archival.
workspace_idThe workspace that owns the product.
ProductConsumer
idThe product's id.
nameThe product's name.
product_idThe product's id. Deprecated: use id instead. Removed on 2026-11-30.
ProductCopiedPayload
copied_atWhen the product was copied.
organization_idproduct_idThe id of the newly created copy.
source_product_idThe product the copy was made from.
nameThe name of the new copy.
source_product_nameThe name of the product the copy was made from, at the copy.
workspace_idThe workspace that owns the product.
ProductCreatedPayload
created_atorganization_idproduct_idThe product that was created.
nameThe product name at creation.
pricing_modelThe product's pricing model (e.g. VOLUME, STAIRCASE, PACKAGE).
typeHow the product's quantity is sourced: DECLARED or METERED.
workspace_idThe workspace that owns the product.
ProductDeletedPayload
deleted_atWhen the product was deleted.
organization_idproduct_idThe product that was deleted.
nameThe product name at deletion.
workspace_idThe workspace that owns the product.
ProductDraftBinding
binding_idmeter_idThe meter this binding reads. Its config must be in the same body's meters — the deferred composite foreign key refuses a binding without one at COMMIT, and the port warns about it at the edit.
roleRequests also accept the new spelling: each value in lower case (billable_quantity for BILLABLE_QUANTITY). The listed spelling is deprecated in requests and accepted until 2026-11-30.
overlay_filterspricing_var_nameThe variable name the meter's value is bound to in a price expression.
ProductDraftContent
Every meter binding the version carries.
Every named cost the version carries.
The aggregation config of every meter the version's bindings reach, bound meters and composed sources alike.
Every price the version carries. A price the body omits is REMOVED from the draft.
Rate-table slug → the catalog_version_headers id this draft is pinned to. Omit to let the publish capture the active version.
ProductDraftCost
cost_idcurrencykeyThe cost's key, which is its identity within the version.
source_scopeWhich cascade tier won at capture: the product's own cost, or a shared organisation cost materialised here so a pinned subscription never reads the live shared row.
Requests also accept the new spelling: each value in lower case (org for ORG). The listed spelling is deprecated in requests and accepted until 2026-11-30.
amount^-?\d+(\.\d+)?$The static amount in the cost's currency, for an amount-form cost.
expression_sourceThe expression, for a formula-form cost.
ProductDraftMeter
functionThe aggregation: SUM, COUNT, MAX, LAST, UNIQUE_COUNT.
keymeter_idwindow_specThe meter's window. Required: a meter with no window has no period to aggregate over.
composed_ofFor a composed meter: the source meters and the expression over them.
filter_treerounding_increment^-?\d+(\.\d+)?$Rounding applied to the billable quantity after allowances. Null with rounding_mode means exact.
rounding_modeWhich multiple of rounding_increment a billable quantity between two of them lands on: DOWN, UP or NEAREST (halfway rounds up). Null with rounding_increment means exact.
unique_by_fieldvalue_fieldProductDraftPrice
currencyISO 4217 currency.
custom_dimensionsThe price's custom dimension values.
is_set_priceTrue when this price is a keyed set's price rather than a single key's.
list_price^-?\d+(\.\d+)?$ · requiredThe price's amount, in its currency.
price_idThe price this value belongs to.
country_codeISO 3166-1 alpha-2 country this price applies in.
display_namemetadataprice_basisWhether list_price and the tier amounts are net of tax (exclusive, the default when omitted) or already contain it (inclusive). An inclusive price is billed as the stated amount: the invoice derives the net and the tax out of it at the resolved rate.
The price's tiers, in order.
ProductDraftTier
formula_defaultsDefault values for the formula's variables.
tier_orderThe tier's position, 0-based. It is half the tier's identity — a tier is a child of the version keyed by
unit_amount^-?\d+(\.\d+)?$ · requiredIn the price's currency: the per-unit rate under VOLUME and STAIRCASE, the price per package under PACKAGE.
basisRequired on a tier with a rate_expression or formula_id, absent on a static tier: per_unit (the result is a rate per billed unit; per package under PACKAGE) or per_band (the result is the band's whole amount).
formula_idThe price formula this tier evaluates. Alone, the tier follows the formula's head.
formula_version_idPin the tier to this formula version. Omit to follow the formula's head.
package_size^-?\d+(\.\d+)?$PACKAGE only: how many units one package holds (> 0).
rate_expressionA formula expression evaluated for this tier instead of a flat rate.
up_to^-?\d+(\.\d+)?$The tier's upper bound; absent on the final, unbounded tier.
ProductDropped
governing_versionThe plan version that governs the line and no longer carries its product.
kept_versionThe plan version the line keeps billing: the last one that carried the product.
ProductLocalized
nameThe product name in the caller's language.
descriptionThe internal description in the caller's language.
public_descriptionThe buyer-facing description in the caller's language.
ProductMeterBinding
created_atidmeter_idMeter whose result this binding consumes.
organization_idproduct_idProduct this binding wires to a meter.
roleHow billing consumes the result: BILLABLE_QUANTITY (the line quantity; at most one per product), PRICING_VAR (a named formula variable) or INFORMATIONAL (evaluated for audit only).
statusactive while the product version being edited (the working draft, else the current version) carries the binding; retired once it has been removed. Set active with PATCH to restore a removed binding.
updated_atworkspace_idWorkspace that owns this binding.
The bound meter. Sent with include=meter. Sent without include=meter until 2026-11-30; after that only with include=meter.
Additional filter tree AND-ed onto the meter's own filters for this product only.
pricing_var_nameFormula variable name the meter result is exposed as; empty only for INFORMATIONAL bindings.
ProductPublishImpact
pinned_subscribersplan_countplan_subscribersThe active plans that follow the product's latest version and republish with it.
product_idproduct_subscriberssubscriptions_affectedProductPublishImpactPlan
plan_idcurrent_product_versionThe product version the plan's version in force carries; absent when it carries none.
The plan. Sent only with include=plan.
plan_nameThe plan's name. Deprecated: use plan.name (include=plan) instead. Removed on 2026-11-30.
ProductPublishImpactStrategies
at_phase_changeat_phase_change_heldimmediate_proratenext_periodon_resumePaused subscribers with a following line this version changes: it moves when the subscription resumes.
ProductRef
idnameDisplay name of the product.
statusThe product's own state: draft (nothing published yet), active (its head version is published) or archived (retired by the operator).
ProductSearchHit
display_namePrimary label shown for the hit in the results list.
entity_typeKind of the matched entity; it names the shape of data.
idIdentifier of the matched entity.
scoreRelevance score from the search engine; higher ranks first.
tag_idsThe ids of the tags on the matched entity. Add include=tags to get the tags themselves.
The owning customer. Sent only with include=customer, and only when the entity has an owning customer.
customer_idOwning customer's id; empty for catalog entities that have no owning customer.
referenceThe short per-organization human reference an operator would say out loud: an invoice's or credit note's number, a subscription's SUB-000123, a quote's QUO-2026-000078. Absent for a kind that is named rather than numbered (customer, product, plan, payment, dispute) and for a draft invoice, which has no number until it is finalized.
secondary_textSupporting line shown under the display name (e.g. an invoice number or email).
Tags attached to the matched entity. Sent without include=tags until 2026-11-30; after that only with include=tags.
customer_nameOwning customer's display name; empty for catalog entities. Deprecated: use customer.name (include=customer) instead. Removed on 2026-11-30.
ProductTaxCategory
Requests also accept the new spelling: each value in lower case (default for DEFAULT). The listed spelling is deprecated in requests and accepted until 2026-11-30.
ProductTrackMode
Requests also accept the new spelling: follow for latest. The listed spelling is deprecated in requests and accepted until 2026-11-30.
ProductUpdatedPayload
What the edit changed of the product's own fields: the catalog_header change family.
organization_idproduct_idThe product that was updated.
updated_atnameThe product name after the update.
workspace_idThe workspace that owns the product.
ProductVersionRebasedPayload
new_versionThe version number after the rebase.
old_versionThe version number before the rebase.
organization_idover_versionThe just-published version the rebase was renumbered above.
product_idThe product whose pending version was rebased.
rebased_atWhen the version was rebased.
version_idThe product version row that was rematerialized.
workspace_idThe workspace that owns the product.
ProductVersionSnapshot
archived_reasonbase_version_idThe version this one is built on — the predecessor for a release, the base for a draft.
created_ateffective_fromeffective_toentity_ididkindThe versioned kind: product, plan, rate_table, price_formula or tax_rule.
originpublished_atrankrelease_namerelease_notescheduled_change_idscheduled_forstatusversionThe display number, or null while the row is off the chain.
Who published the version — the same actor the audit trail names. Absent until it is published.
descriptionThe product's current internal description: a live value, not part of the version. Deprecated: use description of GET /products/{id} instead. Removed on 2026-11-30.
external_idThe product's current external id: a live value, not part of the version. Deprecated: use external_id of GET /products/{id} instead. Removed on 2026-11-30.
The product's current operator metadata: a live value, not part of the version. Deprecated: use metadata of GET /products/{id} instead. Removed on 2026-11-30.
nameThe product's current name: a live value, not part of the version. Deprecated: use name of GET /products/{id} instead. Removed on 2026-11-30.
product_idThe product this version belongs to; the same id as entity_id. Deprecated: use entity_id instead. Removed on 2026-11-30.
product_statusThe product's current status (draft, active or archived): a live value, not part of the version. Deprecated: use status of GET /products/{id} instead. Removed on 2026-11-30.
Promotion
audience_forkedTrue when audience_id names a promotion-scoped audience minted by the fork action, hidden from the library.
created_atdelivery_railsThe delivery surfaces that can actually pay this promotion's reward, derived from its shape. invoice_assembly is the document rail an invoice or a subscription renewal goes through; usage_basket is the metered rail, which evaluates a priced bill with quantities; reserve_hold prices a reservation; credit_note settles a window of finalised documents. A bundle answers usage_basket alone, because only that rail is given the quantities and the cross-bundle ledger a bundle counts sets with — so a bundle is never offered to a document, and a subscription holding one still bills. Read this rather than inferring rails from the shape: it is what the API itself enforces.
descriptionInternal note. Never shown to a customer.
distributionHow a customer comes to hold it.
idnameThe operator's name for the offer.
negotiated_pricesWhether this promotion may cut a line whose price was negotiated by hand.
on_narrowingWhat happens to existing holders when the promotion is narrowed under them.
public_descriptionWhat the customer is told the offer is. The portal and the invoice allowance reason read this.
shape_kindWhich of the six shapes it is. include=shape adds the shape with its slots under shape.
statusThere is no paused and no archived: a promotion that must stop is ended, and a frozen part that must change is a successor.
updated_atwindow_startFirst day the promotion may fire, inclusive, in UTC.
audience_idThe library audience this promotion references. Absent means everyone the include and exclude lists allow.
codeThe coupon code. Present exactly when the distribution is coupon.
customer_excludesCustomers refused regardless of the audience. Sent only with include=customer_lists on the list. The item read and every write send it without include=customer_lists until 2026-11-30; after that only with include=customer_lists.
customer_includesCustomers admitted regardless of the audience. Sent only with include=customer_lists on the list. The item read and every write send it without include=customer_lists until 2026-11-30; after that only with include=customer_lists.
end_reasonended_atWho ended the promotion — an operator, an API key, the system or a job — as the audit trail names an actor. Absent while it runs, and on a promotion ended before this was recorded.
The ceilings, in authoring order. Sent only with include=limits on the list. The item read and every write send it without include=limits until 2026-11-30; after that only with include=limits.
never_withPromotions this one may never fire alongside, on any line, in any lane. Sent only with include=never_with on the list. The item read and every write send it without include=never_with until 2026-11-30; after that only with include=never_with.
published_atWhat the promotion applies to. Sent only with include=scope on the list. The item read and every write send it without include=scope until 2026-11-30; after that only with include=scope.
The shape and its slots. Sent only with include=shape on the list. The item read and every write send it without include=shape until 2026-11-30; after that only with include=shape.
succeedsThe promotion this one replaces. A lineage pointer; no redemption is migrated.
Locale-keyed overrides for name and public_description. The internal description is not translatable. Sent only with include=translations on the list. The item read and every write send it without include=translations until 2026-11-30; after that only with include=translations.
window_endLast day it may fire, inclusive. Absent means open-ended.
PromotionChange
kindWhat the change is about: a text, a translation, the window, how it is held, a policy, the audience, a customer named in or out, a scope member, a ceiling or the offer.
afterFor a text: its value after the edit; absent when it was cleared.
axisFor a scope member: which of the scope's sets it belongs to.
beforeFor a text: its value before the edit; absent when there was none.
For the window's start or end: the day before the edit and after it.
For how a customer comes to hold it: before the edit and after it.
fieldFor a translation: which customer-facing text it overrides.
idFor a customer named in or out, or a promotion it never fires beside: the one that came or went.
For a ceiling: as it stood before the edit and as it stands after it.
localeFor a translation: the locale it overrides.
For the negotiated-price policy: before the edit and after it.
For what a narrowing does to the holders: before the edit and after it.
For the audience it is for or the promotion it replaces: the id before the edit and after it.
For the offer: its shape and slots before the edit and after it.
valueFor a scope member: the product id, price key or tag.
PromotionChangeKind
PromotionDaySides
afterThe day after the edit; absent when it was cleared.
beforeThe day before the edit; absent when there was none (an open-ended window).
PromotionDistributionSides
afterThe setting after the edit.
beforeThe setting before the edit; absent when there was none.
PromotionDraftRequest
distributionHow a customer comes to hold it. Frozen once published.
nameThe operator's name for the offer.
The shape and its slots, flattened under a kind discriminator. Frozen once the promotion is published.
window_startFirst day the promotion may fire, inclusive. Frozen once published; a backdated start is allowed and re-bills nothing, because the ledger starts at publish.
audience_idA library audience to reference. Editing a shared audience affects every promotion using it; fork it for a private one.
codeThe coupon code. Required for a coupon promotion and refused for any other. Unique within the workspace, case-insensitively.
customer_excludesCustomers refused regardless of the audience. A customer on both lists is refused as an authoring error rather than resolved.
customer_includesCustomers admitted regardless of the audience.
descriptionInternal note. Never shown to a customer.
The ceilings, in authoring order. Editable while live, downwards.
negotiated_pricesWhether this promotion may cut a hand-negotiated price. Defaults to exclude. Frozen once published; an audience-targeted limit row may override it.
never_withPromotions this one may never fire alongside. Enforced across all four lanes; inside the price-cut lane the later-published side loses. Frozen once published.
on_narrowingWhat happens to existing holders when the promotion is narrowed under them. Defaults to keep, and stays editable while live.
public_descriptionWhat the customer is told the offer is.
What the promotion applies to. Omit for the whole catalogue. Frozen once published.
succeedsThe promotion this one replaces. A lineage pointer only: no redemption is migrated.
Locale-keyed overrides for name and public_description, keyed by language code (en, de, fr, es, it, pt, nl, ja). The internal description is not translatable.
window_endLast day it may fire, inclusive. Omit for open-ended. This is the one window bound a live promotion may still move, and only inwards.
PromotionEffect
never_withPromotions this one may never fire alongside.
The promotion's shape and its slots, flattened: kind names the shape and the remaining fields are that shape's own. Eligibility is nested rather than flattened because it is a condition on the redemption, not part of the arithmetic.
PromotionEligibility
first_purchaseOnly a customer who has never been invoiced may redeem.
plansOnly a customer currently holding one of these plans may redeem.
requires_verificationAn operator-configured verification kind ("student", "military") the customer must currently hold.
PromotionEventPayload
atWhen it happened.
distributionauto_apply, auto_enroll or coupon.
nameThe promotion's operator-facing name.
organization_idpromotion_idThe promotion this happened to.
redemptions_endedHow many holders this ended, under on_narrowing = end; 0 on created and published.
shapeWhich of the six shapes it is: line_discount, free_periods, bundle, free_units, threshold or rebate.
statusdraft, live or ended.
window_startFirst day the promotion may fire (UTC, inclusive).
audience_idThe library audience the promotion is for after the act; absent when it admits everyone its include and exclude lists allow.
What the edit changed, change by change: the promotion change family. Absent on created, published and ended.
codeThe coupon code, for a coupon promotion.
end_reasonWhy it ended: window, ceiling or manual. Only on promotion.ended.
window_endLast day it may fire; absent means open-ended.
workspace_idThe workspace that owns the promotion.
PromotionFiring
SIGNED: negative is money off. A reversal carries the opposite sign of what it reverses.
customer_ididlaneWhich of the four combination lanes produced it. Lanes run in this order and each sees the net the previous one left.
The running net it left. Never below zero.
The line's running net as this lane found it.
occurred_atThe BILLING clock of the bill that produced the row, never when it was written.
productpromotion_idredemption_idstatusA hold's firing is pending until capture, when it settles, or voided on release.
period_endperiod_startprice_keyreversesThe firing this one reverses. A clawback is the set of reversals of a redemption's settled firings.
subscription_idunits^-?\d+(\.\d+)?$How many units the firing covered, for the unit-counted shapes.
dedup_key(redemption, target, period), built from the fields of this row. A regenerated bill collapses onto the same row, which is what makes regeneration safe. Deprecated: use redemption_id, target, period_start and period_end instead. Removed on 2026-11-30.
PromotionHoldUntil
boundwindow_end: the promotion closes. first_periods: the first periods it covers end, counted on the subscription's own clock.
last_dayInclusive.
PromotionLimit
at_ceilingpartial clips an amount or units firing to the remaining headroom, truncated so it can never overshoot; for counts it is the same as skip.
countsWhat is counted. redemptions gates redemption and is never counted at bill time.
overThe bucket axes. promotion means no extra axis and cannot be combined with the others; [customer, price_key] is one bucket per customer per key.
positionThe row's place in the promotion's limit list, 0-based. This is what PATCH/DELETE /promotions/{id}/limits/{position} addresses.
windowThe horizon one bucket covers. Without an anchor subscription, billing_period buckets by the bill's own period.
The cap for an amount ceiling, as a money table. The entries price named currencies; the default is one currency-less value spent in whatever currency the bill is in, for every currency the entries do not name. An entry always beats the default, at least one of the two is required, and nothing is ever converted. A bill this table answers for in neither way is refused with currency_mismatch.
audience_idAn override row: it applies only to the members of this audience and replaces the same-shaped row naming no audience. A customer in two override audiences of one shape gets the FIRST row in authoring order.
ceiling^-?\d+(\.\d+)?$The cap on the counted thing, per bucket, for a redemptions, firings or units ceiling. Absent for an amount ceiling, whose cap is money.
negotiated_pricesOverrides the promotion's negotiated-price policy for that audience. Only an override row may carry it.
periodsn, when the window is first_n_periods.
PromotionLimitRequest
at_ceilingWhat happens to a firing that does not fit.
countsWhat is counted, read from the firing ledger — or, for redemptions, from the redemption table.
overThe bucket axes: promotion, customer, subscription, price_key. promotion means no extra axis and may not be combined with the others.
windowThe horizon one bucket covers.
The cap for an amount ceiling, as a money table. The entries price named currencies; the default is one currency-less value spent in whatever currency the bill is in, for every currency the entries do not name. An entry always beats the default, at least one of the two is required, and nothing is ever converted. A bill this table answers for in neither way is refused with currency_mismatch. Required for an amount ceiling and refused for any other.
audience_idMakes this an override row for the members of that audience, replacing the same-shaped row naming no audience. One customer is an audience with one explicit include. A customer in two override audiences of one shape gets the FIRST row in authoring order.
ceiling^-?\d+(\.\d+)?$The cap, per bucket, for a redemptions, firings or units ceiling. Greater than zero, and refused for an amount ceiling, whose cap is money and goes in amount.
negotiated_pricesOverrides the promotion's negotiated-price policy for that audience. Only an override row may carry it.
periodsn, required when the window is first_n_periods and refused otherwise.
PromotionLimitSides
The ceiling after the edit; absent when it was lifted.
The ceiling before the edit; absent when it was added.
PromotionLimitUsage
ceiling^-?\d+(\.\d+)?$ · requiredThe ceiling these figures are measured against, already resolved out of the money table for this currency.
overridden_for_some_audienceA promotion-wide row that at least one audience-bound row replaces. The figures still count the buckets this row governs; the flag says it is not the ceiling that applies to everybody.
remaining^-?\d+(\.\d+)?$ · requiredCeiling minus used in that same largest bucket, floored at zero.
used^-?\d+(\.\d+)?$ · requiredThe largest single bucket total of this row, never the sum across buckets: a ceiling applies per bucket, so a per-customer cap of 10 spent by fifty customers has used 10 and not 500. It is the same figure a lowered ceiling is refused against.
currencyThe currency this row's figures are in. Absent for a counting ceiling. An amount ceiling yields one row per currency it prices.
exhaustedTrue when the largest bucket has no headroom left: remaining is zero. Deprecated: use remaining instead. Removed on 2026-11-30.
PromotionLimitWindow
PromotionListItem
audience_forkedTrue when audience_id names a promotion-scoped audience minted by the fork action, hidden from the library.
created_atdelivery_railsThe delivery surfaces that can actually pay this promotion's reward, derived from its shape. invoice_assembly is the document rail an invoice or a subscription renewal goes through; usage_basket is the metered rail, which evaluates a priced bill with quantities; reserve_hold prices a reservation; credit_note settles a window of finalised documents. A bundle answers usage_basket alone, because only that rail is given the quantities and the cross-bundle ledger a bundle counts sets with — so a bundle is never offered to a document, and a subscription holding one still bills. Read this rather than inferring rails from the shape: it is what the API itself enforces.
descriptionInternal note. Never shown to a customer.
distributionHow a customer comes to hold it.
idnameThe operator's name for the offer.
negotiated_pricesWhether this promotion may cut a line whose price was negotiated by hand.
on_narrowingWhat happens to existing holders when the promotion is narrowed under them.
public_descriptionWhat the customer is told the offer is. The portal and the invoice allowance reason read this.
Without include=shape, which of the six shapes it is (the same value as shape_kind). With include=shape, the shape and its slots, as on Promotion. From 2026-11-30 shape is sent only with include=shape and only as the object; read the kind from shape_kind.
shape_kindWhich of the six shapes it is. include=shape adds the shape with its slots under shape.
statusThere is no paused and no archived: a promotion that must stop is ended, and a frozen part that must change is a successor.
updated_atwindow_startFirst day the promotion may fire, inclusive, in UTC.
audience_idThe library audience this promotion references. Absent means everyone the include and exclude lists allow.
codeThe coupon code. Present exactly when the distribution is coupon.
customer_excludesCustomers refused regardless of the audience. Sent only with include=customer_lists on the list. The item read and every write send it without include=customer_lists until 2026-11-30; after that only with include=customer_lists.
customer_includesCustomers admitted regardless of the audience. Sent only with include=customer_lists on the list. The item read and every write send it without include=customer_lists until 2026-11-30; after that only with include=customer_lists.
end_reasonended_atWho ended the promotion — an operator, an API key, the system or a job — as the audit trail names an actor. Absent while it runs, and on a promotion ended before this was recorded.
The ceilings, in authoring order. Sent only with include=limits on the list. The item read and every write send it without include=limits until 2026-11-30; after that only with include=limits.
never_withPromotions this one may never fire alongside, on any line, in any lane. Sent only with include=never_with on the list. The item read and every write send it without include=never_with until 2026-11-30; after that only with include=never_with.
published_atWhat the promotion applies to. Sent only with include=scope on the list. The item read and every write send it without include=scope until 2026-11-30; after that only with include=scope.
succeedsThe promotion this one replaces. A lineage pointer; no redemption is migrated.
Locale-keyed overrides for name and public_description. The internal description is not translatable. Sent only with include=translations on the list. The item read and every write send it without include=translations until 2026-11-30; after that only with include=translations.
window_endLast day it may fire, inclusive. Absent means open-ended.
The shape slots, scope and never-with set. Present only with include=effect. Deprecated: use include=shape,scope,never_with instead. Removed on 2026-11-30.
PromotionNegotiatedSides
afterThe setting after the edit.
beforeThe setting before the edit; absent when there was none.
PromotionOnNarrowingSides
afterThe setting after the edit.
beforeThe setting before the edit; absent when there was none.
PromotionPreview
One entry per line that any promotion looked at, including the ones nothing fired on.
draft_delivery_railsWhere the inline draft's reward can actually be delivered, derived from its shape. A bundle answers usage_basket alone: only the metered rail is given the quantities and the cross-bundle ledger a bundle counts sets with, so a bundle is never put on an invoice or a subscription renewal. Absent when the request carried no draft.
draft_onlyTrue when the evaluation was of the inline draft alone, with no customer: no live promotions, no redemption history and no audience membership took part.
draft_promotion_idThe id the inline draft was given for this evaluation. It addresses the draft's steps in the chain and names no stored promotion.
PromotionRedemption
created_atcustomer_ididpromotion_idstatuspending is a lookahead bundle whose target has not appeared; dormant is eligibility that no longer holds and may come back; left is the customer's own opt-out and is re-joinable; revoked is an operator block.
activated_atanchor_subscription_idWith an anchor, only that subscription's lines may fire. Absent lets every line of the customer in scope fire.
clawed_back_atWhen a revoke reversed this redemption's settled firings.
end_reasonended_atpending_expires_atThe far edge of a pending bundle's grace window: when the hold expires if the target never arrives.
The promotion held, with every part. Sent with include=promotion. GET /customers/{id}/promotions and GET /subscriptions/{id}/promotions send it without include=promotion until 2026-11-30; after that only with include=promotion.
The ceilings that apply to this customer, with the customer's own overrides already resolved in. Sent with include=remaining_limits. GET /customers/{id}/promotions and GET /subscriptions/{id}/promotions send it without include=remaining_limits until 2026-11-30; after that only with include=remaining_limits.
What was taken off bills, POSITIVE, one entry per currency: a customer billed in two currencies has saved in both, and there is no rate this API is entitled to convert with. Empty until the first bill. On GET /promotions/{id}/redemptions and on a write, what this redemption took off; on GET /customers/{id}/promotions, what the promotion took off the customer's bills; on GET /subscriptions/{id}/promotions, what it took off that subscription's bills. Sent with include=saved. The three hold lists send it without include=saved until 2026-11-30; after that only with include=saved.
The last day this hold can take money off a bill, as far as it is known today. Absent when nothing bounds it: an open-ended promotion, or a first-periods offer held for the whole customer, whose periods count on each subscription separately. Sent with include=until. GET /customers/{id}/promotions and GET /subscriptions/{id}/promotions send it without include=until until 2026-11-30; after that only with include=until.
The redemption again, on the rows of the three hold lists. Read the row's own fields. Deprecated: use the row's own fields instead. Removed on 2026-11-30.
PromotionReferenceSides
afterThe id referred to after the edit; absent when it was cleared.
beforeThe id referred to before the edit; absent when there was none.
PromotionRemainingLimit
ceiling^-?\d+(\.\d+)?$ · requiredThe ceiling these figures are measured against, resolved out of the money table for this currency.
remaining^-?\d+(\.\d+)?$ · requiredCeiling minus used, floored at zero.
used^-?\d+(\.\d+)?$ · requiredThe largest single bucket total this customer contributes to — never the sum across buckets, because a ceiling applies per bucket. For the lifetime ceilings a customer is usually shown there is only one bucket, so the figure is exact.
currencyThe currency these figures are in. Absent for a counting ceiling; an amount ceiling yields one row per currency it prices.
exhaustedTrue when there is no headroom left: remaining is zero. Deprecated: use remaining instead. Removed on 2026-11-30.
PromotionScope
price_keysPrice keys the line must be one of. Empty means any key.
productsProduct ids the line must be one of. Empty means any product.
tagsProduct tags the line must carry at least one of. Empty means any tags.
PromotionScopeRequest
price_keysPrice keys. Empty means any key.
productsProduct ids. Empty means any product.
tagsProduct tags; a line matches on intersection. Empty means any tags.
PromotionTermsSides
The offer after the edit: its shape and its slots, flattened.
The offer before the edit: its shape and its slots, flattened.
ProvisionChildRequest
source_subscription_idAn ACTIVE subscription in this organization's live workspace, on a plan carrying metadata.auto_provision_tenant.
source_delivery_idThis delivery's id. Derived from the subscription when omitted.
source_event_idThe outbound envelope's idempotency key. Derived from the subscription when omitted.
ProvisionedChild
admin_invitedA PROBED fact: an invitation or a membership row exists. false means nobody can sign in yet.
replayedtrue when this sale already had a tenant and the call converged on it.
seed_failedAfter-commit seeding steps that did not land. Both are idempotent; repeat the call to repair them.
PublicQuoteDraftBody
The signature the signer adopted so far.
The intake as typed so far: billing and shipping address, VAT id, and the answers to the custom fields the offer asks for (answers to anything else are dropped). Nothing here is checked against the offer's requirements; signing does that.
The signer's own fields in signing_documents as they stand, keyed by field id: true for a signature or initials field they applied or a checkbox they ticked, the text of a text field. Other signers' fields, date fields and values of the wrong type are dropped, not refused. An applied field is not a signature.
signer_nameThe name the signer has typed.
signer_roleThe role or title the signer has typed.
PublicQuotePageResponse
consent_textThe exact consent sentence the signature snapshots for audit, in the page's language (any of the eight supported locales). Show it verbatim beside the consent box; the signature records this same sentence for the language the sign request names.
The offer as a document: the Model (every fact it states, worded and computed on the server), and the seller's quote template planned for the web — the blocks to render in order and the facts each renders. The page renders it and adds nothing up.
localeThe language the server resolved for this page — the buyer's explicit choice, else the offer's stated language, the customer's, Accept-Language, the organization default — and wrote the document and the consent text in. A page with no explicit choice renders its own labels in it.
The acceptance form as it opens: what the buyer saved on this page or in the portal, over the billing address on the customer record. The requirements in document.model.requirements are satisfied against the same values.
The documents the seller asks the buyer to sign with the offer, in the frozen PDF, and the fields on them; null when there are none. Collect this signer's field values and send them as field_values with the signature.
The tax line the page seeds and re-quotes through POST .../tax as the buyer changes country.
viewerWho the page is for. buyer: the signer's own link; the page acts as usual. preview_link: a read-only preview link — show the fixed banner 'Vorschau — dieser Link kann nicht unterschreiben'; nothing can be signed, declined or saved (every write answers 403 QUOTE_PREVIEW_READ_ONLY), no saved form is read and prefill.has_input is false. operator: the quote's Preview tab (GET /v1/quotes/{id}/buyer-page); read-only, nothing recorded. org_signatory: the person who signs for the organisation (GET /v1/quotes/{id}/org-signing); requirements are the name, the role and the consent, and signing_documents is their slot.
The coupon this offer carries and what it does, in the page's language, present only when it will apply. The document's totals do not include it: the discount applies to the invoices of the subscription named in applies_to.
PublicQuotePageResponseCustomerStruct
nameAddressed customer's display name; the only customer field the page shows.
PublicQuotePageResponseQuoteStruct
currencyISO 4217 currency of value and all line amounts.
kindWhat a signature orchestrates: NEW_SUBSCRIPTION or SUBSCRIPTION_UPDATE.
numberPer-org sequential quote number (QUO-
signature_modeHow the buyer signs: BASIC (typed name) or OTP (email code). EXTERNAL appears only on an older offer signed on paper, which this page cannot sign.
statusLifecycle status; the public surface only serves SENT, SIGNED, DECLINED, EXPIRED.
titleQuote title.
Quote value in major units. On a signed quote this is the total that was actually agreed. The signature echoes it back as agreed_total.
value_autoTrue while value tracks the line sum; an operator value override flips it off.
contract_termsContract terms.
expires_atPublic-link expiry.
note_for_customerOperator's note to the buyer.
signed_atSignature instant; set once the quote is signed.
PublicQuotePageResponseStateStruct
countersignatureWhat the seller still owes on this document: NONE (nothing to wait for), PENDING (you have signed and the seller has not — the signed copy is not final yet), DONE (the seller has signed or sealed it).
declinedThe buyer declined this quote.
details_by_emailTrue when a message to the buyer has actually been queued since they signed (read from the sent-mail log). The page promises an email only then.
expiredThe offer has lapsed: it is EXPIRED, or its expires_at has passed while it is still SENT. The page renders read-only and sign/decline answer 409.
payment_method_collectedA payment method was already collected for this quote.
read_onlyTrue when the page is an outcome view (signed/declined/expired) or otherwise not actionable.
signableFalse when the offer is out with the buyer (SENT, not expired) and can no longer be signed as it stands: something it depends on changed after it was sent. The seller has been told and the page shows no signature form. True in every other case, including signed, declined and expired offers, where the other state fields say what the page is. The reason is never exposed here.
signedThe quote is signed, and the subscriptions it offers are live.
PublicQuoteTaxDefaults
exemptZero-rated determination for default_country.
mixedTrue when the offer carries more than one tax rate. default_rate is then the EFFECTIVE rate: it totals correctly but must not be labelled as a percentage - render breakdown instead.
reverse_chargeB2B reverse-charge determination for default_country.
One row per distinct tax rate, net and tax per rate, allocated against the offer's headline value so the rows add back to it. Empty for a single-rate offer.
default_countryThe country the buyer's form opens on: the tenant's registered address's country (ISO 3166-1 alpha-2); empty when none is on file.
default_rate^-?\d+(\.\d+)?$Tax rate as a decimal (0.19 for 19%) for default_country; null when no rule matches.
seller_countryTenant's jurisdiction (ISO 3166-1 alpha-2) the resolver determined the supply FROM; the page picks the national tax term from it (DE -> USt./MwSt., FR -> TVA, ...) instead of the visitor's browser locale.
PublicQuoteTaxRow
categoryProduct tax category these lines share.
net_amount^-?\d+(\.\d+)?$ · requiredNet for this rate, in major units of the quote's currency (the quote document's header.currency).
tax_amount^-?\d+(\.\d+)?$ · requiredTax for this rate, in major units of the quote's currency (the quote document's header.currency).
rate^-?\d+(\.\d+)?$Tax rate as a decimal (0.19 for 19%); null when this category owes nothing.
tax_labelResolved tax type, e.g. VAT.
PublisherPayload
typeWho published: user, api_key, system, job, webhook, customer or unknown.
customer_idThe publishing customer, for type customer.
key_idThe publishing API key, for type api_key.
key_prefixThe publishing API key's display prefix.
labelThe actor's label: a mechanism for the system (versioning:cascade), a job's name.
nameThe publishing user's name.
user_idThe publishing user, for type user.
via_delegation_idThe grant the publisher's right came from.
via_kindHow the publisher came to act in this organization when not a member of it.
via_organization_idThe organization the publisher acted from.
PutEInvoicingChannelCredentialRequest
refThe locator to store it under — the same string a channel's credentials_ref names.
secretThe credential itself. Sealed at rest under the organization's own key and never returned by any endpoint; writing again replaces it, which is how rotation works.
labelOperator-facing name for this credential.
PutQuoteSigningLayoutInputBody
The operator's whole field list on the quote's pages; it replaces the saved one. Auto fields are not sent.
fingerprintThe fingerprint you read. Fields placed on a render whose pages changed since answer 409 SIGNING_LAYOUT_STALE.
updated_atThe updated_at you read; null or absent for the first save. A layout saved since answers 409 CONFLICT.
QuantityBand
maxThe greatest quantity; absent for no upper limit.
minThe least quantity; absent for no lower limit.
QuantityRounding
increment^-?\d+(\.\d+)?$ · requiredStep the billable quantity is snapped to, e.g. "1" (whole units), "0.01", "1000". Positive, at most 8 decimal places.
modeWhich multiple of the increment a value between two of them lands on: DOWN, UP or NEAREST (halfway rounds up).
QuantityRoundingMode
Requests also accept the new spelling: each value in lower case (down for DOWN). The listed spelling is deprecated in requests and accepted until 2026-11-30.
QuantitySource
Requests also accept the new spelling: each value in lower case (declared for DECLARED). The listed spelling is deprecated in requests and accepted until 2026-11-30.
QueuedUsageEvent
outcome_idThe capture this event queued. A retry with the same event_key and hold_id answers the same outcome_id; the reserve_outcome.* webhooks name it.
statusAlways queued: the event settles its reservation in the background.
Quote
contract_termsContract terms rendered to the buyer.
copy_contact_idsCustomer contacts copied on the signature request, beside signer_contact_id.
countersignWhat your organisation does once the buyer has signed. none: nothing. seal: the signed copy is sealed in the organisation's name. person: a member signs for the organisation, and the document shows their signature lines. Taken from the organisation's default when the quote was created; editable until it is sent, then the signature request keeps what it froze.
countersign_orderWhen a person countersignature is made: after_buyer (the buyer signs first) or before_send (your organisation signs first). Read only under person.
countersigner_user_idThe member who signs for your organisation under person; null: anyone who holds quotes.sign_for_org.
created_atcurrencyISO 4217 currency of value_amount and all line amounts.
customer_idCustomer the quote addresses.
document_template_frozenTrue once the quote was sent and its layout was frozen. From then on the document renders from the frozen copy and template edits cannot reach it; an amendment, a withdrawal or a revise clears it.
idkindWhat a signature orchestrates: NEW_SUBSCRIPTION or SUBSCRIPTION_UPDATE.
note_for_customerNote rendered to the buyer on the public page.
organization_idquote_numberPer-org sequential number (QUO-
reminder_every_daysThe buyer is reminded every N days while the offer is unsigned; null: no automatic reminders.
reminder_maxAt most this many reminders; null: the provider's own cap.
require_payment_methodBuyer must register a payment method before signing.
require_shippingBuyer must supply a shipping address before signing.
require_signer_roleThe signer must state their role or title before signing.
require_vat_idBuyer must supply a VAT id before signing.
signature_modeHow the buyer signs: BASIC (typed name) or OTP (typed name and an emailed code). EXTERNAL appears only on older quotes that were signed on paper and never sent for signature; it cannot be written. A paper signature is recorded with mark-signed on any APPROVED or SENT quote, whatever its mode.
signer_contact_idThe customer contact who signs; null: the customer's Quotes & contracts contacts (their primary signs, the others are copied), else the customer's own email.
sourceCreation channel (e.g. DASHBOARD).
statusLifecycle status: DRAFT, PENDING_APPROVAL, APPROVED (cleared to send exactly as it stands — by an approver, or on the operator's own authority where approval did not apply), SENT, SIGNED, DECLINED, EXPIRED, or VOIDED. Whether the buyer has opened a sent offer is viewed; whether an approver sent a draft back is changes_requested.
titleOperator-facing title.
updated_atQuote value in major units, as a currency-tagged amount. While value_auto is true it is DERIVED from the offer's revisions — the first phase of each, every-period lines only, metered and once lines excluded, normalised to value_cadence and summed — the same rule as a subscription's MRR.
value_autoTrue while value_amount is derived from the offer's revisions; an operator value override flips it off and pins the number.
value_stateWhat value_amount IS. VALUED: a figure (an operator-pinned value is always this). NO_PAID_PHASE: the offer recurs nothing — no subscription on it, or every phase free — which is an ABSENCE of a recurring charge and not a zero price, so do not print value_amount. CANNOT_BE_VALUED: the offer could not be priced at all and value_blocker names what to fix; value_amount carries no meaning, and submit and send are refused until it is fixed or a value is pinned.
view_countHow often the buyer opened the offer as last sent.
viewedThe buyer has opened the offer as last sent (first_viewed_at is set). A send and an amendment start it again.
workspace_idWhat may be done with the quote right now, and what an edit does — the same rules every write enforces. Populated on single-quote reads.
What the buyer answered when they signed, and what happened to each answer at its destination. Populated on single-quote reads of a signed quote.
Set on a DRAFT an approver sent back: their words, who and when — the latest approval act on its trail is the rejection. Absent once it is submitted, cleared, sent or reopened again. Stamped on the list and the detail reads.
Clause snapshots picked from the library; populated on single-quote reads.
countersign_dueSet while the buyer has signed and a person must still sign for your organisation. ME: you may sign it now. OTHER: the request names a colleague. VENDOR: it is signed at the signing provider, not in the app. Absent when nothing is owed. Stamped on the list and the detail reads.
What coupon_code does and whether it will; populated on single-quote reads when a code is set. The quote's totals never include it.
coupon_codePromotion coupon code. Validated for this customer on save and redeemed at signing, against the first subscription the offer creates.
created_byOperator user who created the quote.
custom_fieldsOrg-scoped custom field values.
decline_reasonBuyer's decline reason.
declined_atDecline instant.
display_nameHuman name for this quote: "". Derived at read time from the customer it addresses; never stored.
document_template_idDocument template this quote renders through. Null means the organization's quote default; a value that no longer resolves falls back to it too.
expires_atThe offer's one deadline: past it a sent offer expires, and its signature request expires with it. An offer the buyer has signed never expires.
first_viewed_atThe buyer's first open of the offer as last sent.
Governing invoicing law, resolved once at send and frozen with the tax determination. Read-only. Absent on drafts and where the resolution was refused.
last_viewed_atThe buyer's most recent open of the offer as last sent.
localeLanguage the offer is for (en, de, fr, es, it, pt, nl, ja): the PDF's render language, the buyer mail's copy language, and the language a clause body is snapshotted in. Null inherits the customer's locale, then the organization default.
Arbitrary caller-supplied key/value pairs.
owner_user_idOperator user owning the quote.
preset_idQuote preset the quote was prefilled from.
referenceShort human id, unique within the organization and stable for the quote's life. For a quote this IS quote_number, repeated under the name every referenced object uses.
What the buyer must answer before signing. Each entry names a custom-field key, WHERE the answer goes after signature (target: DOCUMENT_ONLY keeps it on the offer, CUSTOMER and SUBSCRIPTION write it through) and what happens when the destination already holds a value (on_conflict).
sent_atWhen the quote was released to the buyer.
signability_lost_atSet on a SENT quote that was found unable to be signed as it stands since it was last sent or amended: the latest SIGNABILITY_LOST event after the latest SENT or amendment. Absent otherwise. A finding, not a live answer — GET /quotes/{id}/signability says whether it still holds and why. Stamped on the list and the detail reads.
Signature summary; populated on single-quote reads when a signature exists.
signed_atSignature instant.
The organisation's signing defaults the quote's terms were taken from, as they stand now. Populated on single-quote reads.
The buyer's signing link, returned ONCE. Present only on the response to a send/reissue made while no email rail is bound for this organization, so nothing else can deliver it. Never returned by a read: copy it now or reissue it.
starts_atWhen the offer begins. The lines were priced against the catalog as of this date, and the provisioned subscription starts on it. Null means on signature: priced at the moment of authoring, provisioned immediately.
value_blockerWhat has to be fixed before the offer can be valued, present only while value_state is CANNOT_BE_VALUED. NO_PUBLISHED_PRICE: a product on the offer has no published price. NO_SELLER_JURISDICTION: the organization has no registered address with a country. MIXED_CURRENCY: the offer holds subscriptions in more than one currency. PRICING_REFUSED: the pricing walk refused for another reason.
value_cadenceThe period value_amount is a figure FOR, while it is derived. A recurring offer is worth an amount per period, and printing the number without the period is how a monthly deal came to be read as its whole contract value. Absent on a pinned value, which is whatever the operator says it is.
voided_atVoid instant.
QuoteActions
code_mail_undeliverableTrue when the verification-code mail cannot be delivered from this workspace right now (mail switched off, or no usable sending account). An offer signed with an emailed code (signature_mode OTP) is then not sent, reissued or switched onto OTP: those writes answer 409 QUOTE_OTP_UNDELIVERABLE. False when the answer is unknown, and on signed or voided quotes.
What may change on the quote, and what a change does.
preview_linkA read-only preview link may be created (POST /quotes/{id}/preview-link): every status but VOIDED.
record_paper_signatureRecord a signature made on paper, on a cleared offer or one out with the buyer, unless the buyer has signed in the portal.
reissueReissue the buyer's link: only while the offer is out with them and nobody has signed.
remindRemind the buyer on the live signature request.
reviseReopen a declined or expired offer as a draft.
sendSend the offer for signature: a draft or a cleared offer (never one signed on paper), or a sent offer whose signature request is missing.
submitSubmit the draft: to an approver where approval applies, cleared on your own authority where it does not.
voidVoid the offer. Not while a buyer's signature sits on its live request.
withdrawWithdraw the signature request: the offer goes back to APPROVED while it still says what was cleared, to DRAFT otherwise.
QuoteAmendRefusalDetails
reasonWhy the approval checkpoint applies: EVERY_COMMAND, it requires approval for every offer; AT_THRESHOLD, the offer's value is at or above the approval threshold; UNCOMPARABLE, its value cannot be compared with the threshold (another currency).
QuoteAmounts
net^-?\d+(\.\d+)?$ · requiredThe total before tax.
gross^-?\d+(\.\d+)?$Net plus tax. Absent when the tax is undetermined.
tax^-?\d+(\.\d+)?$The tax owed on it. Absent when the tax is undetermined; zero under a reverse charge or an exemption.
QuoteApprovedPayload
customer_idorganization_idquote_idThe quote whose pending approval was granted.
approved_byOperator user who approved.
QuoteBlockContent
headingThe block's heading in the document language: the operator's, else the block's default. Empty on a block without one (quote_clauses, shared blocks).
linesLines stated in order — the supplier identity of a compliance block.
proseProse — a legal_notice's text (the statutory sentence in auto mode, the operator's words in fixed mode), a text block's runs in the document language with field chips filled in.
Label/value rows — a key_value block's resolved entries, a custom_field block's one row. A row that resolves to nothing is left out.
QuoteBlockFacts
block_idThe block, by its id in blocks.
factsWhat it renders, in the order a reader meets them.
QuoteBuyerAnswerWrite
destinationThe record it is written to: the OFFER itself, the CUSTOMER, or a SUBSCRIPTION the signature created or renegotiated.
destination_idThat record's id.
kindWhat the answer is.
outcomeWhat happened. PENDING: written once the signature is final, which follows within moments. WRITTEN: the destination holds it. KEPT_ON_OFFER: the offer was its only destination. SKIPPED: deliberately not written, reason says why. FAILED: the destination refused it or is gone, reason says which.
destination_labelThat record's name: the customer's name, the subscription's reference. Absent when it is gone.
field_keyThe custom field's key, for a CUSTOM_FIELD answer.
What the destination held when the conflict rule kept it.
reasonWhy it was skipped or failed. DESTINATION_HELD_VALUE: SKIP_IF_SET, and the destination already held held_value, which it keeps. FLAGGED_FOR_REVIEW: FLAG never writes; compare it with held_value. NO_DEFINITION: no custom field has the key. NOT_FOR_THIS_ENTITY: the field is not defined for that kind of record. INCOMPLETE_ADDRESS: a billing address without street, city, postcode and country never replaces the customer's. REFUSED: the destination's rules refused the value. DESTINATION_GONE: the record no longer exists.
settled_atWhen the outcome was reached. Absent while PENDING.
QuoteBuyerAnswers
Every custom field the offer demanded, in the offer's order, with the buyer's answer.
envelope_idThe signature request the answers were given on.
signed_atWhen the signature that recorded them was given.
sourceHow the signature was given: PORTAL, on the signing page, where the buyer answered what it asked; PAPER, recorded by an operator from a signed copy, where nobody was asked anything; PROVIDER, on the signing provider's own page, which asks nothing but the signature.
Where each answer went and what happened there, one entry per answer and destination.
The billing address the buyer answered.
The payment method the buyer collected before signing.
The shipping address the buyer answered. It is kept on the offer: no other record holds one.
Who signed, and the consent wording's key and version they accepted.
signer_roleThe role or title the signer stated, where the offer asked for it (require_signer_role).
submitted_atWhen the buyer submitted them with their signature. Absent on a paper signature.
vat_idThe VAT id the buyer answered.
QuoteBuyerAnswersSigner
consent_text_keyThe consent wording they accepted, by key.
consent_text_versionThe version of that wording.
nameThe name the signer typed.
QuoteBuyerFieldAnswer
keyThe custom field's key.
targetWhere the offer pointed the answer.
on_conflictWhat the offer said happens when the destination already holds a value.
The buyer's answer. Absent when they were not asked, because the customer already held a value (SKIP_IF_SET).
QuoteBuyerPaymentMethod
idbrandThe card brand, where there is one.
last4The last four digits of the card or account.
typeThe method's type, e.g. card or sepa_debit.
QuoteBuyerProgress
What the buyer is asked for before the Accept, in form order: the details and payment requirements, the signer's role when asked, then each document to sign. The name and the consent, given at the Accept itself, are not items.
last_activity_atWhen the buyer last saved something they entered; null when they saved nothing yet.
percentDone units over all units, rounded down: a requirement is one unit, a document one unit per field the buyer must act on.
QuoteBuyerProgressItem
doneEvery unit of the item is done. A document is done when every field the buyer must act on is applied or filled — which is not a signature: nothing is signed until the Accept.
idbilling_address, vat_id, shipping_address, payment_method, signer_role, custom_field:
done_countDocuments only: the fields done.
labelThe item's own words: a custom field's label as the operator wrote it (its key when it has none); a document's filename, the quote number for the offer.
label_keyThe message key of the item's label: quotes.progress.item.
total_countDocuments only: the fields the buyer must act on.
QuoteChangesRequested
noteWhat the approver wrote, or — when the request expired or was cancelled — which of those it was.
requested_atWhen it was sent back.
requested_byThe approver who sent it back. Absent when the request expired or its requester cancelled it.
QuoteChecklistItem
idstateblocking: the send refuses. advisory: the send goes ahead (an approval it will ask for, effects it will list, a signature page it will append).
detailsThe refusal's own details, as its error carries them; {count} on cotermination_effects; {how_satisfied: acceptance_block|manual|appended_page} on signature_fields; {expires_at} on deadline, which is listed only when the offer has one.
Where the fix is.
reason_codeOn a blocking item, the error code the send answers with. On the approval item, why it applies: EVERY_COMMAND, AT_THRESHOLD or UNCOMPARABLE.
QuoteChecklistJump
tabanchorQuoteClause
auto_attachedTrue when the clause came from a product, plan or preset attachment rather than an operator pick.
bodySnapshot text as sent; a later library edit never mutates it.
clause_idmodifiedTrue when the snapshot body was edited after insertion.
nameLibrary clause name at read time; empty when the library clause was deleted.
sortQuoteClauseEdit
auto_attachedWhether the catalog attached it (a product, plan or preset on the offer carries it) rather than the operator picking it.
Which clause.
kindThe change's kind, which names its shape.
QuoteClauseInput
clause_idLibrary clause to snapshot onto the quote.
bodyOptional override of the library text; empty snapshots the library body.
sortDisplay order among the quote's clause snapshots.
QuoteClausePositionEdit
Which clause.
kindThe change's kind, which names its shape.
afterThe value after the edit; absent when there is none.
beforeThe value before the edit; absent when there was none.
QuoteClauseRef
idThe library clause's id.
nameIts name at the time of the edit; empty when it could not be named.
QuoteClauseWordingEdit
Which clause.
kindThe change's kind, which names its shape.
afterThe value after the edit; absent when there is none.
beforeThe value before the edit; absent when there was none.
QuoteContentRow
labelThe row's label, resolved.
valueThe row's value, resolved and formatted for the document language.
QuoteCoupon
codeThe coupon code stored on the quote.
other_subscriptionsHow many of the offer's other subscriptions the coupon does NOT reach. A coupon anchors to exactly one subscription.
standingWhether the coupon will do what the offer says: applies; unavailable (the promotion could not be read, nothing is known); not_found (the code no longer names a coupon); ended (the promotion is no longer live); window_closed (its window does not include today); no_subscription (the offer creates no subscription to anchor it to, so signing cannot redeem it); currency_not_priced (the promotion has no value in the quote's currency). The buyer's page carries the coupon only when it applies.
totalsHow the coupon relates to the quote's totals. excluded: the totals do not include it; the discount applies to the anchored subscription's invoices.
The subscription the coupon is redeemed against at signing: the first one the offer creates. Absent when the offer creates none.
descriptionThe promotion's customer-facing description, in the reader's language, when one is authored.
nameThe promotion's customer-facing name, in the reader's language; absent when the code did not resolve.
What the coupon does, as facts in the quote's currency; absent when the code did not resolve.
window_endLast day the promotion runs, inclusive. Absent means open-ended.
QuoteCouponAnchor
subscription_nameThe subscription's name, as the offer's sections are headed. Absent when it could not be read.
QuoteCouponEdit
kindThe change's kind, which names its shape.
afterThe value after the edit; absent when there is none.
beforeThe value before the edit; absent when there was none.
QuoteCouponTerms
coverageunpriced: a money slot has no value in the stated currency, so the coupon would not fire there.
shapeWhich promotion shape it is; says which of the slots below are present.
The fixed amount off, the replacement price, or a bundle's fixed reward, in the stated currency.
discount_kindline_discount: percent off, a fixed amount off, or a replacement price.
first_n_periodsThe effect is limited to the subscription's first n billing periods.
free_periodsfree_periods: how many billing periods are free.
measurethreshold, rebate: what is counted toward the threshold.
line_discount: the minimum spend, in the stated currency.
percent^-?\d+(\.\d+)?$The share taken off, 0-100.
reward_kindbundle: what a completed set does to its target.
threshold, rebate: the spend threshold, in the stated currency.
units^-?\d+(\.\d+)?$free_units: the free allowance; threshold, rebate: the units threshold.
units_windowfree_units: the horizon the allowance is counted over.
windowthreshold, rebate: the horizon the measure is counted over.
QuoteCreatedPayload
customer_idCustomer the quote addresses.
kindNEW_SUBSCRIPTION | SUBSCRIPTION_UPDATE.
organization_idquote_idThe quote that was created.
quote_numberPer-org sequential number (QUO-
created_byOperator user who created the quote.
workspace_idThe workspace that owns the quote.
QuoteDateEdit
fieldWhich date: when the offer expires, or when it starts (absent: on signature).
kindThe change's kind, which names its shape.
afterThe value after the edit; absent when there is none.
beforeThe value before the edit; absent when there was none.
QuoteDeclinedPayload
customer_iddeclined_atDecline instant.
organization_idquote_idThe declined quote.
reasonBuyer's decline reason.
QuoteDocument
How the offer is accepted and, once it is, the record of it.
The documents the seller shared with the offer.
The clauses the offer states, exactly as sent.
What the cover states. There is no revision number: revisions are operator data.
localeThe language every sentence above is written in.
What is offered: every subscription, its phases and their lines.
Who offers, who is offered, and who signs.
What the buyer must provide to accept, in form order: details, then payment, then the signature. Empty where the document is not accepted from (print).
The commercial terms beside the offer.
What the offer costs, by kind, computed on the server. Read it; never add the lines.
The quote's public accept-online link; absent until it has one.
What the buyer answered when they signed, beside the custom fields (custom_fields carries those); absent before a signature.
Who the buyer asks about the offer; absent when nobody is named.
contract_termsThe contract terms the offer states; absent when there are none.
noteThe seller's note to the buyer; absent when there is none.
The tax determination the totals were computed under; absent when none could be made.
QuoteDocumentAcceptOnline
urlThe public link; it leads to a page that emails the signer their personal link and never grants signing by itself.
valid_untilUntil when the offer can be accepted.
QuoteDocumentAcceptance
countersignWhat the seller still owes on a signed offer: none, pending or done.
consent_textThe consent wording the signature recorded, once signed.
The signature record, once signed.
modeHow the offer is signed: BASIC (typed name), OTP (typed name and an emailed code) or EXTERNAL (outside the product).
signed_atWhen the offer was signed.
QuoteDocumentAllowance
included^-?\d+(\.\d+)?$ · requiredThe quantity included per period.
rolloverTrue when an unused allowance carries over.
expiry_periodsAfter how many periods a carried-over allowance lapses.
rollover_max^-?\d+(\.\d+)?$The most that can carry over.
QuoteDocumentAnswers
shipping_addressThe shipping address the buyer stated, as printable lines.
signer_roleThe role or title the signer stated.
vat_idThe VAT id the buyer stated.
QuoteDocumentAttachment
idThe document's id.
nameThe document's name.
size_bytesThe document's size in bytes, as measured at upload.
content_typeThe document's format, as determined from its contents.
download_urlA temporary link to the document; absent when none could be minted (preview, file store unavailable).
QuoteDocumentClause
bodyThe clause text exactly as sent.
nameThe clause's name; empty when its library entry was deleted after insertion.
negotiatedTrue when the text was edited for this deal.
QuoteDocumentContact
nameThe contact's name.
emailThe contact's address.
phoneThe contact's phone number.
roleThe contact's role.
QuoteDocumentCoupon
codeThe coupon code.
descriptionThe promotion's customer-facing description.
QuoteDocumentEdit
Which document.
kindThe change's kind, which names its shape.
QuoteDocumentEndEvent
metricWhat is counted.
threshold^-?\d+(\.\d+)?$ · requiredThe count that ends the phase.
QuoteDocumentEvidence
methodHow the signer's identity was established.
signer_nameThe name the signer typed.
consent_textThe consent wording the signer accepted.
otp_verified_atWhen the emailed code was verified, on a signature that needed one.
signed_atThe signature instant.
signer_emailThe signer's address.
QuoteDocumentExit
gateWhether leaving early is allowed (none), warned about (warn) or refused (block).
thenWhat follows the phase: the next phase, an open-ended continuation, or the end.
committed_untilThe phase cannot be left before this date (frozen at send).
fee^-?\d+(\.\d+)?$What leaving early costs, in the document's currency (header.currency).
The notice period for leaving.
sentenceAll of the above read out loud, in the document's language.
QuoteDocumentHeader
currencyThe one currency every amount in this document is in.
kindWhat a signature does: NEW_SUBSCRIPTION or SUBSCRIPTION_UPDATE.
numberThe quote's number.
issued_atWhen the offer was sent; absent on one never sent.
titleThe quote's title.
valid_untilUntil when the offer can be accepted.
QuoteDocumentLine
amount_basisWhether amount is net (exclusive) or already contains the tax (inclusive).
changeWhat a renegotiation does to the line: none, added, changed or removed.
idThe line's id.
productWhat is sold, as quoted.
The quantity included before the line bills.
amount^-?\d+(\.\d+)?$What the line bills each time, per its charge kind, in the document's currency (header.currency); absent where the offer cannot state it.
billedHow often the line is invoiced, in words.
chargeHow the line's amount counts: recurring (per period), one_time, prepaid (the whole phase in advance), usage (billed on reported usage; see rates), unpriced (an amount the offer cannot state). Absent on a removed line.
currentlyOn a renegotiation, what the changed values are today, in words ("currently 50").
price_keyThe catalog price the line is priced from, when it names one.
The quantity offered; absent on usage lines and where the deal states none.
How a usage or tiered line is rated.
scheduleHow long or when the line bills, in words; absent when it adds nothing.
The rate per unit; absent on usage lines and where the offer cannot state it.
QuoteDocumentNotice
countHow many units.
unitThe unit.
QuoteDocumentOffer
What the offer is made of, so a renderer shows structure only where it carries information: no subscription heading on a one-subscription offer, no phase heading or timeline on a one-phase subscription.
The offered subscriptions, in the order the offer presents them.
QuoteDocumentParties
Who is offered.
Who receives a copy.
Who offers.
The one person on the buyer's side the offer was sent to sign; absent before it is sent.
QuoteDocumentParty
addressThe postal address as printable lines, formatted for the document's language.
The party's legal identity as a quote states it in its jurisdiction — register, VAT id, legal form — one line each. Empty when none is held.
nameThe party's name.
QuoteDocumentPaymentMethod
collectedTrue once the buyer has registered one.
providerThe provider's display name, when known.
QuoteDocumentPerson
nameThe person's name.
emailThe person's address.
roleThe person's role or title.
QuoteDocumentPhase
How the phase can be left and what follows it.
idThe phase's id.
What the phase bills.
positionThe phase's position in its subscription, 0-based.
The phase's resolved window.
durationThe phase's length in words, for a timeline whose dates are shown elsewhere. Absent on a one-phase subscription.
headingThe phase's window in words. Absent when its subscription has one phase.
QuoteDocumentPrice
agreed^-?\d+(\.\d+)?$ · requiredThe rate agreed.
price_basisWhether the agreed rate is net (exclusive) or already contains the tax (inclusive).
current^-?\d+(\.\d+)?$The rate today, on a renegotiation that changes it.
current_price_basisWhether current is net (exclusive) or already contains the tax (inclusive); present with current.
list^-?\d+(\.\d+)?$The catalog's list rate, when it differs and is known.
QuoteDocumentQuantity
value^-?\d+(\.\d+)?$ · requiredThe quantity offered.
current^-?\d+(\.\d+)?$The quantity today, on a renegotiation that changes it.
QuoteDocumentRateCard
price_basisWhether the rungs' unit amounts are net (exclusive) or already contain the tax (inclusive).
The rate card's steps, in order.
explainerOne sentence explaining the model.
The quantity included before the card applies.
modelHow the rungs are walked: volume, staircase, package or flat. Absent when the product's pricing model is not known.
unitThe noun the product counts in, when known.
QuoteDocumentRef
idThe document's id.
nameIts file name at the time.
QuoteDocumentRung
unit_amount^-?\d+(\.\d+)?$ · requiredThe rate per unit in this step, in the document's currency (header.currency).
package_size^-?\d+(\.\d+)?$Units per package, on a package model.
up_to^-?\d+(\.\d+)?$The step's upper bound; absent on the open last step.
QuoteDocumentStructure
phasesHow many phases, across every subscription.
subscriptionsHow many subscriptions the offer holds.
QuoteDocumentSubscription
changenew: a subscription the buyer does not have yet; update: a renegotiation of one they have.
effectsCommitments on other subscriptions this one moves, as sentences. Empty on almost every offer.
idThe subscription's id.
nameThe subscription's name; shown only on an offer that holds more than one.
Its phases, in order.
QuoteDocumentTax
One row per rate, net and tax as resolved, when the offer carries more than one rate. Empty otherwise.
exemptThe supply is zero-rated without a reverse charge.
mixedTrue when the offer carries more than one tax rate.
reverse_chargeThe buyer accounts for the tax: nothing is owed here.
countryThe buyer's jurisdiction (ISO 3166-1 alpha-2) the supply was determined for.
rate^-?\d+(\.\d+)?$The rate as a decimal (0.19 for 19%). When mixed is true it is the effective rate: it totals correctly but must not be printed as a percentage — render breakdown instead.
seller_countryThe seller's jurisdiction (ISO 3166-1 alpha-2) the supply was determined from; the national tax term follows it.
tax_labelThe tax type, e.g. VAT.
QuoteDocumentTemplateEdit
kindThe change's kind, which names its shape.
The value after the edit; absent when there is none.
The value before the edit; absent when there was none.
QuoteDocumentTerms
after_last_phaseWhat happens when a one-subscription offer's last phase ends, in words. It is the last phase's exit sentence: render it in one place.
The coupon on the offer.
governing_lawThe governing law, in words; absent when none is stated.
The payment method the offer requires before signing; absent when it requires none.
payment_terms_daysDays an invoice is due after issue.
signature_methodHow the offer is signed.
starts_atWhen the offer starts; absent when it starts on signature.
QuoteDocumentWindow
openTrue when the phase never ends.
The usage threshold that ends the phase, when it ends on one.
ends_atThe phase's end. On an event-ended phase, its latest end.
starts_atThe phase's start; absent when it is not knowable before signature.
QuoteEditRefusal
codeThe refusal the write would answer with: QUOTE_AMEND_NEEDS_APPROVAL, the amended offer would need approval again — withdraw it and send it for approval.
What the refusal names.
QuoteEditability
contentThe offer's own terms and clauses. FREE: written as it is. BACK_TO_DRAFT: written, and the offer is a draft again — its clearance was for other content and a pending approval is cancelled. AMEND: written on the offer the buyer holds, whose signature request is replaced by one over the amended document. LOCKED: refused (content_refusal says why when it is not the status).
deadlineWhether expires_at may move. On a sent offer the signature request's deadline moves with it.
dealsWhich subscriptions the offer holds and what their drafts say, with the same four answers. LOCKED while the offer is out with the buyer: withdraw its signature request first.
internalWhether the owner and the metadata may change.
Why a change of the content is refused although the offer's status would amend it: the refusal the write would answer with, predicted. Present only with content LOCKED.
QuoteEffect
affected_positionThe phase of the affected subscription that carries the exit rule.
affected_subscription_idaffected_subscription_namereferenced_positionreferenced_subscription_idThe subscription of THIS offer whose phase the rule points at.
commitment_untilWhat the commitment becomes. Absent when the referenced phase has no knowable end.
QuoteEntryEdit
keyThe key.
kindThe change's kind, which names its shape.
afterThe value after the edit; absent when there is none.
beforeThe value before the edit; absent when there was none.
QuoteEvent
actor_typeWho caused the event: OPERATOR, CUSTOMER, or SYSTEM.
created_atidquote_idtypeTracking event type (CREATED, SUBMITTED, APPROVED, SENT, VIEWED, SIGNED, ...).
actor_idippayloadEvent-type-specific extra data.
user_agentQuoteEventType
QuoteExpiredPayload
customer_idexpired_atInstant the expiry was applied (sweep or opportunistic flip).
organization_idquote_idThe quote that expired.
QuoteInput
blockingTrue when a quote cannot be sent until this input is satisfied.
keyWhich quote input the layout prints.
Every block that carries this input, in document order. Counts PLACES IN THE LAYOUT, not printings: a repeat-zone block prints once per page, and a block nested in a column renders a placeholder instead of the value.
custom_fieldCustom-field key the layout prints; set only when key is custom_field.
QuoteInputKey
QuoteInputSource
block_typeBlock type that carries this input, e.g. quote_cover (the lapse date) or key_value.
block_idID of the block within the template. Distinguishes two blocks of the same type.
QuoteIntakeItem
id^(billing_address|va… · requiredThe requirement (AcceptanceRequirementID), e.g. vat_id or custom_field:
labelThe operator's name for a demanded custom field. Absent for the fixed requirements, which the client names, and for a key with no live definition.
QuoteKind
Requests also accept the new spelling: each value in lower case (new_subscription for NEW_SUBSCRIPTION). The listed spelling is deprecated in requests and accepted until 2026-11-30.
QuoteNextAction
enabledkindlabel_keyThe message key of the act's label.
available_atWith REMIND_NOT_YET: when the next reminder may go out.
reasonWhy it is disabled: the reason_code of the first blocking checklist item, or REMIND_NOT_YET.
QuoteOrchestratedPayload
customer_idorganization_idquote_idThe quote that was orchestrated.
subscription_idSubscription created/updated by orchestration.
QuoteOrchestrationRequestedPayload
customer_idorganization_idprevious_statusOrchestration status the retry replaced (FAILED, RETRYING or PENDING).
quote_idThe signed quote whose provisioning should run again.
quote_numberrequested_atInstant the re-run was requested.
requested_byOperator user who asked for the re-run.
workspace_idQuoteOverview
How far the buyer got before the Accept, while the quote is SENT with a live signature request; null otherwise. The same count the reminder mail states: the buyer's saved form over the customer record, and the fields applied or filled in the documents to sign. No value the buyer entered is in it.
The offer's own process.
What the send checks, while the quote is DRAFT or APPROVED; empty otherwise. Items that do not apply to this offer are omitted.
The one act the page puts first. Absent when nothing is left to do.
starts_atWhen the offer starts, as its document states it: an offer of one subscription starts with its first phase when that is dated, otherwise on the quote's own start. Absent: on signature.
QuoteOwnerEdit
kindThe change's kind, which names its shape.
The value after the edit; absent when there is none.
The value before the edit; absent when there was none.
QuotePartyIdentityLine
kindWhat the line states, so a renderer can style it without parsing the label.
valueThe value.
labelThe statement's label in the document's language; absent where the value speaks for itself (the legal name, the address).
QuotePhase
positionthenWhat happens when this phase ends.
ends_atResolved end. Absent when the phase is open-ended.
event_metricevent_threshold^-?\d+(\.\d+)?$Decimal number encoded as a string to preserve precision.
exit_gateWhat happens when a cancellation is attempted inside the notice.
notice_countHow much notice leaving this phase takes.
notice_unitreasonWhy this phase exists, as the thing that created it recorded it.
starts_atResolved start. Absent when it follows an event end and is not knowable yet.
The phase's line amounts added up by kind, computed on the server from the offer as it stands (on the sent snapshot: as frozen) — the arithmetic the quote document states. Absent when the offer could not be walked.
QuotePhaseLine
product_idWhat the line bills each time it is invoiced, from its resolved values — the arithmetic the quote document's amount column states. Absent when the offer could not be walked.
The catalog price row the resolver chose for this line — the resolution its price and amount came from: its ladder in its own currency, and whether it is converted into the deal's. Absent when no catalog price resolves, and when the offer could not be walked.
price_keyWhich key of the product's key set this line offers.
product_nameQuotePhaseValue
attributerungWhere the resolution ended: 1 stated on this phase, 2 carried from an earlier one, 3 the catalog origin, 4 the subscription default, 0 unresolved — the deal states nothing.
allowance^-?\d+(\.\d+)?$Decimal number encoded as a string to preserve precision.
cadence_kindHow often the line bills inside its phase. How long it bills is the phases' answer.
price_amount^-?\d+(\.\d+)?$For attribute=price: the amount in major units, in the currency of the revision that carries this value.
price_basisFor price_kind agreed: whether price_amount and the tiers are net (exclusive) or already contain the tax (inclusive).
price_kindThe agreed tier ladder, when the price is tiered.
quantity^-?\d+(\.\d+)?$Decimal number encoded as a string to preserve precision.
trackversion_changeFor attribute=version_change: when a following line moves to a newer catalog version.
QuotePrepaidTotal
The whole span's amount.
dueWhen it is invoiced: the phase's opening.
phaseThe phase's position on its revision, 0-based.
What the payment covers.
labelThe total's label in the document's language, led by its subscription on an offer with several ("Paid in advance for Nov 1, 2026 to Oct 31, 2027").
period_labelWhat the total is, without its subscription or phase ("Per month"): what a block that already states those prints under them.
subscription_nameThe subscription the phase belongs to, when the offer holds more than one.
QuotePreset
activeInactive presets stay selectable on existing quotes but hidden from pickers.
contract_termscreated_atdescriptionidnamenote_for_customerWhat quotes from this preset demand of the buyer before signing, destinations included. This is what lets two presets ask for two different things.
require_payment_methodrequire_shippingrequire_vat_idupdated_atdefault_expiry_daysPublic-link lifetime in days for quotes created from this preset.
document_template_idDocument template quotes from this preset render through. Absent means the organization's quote default; a value that no longer resolves falls back to it too.
plan_idplan_versionQuotePresetChange
fieldThe field of the preset: its name, plan, layout, expiry, a buyer requirement, a required custom field, its note or its terms.
kindWhat happened to the field: set where the preset stated none, changed, or cleared.
What the preset states after the act; absent when it states nothing.
What the preset stated before the act; absent when it stated nothing.
keyFor a required custom field: its key.
QuotePreviewLink
expires_atWhen the link stops working (7 days after it was created).
urlThe preview link, absolute. Shown once: only its digest is stored. It replaces the quote's previous preview link, which stops working.
QuoteProcess
The stations in order. quote.awaiting_approval is present only when the quote.send approval checkpoint would require approval for this quote, or the quote went through approval.
QuoteProcessStep
keyThe station. quote.active is the offer's subscriptions live, and no countersignature owed.
stateoutcomeHow the process ended, on the FAILED station only: the station the quote left from.
QuoteRecurringTotal
What one billing period invoices.
phaseThe phase's position on its revision, 0-based.
ends_atThe phase's end, when it has one.
labelThe total's label in the document's language: its period, led by its subscription on an offer with several, and the phase it holds in when its subscription is in phases ("Per month, Nov 1, 2026 to Feb 1, 2027").
The billing period the amount is per. Absent when the offer's schedule could not name it.
period_labelWhat the total is, without its subscription or phase ("Per month"): what a block that already states those prints under them.
starts_atThe phase's start, when known.
subscription_nameThe subscription the phase belongs to, when the offer holds more than one.
QuoteRejectedPayload
customer_idorganization_idquote_idThe quote whose pending approval was rejected; it is a DRAFT again, with the reason on its trail.
reasonRejection reason shown to the quote owner.
rejected_byOperator user who rejected.
QuoteRemindedPayload
customer_idorganization_idquote_idThe quote the buyer was reminded about.
quote_numberreminded_atReminder instant (billing clock).
workspace_idQuoteRequiredFieldEdit
keyThe custom field's key.
kindThe change's kind, which names its shape.
The value after the edit; absent when there is none.
The value before the edit; absent when there was none.
QuoteRequirement
The bounds the server holds an answer to, so the form can apply the same ones before it submits.
id^(billing_address|va… · requiredWhat is asked for.
kindWhich input answers it.
requiredTrue when the offer cannot be accepted without it; false when it is asked but optional.
satisfiedTrue when it is already met: by the buyer's saved form, else by the customer record, else by the offer's own state (a collected payment method).
sectionThe part of the acceptance form it sits in.
The operator's definition of a demanded custom field, as the form renders it. Present on custom_field requirements only.
QuoteRequirementConstraints
exampleAn answer of the right shape, for the hint.
max^-?\d+(\.\d+)?$The largest number accepted.
max_lengthThe most characters accepted.
min^-?\d+(\.\d+)?$The smallest number accepted.
min_lengthThe fewest characters accepted.
optionsThe values accepted, when the answer is a choice.
patternThe regular expression an answer must match; for vat_id after spaces, dots and hyphens are removed.
QuoteRequirementEdit
kindThe change's kind, which names its shape.
requirementWhich gate: the buyer's VAT ID, a payment method, a shipping address, or the signer's role.
afterThe value after the edit; absent when there is none.
beforeThe value before the edit; absent when there was none.
QuoteRevision
How often the subscription's billing periods repeat; every per-period amount of this offer is per one of these.
currencyThe subscription's currency: every amount in this revision is in it.
idkindWhat this offer does to the subscription.
positionWhere the subscription sits in the offer. Also the order the signature publishes them in.
quote_idrevision_idThe draft revision this offer holds for that subscription.
revision_numberWhich revision of that subscription this offer holds.
subscription_idThe subscription this offer acts on. Minted in DRAFT for a new subscription; an existing one for a renegotiation.
compared_to_revisionThe live revision this offer is a renegotiation of. Absent when the offer states everything for the first time.
cut_atThe instant a renegotiation takes effect. Absent on a first subscription.
subscription_nameThe subscription's own name.
QuoteRevisionBinding
idkindWhat this offer does to the subscription.
positionWhere the subscription sits in the offer. Also the order the signature publishes them in.
quote_idrevision_idThe draft revision this offer holds for that subscription.
subscription_idThe subscription this offer acts on. Minted in DRAFT for a new subscription; an existing one for a renegotiation.
QuoteSearchData
currencycustomer_idThe customer the quote is for.
kindRequests also accept the new spelling: each value in lower case (new_subscription for NEW_SUBSCRIPTION). The listed spelling is deprecated in requests and accepted until 2026-11-30.
statusThe quote's value.
QuoteSearchHit
display_namePrimary label shown for the hit in the results list.
entity_typeKind of the matched entity; it names the shape of data.
idIdentifier of the matched entity.
scoreRelevance score from the search engine; higher ranks first.
tag_idsThe ids of the tags on the matched entity. Add include=tags to get the tags themselves.
The owning customer. Sent only with include=customer, and only when the entity has an owning customer.
customer_idOwning customer's id; empty for catalog entities that have no owning customer.
Entity-type-specific payload with the fields needed to render the hit. Sent without include=data until 2026-11-30; after that only with include=data.
referenceThe short per-organization human reference an operator would say out loud: an invoice's or credit note's number, a subscription's SUB-000123, a quote's QUO-2026-000078. Absent for a kind that is named rather than numbered (customer, product, plan, payment, dispute) and for a draft invoice, which has no number until it is finalized.
secondary_textSupporting line shown under the display name (e.g. an invoice number or email).
Tags attached to the matched entity. Sent without include=tags until 2026-11-30; after that only with include=tags.
customer_nameOwning customer's display name; empty for catalog entities. Deprecated: use customer.name (include=customer) instead. Removed on 2026-11-30.
QuoteSentPayload
customer_idorganization_idquote_idThe quote that was sent.
quote_numbersent_atSend instant (billing clock).
workspace_idQuoteSignability
signableFalse when the quote is SENT or VIEWED, its deadline has not passed, and the buyer's signature would be refused: something the offer depends on changed after it was sent. True for every other quote — a draft is checked when it is submitted and sent, and a signed, declined, expired or voided offer is signed by nobody.
Why it cannot be signed. Present exactly when signable is false.
QuoteSignabilityRefusal
codeThe refusal's stable code — the subscription's own (SUBSCRIPTION_REVISION_RUNS_OUT, SUBSCRIPTION_EARLY_STOP_MISMATCH, …) or the offer's. Say it through the error catalogue; never show it raw.
messageThe server's own sentence, in English. For logs and support, not for the operator's eye.
phaseThe refused phase, counted from 1 as the operator reads phase numbers, when the refusal is about one.
product_idThe line's product, when the refusal is about a line.
subscription_idThe subscription on the offer whose deal is refused. An offer holds several, and a phase is only an address once it says whose.
QuoteSignature
countersign_pendingTrue while the counterparty has signed and the organisation has not.
envelope_idevidence_availableTrue once the evidence record — who signed, when, from where, having accepted what wording — has been produced.
executed_document_availableTrue once the signed document can be downloaded from /quotes/{id}/signature/document.
providerWhich signing strategy is driving it; "builtin" is this product's own portal flow.
recorded_by_operatorTrue when an operator recorded a signature made outside the portal, from an uploaded copy.
Every party, in position order, including copies.
statusWhere the signature request stands.
cancel_reasonWhy the request was withdrawn. SUPERSEDED means a newer one replaced it.
cancelled_atcompleted_atcountersignWhat the organisation does once the counterparty has signed, as this request was released: NONE, SEAL or PERSON.
countersigned_atcountersigner_emailcountersigner_nameThe person who signs for the organisation, under a PERSON countersignature.
declined_atdocument_sha256SHA-256 of the document presented for signature.
expires_atrecorded_byThe user who recorded it.
seal_methodledger_anchor — tamper-evident over the archival hash chain, and NOT a qualified electronic seal — or provider.
seal_nameThe legal person the seal speaks for, as named at the moment it was applied.
sealed_atWhen the organisation's seal was applied.
sent_atQuoteSignatureModeEdit
kindThe change's kind, which names its shape.
afterThe value after the edit; absent when there is none.
beforeThe value before the edit; absent when there was none.
QuoteSignedPayload
customer_idkindNEW_SUBSCRIPTION | SUBSCRIPTION_UPDATE.
methodSignature method: BASIC | OTP | EXTERNAL.
organization_idquote_idThe signed quote (re-read key for the orchestrator).
signed_atSignature instant.
value_stateWhat value_amount IS: VALUED (a figure) | NO_PAID_PHASE (nothing recurs) | CANNOT_BE_VALUED. value_amount is present only when VALUED.
signer_emailThe quote's value as a money object, present only when value_state is VALUED.
workspace_idQuoteSigner
auth_levelHow this party's identity was established.
emailroleSIGNER binds; CC is kept informed and has no link.
statusaddress_provenanceconsent_textThe exact wording this party accepted.
decline_reasonThe signer's own words.
declined_atnamenotified_atsigned_atviewed_atWhen they FIRST opened it. Repeat opens are in the chronology, not here.
QuoteSigning
What this caller may do to the request right now, computed from the same rules the write paths enforce.
The request's most recent chronology rows, oldest first. Empty when there is no request. Bounded: a buyer who opens their signing link two hundred times writes two hundred rows, and this read is a screen rather than the evidence record.
events_truncatedOlder rows were cut. There is no cursor: the complete account of what happened is the evidence record, which this is not.
The signature request. Absent until the offer has been sent for signature at least once.
QuoteSigningCapabilities
can_countersignTrue when THIS user may sign for the organisation on this request now.
can_download_signed_copyGET /quotes/{id}/signature/document will serve bytes.
can_record_paper_signatureA signature made outside the portal can still be recorded.
can_reissueThe signing link can be replaced; the old one dies at once.
can_remindSomebody is still to act AND the request's own reminder cadence allows another nudge now.
can_sendSending for signature would release the offer.
can_withdrawThe request can be withdrawn. FALSE once anybody has signed.
has_portal_signatureSomebody has already signed in the portal. It is the reason can_withdraw is false, published so the refusal can be explained rather than left as a greyed control.
countersign_waiting_onThe person the countersignature waits for: their name, or their email address when no name is known. It is not a date. Absent when the request waits for nobody.
remind_available_atWhen the next reminder becomes allowed. Present only while can_remind is false because the request was reminded too recently; absent when the reminder budget is spent or nobody is left to nudge.
QuoteSigningConnection
What the provider declares it can do. A signature mode or countersignature it does not list is refused at send.
display_nameThe provider's own name, unlocalised.
What the offer asks the buyer that the provider's own signing page cannot collect. Not empty means a send is refused with QUOTE_INTAKE_NOT_COLLECTABLE.
providerThe provider the organization's offers are signed with: its enabled default connection, else the built-in provider.
signature_mode_supportedFalse when the provider cannot drive the quote's signature mode; a send is then refused with SIGNING_PROVIDER_UNSUPPORTED.
QuoteSigningDefaults
countersignsigning.countersign_default.
countersign_ordersigning.countersign_order.
countersigner_user_idsigning.countersigner_default; null: anyone who may sign for the organisation.
QuoteSigningDocument
field_countFields on the document, auto ones included.
filenameThe attachment's name; the quote number for the offer.
kindoffer: the quote's own document. attachment: a shared PDF attachment or contract.
signer_signature_countThe buyer's signature fields on it.
signer_signature_pagesThe pages those are on, in the document's own page numbers.
file_idThe attachment; absent for the offer.
QuoteSigningEvent
actor_kindWho caused it.
created_atseqMonotonic per request. Two rows written in one transaction share a timestamp; this is what orders them.
typeWhat happened.
actor_refHow the domain recorded them — a user id, an address, or a vendor's name.
ipip_kindWhere the address came from. One that arrived on a forwarded header is weaker evidence than one the socket reported, and the difference is stated rather than hidden.
notesigner_emailThe party this row belongs to. Absent on rows about the request as a whole.
user_agentQuoteSigningLayout
append_signature_pageA signature page is appended at the end (POST .../auto-signature on a layout with no acceptance block).
The fields the document draws itself (source auto, read-only): the acceptance block's name, signature and date, or the appended page's. Empty when the layout has no acceptance block and no signature page was asked for.
The offer, then every shared PDF attachment and contract, with their field counts from the saved layouts.
editableFalse once the quote has been sent.
fallbackWhere the buyer's default signature comes from: the layout's acceptance block, or a signature page at the end.
The fields the operator placed on the quote's pages (source manual).
fingerprintSHA-256 of page_geometry. Send it back with a save: fields placed on a render whose pages changed answer 409 SIGNING_LAYOUT_STALE.
has_buyer_signatureThe buyer has a signature field somewhere: the acceptance block, an appended page, or one an operator placed on any document. When false, a signature page is appended at send.
how_satisfiedHow the buyer's one required signature is given. appended_page with has_buyer_signature false: it will be appended at send.
Every page of the quote's draft document (GET /v1/quotes/{id}/pdf renders the same bytes), measured by the server; includes the appended signature page when append_signature_page is set. Once the quote is sent: the offer's pages as its signing request froze them, and every field, count and has_buyer_signature below is read from that frozen request, not from a new render.
staleThe saved fields were placed on a render whose pages have changed since; check them and save again.
updated_atWhen the layout was last saved; null before the first save. Send it back with a save.
QuoteSigningLink
expires_atWhen the link is advertised as expiring. A later reissue invalidates it sooner.
urlThe buyer's signing URL, carrying their bearer token. Shown once; it cannot be read back.
QuoteSnapshotLine
changedproduct_idremovedThe offer DROPS a line the compared revision carries. Carries no values: what is being said about it is its absence.
What the line bills each time it is invoiced, from its frozen values — the document's amount column. Absent on a removed line.
The plan or product version the line was pre-filled from, as frozen at send. Absent on a removed line and on a snapshot frozen before origins were captured.
price_keyproduct_nameWhat the line bills in this phase and until when, at the read's instant: the schedule oracle's facts over the offered revision. Absent on a removed line and where no schedule could be read.
QuoteSnapshotPhase
changedpositionstateWhere this phase's frozen window sits at the time of the read: past, current, future or pending; unstarted while the offer that creates the subscription is unsigned; skipped when the window closes before it opens.
thenWhat happens when this phase ends.
ends_atResolved end. Absent when the phase is open-ended.
event_metricevent_threshold^-?\d+(\.\d+)?$Decimal number encoded as a string to preserve precision.
exit_gateWhat happens when a cancellation is attempted inside the notice.
notice_countHow much notice leaving this phase takes.
notice_unitreasonWhy this phase exists, as the thing that created it recorded it.
starts_atResolved start. Absent when it follows an event end and is not knowable yet.
The phase's line amounts added up by kind, computed on the server from the offer as it stands (on the sent snapshot: as frozen) — the arithmetic the quote document states. Absent when the offer could not be walked.
QuoteSnapshotRevision
captured_atWhen the offer was frozen — the send instant.
changedTrue when anything in this revision differs from the one it was compared against.
currencykindrevision_numbersubscription_idcompared_to_revisionsubscription_nameQuoteSnapshotValue
attributechangedrungWhere the resolution ended: 1 stated on this phase, 2 carried from an earlier one, 3 the catalog origin, 4 the subscription default, 0 unresolved — the deal states nothing.
allowance^-?\d+(\.\d+)?$Decimal number encoded as a string to preserve precision.
cadence_kindHow often the line bills inside its phase. How long it bills is the phases' answer.
price_amount^-?\d+(\.\d+)?$For attribute=price: the amount in major units, in the currency of the revision that carries this value.
price_basisFor price_kind agreed: whether price_amount and the tiers are net (exclusive) or already contain the tax (inclusive).
price_kindThe agreed tier ladder, when the price is tiered.
quantity^-?\d+(\.\d+)?$Decimal number encoded as a string to preserve precision.
trackversion_changeFor attribute=version_change: when a following line moves to a newer catalog version.
QuoteTemplateRef
idThe document template's id.
nameIts name at the time of the edit; empty when it could not be named.
QuoteTextEdit
fieldWhich text: the title, the note to the customer, the contract terms, or the language the offer is for (a language code).
kindThe change's kind, which names its shape.
afterThe value after the edit; absent when there is none.
beforeThe value before the edit; absent when there was none.
QuoteTotals
currencyThe offer's currency: every amount in these totals is in it.
gross_excludedTrue when a line is priced with the tax inside it and the tax is not determined yet, so its net is not known: it is in no total.
Each phase paid for in advance as a whole: its amount for its span, invoiced once at its opening.
What each billing period of a phase invoices for its lines billed period by period, one entry per phase that has any.
taxHow the offer's tax reads: taxed (each total states its tax and gross), reverse_charge and exempt (no tax is owed here; the gross equals the net), undetermined (no determination could be made; each total states its net alone).
unpriced_excludedTrue when a line's amount the offer cannot state — priced from the price list at invoicing, or by a negotiated ladder the quantity walks: it is in no total.
usage_excludedTrue when a line bills on reported usage: it is in no total.
Every one-time and event charge of the offer, added up. Absent when the offer bills nothing once.
one_time_labelThe one-time total's label in the document's language ("Once"). Present whenever one_time is.
QuoteUserRef
idThe user's id.
nameTheir name (their email when they have none) at the time of the edit; empty when they could not be named.
QuoteValuePinEdit
currencyThe currency both amounts are in: the quote's.
kindThe change's kind, which names its shape.
after^-?\d+(\.\d+)?$The value after the edit; absent when there is none.
before^-?\d+(\.\d+)?$The value before the edit; absent when there was none.
QuoteViewedPayload
customer_idorganization_idquote_idThe quote that was viewed for the first time.
viewed_atFirst-view instant.
QuoteViewerRole
viewerteam: the caller is a member of the organization that sent the quote this link belongs to.
RateProvider
RateTable
created_atcurrencyISO 4217 currency the entry values are in when the formula reading them treats them as money.
idnameDisplay name of the rate table.
on_missing_keyBehavior when no entry matches a lookup: 'error', 'zero', or 'default_value'. The value of the version in force; an edit waits in the working draft until it is published.
organization_idrequires_continuous_coverageWhen true, published versions must leave no gap in the table's effective-date timeline.
slugURL-safe unique identifier that formula lookup()/bracket() calls reference this table by.
statusThe entity's own state: draft (never published), active (a published version is in force) or archived. A release on the calendar does not change it: see scheduled_versions.
table_typeMatching mode: 'lookup' (exact key match) or 'bracket' (numeric range match).
updated_atdefault_value^-?\d+(\.\d+)?$The value returned when on_missing_key=default_value and nothing matches: a formula operand like every entry value.
descriptionOptional human description of the table's purpose.
The version in force: its id, number and status. Absent while the table has never been published. On an archived table, the version that was in force when it was archived.
Every version scheduled to publish, in the order they will publish. Their rows are FROZEN — they no longer answer GET /{kind}/{id}/draft — so the entity's working draft is free for immediate changes while they stand. The version numbers are PROVISIONAL: head + rank, recomputed whenever the timeline moves.
deleted_atWhen the table was archived. Sent only in the answer of an archive; every read returns live tables, so it is absent there. Deprecated: use status instead. Removed on 2026-11-30.
head_version_idThe id of the version in force; absent while the table has never been published. Deprecated: use head_version.id instead. Removed on 2026-11-30.
lifecycleDerived entity state: draft, published or archived. It is NEVER 'scheduled' — pending releases live on scheduled_versions, and an entity with one is still whatever it already was and still editable. Deprecated: use status instead. Removed on 2026-11-30.
lifecycle_statusTable lifecycle: draft, active, or archived. Deprecated: use status instead. Removed on 2026-11-30.
RateTableDraftContent
The rows this version should carry: exact-match lookup keys or numeric brackets.
on_missing_keyWhat a lookup does when no row matches.
currencyISO 4217 currency the values are in when a formula reads them as money.
default_value^-?\d+(\.\d+)?$The value a miss is served with when on_missing_key is 'default_value'.
RateTableEntry
value^-?\d+(\.\d+)?$ · requiredThe value returned on a match: a formula operand, which the formula reads as money in the table's currency or as a unitless multiplier.
idlookup_keyExact-match key for a lookup-table entry; null on bracket entries.
range_max^-?\d+(\.\d+)?$Exclusive upper bound of a bracket entry; the entry matches values where value < range_max. Null means unbounded above.
range_min^-?\d+(\.\d+)?$Inclusive lower bound of a bracket entry; the entry matches values where range_min <= value. Null means unbounded below.
RateTableIdentity
nameIts display name; the slug when it could not be named.
slugThe slug the expressions name it by.
idThe rate table's id, when it could be found.
RateTableVersion
created_atcurrencyISO 4217 currency inherited from the parent rate table when this version was minted (CUR-S5).
effective_fromWhen this version starts being effective on the billing timeline.
idoriginWho made this version: manual, scheduled_release, or cascade.
rate_table_idThe parent rate table this version snapshots.
statusVersion lifecycle: draft, scheduled, published, or archived (the parent table's lifecycle_status is the one that uses 'active').
versionThis version's number, incrementing per publish.
effective_toWhen this version was superseded; null while it is the current version.
The rate rows in this version: exact-match lookup keys or numeric brackets.
published_atWhen this version was published; null while draft.
published_byThe user who published this version.
release_nameOperator-given name of this version, shown beside its number.
release_noteFree-text note describing this version's change.
RateTableVersionSnapshot
archived_reasonbase_version_idThe version this one is built on — the predecessor for a release, the base for a draft.
created_atcurrencyISO 4217 currency this version's values are in when a formula reads them as money.
effective_fromeffective_toentity_idThe rate rows in this version: exact-match lookup keys or numeric brackets.
idkindThe versioned kind: product, plan, rate_table, price_formula or tax_rule.
on_missing_keyWhat this version does when no row matches: 'error', 'zero' or 'default_value'.
originpublished_atrankrelease_namerelease_notescheduled_change_idscheduled_forslugThe table's slug, which is how an expression names it.
statustable_typeMatching mode: 'lookup' (exact key match) or 'bracket' (numeric range match).
versionThe display number, or null while the row is off the chain.
default_value^-?\d+(\.\d+)?$The value a miss is served with when on_missing_key is 'default_value'.
Who published the version — the same actor the audit trail names. Absent until it is published.
nameThe table's current name: a live value, not part of the version. Deprecated: use name of GET /rate-tables/{id} instead. Removed on 2026-11-30.
rate_table_idThe rate table this version belongs to; the same id as entity_id. Deprecated: use entity_id instead. Removed on 2026-11-30.
ReadableVersionDiff
changesEvery difference, in reading order; empty when the two versions carry the same values.
entity_idThe entity the compared TO version belongs to.
kindThe versioned kind: plan or product.
The version compared TO.
What the TO version followed, when a cascade published it.
The version compared FROM; absent when there is none.
ReassignCountersignerRequest
user_idThe member who signs for the organisation now; they must hold quotes.sign_for_org. null: anyone who may sign for the organisation.
RebateShape
kindThe shape discriminator.
measureWhat is counted towards the threshold.
percent^-?\d+(\.\d+)?$ · requiredThe rebate, in (0, 100].
windowThe horizon that is rebated when the threshold is reached.
first_n_periodsn, when the window is first_n_periods.
The spend at which the whole window is rebated, as a money table. For measure=spend only. The entries price named currencies; the default is one currency-less value spent in whatever currency the bill is in, for every currency the entries do not name. An entry always beats the default, at least one of the two is required, and nothing is ever converted. A window this table answers for in neither way rebates nothing.
threshold_units^-?\d+(\.\d+)?$The unit count at which the whole window is rebated. For measure=units only.
RecipientPreview
categoryThe recipient list this row is about.
ccThe category's other addresses, copied on the mail, in slot order.
toThe address mail for this category is sent to. Empty when there is nobody: the send would record a blocked message.
viaWhere this answer came from: the category's own list, the fallback list, the main address, the next address because the chosen one is suppressed, or nobody.
ReconciliationFinding
detailfirst_seen_atidkindWhat the pass could not reconcile, or what it repaired.
last_seen_atproviderThe provider whose settlement ledger the finding came from.
provider_txn_idThe provider's settlement row id.
statusWhere the finding stands.
The amount the finding is about, when the pass knew one.
customer_idThe customer that payment was taken from.
invoice_idThe document that payment was for, when it was for one.
payment_idThe local payment the finding is about, when it has one.
related_source_idThe provider payment / refund / dispute id the row belongs to, when known.
resolved_atReconciliationFindingKind
RecordInvoicePaymentRequest
What arrived, {value, currency}: a positive amount in the document's currency. Another currency is refused with CURRENCY_MISMATCH.
instrumentThe rail the money came over as the operator files it (BANK_TRANSFER, CASH, WIRE, CHEQUE, …).
methodThe payment method as the provider named it, for the receipt.
providerThe provider that reported the payment. Empty for a hand-entered receipt.
received_atWhen the money moved. Omitted, it is now. It may not lie ahead of the workspace's clock (a few minutes of a provider's clock running ahead are allowed).
referenceThe provider's own reference for the event. Empty for a hand-entered receipt.
RecordSEPAMandateRequest
account_holderThe account holder as the bank knows them.
confirmedoperator: you confirm the customer signed a mandate naming this creditor and reference. api: you confirm the customer was shown the offer's text unchanged and accepted it; as the creditor (or the seller a provider collects for) you answer for that consent.
ibanThe account to be debited; spaces are ignored. EU/EEA accounts only.
accepted_atapi: when the customer accepted, at most 24 hours ago and not in the future (SEPA_MANDATE_ACCEPTED_AT_INVALID).
accepted_byapi: who accepted, as your application knows them (e.g. their email), kept as evidence.
bicOptional; the bank is found from the IBAN.
channeloperator (the default): a form the customer signed, recorded with signed_on and ideally its scan. api: the customer accepted the mandate text online in your own application just now; send locale, reference, text_version, text_sha256, accepted_at, ip_address and user_agent.
document_idoperator: the uploaded scan of the signed form, kept as evidence.
ip_addressapi: the IP address the customer accepted from (SEPA_MANDATE_EVIDENCE_MISSING when absent).
localeapi: the language of the text you showed (de, en, fr, es, it, pt, nl, ja); the stored text is Kontier's text in it.
referenceoperator: the reference on the signed form, a fresh one when omitted. api: required, the offer's reference the text you showed named.
schemeCORE when omitted. B2B needs a business customer and your own SEPA rail with B2B enabled; a payment provider's rail collects CORE only.
signed_onoperator: the date on the signed form, required, not in the future. api: ignored; the mandate is dated by accepted_at.
text_sha256api: SHA-256 (hex) of offer.text exactly as you showed it, UTF-8. A text that is not Kontier's for this creditor, reference, scheme and locale is refused (SEPA_MANDATE_TEXT_CHANGED).
text_versionapi: the offer's text_version the customer read. A text that changed since is refused (SEPA_MANDATE_TEXT_CHANGED).
user_agentapi: the user agent of the customer's browser (SEPA_MANDATE_EVIDENCE_MISSING when absent).
RedeemPromotionRequest
customer_idWho comes to hold it.
anchorA subscription to confine every firing to. Omit to let every line of the customer in scope fire.
codeThe coupon code. Optional here: an operator may give a coupon promotion without it. A code that is sent must match, and a promotion that is not a coupon takes none.
RedemptionEndReason
RedemptionEventPayload
atWhen it happened.
clawed_backWhether settled firings were reversed as part of ending it.
customer_idThe customer holding it.
organization_idpromotion_idThe promotion being held.
redemption_idThe hold this happened to.
statuspending, active, dormant, left, revoked or ended.
end_reasonwindow, narrowed, ceiling, left, revoked, pending_expired or subscription_ended. Only on redemption.ended.
previous_statusWhat it was before. Only on redemption.status_changed.
subscription_idThe anchor subscription, when the hold is confined to one.
workspace_idThe workspace that owns the promotion.
Ref
idThe referenced entity's id.
nameIts display name; the id when it could not be named.
versionThe display number of the version referred to, when the reference is to one version.
ReferrerRow
idcreated_atcustomer_idcustomer_nameinvoice_idinvoice_numberlabelsincesub_labeltypeRefreshCadence
unitThe cadence's unit.
countHow many units of the cadence; absent with a unit that takes none.
RefundInvoiceRequest
amount^-?\d+(\.\d+)?$Optional partial-refund amount in MAJOR units, in the addressed document's currency. Omit for a full refund.
currencyOptional echo-guard: must equal the document's currency when set; a different one is refused with CURRENCY_MISMATCH before any money moves.
instrumentWhere the money goes: back through the payment provider that charged it (gateway) or onto the customer's wallet in the document's currency. Omit it for the document's default rail, the default_instrument of GET /invoices/{id}/refund-rails: gateway when the provider charge can return all of the refund, otherwise wallet. That endpoint also says which of the two can take this document's refund, and how much of it.
reasonOptional classification. Omit for requested_by_customer.
reason_noteOptional free-text justification in the operator's own words. INTERNAL: shown to the approver when the invoice.refund checkpoint is on and stamped into payment-provider metadata; never shown to the customer.
Optional explicit atom reversals, as an alternative to amount. Omit both to refund the whole document.
RefundMarketplaceSaleRequest
How much to give back, with its currency, which must be the sale's. It can be less than the gross, and it can be asked for again until the whole gross has gone back.
RegisterFacts
in_liquidationTrue while the organization is in liquidation; documents must say so.
The legal representatives, in the order the register lists them.
legal_formThe legal form, as the register states it.
register_courtThe court that keeps the register.
register_numberThe live commercial-register number, from the organization's identifiers.
The registered office, when it differs from the legal address.
The registered share capital; absent when none is on file.
share_capital_currencyThe currency of share_capital_minor. Deprecated: use share_capital.currency instead. Removed on 2026-11-30.
share_capital_minorThe share capital in minor units of share_capital_currency. Deprecated: use share_capital instead. Removed on 2026-11-30.
RegistrationSchemeOption
countryISO 3166-1 alpha-2 of the state the register belongs to.
descriptionWhat the registration covers, and what it does not.
labelShort name of the register, in English.
schemeScheme identifier, e.g. GB_VAT, VOEC, OSS_UNION.
RegistryCurrency
chargeable_via_providerAdvisory: whether any integrated payment provider can charge this currency. false = invoicing/bank-transfer only.
codeISO 4217 code, uppercase.
scaleMinor-unit decimal places (0 for JPY, 2 for EUR, 3 for KWD, 4 for CLF).
minor_unit_nameHuman name of the minor unit (cent, fils, ...), when one exists.
RenameAudienceRequest
nameNew operator-facing name.
descriptionNew description. ABSENT MEANS EMPTY: this endpoint replaces both naming fields, it does not merge them.
ReplayDiff
atoms_afterHow many the replay produced.
atoms_beforeHow many priced facts the issued document carries.
matchTrue when the replay reproduces the issued document exactly.
subtotal_after^-?\d+(\.\d+)?$ · requiredMAJOR units, as the pins reproduce it.
subtotal_before^-?\d+(\.\d+)?$ · requiredMAJOR units, as issued.
tax_total_after^-?\d+(\.\d+)?$ · requiredMAJOR units, as the pins reproduce it.
tax_total_before^-?\d+(\.\d+)?$ · requiredMAJOR units, as issued.
differencesThe atoms that moved, named by product and instant, so an operator can see WHERE.
ReportExport
currencyISO 4217 code.
expires_atfromFirst day exported, included.
grainBucket width: day, week, month, quarter or year.
idmetricMetric key, as listed by GET /analytics/metrics.
requested_atstatusWhere the export is: pending and running while it renders, then ready, failed or expired.
timezoneIANA zone of the bucket boundaries.
toFirst day after the export, not included.
byte_sizeSize of the file in bytes; present once it is rendered.
completed_atWhen rendering ended, ready or failed; absent before that.
dimensionThe dimension the series is sliced by; absent when it is not sliced.
download_urlPresigned link to the CSV file; present only when status is ready, and valid until expires_at.
errorWhy the export failed, when status is failed.
row_countNumber of data rows in the file; present once it is rendered.
sha256Hex SHA-256 of the file; present once it is rendered.
Representative
nameThe representative's name.
ordinalThe position in the register's list, from 1.
roleThe representative's role, as the register states it.
RequiredCustomField
keyCustom-field key from the organization's catalog.
targetWhere the answer goes after signature. DOCUMENT_ONLY keeps it on the offer.
on_conflictWhat happens when the destination already holds a value. Required for CUSTOMER and SUBSCRIPTION; must be absent for DOCUMENT_ONLY, which never writes.
RequiredCustomFieldOption
labelHuman-facing option text.
valueValue stored on the quote when this option is chosen.
RequiredCustomFieldSchema
field_typeWhich input the page renders and which JSON type the answer must be.
keyCustom-field key; the property name the answer is submitted under.
descriptionOperator-authored help text, shown as the input's placeholder.
labelOperator-authored display name. Empty when the key names no live definition — the page then humanises the key.
max_lengthMaximum length for text-shaped types.
max_valueMaximum for NUMBER.
min_lengthMinimum length for text-shaped types.
min_valueMinimum for NUMBER.
Selectable values; present for ENUM.
patternRegular expression the answer must match.
pattern_messageOperator-authored message shown when the pattern does not match.
RescheduleChangeRequest
whenNew when kind; must be one the operation accepts.
atThe WALL CLOCK to act at, required when when=at — NOT an instant. Its calendar fields are read and read and re-anchored in the zone field, so send it with a Z suffix (2027-01-01T00:00:00Z) and name the zone separately. An offset is refused rather than silently discarded.
The notice period for when=after_notice: a calendar duration {count, unit}, counted from now.
zoneIANA zone the wall instant is read in.
ResendMailMessageRequest
idempotency_keyToken that makes this safe to retry: the same token collapses onto one send, a new token sends again. Omit for a stable per-user, per-day default.
Reservation
can_proceedTrue when the hold was created and the caller may serve the request; false means it was blocked and no hold exists (see blocked_reasons).
hold_idIdentifier of the hold created when can_proceed is true; zero value when the reserve was blocked. include=hold adds the hold itself as hold.
blocked_reasonsWhen can_proceed is false, the machine-readable reasons the reserve was blocked, e.g. insufficient wallet balance, no_wallet_for_currency, wallet_currency_mismatch, unit_limit_exceeded, customer is not active.
The hold the reserve placed, as POST /reservations/{id}/capture and /release answer it. Sent with include=hold; absent when the reserve was blocked.
Pre-tax amount of the hold, {value, currency}.
Tax portion of the hold, {value, currency}; null when no tax rule applied.
expires_atWhen the created hold auto-releases if not captured; zero when blocked. Deprecated: use hold.expires_at (include=hold) instead. Removed on 2026-11-30.
fx_rate_idFX snapshot used to convert the price; null when no conversion occurred. Deprecated: use hold.exchange_rate_id (include=hold) instead. Removed on 2026-11-30.
Gross amount held (net plus tax), {value, currency}, in the currency the price resolved to; null when blocked. Deprecated: use hold.amount (include=hold) instead. Removed on 2026-11-30.
tax_rate^-?\d+(\.\d+)?$Tax rate applied, as a decimal fraction (0.19 = 19%). Deprecated: use hold.tax_rate (include=hold) instead. Removed on 2026-11-30.
tax_rule_idTax rule applied to the hold; lets preview/reserve/invoice reconcile to the same rule. Deprecated: use hold.tax_rule_id (include=hold) instead. Removed on 2026-11-30.
wallet_idWallet the hold was placed against; ties the reserve back to a specific wallet. Deprecated: use hold.wallet_id (include=hold) instead. Removed on 2026-11-30.
ReservationReleasedPayload
age_daysHow long the draft had held the reservation, in whole days.
customer_iddocument_idThe draft whose promotion reservation was released.
organization_idreleased_atwindow_daysThe organization's draft-reservation window at the moment of release, in days.
subscription_idworkspace_idReserveOutcomeEventPayload
customer_idThe customer the reservation belongs to.
hold_idThe wallet hold the reservation is associated with.
metric_keyThe metric being metered.
occurred_atWhen the outcome was recorded.
organization_idoutcome_idThe reservation outcome this event records.
product_idThe metered product being reserved against.
quantity^-?\d+(\.\d+)?$ · requiredThe reserved quantity.
statusThe reservation outcome status (e.g. PENDING, CAPTURED, FAILED).
subscription_idThe subscription the reservation applies to.
errorThe failure detail, when the outcome failed.
price_keyThe price key resolved for the reservation, when known.
usage_event_idIdentifies the hold-bound usage-event request this outcome answers; stable across that request's retries. No usage_events row carries it: a captured reservation is billed by its own invoice.
workspace_idThe workspace that owns the reservation.
ResolveFindingRequest
notesOptional operator notes explaining why the finding was overridden/resolved.
ResolveReconciliationFindingRequest
noteWhy the finding needs nothing more — what was checked or put right. Recorded on the audit trail with the resolution.
ResolvedLineValue
attributeThe attribute the walk resolved.
resolvedFalse when no rung of the ladder had a value; value is then absent.
rung1 stated on this phase's line, 2 carried from an earlier phase, 3 the catalog origin, 4 the subscription default. 0 when unresolved.
priced_per_keyOn an unresolved price only: the line names no key on a keyed product that states no set price, so each key bills at its own price and the line has no single list price. It is not unpriced.
stated_in_phaseThe phase whose line stated the value, for rungs 1 and 2.
unresolved_reasonWhy no rung of the ladder had a value, when the catalog can explain it. Absent on a resolved attribute.
The value the walk found.
chipagreed, agreed since phase N, list, default, or unresolved. Deprecated: use rung and stated_in_phase instead. Removed on 2026-11-30.
statedTrue when this phase's own line states the attribute, reset included. A transform leaves an agreed value alone (03 §3). Deprecated: use the attribute is a key of the line's stated instead. Removed on 2026-11-30.
ResourceProvenance
lockedThe share is locked, so this organization cannot replace it with one of its own.
sourceWhere the resource came from: this organization's own row, a share from an organization above it, or neither.
shared_by_organization_idThe organization above this one that shares the resource.
shared_by_organization_nameThat organization's display name, for the "Shared by" marker.
ReverseInvoiceRequest
reasonWhy the document is being reversed. Persisted on the reversing document; empty means OTHER.
Requests also accept the new spelling: each value in lower case (billing_error for BILLING_ERROR). The listed spelling is deprecated in requests and accepted until 2026-11-30.
RevisionAllowance
included^-?\d+(\.\d+)?$ · requiredThe included quantity.
rolloverWhether unused allowance carries into the next period.
expiry_periodsAfter how many periods carried allowance expires; 0 when it does not. A write may omit it for 0; a read always states it.
rollover_max^-?\d+(\.\d+)?$A cap on what carries. Absent: no cap.
RevisionCadence
kindHow often the line bills inside its phase. How long it bills is the phases' answer: to bill a line for N periods, split its phase.
eventThe milestone that triggers the charge, for kind=on_event.
RevisionDiffAllowance
expiry_periodsAfter how many periods carried allowance expires; 0 when it does not.
included^-?\d+(\.\d+)?$ · requiredThe included quantity.
rolloverWhether unused allowance carries into the next period.
rollover_max^-?\d+(\.\d+)?$A cap on what carries. Absent: no cap.
RevisionDiffCadence
kindevery_period, once or on_event.
eventThe milestone, for kind=on_event.
RevisionDiffDuration
countHow many units.
unitThe calendar unit.
RevisionDiffEnd
kindHow the window closes.
atThe closing date, for kind=date.
Counted from the phase's start, for kind=duration.
The metric and threshold, for kind=event.
What an after_duration switch adds to the crossing.
The period a period_end switch falls back to without a billing calendar.
switchWhat the crossing does to the window, for kind=event.
RevisionDiffEvent
metricThe metric watched.
threshold^-?\d+(\.\d+)?$ · requiredThe value the metric must reach.
RevisionDiffExit
gateWhat the rule does to a cancellation inside its notice.
fee^-?\d+(\.\d+)?$An early-termination fee, in the change's currency. Absent: none.
Commitment: the subscription cannot be cancelled before this phase has ended.
How much notice a cancellation must give. Absent: none.
RevisionDiffLine
product_idThe product the line bills.
price_keyThe keyed price inside the product; absent for the unkeyed one.
RevisionDiffOrigin
idThe plan or product.
kindA plan version or a product price.
versionThe origin's version.
RevisionDiffPhase
How the phase closes.
Notice, gate, fee and commitment.
How the phase opens.
thenWhat follows the phase.
reasonWhy the phase exists, when a note says so.
RevisionDiffPhaseRef
positionThe phase's 0-based position.
subscription_idThe subscription that owns the phase; absent means this one.
RevisionDiffPrice
kindlist, agreed or free.
amount^-?\d+(\.\d+)?$The amount in the change's currency; the first tier's unit amount when the price is tiered. Absent for free.
price_basisFor an agreed price: whether the amount and the tiers are net (exclusive) or already contain the tax (inclusive). Absent on a list or free price.
The agreed tier ladder; absent for a flat rate.
RevisionDiffStart
kindfixed opens on a date; after_previous when the previous phase closes.
atThe opening date, for kind=fixed.
RevisionDiffValue
kindstated sets the value; reset drops to origin and is stored.
For attribute=allowance.
For attribute=cadence.
For attribute=price.
quantity^-?\d+(\.\d+)?$For attribute=quantity.
timingFor attribute=timing.
trackFor attribute=track.
version_changeFor attribute=version_change.
RevisionDuration
countHow many units. Zero means unset.
unitThe calendar unit.
RevisionEndRequest
kindHow the window closes.
atThe closing date. Read for kind=date.
Counted from the phase's start on the calendar in UTC: a month from 31 January ends 28 February. Read for kind=duration.
Read for kind=event.
What an after_duration switch adds to the crossing instant.
A period_end switch waits for the end of the deal's billing window containing the crossing; this period, anchored at the phase's start, is what it waits for only when the deal has no billing calendar there (a trial before its first paid phase).
switchWhat the crossing does to the window (02 §2). Read for kind=event; immediate when unset.
RevisionEvent
metricThe metric watched, e.g. seats, spend, usage.
threshold^-?\d+(\.\d+)?$ · requiredThe value the metric must reach.
RevisionExit
fee^-?\d+(\.\d+)?$An early-termination fee, in major units of the subscription's currency (currency on the revision). Absent: none.
gateWhat the rule does to a cancellation inside its notice.
Commitment: the subscription cannot be cancelled before this phase has ended.
How much notice a cancellation must give.
RevisionLineChangeItem
kindThe change's kind, which names its shape.
Which line.
The line's origin: after only for an added line, before only for a removed one, both when it changed.
phaseThe phase, by its 0-based position in the draft after the write; for a line of a phase that is gone, its position before it.
RevisionLineRequest
Where the line was pre-filled from.
product_idThe product this line bills.
price_keyThe keyed price inside the product; empty is the unkeyed one. Together with product_id it identifies the line across phases, which is what the ladder's rung 2 walks.
Stated attributes, keyed by attribute name (quantity, allowance, price, cadence, timing, track). An absent attribute is inherited.
RevisionOrigin
idThe plan or product id.
kindWhat pre-filled the line.
versionThe origin's version. Whether the line pins it is the track attribute, not this field.
RevisionPhaseChangeItem
kindThe change's kind, which names its shape.
phaseThe phase, by its 0-based position in the draft after the write; for a removed phase, its position before it.
currencyThe deal's currency: the one an exit fee of this change is in.
For a window change: how the phase closes, when that changed.
The phase's exit rules on each side.
For a moved phase: its 0-based position before and after the write.
The note saying why the phase exists.
For a window change: how the phase opens, when that changed.
For an added phase, what it states (after); for a removed one, what it stated (before).
What follows the phase: next, open or stop.
RevisionPhaseRef
positionThe referenced phase's position, 0-based.
subscription_idThe subscription that owns the referenced phase; absent means this one (07 §2 co-termination).
RevisionPhaseRequest
The closing rule.
The opening rule.
continuesTrue when this phase is the rest of the phase before it, as a split or a cut leaves it: a line whose version_change is at_phase_change keeps its version across this boundary, and an event end is measured from the start of the first part. Only a phase that starts after_previous, after a phase that ends on a date or after a length, can continue it. Read only by PUT /subscriptions/{id}/revisions/draft and its preview; omitted there, a phase keeps what the draft says at its position.
Notice, gate, fee and commitment.
One entry per product billed in this window.
reasonWhy the phase exists: signed quote, renegotiation, operator edit, transform run.
thenWhat follows: next iff a successor exists, open or stop only on the last phase. stop ends the subscription.
RevisionPrice
kindfree is zero by definition; amount is read for list and agreed.
amount^-?\d+(\.\d+)?$The amount in major units of the subscription's currency (currency on the revision); the first tier's unit amount when the price is tiered. A write may omit it when it gives tiers. Always present on a read.
price_basisWhether the amount and the tiers are net (exclusive) or already contain the tax (inclusive). On a write, for kind=agreed only, and optional: the agreed price then takes the basis of the catalog price the line resolves to at the start of its phase, and that basis is stored with it, so a later switch of the catalog price does not change what was agreed. On a read, present for agreed and list prices.
The agreed tier ladder, for kind=agreed only: ascending by up_to, the open-ended tier last. A tier either states a fixed unit_amount or a formula over plan_price and product_price. Absent for a flat rate.
RevisionPublishedPayload
organization_idpublished_atWhen it went live.
revisionThe number of the revision that went live.
subscription_idThe subscription whose revision went live.
supersededThe number of the revision it superseded; 0 for a first revision.
change_idThe Change whose firing made this fact; absent when an operator, the buyer or the deal's own clock made it.
cut_atThe instant from which the published revision differs from the one it superseded. Absent on a first revision.
source_quote_idThe quote whose signature made the revision live; absent when it was published any other way.
workspace_idThe workspace that owns the subscription.
RevisionRef
idThe revision's own id.
numberThe revision's number, 1-based.
statuslive for the revision in force, draft for the open draft.
RevisionStart
kindfixed opens on a date and holds through a cut; after_previous opens when the previous phase closes and is the only kind a cut moves.
atThe opening date, for kind=fixed.
RevisionSummaryResponse
active_countHow many of them are not superseded.
numberThe revision's number, 1-based.
phase_countHow many phases it carries, superseded ones included.
statusExactly one revision is live; earlier ones are superseded; at most one draft is open.
cut_atThe revision's freeze boundary: phases opened before it are history. A cut stamps the instant it cuts at; a draft opened without one stamps the instant it was opened — so this is not where the deal was divided (split_at is).
published_atWhen the revision went live. Absent on a draft.
Who published the revision — the same actor the audit trail names. Absent on a draft and on a revision published before publishers were recorded.
reasonWhy the revision exists, in the words of the person who made it.
split_atThe instant at which this revision divides a phase of the revision before it: where the deal was cut. Absent when it divides none — it changed the deal only from a phase boundary on, or not at all — and on a first revision.
Why the system made the revision, when it did: a code with its parameters, for the reader to render in their language. Absent on a revision a person made.
RevisionSystemReason
coderesumed_after_pause: a resume stretched the deal by the paused time.
paused_atresumed_after_pause: the instant the pause began.
resumed_atresumed_after_pause: the instant the subscription was resumed.
RevisionValue
kindstated sets the value and stops the ladder walk here for every later phase; reset drops to origin and is STORED, so the next phase does not re-inherit an earlier agreed value.
For attribute=allowance.
For attribute=cadence.
For attribute=price.
quantity^-?\d+(\.\d+)?$For attribute=quantity.
timingFor attribute=timing: in_advance at the start of each billing period, in_arrears at its end, or phase_in_advance — the whole phase in one invoice at its opening, priced as the sum of its periods (a recurring, unmetered line of a phase with an end date or a fixed length).
trackFor attribute=track.
version_changeFor attribute=version_change: when a line that follows the catalog moves to a newer version — immediate_prorate at the instant it takes effect (pro-rated), next_period at the start of the next billing period, at_phase_change at the next phase change. A pinned line keeps its version whatever it says.
RevisionValueChangeItem
attributeWhich of the line's values.
kindThe change's kind, which names its shape.
Which line.
phaseThe phase, by its 0-based position in the draft after the write.
What the line states after the write; absent when it states nothing and inherits the value.
What the line stated before the write; absent when it stated nothing and inherited the value.
currencyThe deal's currency: the one a price of this change is in.
RevokeOrganizationDelegationRequest
reasonWhy you are withdrawing it. Kept with the record.
RevokeRedemptionRequest
clawbackReverse every settled firing of this redemption and issue the money documents for the ones that landed on finalised invoices. The reversals and the documents commit together.
Role
idThe role's id: a built-in role's name (admin, member, no_access) or a custom role's uuid. From 2026-11-30 it is the role's uuid (subject_id) for every role; a built-in role's name stays in name. Paths and requests accept the uuid now.
is_systemnamepermissionssubject_idThe role's uuid: a custom role's own id; for a built-in role, the fixed id every organization uses for it. Accepted wherever a role id is, and the value of id from 2026-11-30.
assigned_countThe number of active members who hold the role. Sent without include=assigned_count until 2026-11-30; after that only with include=assigned_count.
descriptionis_default_for_new_joinersTrue for the role new members who sign in through a linked identity provider without an invitation get. Deprecated: use the organization setting security.sign_in.jit_default_role (GET /organization/settings) instead. Removed on 2026-11-30.
RunFailedPayload
connectorConnector slug.
kindverify, sync, delivery, action or inbound.
run_idThe failed run.
about_idThe Kontier object the run was about.
about_kindKind of the Kontier object the run was about (invoice, customer, …).
connection_idThe integration connection, if it still exists.
error_codeStable error key.
messageWhat failed, in one sentence.
RungFormula
basisWhat the formula yields: per_unit (a rate per billed unit; per package under PACKAGE) or per_band (the band's whole amount).
formula_idThe price formula that computes the rung's rate.
formula_version_idThe formula version the rung is pinned to; null follows the formula's live version.
The rung's values of the formula's declared variables; a variable left out takes the formula's default.
SEPAMandate
channelWhere the customer gave it: portal and checkout are Kontier's pages, api your own application, operator a signed form you recorded. legacy: the mandate was recorded before the mandate text was stored, so no text or evidence is kept for it.
created_atcreditorWho the mandate authorises, as its text names it.
creditor_idThe SEPA creditor identifier the debits carry.
customer_iddebtor_namedetails_erasedThe debtor's name and IBAN were cleared after the customer's erasure.
has_ip_evidenceThe signature recorded the address it came from.
iban_last4iban_maskedidlead_daysThe pre-notification period in calendar days this mandate's text promised (14 when it promised none).
railWho collects on it: own (your SEPA files), or the payment provider.
referenceThe reference the debits carry.
schemesigned_onThe day the customer gave the mandate.
statuspending while a payment provider sets it up; failed when the provider refused it; expired: an own-rail mandate unused for 36 months (EPC rulebook).
sync_stateA provider rail's setup at the payment provider: pending while it is created there, failed when the provider refused it (sync_error says why). none on your own SEPA files.
accepted_ataccepted_bybicThe mandate's history, oldest first, with include=events. GET /sepa-mandates/{mandate_id} sends it without include=events until 2026-11-30; after that only with include=events.
last_collected_onThe day of the last debit collected on the mandate; absent before the first.
on_behalf_ofThe seller the payment provider collects for, when the creditor is the provider.
revoke_reasonrevoked_atrevoked_bysequenceThe own rail's next collection: the first (FRST) or a recurring one (RCUR).
superseded_byThe mandate that replaced this one.
sync_errorWhy the payment provider refused the mandate, or why the last attempt to reach it failed.
text_sha256SHA-256 of the mandate text as accepted (with its version and locale).
text_versionlast_collected_atThe same day as last_collected_on. Deprecated: use last_collected_on instead. Removed on 2026-11-30.
signed_atThe same day as signed_on. Deprecated: use signed_on instead. Removed on 2026-11-30.
SEPAMandateEventPayload
The mandate after the change, as GET /v1/sepa-mandates/{id} returns it (without its history); the IBAN masked.
occurred_atWhen the change was made.
organization_idSEPAMandateList
Newest first.
The form a new mandate of this customer is given against. Deprecated: use GET /customers/{id}/sepa-mandate-offer instead. Removed on 2026-11-30.
SEPAPrenotification
The amount the notice announced.
channelHow the notice went.
collection_dateThe day the notice announced the debit for, at the earliest.
deliveredFalse when the mail is known not to have gone out (blocked, suppressed, failed or bounced): the notice then announces nothing, and no debit is taken on it.
idThe notice.
lead_daysThe pre-notification period, in calendar days, the notice was sent under.
mandate_idThe SEPA mandate the debit is taken on.
railWho collects the debit: the seller's own SEPA files, Mollie, Kontier Payments or Stripe.
sent_atWhen the notice was sent.
mail_reasonWhy the mail did not go out (the mail log's block reason, such as mail_service_off or no_recipient, or the send's error); only on an undelivered notice.
mail_statusThe notice's mail as the mail log has it (queued, sent, delivered, blocked, suppressed, failed, bounced …); absent while the mail is not yet logged.
recipientThe address the notice went to; absent once the customer's data was erased.
SaleEventPayload
atWhen this happened.
buyer_customer_idThe customer that bought.
The platform's fee, as a money object.
The gross the buyer paid, as a money object.
listing_referenceThe storefront's own id for what was sold.
How much of the gross has been refunded so far, as a money object.
sale_idThe sale this happened to.
seller_customer_idThe customer whose seller role supplied.
statusThe status the sale is in after this event: agreed, funded, completed, cancelled or refunded.
supply_modelWho supplied, frozen at agreement: AGENT or DEEMED_SUPPLIER.
supply_natureWhat was supplied: ESS, OTHER_SERVICES, RIGHTS or GOODS.
supply_reasonThe legal basis of the rule that decided the model.
supply_regimeThe statutory platform regime a deemed supply was made under. Absent for an agent sale.
SaveEInvoicingChannelRequest
channelPEPPOL, PDP, SDI, KSEF, AEAT or AT.
countryThe SELLER's country, ISO 3166-1 alpha-2. A channel is bought, paid for and credentialled by the seller, so it is keyed on the seller's country and not the buyer's.
credentials_refNAMES a secret in the secret store, for example vault://peppol/be. It is logged by the adapter and returned unmasked by this API, so it must never be the credential itself.
endpoint_urlThe provider's base URL. Empty means the adapter's default.
modetest or live. Absent means test: the other default would have a first save send real invoices to a real authority under credentials nobody has confirmed.
participant_idThe seller's own address on a network that is not Peppol.
participant_schemeThe seller's own address on a network that is not Peppol (the SdI transmitter). A pair with participant_id: state both or neither. Refused on a PEPPOL row: its sender is the organisation's Peppol ID.
regionNarrows the row below the country (the Basque and Navarrese territories run TicketBAI rather than Verifactu). Empty means the whole country.
statusactive or disabled. Absent means disabled, unless the deprecated is_enabled says true.
is_enabledWhether documents go out through this channel. Deprecated: use status instead. Removed on 2026-11-30.
SaveSigningLayoutRequest
The whole field list; it replaces the saved one.
updated_atThe updated_at you read; null or absent for the first save. A layout saved since answers 409.
ScheduledCancellation
atWhen the cancellation takes effect.
created_atWhen it was planned.
The member who planned it. Sent only with include=scheduled_cancellation.created_by; absent when the user no longer exists.
created_by_idThe member who planned it. Absent when an API key planned it.
reasonWhy, as the person who planned it wrote it.
ScheduledVersion
change_idThe pending catalog publish Change — reschedule or cancel it here.
versionThe version number it will publish as; 0 when the kind cannot say until it publishes.
version_idThe frozen version row that is scheduled to publish.
base_version_idThe version this one publishes on top of — the head for the first pending release, the preceding pending release for the rest. Absent when nothing is live yet.
scheduled_forWhen the publish is due. Absent for a symbolic 'when' that has not resolved to an instant.
SearchEntityType
SearchHit
Decision Table
| Variant | Matching Criteria |
|---|---|
| type = object · entity_type="customer" · requires: id, display_name, score +1 more | |
| type = object · entity_type="product" · requires: id, display_name, score +1 more | |
| type = object · entity_type="invoice" · requires: id, display_name, score +1 more | |
| type = object · entity_type="credit_note" · requires: id, display_name, score +1 more | |
| type = object · entity_type="plan" · requires: id, display_name, score +1 more | |
| type = object · entity_type="subscription" · requires: id, display_name, score +1 more | |
| type = object · entity_type="payment" · requires: id, display_name, score +1 more | |
| type = object · entity_type="dispute" · requires: id, display_name, score +1 more | |
| type = object · entity_type="quote" · requires: id, display_name, score +1 more |
display_namePrimary label shown for the hit in the results list.
entity_typeKind of the matched entity; it names the shape of data.
idIdentifier of the matched entity.
scoreRelevance score from the search engine; higher ranks first.
tag_idsThe ids of the tags on the matched entity. Add include=tags to get the tags themselves.
The owning customer. Sent only with include=customer, and only when the entity has an owning customer.
customer_idOwning customer's id; empty for catalog entities that have no owning customer.
referenceThe short per-organization human reference an operator would say out loud: an invoice's or credit note's number, a subscription's SUB-000123, a quote's QUO-2026-000078. Absent for a kind that is named rather than numbered (customer, product, plan, payment, dispute) and for a draft invoice, which has no number until it is finalized.
secondary_textSupporting line shown under the display name (e.g. an invoice number or email).
Tags attached to the matched entity. Sent without include=tags until 2026-11-30; after that only with include=tags.
customer_nameOwning customer's display name; empty for catalog entities. Deprecated: use customer.name (include=customer) instead. Removed on 2026-11-30.
SellerEventPayload
atWhen this happened.
countryWhere the seller is established, ISO 3166-1 alpha-2.
customer_idThe customer whose seller role it is; the seller's identity lives on that row.
in_businessWhether the seller is a taxable person.
natural_personWhether the seller is a natural person, which decides whether an agent-model document is an invoice or a receipt.
seller_idThe seller row this happened to.
statusThe status the seller is in after this event: pending, verified, suspended or closed.
tax_regimeThe seller's declared regime: STANDARD, KLEINUNTERNEHMER, OSS or NON_EU.
verification_methodWhich checker granted verification: none, vat_id or operator. Absent until the seller is verified.
verified_atWhen verification was granted. Kept through a suspension, because it is history.
SendQuoteCountersigner
emailTheir address, recorded on the request.
nameThe name as it should appear on the signed copy.
user_idThe team member who will sign. Omit to let any authorised colleague countersign.
SendQuoteRecipient
emailWhere the offer goes.
nameWho this is, as it should appear on the request.
SendQuoteRequest
countersignOverrides the quote's countersign for this request. Deprecated: use countersign on the quote instead. Removed on 2026-11-30.
Requests also accept the new spelling: each value in lower case (none for NONE). The listed spelling is deprecated in requests and accepted until 2026-11-30.
Overrides the quote's countersigner under PERSON. Deprecated: use countersigner_user_id on the quote instead. Removed on 2026-11-30.
expires_atNarrows the offer's own expires_at at the send; a later date is ignored. Deprecated: use expires_at on the quote instead. Removed on 2026-11-30.
Who to send to; the first entry signs, the others are copied. Overrides the quote's signer_contact_id and copy_contact_ids. Deprecated: use signer_contact_id and copy_contact_ids on the quote instead. Removed on 2026-11-30.
reminder_every_daysOverrides the quote's reminder cadence for this request. Deprecated: use reminder_every_days on the quote instead. Removed on 2026-11-30.
reminder_maxOverrides the quote's reminder cap for this request. Deprecated: use reminder_max on the quote instead. Removed on 2026-11-30.
SetAllowanceRefreshRequest
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.
SetAudiencePurposesRequest
purposesThe replacement set. At least one. Case-insensitive, de-duplicated and stored in a fixed order, so the response is the canonical form rather than what was sent. ADDING a purpose always succeeds; REMOVING one that a live reference still needs is refused with 409 naming the rows, exactly as a delete is.
SetChildGrantRequest
grantedtrue grants the capability; false revokes it, which also cuts off every organization below the child that relied on it.
SetChildMemberEnabledRequest
enabledtrue restores the membership; false suspends it.
SetIdentifierRequest
kindvaluecountryvalid_fromvalid_toSetIncludedQuantityRequest
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.
SetMailConsentRequest
emailThe recipient address (required).
stateThe state to record: opted_in | opted_out | unknown. soft_opt_in is not manually settable (it is seeded from sales).
customer_idThe customer this address belongs to, when known.
proof_textThe consent statement the recipient agreed to. Required to record opted_in; without proof an opt-in lands as unknown (§4.1).
purposeConsent purpose; defaults to marketing_email.
SetProductPoolRequest
unit_limitMaximum pool balance in units, as a decimal string; null for no unit ceiling.
SetRegistrationRequest
countryISO 3166-1 alpha-2 of the state the registration is held in, which is not always the organization's own country.
identifierThe number as issued, e.g. GB999999973, CHE-123.456.789 MWST.
schemeScheme identifier out of the closed set the jurisdiction registry owns.
evidence_refWhat proves it: a VIES check id, an HMRC consultation number, an uploaded certificate's document id, or an operator's note.
valid_fromYYYY-MM-DD. Defaults to today. It is part of the row's identity: a number reissued after a deregistration is a new registration with a new start date, and the old row stays so an invoice issued under it can still say so.
valid_toYYYY-MM-DD, or null for an open-ended registration.
SetVATManualOverrideRequest
reasonExplanation recorded for the manual override. Required.
statusManual override outcome: "valid" or "invalid"; defaults to "valid" when omitted.
expires_atOptional expiry for the override; must be in the future when set.
SettingAmount
The amount and its currency. Absent is the value with NO AMOUNT — an answer distinct from unsetting (e.g. a threshold that gates every request over an inherited one) — and only a key that admits it accepts it.
SettingBound
allowedThe subset a level below may choose from. String keys, and list keys (every element drawn from it).
maxUpper bound, inclusive. Integer keys only.
Upper bound, inclusive. Money keys only.
minLower bound, inclusive. Integer keys only.
Lower bound, inclusive. Money keys only; in the same currency as max_amount, and a value in any other currency is outside the bound.
SettingChange
keyThe setting's key.
kindWhat happened to the rung's own row: added where the rung inherited the key, changed, or removed — back to what the rungs above say.
levelThe rung the act wrote at: the ladder level whose own row this is.
level_idThe organization, workspace, customer, subscription or checkout link the rung is.
The rung's own value after the act; absent when it holds none and inherits the value.
The rung's own value before the act; absent when it held none and inherited the value.
What the rung lets the rungs below do, before and after the act, when the act changed it.
For a key that holds a secret: that its value was set, replaced or cleared. Its value is never in the trail, so before and after are absent.
SettingPolicy
policyWhat the levels below this one may do: set their own value (default), set one inside the bound (bounded), or nothing (locked). State it to CHANGE the key's policy; default is what lifts a lock or a bound, and is sent explicitly rather than implied by omitting this entry.
allowedThe subset a level below may choose from. String keys, and list keys (every element drawn from it).
maxUpper bound, inclusive. Integer keys only.
Upper bound, inclusive. Money keys only.
minLower bound, inclusive. Integer keys only.
Lower bound, inclusive. Money keys only, in the currency of max_amount (else MIXED_AMOUNT_CURRENCY): a value in any other currency is outside the bound.
SettingRule
policySet their own value (default), set one inside the bound (bounded), or nothing (locked).
allowedThe subset a value below may be drawn from, for a bounded string or list key.
currencyThe money bound's one currency.
maxUpper bound, inclusive, for a bounded int key.
max_amount^-?\d+(\.\d+)?$Upper bound, inclusive, in currency, for a bounded money key.
minLower bound, inclusive, for a bounded int key.
min_amount^-?\d+(\.\d+)?$Lower bound, inclusive, in currency, for a bounded money key.
SettingRuleSides
What the rung lets the rungs below do after the act; absent when it holds no row.
What the rung let the rungs below do before the act; absent when it held no row.
SettingValue
typeThe setting's value type, which names the field the value is in.
amount^-?\d+(\.\d+)?$For type=money, in currency. Absent for the money value with no amount, which is a value of its own.
boolFor type=bool.
currencyFor type=money with an amount: the amount's currency.
intFor type=int.
listFor type=list, in order. An empty array is the empty list, which is a value.
textFor type=string.
SettingsCatalogFamily
descriptionlabelprefixThe family's namespace, e.g. approval.
fieldThis entry's field, e.g. threshold; absent for a family whose member is the key.
member_ruleAn open family's rule for a member, in words. Absent for a closed family.
membersA closed family's members, each resolving as its own key. Absent for an open family.
SettingsCatalogItem
categorydefaultdefault_write_levelThe rung a save from THIS workspace lands this key on when the request states no level. Empty means this key cannot be set from where you are standing.
descriptionfloorinherits_down_treeFalse when this key does not inherit from organizations above: its value names a row of this organization's own data, so each organization sets its own or falls to the platform default.
keyThe setting's key; for a keyed family's field, the template with {member} where the member goes.
labellevelspolicy_reachWho a policy set on this key from here binds: the organizations below (organizations), the organizations and everything under them (levels), this sandbox only (sandbox), or nobody because it cannot be set from here (none).
tightenWhether a level below may only make this key stricter: none (the ordinary ladder), true_is_stricter (a bool below a true must stay true), allow_list (a list that allows everything when empty; below a non-empty list only a non-empty subset of it).
typeThe value type, which names the field the value travels in: value (string, int, bool), value_list (list) or value_money (money).
allowedThe closed set of values a string setting admits, or every element of a list setting is drawn from. Absent for an open string or list, an integer, a boolean or money.
default_listA list setting's platform default. Absent for every other type.
A money setting's platform default. Absent for every other type, and when the default is no amount.
Present when this entry is one field of a keyed family, listed once for every member.
A list setting's length rule. Absent for every other type.
A money setting's currency pin and amount rule. Absent for every other type.
SettingsCatalogList
max_itemsThe most elements the list may hold. Duplicates are always refused.
SettingsCatalogMoney
no_amountThe setting admits the value with no amount, sent as an amounts entry without an amount.
positiveThe amount must be greater than zero.
currenciesThe currencies an amount may be in. Absent admits every supported currency.
SettingsCatalogNumber
minThe smallest value this setting accepts, inclusive.
unitWhat the number counts: calendar days, a plain count, whole percent, or whole units of the relevant currency.
maxThe largest value this setting accepts, inclusive. Absent means there is no upper bound.
ShareChange
kindWhat happened to the share: its policy changed.
afterThe share's policy after the act.
beforeThe share's policy before the act.
SharedResource
created_atidorganization_idpolicyresource_idresource_kindresource_knownWhether this deployment can tell whether the offered row still exists. False leaves resource_live unanswered rather than denied.
resource_liveWhether the offered row still exists. A share whose resource was deleted, archived or retired stays listed and reaches nobody; revoke it or restore the row.
resource_nameThe offered row's own name, when this deployment can read it. Empty otherwise. Sent with include=display; sent without being asked until 2026-11-30, after that only with include=display.
SignatureMode
Requests also accept the new spelling: each value in lower case (basic for BASIC). The listed spelling is deprecated in requests and accepted until 2026-11-30.
SigningCapabilities
auth_levelsHow strongly it can establish a signer's identity.
countersign_policiesWhat it can do after the customer has signed.
embeddedWhether signing can happen inside our own page.
max_document_bytesLargest document; 0 for no limit it knows of.
max_signersMost signers per request; 0 for no limit it knows of.
orderedWhether it honours signing order.
vendor_notifiesWhether the vendor mails the signers itself and signs on its own page. Then nothing the offer asks the buyer beyond a signature can be collected.
webhooksWhether the vendor reports status back as it happens. False means status arrives only by polling, on a delay.
SigningCountersignRequestedPayload
envelope_idorganization_idrequested_atInstant the countersignature became owed.
signer_emailsigner_idThe countersigner whose signature is owed.
signer_localeBCP-47 locale the notification is composed in.
subject_idsubject_kindquote | agreement | customer_document.
signer_nameworkspace_idSigningDocumentPart
filenameThe attachment's name; the quote number for the offer.
first_pageWhere it starts in the signing document's PDF, from 1.
kindoffer: the quote's own pages, always first. attachment: a document signed with it.
page_countHow many pages it has there.
Its pages, numbered as in the signing document's PDF.
sha256SHA-256 (hex) of the document's own bytes before the merge: an attachment's as stored; the offer's as rendered at send, equal to the signing document's digest when the offer is the only document. Empty only on a request sent before offer digests were recorded.
file_idThe attachment the document was taken from; absent for the offer. It may have been deleted since; the frozen copy holds its pages.
SigningDocuments
The documents to sign, in order, in the signing document: the frozen PDF (GET .../signing-document) with the offer's pages first and the documents behind them. Render each document's pages from it.
Every field on every document's pages, page numbers as in the signing document. The ones whose role and ordinal match signer are this signer's to fill, one by one; show the others, do not fill them. There is always at least one signature field for the buyer.
Whose link this is.
signing_dateThe date of signing as the signed PDF will carry it, already formatted in the document's language (e.g. 28.10.2026 or Oct 28, 2026): today's date (UTC) until this signer signs, the day they signed after. Show it in the date fields; the server stamps it, it is never sent.
What this signer entered, once they have signed.
SigningEnvelopeCancelledPayload
cancelled_atCancellation instant.
envelope_idorganization_idreasonWhy the envelope was withdrawn. SUPERSEDED means a newer envelope replaced it.
subject_idsubject_kindworkspace_idSigningEnvelopeCompletedPayload
completed_atCompletion instant.
envelope_idorganization_idprovidersigner_countsubject_idsubject_kinddocument_sha256Digest of the presented bytes. Absent on older envelopes that did not keep the presented document.
workspace_idSigningEnvelopeExpiredPayload
envelope_idexpired_atExpiry instant.
organization_idsubject_idsubject_kindworkspace_idSigningEnvelopeSentPayload
document_sha256SHA-256 of the bytes presented to the signers. Immutable from this moment.
envelope_idThe envelope that was sent.
organization_idproviderRegistry name of the driving strategy (builtin | yousign | docusign).
sent_atSend instant (billing clock).
signer_countSigners whose signature the envelope waits for.
subject_idThe thing being signed.
subject_kindquote | agreement | customer_document.
expires_atExpiry, when one was set.
workspace_idSigningEnvelopeStatus
SigningField
heightHeight in PDF points.
idThe field's id, unique within the document. The editor mints a uuid; the quote's own acceptance fields are SIGNER.0.name, SIGNER.0.signature and SIGNER.0.date.
kindWhat the signer puts in it. signature: the name they sign with, drawn by the server. initials: derived from the name, editable. date: the day of signing, stamped by the server. text: one line, at most 200 characters. checkbox: ticked or not. name: the acceptance block's Name line, written by the server in upright type (the name they sign with, and their role when the offer asks for it). answer: a line of the details the offer asks for, written by the server in upright type with what the buyer answered to the requirement key names. name and answer are auto only, never placed in the editor.
ordinalWhich signer of that role, from 0. Always 0 for now.
pagePage number, from 1.
roleWhose field it is: SIGNER is the customer, COUNTERSIGNER the person signing for your company (only when the offer is sent with a named countersigner).
Requests also accept the new spelling: each value in lower case (countersigner for COUNTERSIGNER). The listed spelling is deprecated in requests and accepted until 2026-11-30.
widthWidth in PDF points.
xLeft edge in PDF points from the MediaBox's left edge.
yTop edge in PDF points from the MediaBox's TOP edge (y grows downwards).
keyFor an answer field: the acceptance requirement it answers (vat_id, billing_address, shipping_address, custom_field:
labelShown to the signer beside the field. Required for text and checkbox fields.
requiredFor text and checkbox: the signer must fill (tick) it; for an answer: the offer requires the answer. Signature, initials, date and name are always required.
sourceWho placed it: manual, an operator in the editor; auto, the server (the acceptance block's name, signature and date, or the appended signature page's). Auto fields are read-only. Always set on responses; ignored on a save, where every field is manual.
SigningLayout
editableFalse once the quote has been sent: its documents to sign are frozen with it.
The fields placed so far. Empty before the first save.
file_idThe PDF the layout belongs to.
Every page, measured by the server from the file: its MediaBox and CropBox in PDF points. Convert a pointer position to a field's frame with these.
updated_atWhen the layout was last saved; null before the first save. Send it back with a save.
SigningProviderChange
kindWhat the change is about: the name, a switch, the environment, the api_base, a credential or the webhook secret.
afterThe value after the act; absent when there is none. Never stated for a secret.
beforeThe value before the act; absent when there was none. Never stated for a secret.
For the environment: before and after the act.
For enabled and default: the switch before and after the act.
keyFor a credential: its key in the vendor's credential bag (api_key, integration_key, rsa_private_key, …).
For a secret: that it was set, replaced or cleared. Its value is never in the trail.
SigningProviderEnvironmentSides
afterThe environment after the act.
beforeThe environment before the act; absent for a connection the act created.
SigningProviderFlagSides
afterThe switch after the act.
beforeThe switch before the act; absent for a connection the act created.
SigningReminderSentPayload
envelope_idorganization_idreminded_atReminder instant.
reminder_number1-based count of reminders sent for this envelope.
signer_emailsigner_idsigner_localeBCP-47 locale the reminder is composed in.
subject_idsubject_kindexpires_atworkspace_idSigningSignerDeclinedPayload
declined_atRefusal instant.
envelope_idorganization_idreasonThe signer's own words. Mandatory.
signer_emailsigner_idsigner_rolesubject_idsubject_kindworkspace_idSigningSignerSignedPayload
auth_levelHow the signer's identity was established: CLICK | OTP_EMAIL | OTP_SMS | AES | QES.
envelope_idenvelope_statusThe envelope's status AFTER this signature: PARTIALLY_SIGNED or COMPLETED.
organization_idsigned_atSignature instant.
signer_emailsigner_idsigner_roleSIGNER | COUNTERSIGNER.
subject_idsubject_kindworkspace_idSigningSignerViewedPayload
envelope_idorganization_idsigner_emailsigner_idsubject_idsubject_kindviewed_atFirst-open instant.
workspace_idSigningSlot
ordinalWhich signer of that role, from 0.
roleThe signer's role.
SigningTurnReachedPayload
envelope_idorganization_idreached_atInstant the earlier signers finished.
signer_emailsigner_idThe signer whose turn it is now.
signer_roleSIGNER (the counterparty) or COUNTERSIGNER (your organisation).
subject_idsubject_kindquote | agreement | customer_document.
workspace_idSmallBusinessSchemeID
StartMarketplaceCheckoutRequest
return_urlWhere to send the buyer back to after it completes a bank challenge. Omit it if your surface finishes the challenge without leaving the page.
StatementEventPayload
atWhen the statement was finalized.
The previous statement's net where it did not reach the payout threshold, as a money object. Signed.
The statement's net: the carried balance plus the period's movements, as a money object. Signed.
numberThe statement's number, PS-yyyy-nnnnnn. Not a fiscal document number: a statement takes no document series.
period_endThe period's end, exclusive.
period_startThe period's start, inclusive.
seller_customer_idThe customer whose seller role earned it.
statement_idThe statement row.
payout_idThe payout prepared against this statement, absent when the net did not reach the threshold or was not positive.
StatusChangedPayload
changed_atWhen the status changed.
fromThe status before: active, paused or cancelled.
organization_idsubscription_idThe subscription whose status changed.
toThe status after.
workspace_idThe workspace that owns the subscription.
StoppedPayload
customer_idThe customer whose subscription stopped.
organization_idrevisionThe revision that was live at the stop.
stop_reasonWhich of the four endings this was: cancel, withdrawal, term_end or event.
stopped_atThe stop instant.
subscription_idThe subscription that stopped.
change_idThe Change whose firing made this fact; absent when an operator, the buyer or the deal's own clock made it.
reasonFree text describing why it stopped.
workspace_idThe workspace that owns the subscription.
Subscription
How often the billing periods repeat.
created_atcurrencyISO 4217 currency every money field on this subscription is denominated in.
customer_idThe customer this subscription bills.
idWhat a line of this subscription falls back to when neither the line, its phase nor its plan states a value: the track, the cadence and the version change.
organization_idstarted_atInstant the subscription first transitioned to ACTIVE. The zero time while still DRAFT until 2026-11-30; from then on null while DRAFT.
statusLifecycle status: DRAFT, ACTIVE or CANCELLED.
tag_idsThe ids of the tags on the record, in name order. Add include=tags to get the tags themselves.
updated_atWhich lifecycle actions the subscription accepts now. Sent only with include=actions.
Where the billing periods fall, copied onto the subscription when it first went live with a paid phase and never changed afterwards. Absent until then: a draft, or a deal with no paid phase.
What stops this subscription's billing, if anything: a dunning stage, a cut held behind an overdue invoice, windows the pipeline could not price. Sent with include=billing_state on the list, the item read and every write. GET /subscriptions/{id} sends it without the include until 2026-11-30; after that only with include=billing_state.
calendar_originThe instant the billing calendar counts from: every period boundary is a calendar step from it, clamped to month ends. Absent while there is no calendar: a draft, a deal with no paid phase, or a trial waiting for the event that ends it.
cancellation_reasonWhy the subscription was cancelled, as its stop recorded it: USER_REQUEST (an operator or the customer), DUNNING_TERMINAL (the dunning ladder's last step) or AGREEMENT_TERM_ENDED (its last phase ended with then = stop). Absent until it is cancelled.
cancelled_atInstant the subscription was cancelled; null unless cancelled.
checkout_link_idThe checkout link whose public checkout created this subscription. Absent for a subscription created any other way. It keeps naming the link after the link is deleted.
Values for the org's configured custom fields on this subscription.
descriptionInternal operator-facing description; not shown to buyers. Read in the request's language like name until 2026-11-30.
display_nameHuman name for this subscription: "
What the live revision says now: the revision in force, the billing period, the next cut, when the deal starts, whether it renews, how it tracks its catalog and what it bills per month. Sent only with include=live, and only once a revision has been published.
name, description and public_description in the language of the request's Accept-Language header. Sent only with include=localized; with it, name, description and public_description are the stored text.
Arbitrary caller-supplied key/value pairs.
nameInternal operator-facing subscription name. Until 2026-11-30 the list and the item read answer it in the language of the Accept-Language header unless the request names include=localized; from then on it is always the stored text, and the translation is under localized.
on_early_stopThe deal's own early-stop term: what a stop inside a billing period paid in advance does with the unused part (no_credit keeps it billed, credit_unused credits it on the closing invoice). Absent: the deal states none and its plan version's default applies, else no_credit.
payment_terms_daysNet payment window in days for this subscription's invoices; null inherits the org default.
pending_checkout_session_idProvider checkout session that will activate a DRAFT; null otherwise.
plan_idPlan this subscription is based on; null for a product-direct subscription (plan-or-product XOR).
product_idProduct this subscription bills directly; null for a plan-based subscription (plan-or-product XOR).
public_descriptionBuyer-facing description shown in checkout and the customer portal. Read in the request's language like name until 2026-11-30.
referenceShort human id, unique within the workspace and stable for the subscription's life (e.g. SUB-000123). Minted at creation from the workspace's own counter, never reissued, and matched by the list endpoint's ?search. Not a key: a sandbox and the live workspace may both hold SUB-000001, so it never appears in a URL.
The live revision and the open draft, as references. Sent only with include=revisions.
The cancellation planned for a later instant (POST /subscriptions/{id}/cancel with when at or period_end), while it is pending. Sent only with include=scheduled_cancellation; absent when none is planned.
start_atScheduled activation instant for a DRAFT whose start is dated.
The tags on the record, in name order. Sent without include=tags until 2026-11-30; after that only with include=tags.
Locale-keyed overrides for name, description and public_description.
allowed_transitionsStatus values the subscription may legally transition to from its current status. Deprecated: use actions (include=actions) instead. Removed on 2026-11-30.
Annual recurring revenue, twelve times mrr; null when nothing recurs. Deprecated: use 12 × live.mrr (include=live) instead. Removed on 2026-11-30.
auto_renewWhether the subscription runs on past its last phase. Derived from that phase's end rule (then=open → true, then=stop → false); authored on the revision, not set here. Deprecated: use live.auto_renew (include=live) instead. Removed on 2026-11-30.
The current billing period, half-open. Absent when there is none now: a draft, a trial before its first paid phase, or a deal with no paid phase. Deprecated: use live.current_period (include=live) instead. Removed on 2026-11-30.
deleted_atAlways null: a deleted subscription is not found. Deprecated: no replacement. Removed on 2026-11-30.
effective_trackWhether the deal follows its catalogue: follow when every line of the phase in force follows its origin, pinned when every line pins, mixed when they differ. DERIVED per line from the value ladder on every read — never the subscription's own default track, which is only the rung a line inherits when it states nothing. Deprecated: use live.effective_track (include=live) instead. Removed on 2026-11-30.
has_draftTrue while a draft revision is open — at most one is; a DRAFT subscription's own first revision counts. While one is open a paused subscription cannot be resumed (SUBSCRIPTION_DRAFT_OPEN): publish or discard the draft first. Deprecated: use revisions.draft (include=revisions) instead. Removed on 2026-11-30.
Monthly recurring revenue, from the phase in force; null when nothing recurs. Deprecated: use live.mrr (include=live) instead. Removed on 2026-11-30.
next_cut_atThe instant of the next cut that bills something — the opening cut that ends a trial, a phase change, or the close of the billing period: when the next invoice is written. Absent when nothing further is due: a draft, a cancelled subscription, a deal with no paid phase. Deprecated: use live.next_cut_at (include=live) instead. Removed on 2026-11-30.
scheduled_startWhen the live revision's first phase opens, present only while that is still ahead of the workspace clock: the subscription is published and nothing of it is in force yet. Absent once the first phase has opened, and on a draft. Deprecated: use live.starts_at (include=live) instead. Removed on 2026-11-30.
SubscriptionActions
activatePOST /subscriptions/{id}/activate: a DRAFT subscription whose first revision is parked as a draft.
cancelPOST /subscriptions/{id}/cancel: every subscription that is not CANCELLED.
edit_draftThe deal can be changed through a draft revision: a draft is open, or one can be opened from the live revision (POST /subscriptions/{id}/revisions/cut). False once the subscription is CANCELLED.
pausePOST /subscriptions/{id}/pause: an ACTIVE subscription.
Fixed dates on the live revision that a pause would move, each later by exactly the paused time. Empty when the deal has none, or when the subscription is not ACTIVE.
resumePOST /subscriptions/{id}/resume: a PAUSED subscription with no open draft (publish or discard the draft first).
SubscriptionActivatedPayload
activated_atWhen the subscription became active.
customer_idThe customer the subscription belongs to.
organization_idsubscription_idThe subscription that was activated.
workspace_idThe workspace that owns the subscription.
SubscriptionApplyForAWhilePayload
fromThe instant the window opens. The phase containing it is split there.
kindWhich rewrite to hold for the while. The same four a permanent transform offers, under the same rung rule.
subscription_idThe subscription to change. Same id as the Change's subject.
allowance_expiry_periodsAfter how many periods carried allowance expires.
allowance_included^-?\d+(\.\d+)?$For attribute=allowance: the included quantity.
allowance_rolloverWhether unused allowance carries into the next period.
allowance_rollover_max^-?\d+(\.\d+)?$A cap on what carries.
attributeThe line attribute being written. Required for set_value and reset_value; implied by set_track.
cadence_eventFor cadence_kind on_event.
cadence_kindFor attribute=cadence: how often the line bills inside its phase. How long it bills is the phases' answer.
exit_fee^-?\d+(\.\d+)?$An early-termination fee, in major units of the subscription's currency.
exit_gateWhat the rule does to a cancellation inside its notice.
exit_not_before_positionThe committed-to phase's position, 0-based.
exit_not_before_subscription_idFor a co-terminated deal: the other subscription that owns the phase committed to. Omit for this one.
exit_notice_countFor set_exit: how much notice a cancellation must give.
exit_notice_unitThe unit of the notice period.
for_countHow long the change holds, counted from the 'from' instant. Give this with for_unit, or give until instead.
for_unitThe unit of for_count.
Which lines the rewrite acts on. Ignored by set_exit, which is phase-level.
price_amount^-?\d+(\.\d+)?$For price_kind list or agreed, in major units of the subscription's currency. free is zero by definition.
price_basisFor price_kind agreed: whether price_amount is net (exclusive) or already contains the tax (inclusive). Omit to take the basis of the catalog price the line resolves to.
price_kindFor attribute=price.
quantity^-?\d+(\.\d+)?$For attribute=quantity.
reasonWhy the change was made; shown on the revision's timeline.
timingFor attribute=timing: in_advance or in_arrears each period, or phase_in_advance — the whole phase at its opening, on a recurring, unmetered line of a phase with an end date or a fixed length.
trackFor attribute=track, and the value set_track writes.
untilThe instant the change stops holding. Give this, or for_count and for_unit.
version_changeFor attribute=version_change: when a line that follows the catalog moves to a newer version — immediate_prorate, next_period or at_phase_change.
SubscriptionBillingState
Windows the pipeline could not price, oldest first. Each is retried with a growing wait and cleared by the first attempt that bills it.
overdue_invoicesHow many of the subscription's invoices are overdue on the workspace's clock. While any is, its cuts are held: no further invoice is written until they are paid.
dunning_sinceWhen it reached that stage.
dunning_stageThe stage the dunning ladder raised the subscription to. Absent when no dunning episode stands.
held_sinceWhen the owed cut was first held — behind an overdue invoice — or refused by the pipeline. Absent when nothing is held.
retry_atWhen the held cut is next attempted.
SubscriptionBlockedWindow
attemptsHow many times the window has been refused.
codeThe refusal's stable token, e.g. PRICE_UNAVAILABLE, TAX_RULE_UNAVAILABLE, FX_UNAVAILABLE.
detailThe sentence the refusal came with.
first_blocked_atWhen the window was first refused.
next_attempt_atWhen it is next attempted.
The window, half-open.
period_endEnd of the window, exclusive. Deprecated: use period.end instead. Removed on 2026-11-30.
period_startStart of the window. Deprecated: use period.start instead. Removed on 2026-11-30.
SubscriptionCadence
countHow many units one billing period spans (3 with month bills quarterly).
unitThe calendar unit: week, month or year.
SubscriptionCancelledPayload
cancelled_atWhen the subscription was cancelled — the stop instant.
customer_idThe customer the subscription belongs to.
organization_idsubscription_idThe subscription that was cancelled.
change_idThe Change whose firing made this fact; absent when an operator, the buyer or the deal's own clock made it.
reasonWhy the subscription was cancelled: USER_REQUEST (an operator or the customer), DUNNING_TERMINAL (the dunning ladder's last step) or AGREEMENT_TERM_ENDED (the deal's last phase ended with then = stop).
workspace_idThe workspace that owns the subscription.
SubscriptionCreatedPayload
How often the billing periods repeat.
created_atcustomer_idThe customer the subscription belongs to.
organization_idstatusThe subscription status at creation: always DRAFT, until revision 1 is published.
subscription_idThe subscription that was created.
plan_idThe plan revision 1 was drafted from; absent when it was drafted without one.
plan_versionThe plan version revision 1 was drafted from; absent with plan_id.
workspace_idThe workspace that owns the subscription.
SubscriptionDefaultsChange
kindWhat the change is about: the track policy or the version change.
For the track policy: before the act and after it.
For the version change: before the act and after it.
SubscriptionDunningEnteredPayload
customer_idThe customer the subscription belongs to.
organization_idstageThe dunning stage on entry (always WARNED).
subscription_idThe subscription that entered dunning.
timestampWhen dunning was entered.
invoice_idThe unpaid invoice that triggered dunning, when known.
workspace_idThe workspace that owns the subscription.
SubscriptionDunningStageChangedPayload
customer_idThe customer the subscription belongs to.
organization_idprevious_stageThe dunning stage before the change.
reasonWhy the stage changed: escalated is the dunning ladder advancing a step; written_off is the episode ending unpaid because the subscription's last debt was written off — the subscription leaves dunning, nothing is recovered and a suspended customer stays suspended.
subscription_idThe subscription whose dunning stage changed.
timestampWhen the stage changed.
new_stageThe dunning stage after the change (e.g. GRACED, SUSPENDED); absent when the episode ended unpaid (reason written_off).
workspace_idThe workspace that owns the subscription.
SubscriptionLine
Where the line was pre-filled from.
positionThe line's index in the phase; how a value-write addresses it.
product_idThe product this line bills.
Exactly what this phase's line says, keyed by attribute. Absent means inherited.
allowed_timingsOn a draft: every timing a write may state on this line — per period in advance and in arrears, and phase_in_advance only where the write would accept it (a recurring, unmetered line of a phase with an end date or a fixed length; it prepays that phase alone and is never carried to a later one). Absent on a revision that is not a draft.
What the line bills each time it is invoiced, computed on the server from the resolved quantity, allowance and price above — the arithmetic the quote document's amount column states. Absent on a superseded phase and where no amount could be computed.
The catalog price row the resolver chose for this line — the same resolution its Price cell and amount came from: its ladder in its own currency, and whether it is converted into the deal's. Absent when no catalog price resolves, and on a superseded phase.
governing_versionThe version of the line's origin (plan or product) the line bills at the phase's start: the origin's own for a pinned line, the version in force at its anchor for a following one (never older than the origin). The resolved values are that version's. Absent where the catalog could not say.
price_keyThe keyed price inside the product.
The product the line bills: its id, name and status. Sent only with include=phases.lines.product.
Set when the plan version that governs the line no longer carries its product: the line keeps billing the last plan version that did, and is never ended or re-priced silently.
Every attribute after the ladder walk, in a fixed order. With include=phases.lines.resolution, which also adds catalog_price, governing_version, version_switches, product_dropped and allowed_timings. Sent without include=phases.lines.resolution until 2026-11-30; after that only with it.
What the line bills in this phase and until when, at the read's instant: the schedule oracle's facts. Absent on a superseded phase, on a leading free phase (the trial bills nothing), and where the schedule could not be read.
Every instant inside the phase at which this line, following its catalog, moves to another version, in time order, with the new version's list price. Absent for a pinned line and for a following line nothing moves inside the phase.
SubscriptionLineDefaults
The default billing cadence.
trackThe default track; absent means no default.
version_changeThe default version change of a following line that states none and whose plan states none. Absent: no default, and such a line moves at the next billing period.
SubscriptionLive
auto_renewWhether the subscription runs on past its last phase: true when the last phase never ends (then=open), false when it stops.
The live revision.
The current billing period, half-open. Absent when there is none now: a trial before its first paid phase, or a deal with no paid phase.
effective_trackWhether the deal follows its catalog: follow when every line of the phase in force follows its origin, pinned when every line pins, mixed when they differ. Derived per line from the value ladder, never the subscription's own default track (line_defaults.track). Absent when there is nothing to resolve.
Monthly recurring revenue of the phase in force. Absent when nothing recurs: a trial, a phase that only charges once.
next_cut_atThe instant of the next cut that bills something — the opening cut that ends a trial, a phase change, or the close of the billing period: when the next invoice is written. Absent when nothing further is due: a cancelled subscription, a deal with no paid phase.
starts_atWhen the live revision's first phase opens. Later than now while the deal is published and nothing of it is in force yet. Absent while the first phase waits on an event.
SubscriptionLocalized
descriptionThe internal description in the caller's language.
nameThe subscription name in the caller's language.
public_descriptionThe buyer-facing description in the caller's language.
SubscriptionPausedPayload
customer_idThe customer the subscription belongs to.
organization_idpaused_atWhen the subscription was paused.
subscription_idThe subscription that was paused.
change_idThe Change whose firing made this fact; absent when an operator, the buyer or the deal's own clock made it.
reasonFree text the operator gave for the pause; empty when none was given.
workspace_idThe workspace that owns the subscription.
SubscriptionPaymentFailedPayload
customer_idThe customer the subscription belongs to.
invoice_idThe invoice whose payment failed.
organization_idsubscription_idThe subscription whose payment failed.
timestampWhen the payment failed.
workspace_idThe workspace that owns the subscription.
SubscriptionPhase
continuesTrue when this phase is the rest of the phase before it, as a split or a cut left it: a line whose version_change is at_phase_change keeps its version across this boundary. The whole-draft write (PUT /subscriptions/{id}/revisions/draft) takes it back as it reads.
The closing rule.
Notice, gate, fee and commitment.
positionThe phase's position in the revision, 0-based.
The opening rule.
thenWhat follows the phase.
event_measured_fromWhere this phase's event end is measured from, when the phase is the later part of a divided phase that ends on an event: the original phase's start. The event counts from there and fires as it would have without the division. Absent when the event is measured from this phase's own start, and on every phase that does not end on an event. Read-only: a split or a cut records it.
One entry per product billed in this window, with include=phases.lines. Sent without include=phases.lines until 2026-11-30; after that only with include=phases.lines.
reasonWhy the phase exists.
The phase's line amounts added up by kind, computed on the server: what each billing period invoices, the one-time charges, the prepaid lines, and how many lines no total can count. Absent on a superseded phase. With include=phases.totals; sent without it until 2026-11-30.
The materialised window; absent for a superseded phase.
supersededTrue for a phase a later cut replaced; kept so the history stays readable, and taking no part in time or resolution. Deprecated: use superseded_phases (include=superseded_phases) instead. Removed on 2026-11-30.
SubscriptionRecoveredPayload
customer_idThe customer the subscription belongs to.
invoice_idThe invoice whose payment cleared the recovery.
organization_idrecovered_fromThe dunning stage the subscription recovered from.
subscription_idThe subscription that recovered from dunning.
timestampWhen the subscription recovered.
workspace_idThe workspace that owns the subscription.
SubscriptionRenewalUpcomingPayload
customer_idThe customer the subscription belongs to.
occurred_atWhen the notice fired.
organization_idrenews_atWhen the committed term renews; the term-end the notice was scheduled for.
subscription_idThe subscription whose committed term is approaching renewal.
item_idThe subscription item whose term is renewing, when the notice is about one.
plan_nameThe subscription's plan name at notice time, when it has a plan.
workspace_idThe workspace that owns the subscription.
SubscriptionResumedPayload
customer_idThe customer the subscription belongs to.
organization_idresumed_atWhen the subscription was resumed.
subscription_idThe subscription that was resumed.
change_idThe Change whose firing made this fact; absent when an operator, the buyer or the deal's own clock made it.
reasonFree text the operator gave for the resume; empty when none was given.
workspace_idThe workspace that owns the subscription.
SubscriptionRevision
currencyThe deal's currency: every amount in this revision is in it.
idThe revision's own id.
numberThe revision's number, 1-based.
statusExactly one revision is live; earlier ones are superseded; at most one draft is open.
subscription_idThe subscription the revision belongs to.
cut_atThe revision's freeze boundary: phases opened before it are history. A cut stamps the instant it cuts at; a draft opened without one stamps the instant it was opened, so this is not where the deal was divided (split_at is). Absent on a first revision.
next_boundaryThe earliest known window edge strictly after the read's clock, with include=phases. Absent when every remaining edge is an unfired event or a never end.
The phases, in position order, with include=phases. Until 2026-11-30 the active phases are followed by the phases this revision superseded, unless the request names include=superseded_phases; from then on phases always holds the active ones only and the superseded ones are under superseded_phases. Sent without include=phases until 2026-11-30 on every operation but the list; after that only with include=phases.
published_atWhen the revision went live. Absent on a draft.
Who published the revision — the same actor the audit trail names. Absent on a draft and on a revision published before publishers were recorded.
reasonWhy the revision exists, in the words of the person who made it.
split_atThe instant at which this revision divides a phase of the revision before it: where the deal was cut. Absent when it divides none, and on a first revision.
The phases this revision superseded, kept for history: they take no part in time or resolution and carry no window. Sent only with include=superseded_phases.
Why the system made the revision, when it did: a code with its parameters, for the reader to render in their language. Absent on a revision a person made.
active_countHow many of the phases are not superseded; they are the first entries of phases, in position order. Deprecated: use phases.length (include=phases) instead. Removed on 2026-11-30.
phase_countHow many phases it carries, superseded ones included. Sent on GET /subscriptions/{id}/revisions only. Deprecated: use phases.length + superseded_phases.length instead. Removed on 2026-11-30.
SubscriptionRevisionRefs
The open draft; at most one is open. Absent when none is open.
The revision in force. Absent before the first publish.
SubscriptionRevisionResponse
currencyThe deal's currency. Deprecated: use SubscriptionRevision.currency instead. Removed on 2026-11-30.
Rung 4 of the ladder: what the subscription falls back to. Deprecated: use Subscription.line_defaults instead. Removed on 2026-11-30.
draft_numberThe open draft's number. Absent when no draft is open. Deprecated: use Subscription.revisions.draft.number (include=revisions) instead. Removed on 2026-11-30.
has_draftTrue when a draft revision is open. At most one is. Deprecated: use Subscription.revisions.draft (include=revisions) instead. Removed on 2026-11-30.
live_numberThe live revision's number. Absent before the first publish. Deprecated: use Subscription.revisions.live.number (include=revisions) instead. Removed on 2026-11-30.
Fixed dates on the LIVE revision that a pause would move. Empty when the deal has none, or when the subscription is not active. A pause stretches fixed-date phases too — "pause my 12 months" is what a customer means — so each of these moves later by exactly the paused time. The NEW date is not stated because the pause has no length yet. Deprecated: use Subscription.actions.pause_moves_dates (include=actions) instead. Removed on 2026-11-30.
The scheduled cancellation, if one is pending. Deprecated: use Subscription.scheduled_cancellation instead. Removed on 2026-11-30.
The revision that was read. Deprecated: use data (the answer is the SubscriptionRevision from 2026-11-30) instead. Removed on 2026-11-30.
Every revision of the subscription, in number order, without their phases. Deprecated: use GET /subscriptions/{id}/revisions instead. Removed on 2026-11-30.
statusdraft, active, paused or cancelled. draft is a subscription whose first revision has never been published — nothing bills it and nothing agreed on it is in force. Pause, cancel and resume are status on the subscription, never phases (01 §5). Deprecated: use Subscription.status (GET /subscriptions/{id}) instead. Removed on 2026-11-30.
subscription_idThe subscription this deal belongs to. Deprecated: use revision.subscription_id (SubscriptionRevision.subscription_id) instead. Removed on 2026-11-30.
SubscriptionSearchData
currencycustomer_idThe customer the subscription belongs to.
statusSubscriptionSearchHit
display_namePrimary label shown for the hit in the results list.
entity_typeKind of the matched entity; it names the shape of data.
idIdentifier of the matched entity.
scoreRelevance score from the search engine; higher ranks first.
tag_idsThe ids of the tags on the matched entity. Add include=tags to get the tags themselves.
The owning customer. Sent only with include=customer, and only when the entity has an owning customer.
customer_idOwning customer's id; empty for catalog entities that have no owning customer.
Entity-type-specific payload with the fields needed to render the hit. Sent without include=data until 2026-11-30; after that only with include=data.
referenceThe short per-organization human reference an operator would say out loud: an invoice's or credit note's number, a subscription's SUB-000123, a quote's QUO-2026-000078. Absent for a kind that is named rather than numbered (customer, product, plan, payment, dispute) and for a draft invoice, which has no number until it is finalized.
secondary_textSupporting line shown under the display name (e.g. an invoice number or email).
Tags attached to the matched entity. Sent without include=tags until 2026-11-30; after that only with include=tags.
customer_nameOwning customer's display name; empty for catalog entities. Deprecated: use customer.name (include=customer) instead. Removed on 2026-11-30.
SubscriptionSetDefaultPayload
subscription_idThe subscription to write. Same id as the Change's subject.
payment_terms_daysDays a customer has to pay. Omit to leave it alone.
reasonWhy the defaults were changed; recorded on the audit event.
trackThe default track policy: whether lines that say nothing follow their origin's head. Omit to leave it alone.
version_changeThe default version change: when a following line that states none, on a plan that states none, moves to a newer catalog version — immediate_prorate, next_period or at_phase_change. Omit to leave it alone.
SubscriptionSetStatusPayload
kindstop_at books a cancellation; pause freezes the deal and its phase clocks; resume un-freezes it and shifts the remaining phases by the paused duration.
subscription_idThe subscription to act on. Same id as the Change's subject.
fromFor stop_at: when the cancellation lands. A past instant cancels immediately.
reasonWhy; recorded on the status history row.
SubscriptionStatusPlan
atWhen the transition takes (took) effect.
idThe plan's id.
pendingTrue while it has not been applied.
toThe status it moves to.
applied_atWhen it was applied; absent while it is still pending.
created_atWhen the row was written.
created_byWho planned it.
reasonWhy.
SubscriptionTimeline
clockThe instant the window states were labelled against.
One entry per active phase, in position order.
revisionThe revision the windows were materialised from.
subscription_idThe subscription the timeline belongs to.
next_boundaryThe earliest known window edge strictly after the clock. Absent when every remaining edge is an unfired event or a never end; the event evaluator wakes the system for those.
SubscriptionTimelineEntry
positionThe phase's position, 0-based.
thenWhat follows the phase.
The concrete window.
reasonWhy the phase exists.
SubscriptionTransformPayload
fromThe instant the transform cuts at. The phase containing it is split there and the rewrite reaches that phase from this instant on, and every later phase with it.
kindWhich rewrite to run. set_track is set_value on the track attribute, named separately because "pin" and "follow latest" are what an operator asks for.
subscription_idThe subscription to transform. Same id as the Change's subject.
allowance_expiry_periodsAfter how many periods carried allowance expires.
allowance_included^-?\d+(\.\d+)?$For attribute=allowance: the included quantity.
allowance_rolloverWhether unused allowance carries into the next period.
allowance_rollover_max^-?\d+(\.\d+)?$A cap on what carries.
attributeThe line attribute being written. Required for set_value and reset_value; implied by set_track.
cadence_eventFor cadence_kind on_event.
cadence_kindFor attribute=cadence: how often the line bills inside its phase. How long it bills is the phases' answer.
exit_fee^-?\d+(\.\d+)?$An early-termination fee, in major units of the subscription's currency.
exit_gateWhat the rule does to a cancellation inside its notice.
exit_not_before_positionThe committed-to phase's position, 0-based.
exit_not_before_subscription_idFor a co-terminated deal: the other subscription that owns the phase committed to. Omit for this one.
exit_notice_countFor set_exit: how much notice a cancellation must give.
exit_notice_unitThe unit of the notice period.
Which lines the rewrite acts on. Ignored by set_exit, which is phase-level.
price_amount^-?\d+(\.\d+)?$For price_kind list or agreed, in major units of the subscription's currency. free is zero by definition.
price_basisFor price_kind agreed: whether price_amount is net (exclusive) or already contains the tax (inclusive). Omit to take the basis of the catalog price the line resolves to.
price_kindFor attribute=price.
quantity^-?\d+(\.\d+)?$For attribute=quantity.
timingFor attribute=timing: in_advance or in_arrears each period, or phase_in_advance — the whole phase at its opening, on a recurring, unmetered line of a phase with an end date or a fixed length.
trackFor attribute=track, and the value set_track writes.
version_changeFor attribute=version_change: when a line that follows the catalog moves to a newer version — immediate_prorate at the instant it takes effect, next_period at the next billing period, at_phase_change at the next phase change. A pinned line keeps its version whatever it says.
SupplyType
Requests also accept the new spelling: each value in lower case (domestic for DOMESTIC). The listed spelling is deprecated in requests and accepted until 2026-11-30.
Tag
created_atentity_typeEntity kind this tag applies to: CUSTOMER, SUBSCRIPTION, PRODUCT, PLAN, INVOICE, or CREDIT_NOTE.
idnameDisplay name of the tag, unique per (organization, entity_type).
organization_idstatusactive, or archived: hidden from pickers and kept on the records that carry it. Change it with PATCH /tags/{id}.
updated_atarchived_atWhen the tag was archived; null while active.
colorOptional display color as a #RRGGBB hex string.
descriptionOptional free-text description of the tag's purpose.
usage_countNumber of records carrying this tag. Sent only with include=usage_count.
deleted_atAlways null: a deleted tag is not returned. Deprecated: no replacement. Removed on 2026-11-30.
TagAppliedPayload
entity_identity_typeRequests also accept the new spelling: each value in lower case (credit_note for CREDIT_NOTE). The listed spelling is deprecated in requests and accepted until 2026-11-30.
occurred_atorganization_idtag_idtag_nameTagChange
fieldThe field of the tag: its name, the kind of record it applies to, its description, color, or whether it is archived.
kindWhat happened to the field: set where the tag stated none, changed, or cleared.
What the tag states after the act; absent when it states nothing.
What the tag stated before the act; absent when it stated nothing.
TagDeletedPayload
occurred_atorganization_idtag_iduntaggedHow many records carried the tag when it was deleted, and lost it.
entity_typeThe kind of record the tag applied to.
nameThe tag's name when it was deleted.
TagRef
idIdentifier of the referenced tag.
nameDisplay name of the referenced tag.
TagRemovedPayload
entity_identity_typeRequests also accept the new spelling: each value in lower case (credit_note for CREDIT_NOTE). The listed spelling is deprecated in requests and accepted until 2026-11-30.
occurred_atorganization_idtag_idtag_nameThe tag's name when it was removed.
TagRenamedPayload
new_nameoccurred_atold_nameorganization_idtag_idTaggableEntityType
Requests also accept the new spelling: each value in lower case (credit_note for CREDIT_NOTE). The listed spelling is deprecated in requests and accepted until 2026-11-30.
TaxProfile
The registered address. Its country is the organization's country.
tax_regimeThe VAT posture the organization invoices under.
available_small_business_schemesThe small-business schemes the organization's country offers today. Sent with include=small_business; sent without being asked until 2026-11-30.
The home VAT registration the engine derives from the VAT ID while no registration is declared. Read-only, it has no id; absent once one is declared or without a VAT ID. Sent with include=registrations; sent without being asked until 2026-11-30.
The organization with its names and identifiers. Sent with include=identity.
The registrations the organization holds, newest window first; the same rows GET /organization/tax-profile/registrations pages. Sent with include=registrations; sent without being asked until 2026-11-30.
small_business_crossed_onThe day the threshold was crossed; absent while the scheme still applies. Sent with include=small_business.
small_business_schemeThe declared national small-business exemption; absent when none is declared.
small_business_statusWhere the organization stands today against the declared scheme's thresholds. Sent with include=small_business; sent without being asked until 2026-11-30.
small_business_warningThe reason behind small_business_status, in English; absent when there is nothing to say. Sent with include=small_business.
bank_account_nameThe account holder printed on documents. Deprecated: use GET /organization/payment-details (layered.bank_account_name.value) instead. Removed on 2026-11-30.
bank_bicThe BIC printed on documents. Deprecated: use GET /organization/payment-details (bank_bic) instead. Removed on 2026-11-30.
bank_ibanThe IBAN printed on documents. Deprecated: use GET /organization/payment-details (bank_iban) instead. Removed on 2026-11-30.
invoice_contact_emailThe seller contact's email (EN 16931 BT-43) that applies. Deprecated: use GET /organization/payment-details (layered.invoice_contact_email.value) instead. Removed on 2026-11-30.
invoice_contact_nameThe seller contact (EN 16931 BT-41) that applies. Deprecated: use GET /organization/payment-details (layered.invoice_contact_name.value) instead. Removed on 2026-11-30.
invoice_contact_phoneThe seller contact's phone (EN 16931 BT-42) that applies. Deprecated: use GET /organization/payment-details (layered.invoice_contact_phone.value) instead. Removed on 2026-11-30.
legal_nameThe registered name (legal_name, else name). Deprecated: use Organization.legal_name (null when unset; then Organization.name), or organization with include=identity instead. Removed on 2026-11-30.
peppol_idThe electronic address (EN 16931 BT-34) in scheme:value form; absent when none is set. Deprecated: use Organization.peppol_id, or organization.peppol_id with include=identity instead. Removed on 2026-11-30.
register_courtThe court that keeps the commercial register. Deprecated: use GET /organization/register-facts (register_court) instead. Removed on 2026-11-30.
register_numberThe commercial-register number. Deprecated: use GET /organization/register-facts (register_number) instead. Removed on 2026-11-30.
tax_numberThe national tax number (EN 16931 BT-32), from the organization's identifiers. Deprecated: use Organization.tax_number, or organization.tax_number with include=identity instead. Removed on 2026-11-30.
vat_idThe VAT identification number (EN 16931 BT-31), from the organization's identifiers. Deprecated: use Organization.vat_id, or organization.vat_id with include=identity instead. Removed on 2026-11-30.
TaxRegime
Requests also accept the new spelling: each value in lower case (kleinunternehmer for KLEINUNTERNEHMER). The listed spelling is deprecated in requests and accepted until 2026-11-30.
TaxRegistration
countryISO 3166-1 alpha-2 of the state the registration is held in; for a one-stop shop, the member state of identification.
identifierThe number as issued.
schemeScheme identifier out of the closed set the jurisdiction registry owns, e.g. OSS_UNION, GB_VAT, VOEC.
valid_fromFirst day the registration applies.
evidence_refWhat proves it, as recorded: a VIES check id, an HMRC consultation number, a document id or a note. Absent when none was recorded.
idThe registration's id. Absent on derived_registration, which is not stored.
valid_toLast day it applied; absent while the registration is open-ended.
TaxRule
apply_orderWhere this rule sits in the compound stack. Part of its identity: two rules at different apply orders are two rules and are live at once.
created_atidThe rule's own id. It does not move when the rate does: a version is published under it.
is_compoundWhether the rule's base is the running total of the rules before it in the stack, rather than the line amount.
jurisdiction_countryISO 3166-1 alpha-2 country the rule taxes in. Part of the rule's identity: fixed once the rule has published.
organization_idrate^-?\d+(\.\d+)?$ · requiredThe rate as a fraction: 19% is 0.19.
requires_continuous_coverageWhether a gap in this rule's version chain is refused. Editable on a published rule.
statusThe entity's own state: draft (never published), active (a published version is in force) or archived. A release on the calendar does not change it: see scheduled_versions.
tax_typeThe kind of tax. Part of the rule's identity.
updated_atapplies_to_customer_typesBuyer types the rule is limited to; empty applies to every buyer. Part of the rule's identity.
applies_to_product_categoriesProduct tax categories the rule is limited to; empty applies to every category. Part of the rule's identity.
applies_to_supply_typesSupply types the rule is limited to; empty applies to every supply. Part of the rule's identity.
The rule's live version. Absent before the first publish and after the rule was deleted.
jurisdiction_regionSub-country region, for a regional rule. Part of the rule's identity.
The operator's own key-value notes.
Every version scheduled to publish, in the order they will publish. Their rows are FROZEN — they no longer answer GET /{kind}/{id}/draft — so the entity's working draft is free for immediate changes while they stand. The version numbers are PROVISIONAL: head + rank, recomputed whenever the timeline moves.
head_effective_fromWhen the rule's live version started. Null before the first publish. Deprecated: use effective_from of GET /tax-rules/{id}/versions/{head_version.number} instead. Removed on 2026-11-30.
head_effective_toWhen the rule's live version stops. Null while it is open-ended. Deprecated: use effective_to of GET /tax-rules/{id}/versions/{head_version.number} instead. Removed on 2026-11-30.
is_expiredTrue once the live version's window has closed. A rule that has ended reports status archived. Deprecated: use status instead. Removed on 2026-11-30.
lifecycleDerived entity state: draft, published or archived. It is NEVER 'scheduled' — pending releases live on scheduled_versions, and an entity with one is still whatever it already was and still editable. Deprecated: use status instead. Removed on 2026-11-30.
published_atWhen the version in view was published. Deprecated: use published_at of GET /tax-rules/{id}/versions/{head_version.number} instead. Removed on 2026-11-30.
versionThe number of the version whose values this answer shows. For a working draft it is the number the draft would publish as (GET /tax-rules/{id}/draft answers it too); for an archived rule, the last one that was live. Deprecated: use head_version.number instead. Removed on 2026-11-30.
version_idThe version whose values this answer shows: the head on reads, the working draft on create, PUT and copy. Null for a rule that has never published. Deprecated: use head_version.id instead. Removed on 2026-11-30.
TaxRuleDraftContent
is_compoundWhether this rule's base is the running total of the rules before it in the stack, rather than the line amount.
rate^-?\d+(\.\d+)?$ · requiredThe rate as a fraction: 19% is 0.19.
The operator's own annotation of this version.
TaxRuleRef
apply_orderWhere this rule sits in the compound stack. Part of its identity: two rules at different apply orders are two rules and are live at once.
idThe rule's own id. It does not move when the rate does: a version is published under it.
jurisdiction_countryISO 3166-1 alpha-2 country the rule taxes in. Part of the rule's identity: fixed once the rule has published.
tax_typeThe kind of tax. Part of the rule's identity.
jurisdiction_regionSub-country region, for a regional rule. Part of the rule's identity.
TaxRuleVersionSnapshot
apply_orderWhere this rule sits in the compound stack. Part of the rule's identity: two rules at different apply orders are two rules and are live at once.
archived_reasonbase_version_idThe version this one is built on — the predecessor for a release, the base for a draft.
created_ateffective_fromeffective_toendedTrue when this version carries no rate at all: the rule stops here, and nothing is charged from its effective_from on.
entity_ididis_compoundWhether this version's base is the running total rather than the line amount.
jurisdiction_countryISO 3166-1 alpha-2 country. Part of the rule's identity, so it is the same in every version.
kindThe versioned kind: product, plan, rate_table, price_formula or tax_rule.
originpublished_atrankrate^-?\d+(\.\d+)?$ · requiredThe rate this version charges, as a fraction.
release_namerelease_notescheduled_change_idscheduled_forstatustax_typeVAT, SALES_TAX, GST or CUSTOM. Part of the rule's identity.
versionThe display number, or null while the row is off the chain.
applies_to_customer_typesBuyer types this rule is restricted to; empty is a wildcard. Part of the rule's identity.
applies_to_product_categoriesProduct categories this rule is restricted to; empty is a wildcard. Part of the rule's identity.
applies_to_supply_typesSupply types this rule is restricted to; empty is a wildcard. Part of the rule's identity.
jurisdiction_regionSub-country region, when the rule is a regional one. Part of the rule's identity.
The operator's own annotation of this version.
Who published the version — the same actor the audit trail names. Absent until it is published.
tax_rule_idThe tax rule this version belongs to: the same id as entity_id. Deprecated: use entity_id instead. Removed on 2026-11-30.
TaxType
Requests also accept the new spelling: each value in lower case (custom for CUSTOM). The listed spelling is deprecated in requests and accepted until 2026-11-30.
TemplateBlock
idThe block's key within this template document.
typeThe block's kind.
visibleFalse hides the block without removing it.
hide_onSurfaces this block is not drawn on: print (the PDF) and web (the buyer's page and the portal). Printed templates only. Absent: drawn on both.
propertiesThe block kind's own settings, an object whose fields depend on type.
show_onPage position a repeat-zone block prints on: all (or empty), first, continuation or last. Printed templates only.
Draw this block only when the condition holds. Absent: always drawn.
TemplateChange
kindWhat the change is about: the name, description or status, a document type, a favourite, a part of the document, the content class or the attestation.
afterThe value after the act; absent when there is none.
beforeThe value before the act; absent when there was none.
For the own-similar-products attestation: the switch before and after the act.
keyFor a document type or a favourite: the kind of document (invoice, credit_note, quote, email). For a content change: the part of the document that changed (subject, blocks, repeat_header, repeat_footer, theme, branding, footer).
TemplateChecklist
The rows, in group order: legal, acceptance, document, presets.
countryThe country whose law the legal rows read: the organization's own (its tax profile's legal address). Absent when the organization has none on file or no rule set covers it.
TemplateChecklistRequest
document_typesDocument types the unsaved draft renders; defaults to the stored template's. Read only with template_json.
Unsaved template draft to measure instead of the stored template.
TemplateDocument
Ordered content blocks rendered top to bottom on the document body.
Logo and company-name branding for the document.
Document footer text and page-number toggle.
Colors, fonts, spacing, margins, page size, and the preview's sample currency and locale.
Blocks repeated at the bottom of every page.
Blocks repeated at the top of every page.
schema_versionTemplate document schema version; the current version is 2. The server stamps it on every printed-template save.
Email subject line (email templates only): a plain string, or authored runs plus locale-keyed translations of them.
TemplateFlagSides
afterThe switch after the act.
beforeThe switch before the act; absent for a template the act created.
TestClock
created_atfrozen_atThe instant the sandbox's clock stands at. While the clock is advancing it moves forward step by step towards advancing_to.
idThe test clock.
nameThe clock's name.
statusactive: the clock stands at frozen_at. advancing: an advance is stepping it towards advancing_to. failed: an advance stopped at its run budget at frozen_at, short of advancing_to; advancing again resumes it.
updated_atworkspace_idThe sandbox workspace the clock governs.
advancing_toThe instant the current advance is heading for, or the one a failed advance stopped short of. Absent when the clock is active.
TestClockList
countThe number of test clocks in the list. Deprecated: use the length of test_clocks instead. Removed on 2026-11-30.
TestPaymentSimulation
created_atidoutcomepayment_method_idworkspace_idlast_used_atTestPaymentSimulationList
countThe number of simulations in the list. Deprecated: use the length of simulations instead. Removed on 2026-11-30.
Theme
accent_color^(#([0-9a-fA-F]{3}|[…Accent color (#rgb, #rrggbb or #rrggbbaa); empty inherits the resolved brand.
background_color^(#([0-9a-fA-F]{3}|[…Surface/card fill (#rgb, #rrggbb or #rrggbbaa); empty inherits the resolved brand.
border_color^(#([0-9a-fA-F]{3}|[…Hairline/divider color (#rgb, #rrggbb or #rrggbbaa); empty inherits the resolved brand.
brand_sourceWhere this template's colors/logo come from: 'brand' inherits the org's resolved brand, 'template' freezes the embedded theme. Empty defaults by provenance (system => brand, clone => template).
currency_codeSample ISO 4217 currency used when rendering a preview. Preview-only: a live document is always formatted in its own currency, never this one.
densityVertical spacing scale: compact, cozy or roomy. Absent means cozy.
font_familyFont family name used for the document text.
font_size^-?\d+(\.\d+)?$Base font size in points (pt), greater than zero. Absent: the renderer's default.
line_height^-?\d+(\.\d+)?$Line height as a multiple of the font size, greater than zero. Absent: the renderer's default leading.
localeSample locale used to format labels, numbers and dates when rendering a preview. Preview-only: a live document is always rendered in the reader's language (invoice, then customer, then the organization default), never this one.
Page margins in millimetres. Absent, or a side left out: that side keeps the page default.
monochrome_on_printWhen true, the document renders in grayscale for printing. Omitted on a request means false.
muted_color^(#([0-9a-fA-F]{3}|[…Secondary/label text color (#rgb, #rrggbb or #rrggbbaa); empty inherits the resolved brand.
page_orientationPage orientation. Absent is portrait.
page_sizePaper format. Absent is A4.
text_color^(#([0-9a-fA-F]{3}|[…Body text color (#rgb, #rrggbb or #rrggbbaa); empty inherits the resolved brand.
Threshold
comparatorHow the meter's evaluated value is compared against value: gt, gte, lt, lte, or eq.
nameHuman label for this alert condition.
value^-?\d+(\.\d+)?$ · requiredTarget the meter's evaluation result is compared against to detect a breach.
ThresholdShape
kindThe shape discriminator.
measureWhat is counted towards the threshold, read off the lines AS BILLED and never off post-lane nets.
percent^-?\d+(\.\d+)?$ · requiredThe cut, in (0, 100].
windowThe horizon the measure is counted over.
first_n_periodsn, when the window is first_n_periods.
The spend at which the cut starts, as a money table. For measure=spend only. The entries price named currencies; the default is one currency-less value spent in whatever currency the bill is in, for every currency the entries do not name. An entry always beats the default, at least one of the two is required, and nothing is ever converted. A bill this table answers for in neither way records a currency_mismatch non-firing on every line the scope matched.
threshold_units^-?\d+(\.\d+)?$The unit count at which the cut starts. For measure=units only. A line gets the percent only if the measure BEFORE it already reached this.
Tier
from^-?\d+(\.\d+)?$ · requiredThe rung's lower bound: the previous rung's up_to, 0 for the first.
unit_amount^-?\d+(\.\d+)?$ · requiredWhat one unit (one package, for a package price) costs in this rung.
basisWhat a computed rung's result is: per_unit (a rate per billed unit) or per_band (the band's whole amount). Absent on a static rung.
The price formula the rung evaluates, with the version it is held at.
The formula's default inputs, by name.
formula_policyWhether the rung follows the formula's latest version or is held at the one named.
package_size^-?\d+(\.\d+)?$Units per package, for a package price.
rate_expressionThe rung's rate expression, when it is computed.
up_to^-?\d+(\.\d+)?$The rung's upper bound; absent for the open last rung.
TierBreakdownEntry
amount^-?\d+(\.\d+)?$ · requiredAmount this segment contributes, MAJOR units in the currency of the object that carries this walk.
quantity^-?\d+(\.\d+)?$ · requiredQuantity billed within this segment.
tier_indexIndex of the contributing tier in the price's tier ladder.
unit_price^-?\d+(\.\d+)?$ · requiredRate applied within this segment (per unit; per package under PACKAGE), MAJOR units in the currency of the object that carries this walk.
lower_bound^-?\d+(\.\d+)?$Exclusive lower quantity bound of the segment this step covers; 0 on the first tier. Absent on a subscription preview's walk, whose steps carry no lower bound.
upper_bound^-?\d+(\.\d+)?$Inclusive upper quantity bound of the segment; absent on the open-ended final tier.
TopupWalletRequest
Top-up amount, {value, currency}, in the wallet's currency.
modeHow the money is collected: hosted_checkout (default) answers a checkout URL to share with the customer; off_session charges a saved card now.
payment_method_idThe customer's saved Stripe payment method to charge. Required for mode=off_session.
Transaction
directionidUntil 2026-11-30 this is
kindWhat the row is. payment_attempt is a dunning step, not a movement of money, and is listed only when requested by kind. It is deprecated: kind=payment_attempt is refused after 2026-11-30.
occurred_atraw_idThe uuid of the record the row stands for. Removed on 2026-11-30, when id becomes this uuid.
sourcestatuscustomer_idinvoice_idreferencesubscription_idsummaryA short text for display, for example the payment's purpose or a refund's reason. Sent without include=display until 2026-11-30; after that only with include=display.
wallet_idTransactionKind
TransferWalletFundsRequest
Transfer amount as {value, currency}. currency must equal the SOURCE (path) wallet's currency; the target leg converts via the org's FX rate when currencies differ.
target_wallet_idWallet that receives the transfer; must belong to the same organization as the source wallet.
reasonOptional free-text explanation stored on both ledger legs of the transfer.
TransformMatch
origin_idOnly lines whose origin is this plan or product.
origin_kindOnly lines pre-filled from a plan, or from a product price.
price_keyOnly lines on this keyed price.
product_idOnly lines billing this product.
TranslationFields
descriptionnamepresentation_custom_titlepublic_descriptionUnmeteredMetricKey
event_countEvents observed for this key while it matched no meter. Cumulative and exact — the scan windows never overlap.
first_seen_atTimestamp of the earliest unmetered event counted here.
idlast_seen_atTimestamp of the most recent unmetered event counted here.
metric_keyThe metric_key the events carried. No meter in this workspace has it, so nothing aggregates them.
resolved_atWhen a meter with this metric_key was first seen to exist. Absent means usage is still arriving for no meter. Present means the leak is closed going forward — event_count is then the size of the history that arrived before it was, which may warrant a correction.
resolvedTrue when resolved_at is set. Deprecated: use resolved_at instead. Removed on 2026-11-30.
UnpublishedPlanProductRemoval
product_idProduct still offered by the plan's head version but no longer attached to the plan.
product_nameProduct name as frozen into the plan version snapshot at publish time.
product_version_idProduct version the head plan version pins for this product; null on rows published before plans pinned product versions.
UpdateAccountingIntegrationRequest
configProvider-specific configuration, validated against the provider's settings schema before it is stored.
display_nameHuman-readable name; omitted defaults to the provider's own display name.
statusactive: exports may run against the integration; disabled (the default): they are refused.
is_enabledtrue is status active, false is status disabled. Deprecated: use status instead. Removed on 2026-11-30.
UpdateAudienceRulesRequest
The replacement rule set. A write whose canonical content hash equals the stored one is a NO-OP: no new revision row, no bump, the audience returned unchanged — so the editor may save freely without costing the operator a spurious refused re-fire.
UpdateCheckoutLinkRequest
collect_addressWhether the checkout page asks for a postal address; omitted leaves it.
collect_phoneWhether the checkout page asks for a phone number; omitted leaves it.
collect_vat_idOlder switch for the VAT ID input, used only when vat_id_collection is not set; omitted leaves it.
Replaces the legal consent step; an empty object removes it, omitted leaves it.
coupon_codesWhether the checkout takes a coupon code; omitted leaves it.
currencyCurrency the checkout charges in; null clears it back to the organisation's default, omitted leaves it.
deemed_supplier_regimeThe platform rule under which a platform operator accounts for the tax; empty sets that no rule applies, omitted leaves it.
default_payment_terms_daysPayment terms in days (0 to 365) for the customer a checkout creates; omitted leaves it.
default_preferred_providerPayment provider new customers prefer, for example stripe, gocardless, mollie or kontier_payments; null clears it back to the organization's default, omitted leaves it.
default_wallet_modeWallet mode of the customer a checkout creates; null clears it back to the organization's default, omitted leaves it.
Requests also accept the new spelling: each value in lower case (postpaid for POSTPAID). The listed spelling is deprecated in requests and accepted until 2026-11-30.
metadataFree-form JSON that replaces the stored metadata; omitted leaves it.
nameInternal name; null clears it, omitted leaves it.
Replaces all per-product seat rules; an empty list removes them, omitted leaves them.
statusactive serves the public checkout page, archived stops serving it; omitted leaves it.
success_urlWhere the buyer lands after paying; null clears it, omitted leaves it.
tax_inclusiveWhether the checkout page first shows prices including tax; omitted leaves it.
trial_daysFree trial days the new subscription starts with; omitted leaves it.
vat_id_collectionWhether the checkout page shows the VAT ID input, and whether the buyer must fill it; null clears it back to the organization's setting, omitted leaves it.
UpdateChildMemberRequest
statusactive restores the membership; suspended keeps it and its roles but stops the person from signing in to this organization. Their other organizations are not touched. pending is set by the system only.
UpdateChildOrganizationRequest
edge_kindWhy the organization hangs below yours. Becoming a customer needs a customer in your organization for it. The kind it already has changes nothing.
UpdateClauseRequest
Replaces the whole per-locale body set. Omit to leave it untouched.
countrynameUpdateCompanyProfileRequest
default_currencydefault_localedefault_timezonein_liquidationThe registered address, replaced whole: line1, city, postal_code and country are required whenever it is present. Its country is the organisation's country.
legal_formThe legal form; null clears it.
legal_nameThe registered name; null clears it, and every document then falls back to the name.
main_emailWhere organisation mail lands when no recipient list answers. Required; cannot be cleared.
nameThe name the organisation trades under.
phoneThe organisation's public number; null clears it.
Per default key: what the organizations below may do with it. An omitted entry keeps the key's policy.
register_courtThe court that keeps the register; null clears it.
register_numberThe commercial-register number (EN 16931 BT-30); null clears it.
registered_office_addressThe registered seat, only where it differs from the registered address; null removes it.
When present, REPLACES the whole list: the statutes that require directors to be named are all-or-nothing.
share_capital_currencyISO 4217 currency of share_capital_minor.
share_capital_minorThe share capital in minor units of share_capital_currency; null clears the capital and its currency together.
small_business_schemeThe declared small-business scheme; null withdraws the declaration; omit the field to leave it as it is.
support_emailThe support address; null clears it.
tax_numberThe seller's tax registration number (EN 16931 BT-32); null clears it.
tax_regimeRequests also accept the new spelling: each value in lower case (kleinunternehmer for KLEINUNTERNEHMER). The listed spelling is deprecated in requests and accepted until 2026-11-30.
vat_idThe seller's VAT identification number (EN 16931 BT-31); null clears it.
UpdateCostRequest
Replacement static money value; set at most one of amount or expression.
descriptionNew operator-facing description; null leaves it unchanged.
Replacement formula referencing other costs by key; set at most one of amount or expression.
Free-form operator key/value metadata.
requires_continuous_coverageFlips the continuous-coverage requirement live without touching the billing value; null leaves it unchanged.
save_as_draftRefused. A cost has no draft of its own: it is a child of its product and goes live with that product's next publish (POST /v1/changes, catalog.publish_version).
statusretired takes a released cost out of the catalog: an organization's cost at once, a product's cost at the product's next release (until then active undoes it). A product's cost no release ever carried is refused (409); DELETE removes it. active undoes a removal that has not been released yet: a product's cost goes back into the product's working draft with the head's value, an organization's cost becomes active again. Refused (409) when the product's head does not carry the key. Send status alone; a cost already in the status sent is returned unchanged.
Locale-keyed overrides for the cost's description.
UpdateCustomFieldDefinitionRequest
auditabledefault_valuedescriptiondisplay_nameexpected_versionfield_groupshow_in_tablesort_orderstatusMoves the definition through its lifecycle. archived archives it: it leaves every form and its key is free again, and its stored values stay. Any other status on an archived definition restores it to that status, refused with 409 when a live definition has taken its key since. deprecated keeps the stored values but refuses new ones.
visibilityRequests also accept the new spelling: each value in lower case (internal for INTERNAL). The listed spelling is deprecated in requests and accepted until 2026-11-30.
write_accessRequests also accept the new spelling: each value in lower case (admin_only for ADMIN_ONLY). The listed spelling is deprecated in requests and accepted until 2026-11-30.
UpdateCustomerContactRequest
categoryMove this contact to a different category. It keeps is_primary, so moving a primary into an occupied category takes that category over.
emailMove this contact to a different mailbox.
is_primarytrue addresses this category here, demoting whichever contact held it. false leaves the category with no primary at all, so it falls back to the billing contact.
nameSet the display name; null clears it; omitted leaves it.
UpdateCustomerDeliveryInput
Replacement deliver-to address; when provided, line1, city, postal_code and country are required. Omit to leave unchanged.
location_idNew deliver-to location identifier; null clears it; omit to leave unchanged.
party_nameNew deliver-to party name; null clears it; omit to leave unchanged.
UpdateCustomerEInvoicingInput
peppol_idNew Peppol participant identifier (scheme:value); null clears it.
preferNew e-invoicing switch; null clears it back to following the workspace's rollout audience; omit to leave unchanged.
profileNew standing e-invoice format; null clears it back to inherit. Must name a profile this deployment still offers.
UpdateCustomerRequest
auto_validate_vatPer-request hint: null = auto-validate VAT after update when eligible, false = skip the auto-trigger. Still gated by the workspace and per-customer VAT disable flags.
Replacement billing address; omit to leave unchanged.
Replacement custom-field values; omit to leave unchanged.
Default auto-topup amount as {value, currency}, MAJOR units. Currency should match preferred_currency.
default_auto_topup_enabledNew auto-top-up default for wallets seeded from this customer; omit to leave unchanged.
Default wallet credit limit as {value, currency}, MAJOR units. Currency should match preferred_currency.
Default low-balance threshold as {value, currency}, MAJOR units. Currency should match preferred_currency.
Default wallet max balance as {value, currency}, MAJOR units. Currency should match preferred_currency.
Default wallet max single-credit as {value, currency}, MAJOR units. Currency should match preferred_currency.
The delivery_* fields grouped as Customer.delivery reads them, with the same omit, null and value rules. Send a fact here or in its flat field, not both.
Replacement EN 16931 BG-15 deliver-to address; when provided, line1, city, postal_code and country are required. Omit to leave unchanged.
delivery_location_idNew EN 16931 BT-71 deliver-to location identifier; null clears it.
delivery_party_nameNew EN 16931 BT-70 deliver-to party name; null clears it.
disabled_providersReplacement list of disabled payment provider ids; omit to leave unchanged, empty array to clear.
einvoice_profileNew standing per-customer e-invoice format (e.g. XRECHNUNG_3_0_UBL); null clears it back to inherit. Must name a profile this deployment still offers - see GET /v1/e-invoicing/profiles.
peppol_id, prefer_einvoice and einvoice_profile grouped as Customer.einvoicing reads them, with the same omit, null and value rules. Send a fact here or in its flat field, not both.
emailNew primary contact email; omit to leave unchanged, cannot be set empty.
external_idNew caller-assigned external identifier; null clears it; omit to leave unchanged.
Replacement list of the customer's registered identifiers as {kind, country, value}; omit to leave unchanged, empty array to clear.
localeNew locale (one of en, de, fr, es, it, pt, nl, ja); omit to leave unchanged. A customer always has one, so it cannot be set empty.
Replacement free-form key/value metadata; omit to leave unchanged.
nameNew display / legal name; omit to leave unchanged, cannot be set empty.
payment_terms_daysNew net payment terms in days (0-365); omit to leave unchanged.
peppol_idNew Peppol participant identifier (scheme:value); null clears it.
prefer_einvoiceNew per-customer e-invoicing switch; null clears it back to inheriting the workspace's rollout audience; omit to leave unchanged.
preferred_currencyNew ISO 4217 billing currency; must be allowed by the workspace billing-currency policy.
preferred_providerNew preferred payment provider id; null clears it (organization default routing). Must be a known provider and must not appear in disabled_providers.
statusNew lifecycle status: active, suspended, or churned; omit to leave unchanged.
The vat_validation_* fields grouped as Customer.vat_validation reads them. Send a fact here or in its flat field, not both.
vat_validation_disabledWhen true, disables automatic VAT-ID validation; requires vat_validation_disabled_reason.
vat_validation_disabled_reasonReason recorded when vat_validation_disabled is true; required in that case; null clears it.
The default_* fields grouped as Customer.wallet_defaults reads them. Send a fact here or in its flat field, not both.
UpdateCustomerVATValidationInput
disabledWhen true, disables automatic VAT-ID validation; requires disabled_reason.
disabled_reasonReason recorded when disabled is true; required in that case; null clears it.
UpdateDocumentTemplateRequest
expected_versionOptimistic-concurrency token: the version you last read. REQUIRED on this resource; a stale value answers 409 CONFLICT.
descriptionNew description; omit to leave unchanged.
document_typesNew set of renderable document types; omit to leave unchanged.
nameNew template name; omit to leave unchanged.
statusNew status (active or archived); omit to leave unchanged.
Replacement template document; omit to leave unchanged.
UpdateEInvoiceFindingRequest
statusresolved marks the finding resolved. A resolved finding cannot be reopened.
resolution_notesWhy the finding was resolved or overridden.
UpdateEInvoiceProfileRuleRequest
profile_idReplacement e-invoice profile for this rule. Must be one this deployment offers.
UpdateFXOverrideRequest
rate^-?\d+(\.\d+)?$Switch to manual-rate mode with this rate, greater than zero (clears snapshot_date).
reasonNew free-text note; null removes it; omitted leaves it unchanged.
snapshot_dateSwitch to snapshot-pin mode with this date (clears rate).
valid_fromNew activation start; omitted leaves it unchanged.
valid_toNew activation end; null makes the override open-ended; omitted leaves it unchanged.
UpdateFileRequest
categoryWhat the document is. Changes only on a document you uploaded, shared or not, while no signing step holds it, to a type its record offers and its file fits.
visibilityinternal keeps the document on the operator surfaces; shared also shows it to the customer.
UpdateIdentityProviderRequest
display_nameenabledhide_on_loginprovider_idUpdateInvoiceHeaderRequest
buyer_referenceBuyer's routing reference (Leitweg-ID / PO number); null clears it, omitted leaves it. Draft only.
delivery_dateDate of supply (BT-72); null clears it, omitted leaves it. Draft only.
due_datePayment due date; null clears it, omitted leaves it. The ONE header field that may still change after issue, because a renegotiated payment term is a commercial decision and not a restatement of the supply.
localeRendering locale; null clears it so the organization's default applies, omitted leaves it. Draft only.
The caller's own key/value pairs; an object REPLACES the whole map, null clears it, omitted leaves it. Draft only. At most 50 keys, each at most 40 characters; a value is at most 500 bytes as JSON. The keys supplier_iban, supplier_bic, payment_terms, supplier_register_court, supplier_register_number, refund_iban and refund_method are refused: they are the organization's legal facts, set in its profile. A template binding invoice.metadata.
UpdateKeySetRequest
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.
UpdateMarketplaceSellerRequest
mandate_agreed_atWhen the seller agreed to let this organization sell on its behalf; null withdraws the agreement; omit to leave it alone.
payout_accountWhere the seller is paid; null removes the account; omit it to leave it alone.
The seller's tax posture, replaced as a whole. Omit to leave it alone. A change applies to future sales only — a sale already agreed keeps the posture it was agreed under.
self_billing_agreed_atWhen the seller agreed to let this organization raise documents in its name; null withdraws the agreement; omit to leave it alone.
series_code_prefixA new document-number prefix. Omit to leave it alone.
UpdateMemberRequest
statusactive lets the member sign in again; suspended keeps the membership and its roles but signs the member out. pending is set by the system only.
UpdateMemberRolesRequest
assignRoles to add, each by its uuid (Role.subject_id) or, for a built-in role, by its name (Role.id today).
unassignRoles to remove, each by its uuid (Role.subject_id) or, for a built-in role, by its name (Role.id today).
UpdateMeterRequest
New derived-meter formula; {} clears it (the meter becomes a plain one); omitted leaves it unchanged. null is indistinguishable from omission on the wire and also leaves it unchanged.
dedup_key_pathNew dedup JSON-path; null clears it (dedup falls back to the event's idempotency_key); omitted leaves it unchanged.
dimensionsNew group-by dimension fields; omitted leaves them unchanged.
event_schemaNew event JSON-Schema; null clears it (ingest validation off); omitted leaves it unchanged. Must compile as a JSON Schema.
New event predicate tree; omitted leaves it unchanged.
functionNew aggregation function; omitted leaves it unchanged.
late_event_policyNew late-event policy; null clears it back to unset; omitted leaves it unchanged.
Requests also accept the new spelling: each value in lower case (clamp_to_period for CLAMP_TO_PERIOD). The listed spelling is deprecated in requests and accepted until 2026-11-30.
nameNew human-readable label; omitted leaves it unchanged.
quantity_roundingNew billable-quantity rounding (increment + mode); null clears it back to exact; omitted leaves it unchanged. A snapshot field: saving it republishes every consuming product, like a function or filter edit.
New alert thresholds; [] clears them; omitted leaves them unchanged.
unique_by_fieldNew distinct-count event field; null clears it; omitted leaves it unchanged.
unit_currency_fieldNew unit-currency event field; null clears it; omitted leaves it unchanged.
unit_labelNew unit display label; null clears it; omitted leaves it unchanged.
value_fieldNew aggregated event field; null clears it (a COUNT or UNIQUE_COUNT has none); omitted leaves it unchanged.
New aggregation window; omitted leaves it unchanged.
UpdateOrganizationContactRequest
categoryMove this row to a different category. It keeps is_primary, so moving a primary into an occupied category takes that category over.
emailThe mailbox, when the resulting kind is email.
is_primarytrue addresses this category here, demoting whichever row held it. false leaves the category with no primary at all, so it falls back to the operations list and then to the organisation's main address.
kindChange which arm this row carries. Supply the matching arm field with it.
nameSet the label; null clears it; omitted leaves it.
roleThe organisation role, when the resulting kind is role.
user_idThe member, when the resulting kind is user.
UpdateOrganizationRequest
company_size_tierdefault_currencydefault_date_formatiso, us or eu; null clears it back to inherit, omitted leaves it.
default_first_day_of_weekmonday, sunday or saturday; null clears it back to inherit, omitted leaves it.
default_languageDefault document language; null clears it back to inherit, omitted leaves it.
default_localedefault_number_format"1,234.56", "1.234,56" or "1 234,56"; null clears it back to inherit, omitted leaves it.
default_timezonelegal_namemain_emailnamephonesales_audienceb2b, b2c or both; null clears it, omitted leaves it.
signup_emailsupport_emailtax_inclusivevat_id_collectionhidden, optional or required; null clears it, omitted leaves it.
UpdateOrganizationSettingsRequest
Money settings, by key.
confirm_empty_descendantsSave even though a narrowed allow-list (allowed identity providers, allowed email domains) leaves an organization below allowing nothing. Without it such a save is refused with SETTING_ALLOWS_NOTHING_BELOW, which names those organizations.
levelThe rung these values land on. Omitted from a live workspace, each key lands on its own highest rung — the organization — so the value inherits down the tree and into every workspace. Omitted from a sandbox, it lands on that sandbox: an experiment never changes the live workspace. State 'workspace' for an override that governs only the workspace you are in; 'organization' is refused from a sandbox.
List settings, by key. An empty array sets the empty list, which is a value — to stop deciding a key here, DELETE it instead.
String, int and bool settings, by key, each in its wire spelling.
UpdatePaymentDetailsRequest
bank_account_nameAccount holder name; null clears it.
bank_bicBIC / SWIFT code; null clears it.
bank_ibanIBAN, spaces allowed; null clears it.
invoice_contact_emailEN 16931 BT-43; null clears it.
invoice_contact_nameEN 16931 BT-41; null clears it.
invoice_contact_phoneEN 16931 BT-42; null clears it.
UpdatePaymentGatewayRequest
configdisplay_nameThe name the gateway is shown under.
is_defaultWhen true, payments go through this gateway when more than one could take them.
statusactive: the gateway takes payments; disabled: it takes none until it is active again.
supported_currenciesis_enabledtrue is status active, false is status disabled. Deprecated: use status instead. Removed on 2026-11-30.
UpdatePaymentMethodRequest
is_default_for_auto_payWhen true, make this the method that pays the customer's invoices automatically, replacing the previous one; omit to leave unchanged.
Replacement free-form key/value metadata; omit to leave unchanged.
providerNew payment provider; omit to leave unchanged.
provider_idNew provider-side identifier; omit to leave unchanged.
statusNew lifecycle status: active, expired, or removed; omit to leave unchanged.
is_defaultWhen true, promote this method to the customer's default; omit to leave unchanged. Deprecated: use is_default_for_auto_pay instead. Removed on 2026-11-30.
UpdatePlanProductRequest
allowance_setSet true to rewrite the included allowance from the seven fields below; false leaves the stored allowance untouched.
cadenceNew charge for the line: every_period or once, on the first paid invoice. Omit to leave it unchanged.
default_quantityQuantity a new subscription seeds for this product; null clears it (seeds 1). Only applied when quantity_band_set is true.
included_quantity^-?\d+(\.\d+)?$Quantity bundled into the base price before per-unit billing applies; null clears it. Only applied when allowance_set is true.
max_quantityHighest quantity a buyer may pick; null clears it (no plan-level ceiling). Only applied when quantity_band_set is true.
min_quantityLowest quantity a buyer may pick; null clears it (1). Only applied when quantity_band_set is true.
product_track_modeNew version-tracking mode for the membership: latest (auto-follow the product head) or pinned.
quantity_band_setSet true to rewrite the quantity band from the three fields below; false leaves the stored band untouched.
refresh_countHow often the included quantity comes back, paired with refresh_unit; null (with refresh_unit) means one whole-period pool. Only applied when allowance_set is true.
refresh_unitUnit for the refresh cadence: day, week, month, year, billing_cycle, or never (granted once). Only applied when allowance_set is true.
rollover_enabledWhen true, unused included allowance carries forward. Only applied when allowance_set is true.
rollover_expiry_periodsPeriods after which carried-forward allowance expires; null means it never expires. Only applied when allowance_set is true.
rollover_max^-?\d+(\.\d+)?$Cap on the accumulated carried-forward bank; null means uncapped, 0 means nothing carries. Only applied when allowance_set is true.
unit_limit^-?\d+(\.\d+)?$Lifetime ceiling on units drawn; only valid beside a never-refreshing included quantity. Only applied when allowance_set is true.
UpdatePlanRequest
billing_alignmentThe alignment override of the plan's next version: start, day_of_month with its day (1-28), or last_day. Absent leaves it unchanged; null clears it, so the organization's default applies. It goes live with the next publish; a subscription already published keeps the alignment it copied.
Org-defined custom field values for this plan.
default_early_stopThe early-stop term of the plan's next version: no_credit or credit_unused. Absent leaves it unchanged; null clears it, so no_credit applies. It goes live with the next publish.
default_timingThe default timing of the plan's next version: in_advance or in_arrears. Absent leaves it unchanged; null clears it, so such a line is invoiced in arrears. It goes live with the next publish.
default_version_changeThe default version change of the plan's next version: immediate_prorate, next_period or at_phase_change. Absent leaves it unchanged; null clears it, so the subscription's default, else next_period, applies. It goes live with the next publish.
descriptionNew internal description; null leaves it unchanged.
expected_versionOptimistic-concurrency token: send the version you last read and a stale value answers 409 CONFLICT. Omitted: the update applies unconditionally (last write wins).
external_idNew external identifier; null leaves it unchanged.
Free-form operator key/value metadata.
nameNew internal plan name; null leaves it unchanged.
price_cadence_unitNew price cadence (week, month or year); null leaves it unchanged. Changing it re-scopes which billing intervals existing and future subscriptions may use — it does NOT restate any price amount.
public_descriptionNew buyer-facing description; null leaves it unchanged.
statusLifecycle move: archived retires the plan (terminal); null leaves it unchanged. Going live, now or at a date, is not a status write: it is POST /v1/changes with operation catalog.publish_version.
Locale-keyed overrides for name, description and public_description.
UpdatePortalSettingsRequest
allow_add_payment_methodallow_cancel_subscriptionallow_invoice_payallow_wallet_topupshow_billing_settingsshow_invoicesshow_payment_methodsshow_subscriptionsshow_walletsUpdatePriceFormulaRequest
expressionNew expression; omit to leave unchanged.
nameNew display name; omit to leave unchanged.
Replacement variable declarations; omit to leave unchanged.
UpdatePriceRequest
country_codeCountry scope to set on the price; omit to leave unchanged.
currencyThe price's new currency (ISO 4217); omit to keep it. Every amount of the price is in it, including those this body leaves unchanged.
Arbitrary dimension key/values that further scope the price.
display_nameCustomer-facing label for this price / price_key.
list_price^-?\d+(\.\d+)?$List price in the price's currency; omit to leave unchanged.
Free-form key/value metadata to attach to the price.
price_basisWhether the price's amounts are net of tax (exclusive) or already contain it (inclusive); omit to leave unchanged.
statusretired takes a released price out of the catalog: the working draft removes it and it leaves billing at the owner's next release (until then active undoes it). A price no release ever carried is refused (409); DELETE removes it. active undoes a removal that has not been released yet: the price goes back into the working draft with the head's values; refused (409) when the head does not carry it. Send status alone; a price already in the status sent is returned unchanged.
Replacement tier ladder; null carries the previous version's tiers forward, an empty array clears them. Its amounts are in the price's currency.
UpdateProductMeterBindingRequest
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. null 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.
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.
statusactive restores a binding that was removed and not yet released: it is added back to the product's working draft, on the same id and with the current version's config. Refused (409) when the current version does not carry the binding. Sent alone, without the other fields.
UpdateProductRequest
Org-defined custom field values for this product.
descriptionNew internal description; null leaves it unchanged.
expected_versionOptimistic-concurrency token: send the version you last read and a stale value answers 409 CONFLICT. Omitted: the update applies unconditionally (last write wins).
external_idNew external identifier; null clears it; omitted leaves it unchanged.
invoiceable_standaloneFlips the manual-invoice picker eligibility; null leaves it unchanged.
key_set_excluded_keysReplacement excluded-keys list; null leaves it unchanged, non-null replaces the list.
key_set_idLinks the product to a key set; null clears the link (and its exclusions); omitted leaves it unchanged. Changing or clearing it once the product has prices or subscription lines is rejected.
Free-form operator key/value metadata.
nameNew internal product name; null leaves it unchanged.
Replaces the product's whole invoice-presentation rung; omit to leave it unchanged. Null fields inside it inherit the organisation's setting.
pricing_modelNew pricing model (VOLUME, STAIRCASE, PACKAGE); null leaves it unchanged.
public_descriptionNew buyer-facing description; null leaves it unchanged.
quantity_adjustableFlips whether the buyer picks the quantity; null leaves it unchanged, and setting true on a METERED product is rejected.
requires_product_idsReplacement product-dependency set for this product.
statusLifecycle move: archived retires the product (terminal); null leaves it unchanged. Going live, now or at a date, is not a status write: it is POST /v1/changes with operation catalog.publish_version.
supply_natureNew supply nature (GOODS, SERVICES, DIGITAL_SERVICES); null clears the declaration back to undeclared; omitted leaves it unchanged.
Requests also accept the new spelling: each value in lower case (digital_services for DIGITAL_SERVICES). The listed spelling is deprecated in requests and accepted until 2026-11-30.
tax_categoryNew tax category (DEFAULT, REDUCED, REDUCED_2, SUPER_REDUCED, PARKING, ZERO, EXEMPT); null leaves it unchanged.
Locale-keyed overrides for name, description and public_description.
unit_labelNew singular unit label; null leaves it unchanged. quantity_source itself is immutable post-create.
UpdatePromotionRedemptionRequest
statusleft ends a held redemption as the customer's own opt-out, which is re-joinable, and lifts the block on a revoked one, so the customer may redeem again (they are not re-admitted). To block, use POST /promotions/{id}/redemptions/{rid}/revoke.
UpdateProviderSettingsRequest
disabled_providersReplacement list of payment provider ids that must not be used to charge this customer; omit to leave unchanged, empty array to clear.
preferred_providerNew preferred payment provider id tried first when charging; null clears it (organization default routing), omit to leave unchanged. Must be a known provider and must not appear in disabled_providers.
UpdateQuotePresetRequest
activecontract_termsdefault_expiry_daysdescriptiondocument_template_idPin a document template; null unpins it so quotes fall back to the organization's quote default; omitted leaves the current pin.
namenote_for_customerplan_idplan_versionReplace what quotes from this preset demand of the buyer, destinations included. Send [] to require none.
require_payment_methodrequire_shippingrequire_vat_idUpdateQuoteRequest
Replace the quote's clause snapshots. Send [] to carry none. Omit to leave them untouched.
contract_termscopy_contact_idsReplace the contacts copied (only beside signer_contact_id). Send [] to copy nobody.
countersignWhat your organisation does once the buyer has signed: none, seal or person. Editable until the quote is sent.
countersign_orderWhen a person countersignature is made: after_buyer or before_send.
countersigner_user_idThe member who signs for your organisation under person (must hold quotes.sign_for_org); null: anyone who may.
coupon_codePromotion coupon the buyer redeems; null removes it.
custom_fieldsdocument_template_idPin the document template this quote renders through; null unpins it so the quote falls back to the organization's quote default; omitted leaves the current pin.
excluded_clause_idsAuto-attached clause ids to leave off this quote. Each id must be one the catalog attaches to this offer, and must not also appear in clauses.
expires_atPublic-link expiry; null removes it.
localeLanguage the offer is for (en, de, fr, es, it, pt, nl, ja); null inherits the customer's locale, then the organization default.
note_for_customerowner_user_idreminder_every_daysRemind the buyer every N days; null: no automatic reminders (clears reminder_max too).
reminder_maxAt most this many reminders; null: the provider's own cap.
Replace what the buyer must answer before signing, destinations included. Send [] to require none.
require_payment_methodrequire_shippingrequire_signer_roleAsk the signer for their role or title before signing.
require_vat_idsignature_modeHow the buyer signs: BASIC or OTP. EXTERNAL is refused. On a sent offer a change replaces the buyer's signing link; a change to OTP is refused (409 QUOTE_OTP_UNDELIVERABLE) while the code cannot be mailed.
signer_contact_idThe customer contact who signs; null goes back to the customer's Quotes & contracts contacts and drops the copies.
starts_atMove the offer's start date; null drops it so the offer begins on signature.
titlevalue_overridePin the quote's headline value to this major-unit decimal; null unpins it so the value tracks the revisions again.
UpdateRateTableRequest
default_value^-?\d+(\.\d+)?$New default value, a formula operand; omit to leave unchanged.
descriptionNew description; omit to leave unchanged.
nameNew display name; omit to leave unchanged.
on_missing_keyNew missing-key behaviour ('error', 'zero', or 'default_value'); omit to leave unchanged.
requires_continuous_coverageNew continuous-coverage requirement; omit to leave unchanged.
statusarchived archives the table and every version of it: lookups keep the rates for the periods before the archive, and nothing can publish to it again. Refused (409) while a live price reads the table. Archiving is final. Send status alone; a table that has never been published is deleted with DELETE instead.
UpdateReconciliationFindingRequest
statusresolved: the finding needs nothing more. The next reconciliation pass does not reopen it, even if the provider still shows the discrepancy.
noteWhy the finding needs nothing more — what was checked or put right. Recorded on the audit trail with the resolution.
UpdateSubscriptionEnvelopeRequest
Values for the org's configured subscription custom fields; replaces the stored map. Omitted leaves it unchanged.
descriptionNew internal operator-facing description; omitted leaves it unchanged.
nameNew internal operator-facing name; omitted leaves it unchanged.
on_early_stopThe deal's own early-stop term: no_credit keeps the unused part of an advance-billed period billed, credit_unused credits it on the closing invoice. null clears it, so each phase's plans' defaults apply. Omitted leaves it unchanged. Accepted only while the subscription has never been activated; afterwards SUBSCRIPTION_EARLY_STOP_FIXED (409).
Locale-keyed overrides for name, description and public_description; replaces the stored map. Omitted leaves it unchanged.
UpdateTagRequest
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.
UpdateTaxRegistrationRequest
evidence_refWhat proves it; null clears it.
identifierThe number as issued.
valid_toLast day the registration applies; setting it ends the registration, null makes it open-ended again. It cannot be before valid_from.
UpdateTaxRuleRequest
applies_to_customer_typesapplies_to_product_categoriesapplies_to_supply_typesapply_orderis_compoundjurisdiction_countryjurisdiction_regionrate^-?\d+(\.\d+)?$Decimal number encoded as a string to preserve precision.
requires_continuous_coveragestatusarchived ends the rule now: it bills nothing from this instant, and its history stays. Send it alone. A rule that is already archived is answered unchanged. Publishing is POST /changes with catalog.publish_version.
tax_typeRequests also accept the new spelling: each value in lower case (custom for CUSTOM). The listed spelling is deprecated in requests and accepted until 2026-11-30.
UpdateUsageWithoutLineRequest
statuswaived closes an open finding without billing it. open and resolved cannot be requested: a finding opens when usage arrives, and resolved is set when the deal turns out to cover the usage.
UpdateVerificationRequest
reasonWhy the operator overrode the verification's status. Required; kept on the record and in the audit trail.
statusNew verification status: one of pending, verified, expired, failed, manual, or maintenance. Required, and must be a permitted transition from the current status.
UpdateWalletRequest
auto_topup_amountAmount charged on each auto-topup, {value, currency}; null removes it; omit to leave unchanged.
auto_topup_enabledWhether the wallet auto-tops-up when it drops below low_balance_threshold.
auto_topup_payment_method_idA saved payment method of the wallet's own customer to name for auto-topups; another customer's method is refused. Omit to leave unchanged.
credit_limitHow far a POSTPAID wallet may go negative, {value, currency}; 0 extends no credit, null removes the limit (unbounded overdraft). Omit to leave unchanged.
is_primarytrue makes this wallet its customer's primary wallet and demotes the previous one; false is refused (promote another wallet instead). Omit to leave unchanged.
low_balance_thresholdBalance at which a low-balance event (and auto-topup, if enabled) fires, {value, currency}; null removes the threshold; omit to leave unchanged.
max_balanceCap on the cash balance, {value, currency}; null removes the cap; omit to leave unchanged.
max_single_creditLargest amount a single cash credit may add, {value, currency}; null removes the limit; omit to leave unchanged.
UpdateWalletSettingsRequest
auto_topup_amountAmount charged on each auto-topup, {value, currency}; null removes it; omit to leave unchanged.
auto_topup_enabledWhether the wallet auto-tops-up when it drops below low_balance_threshold.
auto_topup_payment_method_idA saved payment method of the wallet's own customer to name for auto-topups; another customer's method is refused. Omit to leave unchanged.
credit_limitHow far a POSTPAID wallet may go negative, {value, currency}; 0 extends no credit, null removes the limit (unbounded overdraft). Omit to leave unchanged.
low_balance_thresholdBalance at which a low-balance event (and auto-topup, if enabled) fires, {value, currency}; null removes the threshold; omit to leave unchanged.
max_balanceCap on the cash balance, {value, currency}; null removes the cap; omit to leave unchanged.
max_single_creditLargest amount a single cash credit may add, {value, currency}; null removes the limit; omit to leave unchanged.
UpdateWebhookEndpointRequest
descriptionNew description; null clears it; omitted leaves it unchanged.
event_typessecret_idstatusurlUpdateWorkspaceCurrencyRequest
billing_enabledNew billing-enabled setting; omitted leaves it unchanged. At least one of the two fields must be supplied.
catalog_enabledNew catalog-enabled setting; omitted leaves it unchanged. At least one of the two fields must be supplied.
UpdatedPaymentGateway
configProvider-specific credential document. Stripe: api_key (required), stripe_account_id, webhook_secret, api_base. GoCardless: access_token, webhook_secret. Secret values are masked on every read.
created_atdisplay_nameThe name the gateway is shown under.
idis_defaultWhether payments go through this gateway when more than one could take them; at most one gateway per workspace.
modelive when the credential moves real money, test when it reaches the provider's test environment. Read from the credential, never set.
organization_idproviderThe payment provider, e.g. stripe or gocardless (GET /payment-gateways/catalog lists them).
statusactive: the gateway takes payments; disabled: it takes none until it is active again.
supported_currenciesThe currencies this gateway charges, a subset of what its provider can charge.
updated_atworkspace_idThe workspace the gateway charges in: a sandbox workspace holds only test credentials.
last_verified_atWhen the credential was last checked against the provider (POST /payment-gateways/{id}/verify). Absent when it was never checked, also right after the credential was replaced.
last_verify_detailWhat the last check found. Never contains the credential.
last_verify_okWhether the provider accepted the credential at the last check.
Key-value data stored with the gateway.
is_enabledtrue when status is active. Deprecated: use status instead. Removed on 2026-11-30.
updatedAlways true. Deprecated: no replacement. Removed on 2026-11-30.
UpsertKeySetEntriesRequest
The keys to upsert; each existing key is overwritten and new keys are added.
UsageAggregate
bucketWidth of each bucket.
group_byThe grouping the series follow: none (one series, total), metric_key, product, price_key or dim:
metricWhat each bucket reports: count fills rows[].totals, sum_quantity fills rows[].sum_totals.
The window the series covers: timestamp.gte to timestamp.lt of the request.
One row per bucket, oldest first, empty buckets included.
seriesThe series names, highest volume first. With top set, the rest are folded into Other.
sinceStart of the window, included. Deprecated: use period.start instead. Removed on 2026-11-30.
untilEnd of the window, not included. Deprecated: use period.end instead. Removed on 2026-11-30.
UsageEvent
customer_idCustomer that consumed the metric.
ididempotency_keyKey that dedupes replays of the same event.
ingested_atServer-side instant the event was accepted; distinct from timestamp.
metric_keyMetric this event records usage for.
organization_idproduct_idMetered product the event is billed under.
quantity^-?\d+(\.\d+)?$ · requiredNumber of metric units this event records.
subscription_idSubscription the usage is charged against.
timestampWhen the usage occurred (when the unit was consumed).
Named dimension values used to select the price tier.
Caller-supplied wholesale cost (COGS) fed to cost-plus price formulas, {value, currency}; absent when the event carried none.
Arbitrary caller-supplied key/value annotations on the event.
price_keyPrice key selected for keyed products; null uses the default price.
Named numeric variables bound into the price formula at finalize time.
wallet_currencyISO 4217 currency pinning the event to a specific wallet at finalize; null uses the customer's preferred-currency cascade.
external_cost_amount^-?\d+(\.\d+)?$Caller-supplied wholesale cost (COGS) fed to cost-plus price formulas, major units. Deprecated: use external_cost.value instead. Removed on 2026-11-30.
external_cost_currencyISO 4217 currency of external_cost_amount. Deprecated: use external_cost.currency instead. Removed on 2026-11-30.
UsageEventBillingAtom
atom_idThe invoice atom: one product over one time segment at one price key.
document_idThe invoice the atom is on. include=document adds the invoice's number and status as document.
The time segment the atom prices.
verdictbilled: the atom's meter, under the atom's own product version and period, counts the event. undetermined: the meter could not be asked; shown as such, never guessed.
The invoice the atom is on. Sent with include=document.
line_idThe invoice line the atom prints under.
reasonWhy the atom's meter could not be asked; set only on an undetermined atom.
document_numberAbsent on a draft. Deprecated: use document.number (include=document) instead. Removed on 2026-11-30.
document_statusThe invoice's status. Deprecated: use document.status (include=document) instead. Removed on 2026-11-30.
period_endEnd of the time segment the atom prices, not included. Deprecated: use period.end instead. Removed on 2026-11-30.
period_startStart of the time segment the atom prices, included. Deprecated: use period.start instead. Removed on 2026-11-30.
UsageSummary
entity_identity_typetotal_referrersversionlatest_invoice_reflifecycleUsageTotal
metric_keyThe metric the usage was reported for.
price_keyThe price key the usage carried; empty when it carried none.
product_idThe product the usage was reported under.
quantity^-?\d+(\.\d+)?$ · requiredThe sum of the events' quantities.
UsageWithoutLine
event_countThe events no line bills, exact.
first_seen_atTimestamp of the earliest event counted.
idlast_seen_atTimestamp of the latest event counted.
price_keyThe price key the events carried; empty when they carried none.
product_idThe product the events were reported under.
quantity^-?\d+(\.\d+)?$ · requiredThe quantity those events reported.
reasonWhy no line bills it: the subscription does not exist in this workspace, the deal has no line for the product or for the key, the line is not in force when the usage happened, or the product bills a stated quantity.
statusopen: unbilled and not closed. resolved: a draft cut before the events turned out to cover them. waived: an operator closed it without billing it.
subscription_idThe subscription the events named.
covered_fromWhen a line for this key starts after the events counted here, e.g. the renegotiation that added it. Usage from then on is billed; the events counted here are not.
resolved_atWhen the deal was found to cover the events.
waived_atWhen an operator closed it without billing it.
Who waived it, as the audit trail names an actor.
stateThe same value as status. Deprecated: use status instead. Removed on 2026-11-30.
UsageWithoutLineReason
UserRef
emailThe person's email address.
idnameThe person's name. Absent when the user has not set one: show the email.
ValidationRules
max_lengthmax_valuemin_lengthmin_valueregex_messageregex_patternrequiredunique_per_orgVerifactuDeclaration
capabilitiesArt. 13's «tipología, composición y funcionalidades» of the system. Spanish.
generated_atWhen this declaration was produced.
limitationsWhat this system does NOT do, stated in the declaration itself. Omitting them would make the declaration a false one, which LGT art. 201 bis fines at EUR 150,000 per system per financial year.
producer_nameThe producer's name (nombre o razón social).
producer_tax_idThe producer's tax id (NIF).
provisionsThe provisions the declaration asserts compliance with (LGT art. 29.2.j, RD 1007/2023, Orden HAC/1177/2024). Spanish.
system_versionThe SIF version this declaration is about. Art. 13 makes the declaration per-version, so this is read from the running binary's build info and is never a stored constant.
textThe declaración responsable itself, in Spanish. It is a statement to a Spanish authority under a Spanish regulation; a translated one is a different document, so this string is rendered verbatim whatever the reader's locale.
producer_addressThe producer's address; absent when not configured.
system_built_atWhen the running build was made; absent when the build does not say.
system_nameThe name of the invoicing system; absent when not configured.
system_revisionThe exact build (VCS revision), so that «which version produced this record» has an answer no release process can blur.
Verification
check_typeCategory of check performed; VAT is the only one.
created_atcustomer_idCustomer this verification record belongs to.
idorganization_idproviderSource that produced the result, e.g. an external provider name or one of the internal markers MANUAL_OVERRIDE, MAINTENANCE_DEFERRED, DOMESTIC_SKIP.
statusCurrent verification status: pending, verified, expired, failed, manual, or maintenance.
updated_atverification_typeProvider-specific verification subtype label carried through to the provider call and expiry handling.
actor_idUser who set the current status via a manual override; null for automated results.
expires_atWhen the verified result expires and must be re-checked; null when it does not expire.
last_checked_atWhen the check was last run against the provider; null if never run.
provider_referenceProvider's own reference identifier for this check; null when the provider returned none.
reasonHuman-readable explanation for the current status, e.g. a manual-override or failure reason.
result_payloadRaw provider response payload retained for audit; null when none was stored. Sent without include=provenance until 2026-11-30; after that only with include=provenance.
verified_atWhen the verification last succeeded; null while not yet verified.
VersionBillingTermsChange
kindThe change's kind, which names its shape.
Where the billing periods fall.
What a stop does with the unused part of an advance-billed period.
When a line is invoiced unless the deal says otherwise.
When a following line moves to a newer version unless the deal says otherwise.
The billing period the plan's prices are authored for.
VersionBindingChange
Which binding.
kindThe change's kind, which names its shape.
The meter, when the binding moved to another.
The binding's extra filters, as canonical JSON.
The formula variable it feeds.
What the meter's value is used for.
VersionCostChange
Which cost.
kindThe change's kind, which names its shape.
The fixed amount.
The currency, when it changed.
The amount's expression, when it is computed.
Where the value came from: the product's own cost or the organization's.
VersionDiff
Every cell that differs, in canonical (child kind, child key, field) order.
fromThe version compared FROM.
toThe version compared TO.
VersionEventPayload
entity_idThe entity whose timeline moved.
kindWhich catalog kind.
occurred_atWhen it was recorded.
organization_idoriginmanual (an operator published it), scheduled_release (a dated release fired) or cascade (published because something it follows did).
version_idThe catalog version this is about.
What caused a cascade: kind version, meter or cost, with its id.
change_idThe catalog.publish_version Change behind a scheduled release.
effective_fromWhen the version takes effect: the instant it went live for a publish, the instant it is due for a schedule or a reschedule. Absent on a cancel.
entity_nameThe entity's display name when the event was written. Absent for a kind without one (a tax rule).
For a cascade that followed a version: that version and its entity.
previous_versionThe number of the version this one replaces in the chain. Absent on a first version.
previous_version_idThe id of the version this one replaces in the chain.
Who published the version: the operator, the API key, or the system for a cascade. Present on a publish.
release_nameThe release label the operator gave the version.
release_noteThe release note the operator gave the version.
versionThe version number; absent for a row that has left the chain.
was_scheduled_forFor a cancel: the instant the release was due before it was cancelled.
workspace_idThe workspace that owns the entity.
VersionLabelChange
kindWhich release label changed: the version's name or its note.
afterThe label after it; absent when it was cleared.
beforeThe label before the edit; absent when the version had none.
VersionMeterChange
kindThe change's kind, which names its shape.
Which meter.
The composition, as canonical JSON.
The event filter, as canonical JSON.
The aggregation.
The meter's key.
The billable quantity's rounding increment.
The billable quantity's rounding mode.
The field a unique count counts.
The event field aggregated.
The aggregation window, as canonical JSON.
VersionPriceChange
kindThe change's kind, which names its shape.
Which price.
The country, when it changed.
The currency, when it changed.
The custom dimensions, when they changed.
The price's display name.
Whether the price is a set price.
The list price.
Metadata entries that differ, by key.
Whether the amounts are net of tax (exclusive) or already contain it (inclusive). On an added or removed price, stated only when it is inclusive.
The price key, when it changed.
The product the price belongs to: on a plan, the product it prices; in the diff of one edit of a product (an audit row), that product. Absent on a product's own version diff.
The whole ladder on each side, when any rung differs.
On a plan: from when the price applies.
On a plan: until when the price applies.
VersionProductChange
kindThe change's kind, which names its shape.
Which product, with the version the plan carries (the TO version's when the product is in it).
The quantity included in the price.
How often the plan bills the product: every period, or once at the start.
The quantity a new line starts at.
The product version the plan carries.
The quantity band.
How often the allowance comes back.
Whether unused allowance rolls over.
After how many periods rolled-over allowance expires.
The most that rolls over.
Whether the plan follows the product's latest version or holds the one it carries.
The most units a line may consume.
VersionPublishImpact
entity_identity_typelive_readersConsumers reading this entity's live head, which therefore move as soon as the publish lands.
pinnableWhether any consumer can hold this entity's version. False for tax rules, which are dated rather than pinned.
republishes_consumersEntities that will be republished as a direct, synchronous consequence of this publish. Non-zero only where publishing fans out across the catalog.
total_referrersversionlifecycleVersionRateTableChange
kindThe change's kind, which names its shape.
Which rate table.
Whether the product follows the table's latest version or holds the one named.
The rate table version the product reads.
VersionRef
idThe version's id.
statusThe version's lifecycle status.
numberThe version's display number; absent while it is a draft.
VersionReleaseLabelsInputBody
release_nameNew name; null clears it. Absent leaves it unchanged.
release_noteNew note; null clears it. Absent leaves it unchanged.
VersionSwitch
atThe instant the line bills the new version from.
changesWhat the switch changes for the line: price (the list price), quantity (the default quantity, when the line does not state one), allowance (the included allowance, when the line does not state one). Empty when the new version bills the line the same.
from_versionThe version of the line's origin (plan or product) it bills before the switch.
to_versionThe version it bills from the switch on.
version_changeWhy the switch falls where it does: immediate_prorate at the instant the version takes effect, next_period at the start of the next billing period, at_phase_change at the next phase change.
included^-?\d+(\.\d+)?$The included allowance from the switch on, when the switch changes it.
price^-?\d+(\.\d+)?$The list price the new version states for the line, in the deal's currency. Absent when the catalog states none; a price the deal agrees is unaffected by any switch.
quantity^-?\d+(\.\d+)?$The line's quantity from the switch on, when the switch changes it.
Via
kindHow the actor came to be acting here: structural (an admin of an organization above), delegated (a grant someone wrote) or portal (a customer, through a customer-portal session).
delegation_idThe grant the right came from. Absent for a structural right, which is computed from the tree.
organization_idThe organization the actor acted from, always above the one this event belongs to. Absent for portal, which no organization stands behind.
organization_nameThe acting organization's display name, resolved server-side. Empty when it could not be resolved.
Wallet
How the wallet tops itself up when its balance drops below limits.low_balance_threshold.
The customer's own money held in the wallet (top-ups, payments, refunds), {value, currency}. The only balance a payment draws on: debits, hold captures and invoice settlement all take cash.
created_atcurrencyISO 4217 currency this wallet is denominated in; a wallet holds exactly one currency, and every amount it reports or accepts is in it.
customer_idCustomer this wallet belongs to; there is one wallet per (customer, currency).
Cash reserved by pending holds, {value, currency}; not spendable. Available = cash_balance − held_balance.
idis_primaryTrue for the customer's default wallet, used by flows that do not pin a specific currency.
The wallet's limits.
modePREPAID wallets only spend available funds; POSTPAID wallets may run negative up to credit_limit.
organization_idupdated_atPrice-reduction credit granted to the customer (goodwill, welcome credit, a make-good): the lots that still hold something, one per grant with what it still holds, its expiry and its reason. Not money the customer owns: no debit, hold or settlement spends it. Each invoice drafted for the customer draws the live lots in the invoice's currency before tax, and the invoice names each lot's reason on the discount it gives. Sent without include=discount_lots until 2026-11-30; after that only with include=discount_lots. Every lot, spent ones too, is listed at GET /wallets/{id}/discount-lots.
Arbitrary caller-supplied key/value annotations on the wallet.
workspace_idWorkspace that owns this wallet.
Amount charged on each auto-topup. Deprecated: use auto_topup.amount instead. Removed on 2026-11-30.
auto_topup_enabledWhether the wallet automatically tops up when its balance drops below low_balance_threshold. Deprecated: use auto_topup.enabled instead. Removed on 2026-11-30.
auto_topup_payment_method_idThe customer's saved payment method named for auto-topups; absent when none was named. Deprecated: use auto_topup.payment_method_id instead. Removed on 2026-11-30.
How far a POSTPAID wallet may go negative on spend. Null means unlimited credit (no floor); 0 extends no credit at all. Deprecated: use limits.credit_limit instead. Removed on 2026-11-30.
Balance at which a low-balance event (and auto-topup, if enabled) fires. Deprecated: use limits.low_balance_threshold instead. Removed on 2026-11-30.
Cap on the cash balance; credits that would exceed it are rejected. Null = no cap. Deprecated: use limits.max_balance instead. Removed on 2026-11-30.
Largest amount a single cash credit may add. Null = no per-credit cap. Deprecated: use limits.max_single_credit instead. Removed on 2026-11-30.
WalletApplyToInvoicePayload
The amount due to be settled from the wallet, as a money object.
currencyThe invoice currency, ISO-4217.
customer_idThe customer billed on the invoice.
finalized_atWhen the invoice was finalized and wallet application requested.
invoice_idThe invoice wallet funds were applied to.
organization_idsubscription_idThe subscription that drove the invoice, when subscription-billed.
workspace_idThe workspace that owns the invoice.
WalletAutoTopup
enabledWhether the wallet automatically tops up when its balance drops below limits.low_balance_threshold.
Amount charged on each auto-topup.
payment_method_idThe customer's saved payment method named for auto-topups; absent when none was named.
WalletAutoTopupTriggeredPayload
The wallet balance that tripped the threshold, as a money object.
customer_idThe customer who owns the wallet.
The configured low-balance threshold, as a money object.
wallet_idThe wallet whose auto top-up triggered.
The configured top-up amount, as a money object, when set.
WalletCustody
Price-reduction credit forfeited on expiry in the window, {value, currency}.
Customer money currently held and not yet spent — a liability, not revenue, {value, currency}.
Unapplied credit-note remainders returned to customers' balances in the window: customer money we hold again, a liability like a top-up, though nothing was received in the window, {value, currency}.
Price-reduction credit invoices drew in the window, net of discarded drafts — a discount, not revenue, {value, currency}.
Price-reduction credit the discount lots still hold, not yet drawn by an invoice or expired; carries no liability, {value, currency}.
The reporting window, half-open: start included, end not.
Customer money returned in the window; decreases what we owe, {value, currency}.
Cash portion of spending in the window — revenue earned, {value, currency}.
Customer money received in the window; increases what we owe, {value, currency}.
unclassified_rowsLedger rows still unclassified (pre-split history); when non-zero the period figures exclude them.
WalletHold
Amount reserved by this hold, {value, currency}; excluded from the wallet's available balance while PENDING.
created_atexpires_atWhen the wallet auto-releases the hold if it has not been captured.
idorganization_idreasonFree-text explanation of what the hold reserves for.
statusLifecycle state: PENDING, CAPTURED, VOIDED, or EXPIRED.
wallet_idWallet whose available cash this hold reserves against; the hold is in the wallet's currency.
Amount actually captured when the hold settled, {value, currency}; null until capture and may be less than amount on a partial capture.
captured_atWhen the hold was captured; null unless status is CAPTURED.
exchange_rate_base_leg_idFor a triangulated cross-pair rate, the EUR→source FX snapshot the hold's rate was divided by; null otherwise.
exchange_rate_idFX snapshot that supplied the rate this hold was valued at; null when no conversion was applied.
fx_policy_appliedFX timing policy that selected the rate; null when no conversion was applied.
metric_keyMetric key of the usage stream this hold reserves capacity for; null for non-subscription holds.
The record this hold reserves against, as the caller named it; absent when none was named.
reverse_chargeTrue when the captured amount is subject to VAT reverse-charge.
subscription_idSubscription whose usage stream this hold reserves capacity for; null for non-subscription holds like deposits.
tax_rate^-?\d+(\.\d+)?$Tax rate applied at capture, as a decimal fraction (0.19 = 19%).
tax_rule_idTax rule applied when this hold is captured; null for untaxed holds.
voided_atWhen the hold was released (VOIDED) or lapsed (EXPIRED); null otherwise.
The cash this hold reserves, {value, currency}: amount while the hold is PENDING, 0 once it is captured, voided or expired. Read amount and status instead. Deprecated: use amount instead. Removed on 2026-11-30.
reference_idIdentifier of the record this hold reserves against; paired with reference_type. Deprecated: use reference.id instead. Removed on 2026-11-30.
reference_typeType of the record this hold reserves against; paired with reference_id. Deprecated: use reference.type instead. Removed on 2026-11-30.
resolved_atWhen the hold reached a terminal state: captured_at on a CAPTURED hold, voided_at on a VOIDED or EXPIRED one; null while PENDING. Deprecated: use captured_at, voided_at instead. Removed on 2026-11-30.
WalletHoldExpiredPayload
The held amount released on expiry, as a money object.
customer_idThe customer who owns the wallet.
hold_idThe wallet hold that expired.
organization_idreasonWhy the hold was originally placed.
wallet_idThe wallet the hold was placed on.
workspace_idThe workspace that owns the wallet.
WalletHoldReference
idIdentifier of the record.
typeType of the record, as the caller named it.
WalletLimits
How far a POSTPAID wallet may go negative on spend. Null means unlimited credit (no floor); 0 extends no credit at all.
Balance at which a low-balance event (and auto-topup, if enabled) fires.
Cap on the cash balance; credits that would exceed it are refused. Null = no cap. Price-reduction grants are not money held and are not counted.
Largest amount a single cash credit may add. Null = no per-credit cap.
WalletLowBalancePayload
The wallet total balance after the crossing debit, as a money object.
currencyThe wallet currency, ISO-4217.
customer_idThe customer who owns the wallet.
occurred_atWhen the crossing debit was recorded.
organization_idThe configured low-balance threshold, as a money object.
wallet_idThe wallet whose balance crossed below the threshold.
workspace_idThe workspace that owns the wallet.
WalletMode
Requests also accept the new spelling: each value in lower case (postpaid for POSTPAID). The listed spelling is deprecated in requests and accepted until 2026-11-30.
WalletModeSnapshot
The cash balance, as a money object.
currencyThe wallet currency, ISO-4217.
What the wallet's live price-reduction lots still hold, as a money object.
The held (reserved) balance, as a money object.
wallet_idThe wallet this snapshot describes.
The credit limit, as a money object, when set.
WalletPaymentSkippedPayload
The amount that could not be settled from the wallet, as a money object.
currencyThe invoice currency, ISO-4217.
customer_idThe customer billed on the invoice.
invoice_idThe invoice whose wallet payment was skipped.
organization_idreasonWhy wallet payment was skipped (e.g. no_wallet, insufficient_funds, currency_mismatch).
skipped_atWhen wallet payment was skipped.
subscription_idThe subscription that drove the invoice, when subscription-billed.
workspace_idThe workspace that owns the invoice.
WalletPromotionalBalanceExpiredPayload
The price-reduction credit forfeited: what the lot still held, as a money object.
currencyThe lot's currency, ISO-4217 — always the wallet's.
customer_idThe customer who owns the wallet.
expired_atWhen the lot was DUE to expire — not when the sweep observed it, which may be later if the sweep was down.
lot_idThe discount lot that expired; its ledger holds the expiry row.
organization_idwallet_idThe wallet the expired lot belongs to.
workspace_idThe workspace that owns the wallet.
WalletSettingsAmountChangeItem
currencyThe currency both amounts are in: the wallet's.
kindThe change's kind, which names its shape.
after^-?\d+(\.\d+)?$The amount after the write, in the item's currency; absent when it is no longer set.
before^-?\d+(\.\d+)?$The amount before the write, in the item's currency; absent when it was not set.
WalletSettingsFlagChangeItem
kindThe change's kind, which names its shape.
afterWhether the automatic top-up is on after the write.
beforeWhether the automatic top-up was on before the write; absent on a creation.
WalletToppedUpPayload
The amount credited, as a money object.
The wallet's cash balance after the credit, as a money object.
currencyThe wallet currency, ISO-4217.
customer_idThe customer who owns the wallet.
organization_idsourceWhat the money is: PAYMENT (paid at a provider, or the automatic top-up), MANUAL (paid outside the product, recorded by an operator), REFUND (a refund to the balance, naming its credit note), or the source an operator credited it under.
topped_up_atWhen the wallet was credited.
transaction_idThe ledger entry that credited the wallet.
wallet_idThe wallet the act was on.
credit_document_idOn a refund to the balance, the refund's credit note.
reasonThe free text the ledger shows for the credit.
referenceThe reference the credit carries — the provider's payment id for a top-up paid at a provider.
workspace_idThe workspace that owns the wallet.
WalletTopup
modeThe mode the request asked for; it says which of the fields below are set.
client_secretoff_session: the secret the browser hands to the provider's SDK to finish an authentication (status requires_action).
decline_codeoff_session: the card issuer's decline code when the card was declined.
failure_codeoff_session: the provider's failure code when the charge failed.
failure_messageoff_session: the provider's failure message when the charge failed.
next_actionoff_session: the provider's description of the authentication still needed (status requires_action).
payment_intent_idoff_session: the provider's payment the charge created.
session_idhosted_checkout: the payment provider's checkout session.
statusoff_session: where the charge stands. succeeded: the wallet is credited shortly, when the provider confirms; requires_action: the customer must authenticate the payment; failed: see failure_code, failure_message and decline_code.
urlhosted_checkout: the checkout page to send the customer to. The wallet is credited when the customer pays.
stateoff_session: where the charge stands; the same value as status. Deprecated: use status instead. Removed on 2026-11-30.
WalletTransaction
Amount moved by this entry, {value, currency}; positive for CREDIT/DEBIT, signed for ADJUSTMENT.
Wallet cash balance immediately after this entry, {value, currency}. On older entries it also includes the promotional balance, which wallets no longer hold.
Portion of amount that moved the customer's own money (cash balance), {value, currency}.
created_ateffectWhat the movement was economically: SPEND, TOPUP, GRANT, REFUND, BREAKAGE, TRANSFER, ADJUSTMENT, CREDIT_NOTE (a credit note's remainder became the customer's balance: money we hold for them again, none received), or UNCLASSIFIED for rows predating the split.
idorganization_idsourceWhat originated the entry: one of PAYMENT, REFUND, PROMOTION, INVOICE, CHARGE, FEE, MANUAL, TRANSFER, EXPIRY, CREDIT_NOTE. CREDIT_NOTE is a credit note's unapplied remainder returned to the balance when the note was issued, and names the note in credit_document_id. A REFUND credit naming credit_document_id and no dispute is a refund to the balance, naming its credit note. A REFUND row naming dispute_id answers a chargeback: a debit is its claw-back (the provider returned the money a credit note had put in the balance, so the balance gives it up) or, naming dunning_case_id, a recovery that pays the dunning case for what the claw-back could not take, taken from the top-up named in top_up_transaction_id; a credit is its reinstatement, when the provider reported the dispute won after it was lost. PROMOTION and EXPIRY appear only on older entries, from the promotional balance wallets no longer hold; a price-reduction grant is a discount lot, not a ledger entry.
typeCREDIT adds funds, DEBIT removes them, ADJUSTMENT applies a signed correction.
wallet_idWallet this ledger entry belongs to.
created_byUser who initiated the entry; null for system-generated entries.
credit_document_idOn a CREDIT_NOTE entry, the credit note whose unapplied remainder this entry returned to the balance; on a refund to the balance (a REFUND credit with no dispute), the refund's credit note; on a chargeback row (dispute_id set), the credit note whose returned amount it takes back, recovers or reinstates; absent on every other entry.
dispute_idOn a chargeback row, the dispute it answers: a REFUND debit taking back what the credit note in credit_document_id returned to the balance because the payment provider returned the same money to the customer (with dunning_case_id, a recovery paying what that claw-back could not take), or a REFUND credit giving it back because the provider reported the dispute won after it was lost. Absent on every other entry.
dunning_case_idOn a recovery, the dunning case it pays: a REFUND debit taking, from a top-up the customer paid into the balance, what a chargeback's claw-back could not take because the balance had been spent. Absent on every other entry.
reasonFree-text explanation shown in the ledger.
referenceCaller-supplied external reference tying the entry to its originating record.
reverse_chargeTrue when the entry is subject to VAT reverse-charge.
Tax portion of the entry, {value, currency}.
tax_rate^-?\d+(\.\d+)?$Tax rate applied, as a decimal fraction (0.19 = 19%).
tax_rule_idTax rule applied to this entry; null for untaxed movements.
top_up_transaction_idOn a recovery, the top-up it was taken from: a top-up pays the customer's open dunning cases first, and only what is left of it reaches the balance. Absent on every other entry.
The part of amount that moved the promotional balance, {value, currency}. Zero on current entries; non-zero only on older entries and on the one entry per wallet that moved the promotional balance into a discount lot. On an entry whose effect is not UNCLASSIFIED it equals amount minus cash_amount. Deprecated: use cash_amount instead. Removed on 2026-11-30.
WalletTransactionEffect
WalletTransactionSource
WalletTransfer
Ledger entry crediting the target wallet.
Ledger entry debiting the source wallet.
transfer_idShared identifier linking the debit and credit legs of this transfer.
Amount credited to the target after FX conversion, {value, currency}; null when both wallets share a currency.
FX snapshot that produced the conversion rate; null for a same-currency transfer.
WalletTransferredPayload
The debited amount in source_currency, as a money object.
The credited amount in target_currency, as a money object: the EXACT value the target wallet's ledger was credited with, so it may carry sub-scale FX precision (amount * rate is not rounded to the currency's minor unit before it is booked).
source_currencyThe source wallet's currency, ISO-4217.
source_customer_idThe customer who owns the source wallet.
source_wallet_idThe wallet funds were debited from.
target_currencyThe target wallet's currency, ISO-4217.
target_customer_idThe customer who owns the target wallet; the same customer when the transfer moved money between their own wallets.
target_wallet_idThe wallet funds were credited to.
transfer_idThe transfer this event records.
exchange_rate^-?\d+(\.\d+)?$The FX rate applied when cross-currency: 1 source_currency = exchange_rate target_currency.
exchange_rate_idThe exchange-rate record used for cross-currency conversion, when applicable.
WebhookDelivery
attemptscreated_atendpoint_idevent_typeididempotency_keymax_attemptsorganization_idpayloadstatusupdated_atlast_errornext_retry_atWebhookEndpoint
created_atevent_typesidorganization_idstatusupdated_aturldescriptionThe automation platform that subscribed this endpoint and owns it: edit or remove it there. Absent on an endpoint made in Kontier.
secret_idunknown_event_typesSubscribed event types that no longer exist in the catalog. These deliver nothing and never will: registration-time validation only gates writes, so an endpoint registered before an event was renamed or retired keeps the dead subscription until someone edits it. Absent when every subscription is live.
managed_byThe automation platform that subscribed this endpoint (Zapier, Make or n8n) and owns it: edit or remove it there. Absent on an endpoint made in Kontier. Deprecated: use managed.platform instead. Removed on 2026-11-30.
managed_refThe platform's own id for the subscription (Zap, Make webhook or n8n workflow id). Deprecated: use managed.ref instead. Removed on 2026-11-30.
WebhookEndpointChange
kindWhat the change is about: the address, its credentials, the description, the status, an event type or the signing secret.
afterFor the address or the description: its value after the act; absent when there is none.
beforeFor the address or the description: its value before the act; absent when there was none.
keyFor an event type added or removed: the event type.
For the address's credentials: that they were set, replaced or cleared. Their value is never in the trail.
For the signing secret: the secret before the act and after it, each named by its key's recognition prefix.
For the status: whether the endpoint received deliveries before the act, and after it.
WebhookEndpointManagement
platformThe platform that subscribed the endpoint (Zapier, Make or n8n).
refThe platform's own id for the subscription (Zap, Make webhook or n8n workflow id). Absent when the platform sent none.
WebhookEndpointSecretSides
The secret it signs with after the act.
The secret the endpoint signed with before the act; absent for an endpoint the act created.
WebhookEndpointStatusSides
afterThe status after the act.
beforeThe status before the act; absent for an endpoint the act created.
WebhookEndpointWithSigningKey
created_atevent_typesidorganization_idsigning_methodstatusupdated_aturldescriptionThe automation platform that subscribed this endpoint and owns it: edit or remove it there. Absent on an endpoint made in Kontier.
secret_idsigning_keyunknown_event_typesSubscribed event types that no longer exist in the catalog. These deliver nothing and never will: registration-time validation only gates writes, so an endpoint registered before an event was renamed or retired keeps the dead subscription until someone edits it. Absent when every subscription is live.
managed_byThe automation platform that subscribed this endpoint (Zapier, Make or n8n) and owns it: edit or remove it there. Absent on an endpoint made in Kontier. Deprecated: use managed.platform instead. Removed on 2026-11-30.
managed_refThe platform's own id for the subscription (Zap, Make webhook or n8n workflow id). Deprecated: use managed.ref instead. Removed on 2026-11-30.
WebhookEventCatalogEntry
descriptionWhat the event fires on.
event_typeThe wire literal a tenant subscribes to, matched exactly against a registered endpoint's event_types at fan-out time.
groupThe family the event belongs to, as a display name, e.g. "Invoices". From 2026-11-30 this is a lower_snake key instead: subscriptions, invoices, wallets, catalog, approvals, customers, usage, tax, dunning, documents, payments, tags, quotes, signing, operations, promotions, marketplace or organization.
payload_versionShape revision of this event's payload, stamped on every delivery as the envelope's payload_version. Advances per event type and only for breaking payload changes; additive fields do not move it.
anchor_classLawful-basis class of the mail anchor this event backs. Absent when no anchor backs the event.
anchor_backedTrue when this event also backs a code-owned mail anchor; such events carry an anchor_class. Deprecated: use anchor_class instead. Removed on 2026-11-30.
WebhookEventType
WebhookSecret
created_atThe record the secret belongs to.
idkey_prefixorganization_idsigning_methodupdated_atdescriptionentity_idDeprecated: use entity.id instead. Removed on 2026-11-30.
entity_typeDeprecated: use entity.type instead. Removed on 2026-11-30.
WebhookSecretChange
kindWhat the change is about: the key, by its prefix.
afterThe recognition prefix of the key after the act.
beforeThe recognition prefix of the key before the act; absent for a secret the act minted.
WebhookSecretEntity
idThe record's id.
typeThe kind of record: organization, customer, subscription, invoice, or webhook_endpoint for a secret created with an endpoint.
WebhookSecretEntityType
WebhookSecretWithSigningKey
created_atThe record the secret belongs to.
idkey_prefixorganization_idsigning_keyThe full signing key. Returned only here, once; it cannot be read again.
signing_methodupdated_atdescriptionentity_idDeprecated: use entity.id instead. Removed on 2026-11-30.
entity_typeDeprecated: use entity.type instead. Removed on 2026-11-30.
Deprecated: use the top-level fields instead. Removed on 2026-11-30.
Window
reset_everyReset cadence as an ISO 8601 duration made of weeks, days, hours, minutes and seconds (PT15M, PT1H, P1D, P1W); at least 1 minute, at most 365 days. Months and years are refused: their length varies. Omitted aggregates over the whole billing period. A request may send reset_every or duration; both must then name the same length.
durationReset cadence in nanoseconds; omitted aggregates over the whole billing period. Deprecated: use reset_every instead. Removed on 2026-11-30.
WithdrawSignatureRequest
reasonWhy the request is being withdrawn. Recorded on the request's chronology; not sent to the buyer.
WorkingDraft
created_atdraft_version_idupdated_atversionbase_version_idrelease_namerelease_noteupdated_byWorkspace
created_atenvironmentlive bills real customers and moves real money; sandbox holds test data and charges nothing.
idThe workspace.
nameThe workspace's display name.
organization_idThe organization the workspace belongs to.
slugThe workspace's handle within its organization, such as live or sandbox. Usable in place of the id in paths and in X-Workspace-Id.
updated_atactive_test_clock_idThe test clock the sandbox runs on. Absent when it runs on the wall clock, and always absent on a live workspace.
modeThe same value as environment. Deprecated: use environment instead. Removed on 2026-11-30.
WorkspaceCurrency
billing_enabledWhether customers can be billed and invoiced in this currency.
catalog_enabledWhether prices and costs can be authored in this currency.
created_atcurrency_codeISO 4217 currency code (uppercase) enabled in the workspace.
updated_atworkspace_idWorkspace this currency is enabled for.
chargeable_via_providerAdvisory: whether any integrated payment provider can charge this currency. false = invoicing/bank-transfer only; payments through a gateway are unavailable.
Counts of records already using this currency; a currency with a total above zero cannot be removed. Sent with include=references. Sent without include=references until 2026-11-30; after that only with include=references.
WorkspaceList
countThe number of workspaces in the list. Deprecated: use the length of workspaces instead. Removed on 2026-11-30.
WrittenOffPayload
What the customer still owes and we do not expect to collect.
customer_iddocument_idorganization_idwritten_off_atreasonWhy the balance is not going to be collected, as the operator wrote it.
subscription_idThe subscription the document bills, when subscription-billed.
workspace_id