Skip to main content
The subscription object carries nine values about each subscription, at one row per subscription, and two timestamps that accompany every one of them on every door: as_of and computed_at. A subscription is the agreement between one customer and one product. It is what recurring revenue is counted per, and what a renewal date hangs on.
The names, types and availability below are fixed. No read interface or MCP tool serves them yet — this page publishes the shape ahead of the doors.
On the read interface this object is subscription. The collection name is not published yet — it lands with the API reference rather than being fixed here.

Example payload

Attributes

Where a subscription comes from, and where Beacon has to make one

If you bill through a subscription platform, this object is read. The platform holds subscriptions as first-class records and Beacon takes them as they are. If you bill out of your accounting system, there is no subscription record to read — a ledger holds invoices and items, not agreements. So Beacon creates one for each customer-and-product pairing it sees recurring on your invoices. That is stated plainly because it has two consequences worth knowing before you meet them:
  • The identifier is Beacon’s, not yours. It will not match anything in your accounting system, because your accounting system has nothing to match it to.
  • billing_interval will usually be empty on this path. Where Beacon created the subscription, the contracted billing cycle was never recorded anywhere for it to read. The product’s declared billing cycle carries the answer instead, which is exactly why that value is asked for during setup.
A value that is empty because the thing it describes was never recorded is different from a value that is missing. Beacon does not fill this one in by inference.

Two places a billing cycle can live, and why that is deliberate

The product’s billing cycle says how the product is normally sold. This one says what this customer actually contracted. Most of the time they are the same and only one of them is populated. When a customer negotiates a different billing cycle — an annual product billed quarterly, say — the difference belongs to the customer, not to the catalogue, and overwriting the catalogue to record it would mis-describe every other customer on that product. Where both are present and they disagree, Beacon surfaces the disagreement rather than resolving it silently.

Availability

Nothing on this object is served on any door today, and which values will be available on the read interface, in MCP tools, on events and as CRM properties has not been settled for this object yet. It is left unstated here rather than guessed at, and it lands with the same act that publishes the collection. What is settled is the audience ceiling: every value on this object sits at operational. There is no money on this object; the amounts live on the invoice line.

Freshness

A subscription that ends does not disappear. It stays readable with active_flag false and its end date set, because the periods it contributed to still need it to reproduce.

Versioning

The published object is versioned separately from Beacon’s internal model. A value is never removed from a published version — it is deprecated, and the removal lands in the next version. A published name is permanent; a rename ships as a redirect.