The subscription object
A subscription is what a customer is subscribed to, in the one source it
lives in. It is made of items that carry the prices, and its
monthly_amount is what they are worth a month; a customer’s mrr is the
sum over their subscriptions.
Attributes
idstring (UUID)The subscription’s Summerbase id. Anywhere a subscription is addressed, one of its
identitiesworks too.objectstringThe object’s type, always
subscription.Always
subscriptionannual_amountdecimal stringWhat this subscription is worth a year, in
currency_code:monthly_amounttimes twelve.billing_amountsarray of objectsWhat this subscription comes to each time it bills: the items still on it, their
net_amountsummed per billing interval, longest interval first. One entry for nearly every subscription; one per interval for a subscription whose items bill on different ones, such as a yearly fee beside a monthly one. Its price whatever its status — a trial still has one.monthly_amountis what it is worth on one footing.Show 3 child attributes
intervalenumThe unit these items bill in:
day,week,monthoryear.One of
day,week,month,yearinterval_countintegerHow many of
intervalbetween charges:3andmonthis quarterly.net_amountdecimal stringThe items on this interval summed, each its
net_amount, in the subscription’scurrency_code.
cancels_attimestampA cancellation already booked. It is still in service until then, and the source says so with
status: canceledwhen it stops.currencyobjectThe currency it bills in. Expandable.
Show 3 child attributes
objectstringThe object’s type, always
currency.Always
currencycodestringIts ISO 4217 code —
USD,EUR,DKK.namestringWhat it is called, in English:
US dollar,Danish krone.
currency_codestringThe currency it bills in, by its ISO 4217 code.
current_period_ends_attimestampWhen the current billing period ends. The next charge is due then, unless a cancellation is booked for it.
customerobjectThe customer who is subscribed. Expandable.
Show 20 child attributes
idstring (UUID)The customer’s Summerbase id. Anywhere a customer is addressed, one of its
identitiesworks too.objectstringThe object’s type, always
customer.Always
customerarrdecimal stringWhat this customer is worth a year, in the project’s reporting currency, at today’s rate:
mrr, rounded to the cent, times twelve.churned_attimestampWhen the current churn began — the instant
statusbecamechurned. Null while the customer is trialing or active, and cleared when they come back.countryobjectThe country the customer is billed in. Expandable.
Show 3 child attributes
objectstringThe object’s type, always
country.Always
countrycodestringIts ISO 3166-1 alpha-2 code:
US,DK.namestringWhat it is called, in English:
United States,Denmark.
country_codestringThe country the customer is billed in, by its ISO 3166-1 alpha-2 code — the
country_codeproperty, resolved the same way asname, from the highest-priority source whose value is a country’s code. Expandcountryfor its name.created_attimestampWhen Summerbase first recorded the customer.
emailstringThe customer’s address, resolved the same way as
name.erasuresarray of objectsEvery erasure of their personal data, oldest first. Expandable.
Show 10 child attributes
idstring (UUID)The erasure’s unique identifier.
objectstringThe object’s type, always
customer_erasure.Always
customer_erasurecompleted_attimestampWhen every copy Summerbase keeps had been removed too, or empty while that is still to happen — within a day of
requested_at.customerobjectThe customer whose data was erased. Expandable.
customer_idstring (UUID)The customer whose data was erased.
erased_identity_sourcesarray of stringsThe slug of the source each erased identity came from, one entry per identity. The identities themselves are not kept.
erased_propertiesarray of stringsEach property erased, as
record.properties.source.key. A property is listed once however many values it held.requested_attimestampWhen the erasure was asked for. Erased values were gone from every answer moments after.
requested_byobjectWho asked for the erasure, when a person did. Empty when an API key did. Expandable.
requested_by_idstring (UUID)Who asked for the erasure, when a person did. Empty when an API key did.
first_paying_attimestampThe first instant this customer had revenue — when
statusfirst becamepaying, and what cohort analysis groups by. Set once and kept through churn and reactivation. Which month it falls in depends on the timezone being reported in.first_seen_attimestampThe earliest instant anything was asserted about this customer, their subscriptions or their items — the first thing we were told. Set once.
first_subscribed_attimestampThe first instant one of this customer’s subscriptions was live, free or paying — when
statusfirst became one of the two. Set once and kept through churn.identitiesarray of stringsWhat each source calls this customer, as
source:id. Any entry addresses it —stripe:cus_123.mrrdecimal stringWhat this customer is worth a month, in the project’s reporting currency, at today’s rate, rounded to the cent.
Every kind of revenue counts, each change converted from the currency it was billed in, so this amount moves when a rate does and when the project’s reporting currency changes. The same amount a filter on
customer.mrrcompares and a list sorted bymrrorders by.namestringWhat the customer is called — the
nameproperty, resolved to the highest-priority source that has one. Writeproperties.nameto change it.propertiesobjectYour source’s properties on this customer, as they stand now. What you write here is what you read back — another source’s values never appear in it and can never be overwritten through it.
properties_by_sourcehas everyone’s.properties_by_sourceobjectEvery source’s properties on this customer, keyed by source slug — including your own. Read-only: a write only ever reaches the source it is attributed to.
signed_up_attimestampWhen the customer signed up for the product — the
signed_up_atproperty, resolved the same way asname. Writeproperties.signed_up_atto set it; a billing provider’s source writes the moment it first saw the customer, and a project’s own source outranks it. A customer who has signed up and never subscribed istrialing.statusenumWhere the customer stands with us, derived from what is live now:
paying,free,churned,trialingorlead. A subscription is live while its status isactive; paying and free are told apart bymrr, sopayingmeans on a paid plan, whether or not an invoice has been settled. A customer with nothing live who has subscribed before ischurned; one on a trial, or who has signed up and never subscribed, istrialing; anyone else is alead. A change undone inside the project’s collapse window never happened to the status either.One of
paying,free,churned,trialing,leadsubscriptionsarray of objectsEverything they are subscribed to, from every source. Expandable.
Show 22 child attributes
idstring (UUID)The subscription’s Summerbase id. Anywhere a subscription is addressed, one of its
identitiesworks too.objectstringThe object’s type, always
subscription.Always
subscriptionannual_amountdecimal stringWhat this subscription is worth a year, in
currency_code:monthly_amounttimes twelve.billing_amountsarray of objectsWhat this subscription comes to each time it bills: the items still on it, their
net_amountsummed per billing interval, longest interval first. One entry for nearly every subscription; one per interval for a subscription whose items bill on different ones, such as a yearly fee beside a monthly one. Its price whatever its status — a trial still has one.monthly_amountis what it is worth on one footing.cancels_attimestampA cancellation already booked. It is still in service until then, and the source says so with
status: canceledwhen it stops.currencyobjectThe currency it bills in. Expandable.
currency_codestringThe currency it bills in, by its ISO 4217 code.
current_period_ends_attimestampWhen the current billing period ends. The next charge is due then, unless a cancellation is booked for it.
customerobjectThe customer who is subscribed. Expandable.
customer_idstring (UUID)The customer who is subscribed.
ended_attimestampWhen service stopped, beside
status: canceled. Clear it, withstatusback toactive, to resume a subscription; the same id may be brought back as often as the source does so.identitiesarray of stringsWhat each source calls this subscription, as
source:id. Any entry addresses it —stripe:cus_123.itemsarray of objectsThe items it is made of, and where the money is. Expandable.
monthly_amountdecimal stringWhat this subscription is worth a month, in
currency_code, after the items’ discounts — derived, not reported. The sum of what its items are worth; zero while it is on trial, paused or ended, and zero on a free plan. A customer’smrris these summed across their subscriptions, in the reporting currency.owner_sourceobjectThe source this subscription lives in — the only one that may write its own fields. Any source may attach properties and identities to it. Expandable.
owner_source_idstring (UUID)The source this subscription lives in — the only one that may write its own fields. Any source may attach properties and identities to it.
propertiesobjectYour source’s properties on this subscription, as they stand now. What you write here is what you read back — another source’s values never appear in it and can never be overwritten through it.
properties_by_sourcehas everyone’s.properties_by_sourceobjectEvery source’s properties on this subscription, keyed by source slug — including your own. Read-only: a write only ever reaches the source it is attributed to.
recorded_attimestampWhen Summerbase first recorded it. Never set by a caller.
started_attimestampWhen the subscription began — derived, not reported.
It is the earliest instant anything was asserted about the subscription or its items. A source cannot say it began earlier than it described it: send the earliest write with
effective_atat the real start instead, which is what an import of history does anyway.It moves earlier when a later write describes an earlier moment.
statusenumWhere it is in its life. Not whether it has been paid for.
One of
pending,trialing,active,paused,canceledtrial_ends_attimestampWhen the trial ends, or ended. A subscription that trials starts trialing, so when it began is
started_atand its status history.
customer_idstring (UUID)The customer who is subscribed.
ended_attimestampWhen service stopped, beside
status: canceled. Clear it, withstatusback toactive, to resume a subscription; the same id may be brought back as often as the source does so.identitiesarray of stringsWhat each source calls this subscription, as
source:id. Any entry addresses it —stripe:cus_123.itemsarray of objectsThe items it is made of, and where the money is. Expandable.
Show 22 child attributes
idstring (UUID)The item’s Summerbase id. Anywhere an item is addressed, one of its
identitiesworks too.objectstringThe object’s type, always
subscription_item.Always
subscription_itemcreated_attimestampWhen this item was first recorded.
deletedbooleanWhether the item has come off the subscription. When it did is the
effective_atof the write that set this.discount_amountdecimal stringWhat comes off this item’s invoice, in the subscription’s currency, after every discount the source applies to it has been worked out: coupons at any level, stacked in the source’s order, restricted to the products they cover. The item is worth
unit_amount × quantityless this, each interval. Zero is no discount.discount_ends_attimestampWhen the discount, or the earliest part of it, stops applying, if the source knows. Information for a reader: the discount comes off when the source writes a smaller
discount_amount, not when this passes.identitiesarray of stringsWhat each source calls this subscription item, as
source:id. Any entry addresses it —stripe:cus_123.intervalenumThe unit this item bills in.
One of
day,week,month,yearinterval_countintegerHow many intervals between charges.
net_amountdecimal stringWhat this item comes to each time it is billed, in its subscription’s currency:
unit_amounttimesquantity, lessdiscount_amount.plan_idstring (UUID)The plan this item is on: its price’s.
plan_namestringWhat the plan this item is on is called: its price’s.
priceobjectThe price this item is on, when a source named one. Expandable.
Show 17 child attributes
idstring (UUID)The price’s Summerbase id. Anywhere a price is addressed, one of its
identitiesworks too.objectstringThe object’s type, always
price.Always
pricearchivedbooleanWhether the price has stopped being offered. Existing subscriptions keep it — what somebody paid for last year does not stop being true when you withdraw the price.
created_attimestampWhen the price was first seen.
currency_codestringThe currency it is listed in, by its ISO 4217 code.
identitiesarray of stringsWhat each source calls this price, as
source:id. Any entry addresses it —stripe:cus_123.intervalenumThe unit it bills in. None for a price charged once.
One of
day,week,month,yearinterval_countintegerHow many intervals between charges.
namestringWhat the price is called in the source it lives in, when it has a name of its own there — a Stripe price’s nickname. Most have none, and are told apart by their terms.
owner_sourceobjectThe source the price came from. Expandable.
owner_source_idstring (UUID)The source the price came from.
planobjectThe plan the price is on. Expandable.
plan_idstring (UUID)The plan the price is on.
pricing_modelenumHow an item’s unit amount is arrived at on this price.
One of
fixed,tiered,meteredpropertiesobjectYour source’s properties on this price, as they stand now. What you write here is what you read back — another source’s values never appear in it and can never be overwritten through it.
properties_by_sourcehas everyone’s.properties_by_sourceobjectEvery source’s properties on this price, keyed by source slug — including your own. Read-only: a write only ever reaches the source it is attributed to.
unit_amountdecimal stringWhat one unit is listed at per interval: for a
meteredprice, one unit of usage. None for atieredone, whose units cost what their tier says. Excludes tax.
price_idstring (UUID)The price this item is on, when a source named one.
price_namestringWhat the price this item is on is called, when a source named one.
pricing_modelenumHow the unit amount is arrived at.
One of
fixed,tiered,meteredpropertiesobjectYour source’s properties on this subscription item, as they stand now. What you write here is what you read back — another source’s values never appear in it and can never be overwritten through it.
properties_by_sourcehas everyone’s.properties_by_sourceobjectEvery source’s properties on this subscription item, keyed by source slug — including your own. Read-only: a write only ever reaches the source it is attributed to.
quantitydecimal stringHow many units at this unit amount. A decimal, because a unit is not always a whole seat: a billing system that meters usage sends 1.5 of something, and rounding it would misstate what the item is worth.
subscriptionobjectThe subscription this is an item of. Expandable.
Show 22 child attributes
idstring (UUID)The subscription’s Summerbase id. Anywhere a subscription is addressed, one of its
identitiesworks too.objectstringThe object’s type, always
subscription.Always
subscriptionannual_amountdecimal stringWhat this subscription is worth a year, in
currency_code:monthly_amounttimes twelve.billing_amountsarray of objectsWhat this subscription comes to each time it bills: the items still on it, their
net_amountsummed per billing interval, longest interval first. One entry for nearly every subscription; one per interval for a subscription whose items bill on different ones, such as a yearly fee beside a monthly one. Its price whatever its status — a trial still has one.monthly_amountis what it is worth on one footing.cancels_attimestampA cancellation already booked. It is still in service until then, and the source says so with
status: canceledwhen it stops.currencyobjectThe currency it bills in. Expandable.
currency_codestringThe currency it bills in, by its ISO 4217 code.
current_period_ends_attimestampWhen the current billing period ends. The next charge is due then, unless a cancellation is booked for it.
customerobjectThe customer who is subscribed. Expandable.
customer_idstring (UUID)The customer who is subscribed.
ended_attimestampWhen service stopped, beside
status: canceled. Clear it, withstatusback toactive, to resume a subscription; the same id may be brought back as often as the source does so.identitiesarray of stringsWhat each source calls this subscription, as
source:id. Any entry addresses it —stripe:cus_123.itemsarray of objectsThe items it is made of, and where the money is. Expandable.
monthly_amountdecimal stringWhat this subscription is worth a month, in
currency_code, after the items’ discounts — derived, not reported. The sum of what its items are worth; zero while it is on trial, paused or ended, and zero on a free plan. A customer’smrris these summed across their subscriptions, in the reporting currency.owner_sourceobjectThe source this subscription lives in — the only one that may write its own fields. Any source may attach properties and identities to it. Expandable.
owner_source_idstring (UUID)The source this subscription lives in — the only one that may write its own fields. Any source may attach properties and identities to it.
propertiesobjectYour source’s properties on this subscription, as they stand now. What you write here is what you read back — another source’s values never appear in it and can never be overwritten through it.
properties_by_sourcehas everyone’s.properties_by_sourceobjectEvery source’s properties on this subscription, keyed by source slug — including your own. Read-only: a write only ever reaches the source it is attributed to.
recorded_attimestampWhen Summerbase first recorded it. Never set by a caller.
started_attimestampWhen the subscription began — derived, not reported.
It is the earliest instant anything was asserted about the subscription or its items. A source cannot say it began earlier than it described it: send the earliest write with
effective_atat the real start instead, which is what an import of history does anyway.It moves earlier when a later write describes an earlier moment.
statusenumWhere it is in its life. Not whether it has been paid for.
One of
pending,trialing,active,paused,canceledtrial_ends_attimestampWhen the trial ends, or ended. A subscription that trials starts trialing, so when it began is
started_atand its status history.
subscription_idstring (UUID)The subscription this is an item of.
unit_amountdecimal stringWhat one unit costs per interval. Excludes tax and any discount.
monthly_amountdecimal stringWhat this subscription is worth a month, in
currency_code, after the items’ discounts — derived, not reported. The sum of what its items are worth; zero while it is on trial, paused or ended, and zero on a free plan. A customer’smrris these summed across their subscriptions, in the reporting currency.owner_sourceobjectThe source this subscription lives in — the only one that may write its own fields. Any source may attach properties and identities to it. Expandable.
Show 18 child attributes
idstring (UUID)The source’s unique identifier. Records are identified by its
slug.objectstringThe object’s type, always
source.Always
sourceconnected_attimestampWhen a provider source was given its credential, or empty: a provider source that has not been connected yet or has been disconnected, and every source that is not a provider’s.
created_attimestampWhen the source was added.
import_failed_attimestampWhen the last import gave up, or empty when none has since the last one succeeded. The source’s log says why.
import_progressdecimal stringHow far the running import has got, from 0 to 1, or empty while it does not know yet.
import_started_attimestampWhen the import now running began, or empty when none is. Every metric that reads this source’s records is incomplete until it ends.
import_stepstringWhat the running import is doing, in a sentence:
Importing customers, 1,240 of 8,100.imported_attimestampWhen the last import finished, or empty when none has.
namestringWhat the source is called, for people reading a screen.
priorityintegerWhere this source sits when resolving
nameandemail. Lower wins, and the project’s own source starts at the top so a manual correction outranks a provider sync. It orders nothing else — every other property is namespaced by source and never arbitrated.project_idstring (UUID)The project the source belongs to.
provider_account_idstringThe provider’s own id for the account the source is connected to:
acct_…for Stripe. Kept through a disconnect, so that connecting again is checked against it.provider_codeenumThe code of the system the source pulls from.
customis a source you write to yourself, and the only one that accepts writes;stripeis connected withconnect_stripeand fetches for itself.One of
custom,stripe,summerbasesandboxbooleanWhether the connection is to the provider’s test mode rather than a live account; empty while nothing is connected.
slugstringHow this source’s records are identified — the
stripeinstripe:cus_123. Lowercase letters, digits, hyphens and underscores; unique within the project and fixed once the source exists, because integrations hard-code it. A reference shaped like an id is read as one, so a slug may not look like a UUID.webhook_installed_attimestampWhen the provider’s webhook was installed for this source — by the connection, or by hand and registered with
register_stripe_webhook— or empty: nothing is connected, or the source is connected without a webhook and its changes arrive with the hourly reconcile.webhook_urlstringWhere the provider posts this source’s events: the address of the endpoint a connection installs, and of one to install by hand. Empty for a source whose provider posts no webhooks.
owner_source_idstring (UUID)The source this subscription lives in — the only one that may write its own fields. Any source may attach properties and identities to it.
propertiesobjectYour source’s properties on this subscription, as they stand now. What you write here is what you read back — another source’s values never appear in it and can never be overwritten through it.
properties_by_sourcehas everyone’s.properties_by_sourceobjectEvery source’s properties on this subscription, keyed by source slug — including your own. Read-only: a write only ever reaches the source it is attributed to.
recorded_attimestampWhen Summerbase first recorded it. Never set by a caller.
started_attimestampWhen the subscription began — derived, not reported.
It is the earliest instant anything was asserted about the subscription or its items. A source cannot say it began earlier than it described it: send the earliest write with
effective_atat the real start instead, which is what an import of history does anyway.It moves earlier when a later write describes an earlier moment.
statusenumWhere it is in its life. Not whether it has been paid for.
One of
pending,trialing,active,paused,canceledtrial_ends_attimestampWhen the trial ends, or ended. A subscription that trials starts trialing, so when it began is
started_atand its status history.
Example
{ "annual_amount": "15000.00", "billing_amounts": [ { "interval": "month", "interval_count": 1, "net_amount": "1250.00" } ], "cancels_at": null, "currency_code": "USD", "current_period_ends_at": "2026-11-01T10:04:00Z", "customer_id": "0199a7c2-4e1b-7f38-b9d2-5a6c8e0f1d73", "ended_at": null, "id": "0199a7c2-5b3e-7a14-8c6d-2f9e4b7a1c05", "identities": [ "stripe:sub_1QhT5uV7wX9yZ2aB" ], "monthly_amount": "1250.00", "object": "subscription", "owner_source_id": "0198f1a3-0b7c-7e25-9f41-6a2d8c3e5b19", "properties": { "account_manager": "Priya Shah" }, "properties_by_source": { "backend": { "account_manager": "Priya Shah" }, "stripe": { "contract_id": "C-2025-118" } }, "recorded_at": "2025-11-17T10:04:03Z", "started_at": "2025-11-17T10:04:00Z", "status": "active", "trial_ends_at": "2025-12-01T10:04:00Z"}