List the customers behind a value
curl -X POST "https://api.summerbase.com/v1/metrics/drill_through/customers" \ -H "Authorization: Bearer sb_..." \ -H "Content-Type: application/json" \ -d '{ "query": { "measure": [ "mrr", "mrr_movement" ], "interval": "month", "from": "2026-06-01", "breakdown": [ "movement_type" ] }, "value": { "measure": "mrr_movement", "period": "2026-06-01T04:00:00Z", "category_path": [ "expansion" ] } }'const response = await fetch("https://api.summerbase.com/v1/metrics/drill_through/customers", { method: "POST", headers: { Authorization: "Bearer sb_...", "Content-Type": "application/json", }, body: JSON.stringify({ "query": { "measure": [ "mrr", "mrr_movement" ], "interval": "month", "from": "2026-06-01", "breakdown": [ "movement_type" ] }, "value": { "measure": "mrr_movement", "period": "2026-06-01T04:00:00Z", "category_path": [ "expansion" ] } }),})const data = await response.json()The customers behind one value of an answer of POST /v1/metrics:
send the query again as query, and point at the value with value.
Example
The query
MRR movements by month since June, by type, answer with the expansion in June among them:
POST /v1/metrics
{
"measure": ["mrr", "mrr_movement"],
"interval": "month",
"from": "2026-06-01",
"breakdown": ["movement_type"]
}
200 OK
{
"breakdown": {
"key": "movement_type",
"categories": [
{
"category": "expansion",
"label": "Expansion",
"values": {"mrr_movement": "980"},
"timeseries": [
{"period": "Jun 2026", "mrr_movement": "1450"},
...
]
},
...
]
},
"meta": {
"periods": [
{"label": "Jun 2026", "starts_at": "2026-06-01T04:00:00Z", "ends_at": "2026-07-01T04:00:00Z"},
...
]
}
}
The customers behind it
Send that query as query — or the answer’s own query, the same
query with every default filled in — and point at the value with
value: its measure; the period it is in, the starts_at of the
period in meta.periods, or none for the whole range, the one values is for; and its
category_path, the category of each node down the breakdown to
it, none for a value at the root.
POST /v1/metrics/drill_through/customers
{
"query": {
"measure": ["mrr", "mrr_movement"],
"interval": "month",
"from": "2026-06-01",
"breakdown": ["movement_type"]
},
"value": {
"measure": "mrr_movement",
"period": "2026-06-01T04:00:00Z",
"category_path": ["expansion"]
}
}
200 OK
{
"object": "list",
"data": [
{
"object": "metric_customer",
"customer_id": "0199a7c2-4e1b-7f38-b9d2-5a6c8e0f1d73",
"contribution": "250.00",
"starting_mrr": "1000.00",
"mrr": "1250.00",
"moved_at": "2026-06-12T15:47:09Z",
"status": null
},
{
"object": "metric_customer",
"customer_id": "0199a7c3-1d2e-7a4b-8c5d-6e7f8a9b0c1d",
"contribution": "1200.00",
"starting_mrr": "800.00",
"mrr": "2000.00",
"moved_at": "2026-06-03T09:20:41Z",
"status": null
}
],
"has_more": false,
"next_cursor": null
}
The query’s measure may be left out: the value’s measure stands
in, and which customers are listed does not depend on what else the
answer carried.
What comes back
The customers the value counts or sums: as many as a count
says, each with their share of an amount, contribution, which add up to it
— less the exchange rate effect, which is nobody’s — and what they
were worth at the window’s start and its end. A rate lists whoever is
behind what it is over: a churn rate its lost customers, a conversion
those who converted. GET /v1/metrics/measures says which measures
have somebody to list, drill_through_unit; a starting run rate, a net of
two counts, a lifespan and the exchange rate effect do not. Under a
flow — what happened inside each period — the newest moved_at
first, then the largest share; under anything else the largest share
first, then the newest. Expand customer to get each one’s record.
Every instant is a day in the project’s reporting timezone, and every
amount is in its reporting currency unless currency_code says otherwise.
The period containing today is provisional: its numbers are still moving,
and a lookback_window reads it over a window as long as every other.
The answer’s query carries every input as it was used, defaults filled
in, in the shape POST /v1/metrics takes; its meta the measures
the answer carries and the periods it read.
Request Bodyrequired
Section titled “Request Bodyrequired”object
The next_cursor of the previous page, to read the page after it.
Relationships to include in the response instead of fetching separately. A dotted path expands what an expanded record can expand in turn — at most 4 deep, 10 paths a request, and never back to a record already on the path.
Whether to add total_count, how many records match altogether. On the first page only: it is the same number on every page of one list, so keep the first page’s, and it is refused beside a cursor.
How many records to return, 1 to 100. Defaults to 20.
The metrics query the value came from: the body POST /v1/metrics
was sent, or the answer’s own query, which is the same query with
every default filled in.
object
Up to three dimensions to split each value by, such as
["subscription_item.plan_id"]. Each is a key, or an object that
says more about it. A POST only.
A key: customer.country_code, subscription_item.plan_id, movement_type, revenue_type.
object
When a record’s value is read: window, as things stood at the time over each window — a level by the value at its end, a movement by the value when the money moved, a cohort by the value at its start — unless said; now, so every period is split by the value held now; a date, read as the end of that day in the reporting timezone; or a datetime, ISO 8601, UTC when it names no zone. The same at a filter comparison takes. Not for the run rate movements’ own dimensions.
The key, named as a filter names it.
At most how many categories this dimension answers with, Other counted among them: the largest by the first measure carried at this depth in the last period are kept, and the rest are folded into Other, always last. 1 to 50, 10 unless said. A dimension with a fixed set of categories keeps them all; one over dates keeps every period up to 50, oldest first, folding older ones into Before …; one with boundaries has one per range.
For a key that holds a datetime: the unit its values are cut to, in the reporting timezone. Each category is one such unit, and the categories come in order, newest kept and older folded into Before ….
The currency to report in, by ISO 4217 code: EUR. The project’s
reporting currency unless said.
Counts only the customers, subscriptions or items the condition
matches. See Filters. A POST only.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Whether there is any value at all.
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Whether there is any value at all.
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Whether there is any value at all.
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Whether there is any value at all.
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Whether there is any value at all.
The start of the range: a date, 2026-01-01, or a date relative to
today, now-12M/M, or beginning, when your first revenue moved.
Unless said, the start of this month with no interval, and a run of
whole periods with one: twelve months back by the month.
Cuts the range into periods for timeseries: day, week, month,
quarter or year. Left out, the whole range is one period, and
there is no timeseries.
How far back a rate looks from the end of each period: period,
rolling_interval, or a length such as 30d, 1M or 1y. Unless
said, the window of the first measure in measure.
The kinds of revenue to count: recurring, usage, or both, which
is what MRR, the Monthly Run Rate, counts and the default.
Up to eight more dates to read the measures at, each at the end of
that day: now-1y, 2026-01-01.
The timezone to cut days and periods in, by IANA name:
Europe/Copenhagen. The project’s reporting timezone unless said.
/v1/timezones lists them.
The end of the range, in the same forms as from. It includes the
whole day it names. Today unless said.
Which value of the answer: its measure, the period it is in, and
the category_path down the breakdown to it.
object
The categories down the breakdown to the value’s node, one per dimension, each as the node’s category — null for Other. The root unless said.
The measure the value is of, by the key GET /v1/metrics/measures lists it under.
The period the value is in: its starts_at, as the answer’s meta.periods lists it. The whole range — the one values is for — unless said.
Example
{ "query": { "measure": [ "mrr", "mrr_movement" ], "interval": "month", "from": "2026-06-01", "breakdown": [ "movement_type" ] }, "value": { "measure": "mrr_movement", "period": "2026-06-01T04:00:00Z", "category_path": [ "expansion" ] }}Response
Section titled “Response”Returns a list of the customers behind the value, each with their contribution to it.
A page of results.
object
A metric customer is one customer behind a value of the metrics report, with their share of it.
object
The customer’s contribution to the value, in the measure’s unit: what they are worth under a run rate, what they moved it by under a movement, what of theirs was lost or gained under a cohort metric, the days they took under a median. Null under a count, where each customer is one.
The customer, as a record — expand it to get them on each row. Expandable.
object
What this customer is worth a year, in the project’s reporting currency,
at today’s rate: mrr, rounded to the cent, times twelve.
When the current churn began — the instant status became churned.
Null while the customer is trialing or active, and cleared when they
come back.
The country the customer is billed in. Expandable.
object
Its ISO 3166-1 alpha-2 code: US, DK.
What it is called, in English: United States, Denmark.
The object’s type, always country.
The country the customer is billed in, by its ISO 3166-1 alpha-2 code —
the country_code property, resolved the same way as name, from the
highest-priority source whose value is a country’s code. Expand country
for its name.
When Summerbase first recorded the customer.
The customer’s address, resolved the same way as name.
Every erasure of their personal data, oldest first. Expandable.
A customer erasure records one erasure of a customer’s personal data: the properties and identities removed, who asked, and when Summerbase finished removing every copy. It names what was erased and never holds the erased values.
object
When every copy Summerbase keeps had been removed too, or empty while that
is still to happen — within a day of requested_at.
The customer whose data was erased. Expandable.
object
What this customer is worth a year, in the project’s reporting currency,
at today’s rate: mrr, rounded to the cent, times twelve.
When the current churn began — the instant status became churned.
Null while the customer is trialing or active, and cleared when they
come back.
The country the customer is billed in. Expandable.
object
Its ISO 3166-1 alpha-2 code: US, DK.
What it is called, in English: United States, Denmark.
The object’s type, always country.
The country the customer is billed in, by its ISO 3166-1 alpha-2 code —
the country_code property, resolved the same way as name, from the
highest-priority source whose value is a country’s code. Expand country
for its name.
When Summerbase first recorded the customer.
The customer’s address, resolved the same way as name.
The first instant this customer had revenue — when status first became
paying, 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.
The earliest instant anything was asserted about this customer, their subscriptions or their items — the first thing we were told. Set once.
The first instant one of this customer’s subscriptions was live, free or
paying — when status first became one of the two. Set once and kept
through churn.
The customer’s Summerbase id. Anywhere a customer is addressed, one of its identities works too.
What each source calls this customer, as source:id. Any entry addresses it — stripe:cus_123.
What 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.mrr
compares and a list sorted by mrr orders by.
What the customer is called — the name property, resolved to the
highest-priority source that has one. Write properties.name to change it.
The object’s type, always customer.
Your 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_source has everyone’s.
Every 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.
When the customer signed up for the product — the signed_up_at
property, resolved the same way as name. Write
properties.signed_up_at to 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 is
trialing.
Where the customer stands with us, derived from what is live now: paying,
free, churned, trialing or lead. A subscription is live while its
status is active; paying and free are told apart by mrr, so paying
means on a paid plan, whether or not an invoice has been settled. A customer
with nothing live who has subscribed before is churned; one on a trial, or
who has signed up and never subscribed, is trialing; anyone else is a
lead. A change undone inside the project’s collapse window never happened
to the status either.
Everything they are subscribed to, from every source. Expandable.
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.
object
What this subscription is worth a year, in currency_code:
monthly_amount times twelve.
What this subscription comes to each time it bills: the items still on
it, their net_amount summed 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_amount is what it is worth on one footing.
object
The unit these items bill in: day, week, month or year.
How many of interval between charges: 3 and month is quarterly.
The items on this interval summed, each its net_amount, in the
subscription’s currency_code.
A cancellation already booked. It is still in service until then, and
the source says so with status: canceled when it stops.
The currency it bills in. Expandable.
object
Its ISO 4217 code — USD, EUR, DKK.
What it is called, in English: US dollar, Danish krone.
The object’s type, always currency.
The currency it bills in, by its ISO 4217 code.
When the current billing period ends. The next charge is due then, unless a cancellation is booked for it.
The customer who is subscribed. Expandable.
object
What this customer is worth a year, in the project’s reporting currency,
at today’s rate: mrr, rounded to the cent, times twelve.
When the current churn began — the instant status became churned.
Null while the customer is trialing or active, and cleared when they
come back.
The country the customer is billed in. Expandable.
object
Its ISO 3166-1 alpha-2 code: US, DK.
What it is called, in English: United States, Denmark.
The object’s type, always country.
The country the customer is billed in, by its ISO 3166-1 alpha-2 code —
the country_code property, resolved the same way as name, from the
highest-priority source whose value is a country’s code. Expand country
for its name.
When Summerbase first recorded the customer.
The customer’s address, resolved the same way as name.
The first instant this customer had revenue — when status first became
paying, 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.
The earliest instant anything was asserted about this customer, their subscriptions or their items — the first thing we were told. Set once.
The first instant one of this customer’s subscriptions was live, free or
paying — when status first became one of the two. Set once and kept
through churn.
The customer’s Summerbase id. Anywhere a customer is addressed, one of its identities works too.
What each source calls this customer, as source:id. Any entry addresses it — stripe:cus_123.
What 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.mrr
compares and a list sorted by mrr orders by.
What the customer is called — the name property, resolved to the
highest-priority source that has one. Write properties.name to change it.
The object’s type, always customer.
Your 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_source has everyone’s.
Every 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.
When the customer signed up for the product — the signed_up_at
property, resolved the same way as name. Write
properties.signed_up_at to 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 is
trialing.
Where the customer stands with us, derived from what is live now: paying,
free, churned, trialing or lead. A subscription is live while its
status is active; paying and free are told apart by mrr, so paying
means on a paid plan, whether or not an invoice has been settled. A customer
with nothing live who has subscribed before is churned; one on a trial, or
who has signed up and never subscribed, is trialing; anyone else is a
lead. A change undone inside the project’s collapse window never happened
to the status either.
The customer who is subscribed.
When service stopped, beside status: canceled. Clear it, with status
back to active, to resume a subscription; the same id may be brought
back as often as the source does so.
The subscription’s Summerbase id. Anywhere a subscription is addressed, one of its identities works too.
What each source calls this subscription, as source:id. Any entry addresses it — stripe:cus_123.
The items it is made of, and where the money is. Expandable.
A subscription item is one price on a subscription: a price, a quantity and a
unit amount, billed every interval. Its plan is its price’s. A subscription’s amounts are summed from
its items. Items are usually written with their subscription, as its
items, and can also be changed one at a time.
object
When this item was first recorded.
Whether the item has come off the subscription. When it did is the
effective_at of the write that set this.
What 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 × quantity
less this, each interval. Zero is no discount.
When 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.
The item’s Summerbase id. Anywhere an item is addressed, one of its identities works too.
What each source calls this subscription item, as source:id. Any entry addresses it — stripe:cus_123.
The unit this item bills in.
How many intervals between charges.
What this item comes to each time it is billed, in its subscription’s
currency: unit_amount times quantity, less discount_amount.
The object’s type, always subscription_item.
The plan this item is on: its price’s.
What the plan this item is on is called: its price’s.
The price this item is on, when a source named one. Expandable.
object
Whether 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.
When the price was first seen.
The currency it is listed in, by its ISO 4217 code.
The price’s Summerbase id. Anywhere a price is addressed, one of its identities works too.
What each source calls this price, as source:id. Any entry addresses it — stripe:cus_123.
The unit it bills in. None for a price charged once.
How many intervals between charges.
What 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.
The object’s type, always price.
The source the price came from. Expandable.
object
When 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.
When the source was added.
The source’s unique identifier. Records are identified by its slug.
When the last import gave up, or empty when none has since the last one succeeded. The source’s log says why.
How far the running import has got, from 0 to 1, or empty while it does not know yet.
When the import now running began, or empty when none is. Every metric that reads this source’s records is incomplete until it ends.
What the running import is doing, in a sentence: Importing customers, 1,240 of 8,100.
When the last import finished, or empty when none has.
What the source is called, for people reading a screen.
The object’s type, always source.
Where this source sits when resolving name and email. 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.
The project the source belongs to.
The 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.
The code of the system the source pulls from. custom is a source you
write to yourself, and the only one that accepts writes; stripe is
connected with connect_stripe and fetches for itself.
Whether the connection is to the provider’s test mode rather than a live account; empty while nothing is connected.
How this source’s records are identified — the stripe in
stripe: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.
When 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.
Where 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.
The source the price came from.
The plan the price is on. Expandable.
object
Whether the plan has stopped being offered — the archived property,
resolved to the highest-priority source that says one; Stripe says it
of a product it has archived. Write properties.archived to change it.
Existing subscriptions keep the plan: what somebody paid for last year
does not stop being true when you withdraw it.
When the plan was first seen.
The plan’s Summerbase id. Anywhere a plan is addressed, one of its identities works too.
What each source calls this plan, as source:id. Any entry addresses it — stripe:cus_123.
What the plan is called in a filter, a legend or a breakdown — the
name property, resolved to the highest-priority source that has one.
Write properties.name to change it. Null when no source names it.
The object’s type, always plan.
How many prices are on this plan.
The prices on this plan, in every source. Expandable.
A price is what a subscription item is on, in the source it lives in: a Stripe price, or a plan in a billing system that has no prices. Every price is on one plan, which groups the prices of one thing you sell — monthly and annual, one per currency, or the same plan in two billing systems. A price is created before any subscription item names it.
object
Whether 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.
When the price was first seen.
The currency it is listed in, by its ISO 4217 code.
The price’s Summerbase id. Anywhere a price is addressed, one of its identities works too.
What each source calls this price, as source:id. Any entry addresses it — stripe:cus_123.
The unit it bills in. None for a price charged once.
How many intervals between charges.
What 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.
The object’s type, always price.
The source the price came from. Expandable.
object
When 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.
When the source was added.
The source’s unique identifier. Records are identified by its slug.
When the last import gave up, or empty when none has since the last one succeeded. The source’s log says why.
How far the running import has got, from 0 to 1, or empty while it does not know yet.
When the import now running began, or empty when none is. Every metric that reads this source’s records is incomplete until it ends.
What the running import is doing, in a sentence: Importing customers, 1,240 of 8,100.
When the last import finished, or empty when none has.
What the source is called, for people reading a screen.
The object’s type, always source.
Where this source sits when resolving name and email. 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.
The project the source belongs to.
The 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.
The code of the system the source pulls from. custom is a source you
write to yourself, and the only one that accepts writes; stripe is
connected with connect_stripe and fetches for itself.
Whether the connection is to the provider’s test mode rather than a live account; empty while nothing is connected.
How this source’s records are identified — the stripe in
stripe: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.
When 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.
Where 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.
The source the price came from.
The plan the price is on.
How an item’s unit amount is arrived at on this price.
What one unit is listed at per interval: for a metered price, one unit
of usage. None for a tiered one, whose units cost what their tier says.
Excludes tax.
The plan the price is on.
How an item’s unit amount is arrived at on this price.
What one unit is listed at per interval: for a metered price, one unit
of usage. None for a tiered one, whose units cost what their tier says.
Excludes tax.
The price this item is on, when a source named one.
What the price this item is on is called, when a source named one.
How the unit amount is arrived at.
Your 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_source has everyone’s.
Every 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.
How 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.
The subscription this is an item of. Expandable.
object
The subscription this is an item of.
What one unit costs per interval. Excludes tax and any discount.
What 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’s mrr is these summed across their subscriptions, in
the reporting currency.
The object’s type, always subscription.
The source this subscription lives in — the only one that may write its own fields. Any source may attach properties and identities to it. Expandable.
object
When 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.
When the source was added.
The source’s unique identifier. Records are identified by its slug.
When the last import gave up, or empty when none has since the last one succeeded. The source’s log says why.
How far the running import has got, from 0 to 1, or empty while it does not know yet.
When the import now running began, or empty when none is. Every metric that reads this source’s records is incomplete until it ends.
What the running import is doing, in a sentence: Importing customers, 1,240 of 8,100.
When the last import finished, or empty when none has.
What the source is called, for people reading a screen.
The object’s type, always source.
Where this source sits when resolving name and email. 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.
The project the source belongs to.
The 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.
The code of the system the source pulls from. custom is a source you
write to yourself, and the only one that accepts writes; stripe is
connected with connect_stripe and fetches for itself.
Whether the connection is to the provider’s test mode rather than a live account; empty while nothing is connected.
How this source’s records are identified — the stripe in
stripe: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.
When 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.
Where 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.
The source this subscription lives in — the only one that may write its own fields. Any source may attach properties and identities to it.
Your 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_source has everyone’s.
Every 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.
When Summerbase first recorded it. Never set by a caller.
When 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_at at the real start instead, which is
what an import of history does anyway.
It moves earlier when a later write describes an earlier moment.
Where it is in its life. Not whether it has been paid for.
When the trial ends, or ended. A subscription that trials starts
trialing, so when it began is started_at and its status history.
The customer whose data was erased.
The slug of the source each erased identity came from, one entry per identity. The identities themselves are not kept.
Each property erased, as record.properties.source.key. A property is
listed once however many values it held.
The erasure’s unique identifier.
The object’s type, always customer_erasure.
When the erasure was asked for. Erased values were gone from every answer moments after.
Who asked for the erasure, when a person did. Empty when an API key did. Expandable.
object
When the account was created.
The email address the account signs in with.
The user’s unique identifier.
The name on the account.
The provider the account signs in with, or null for email and password.
The object’s type, always user.
Who asked for the erasure, when a person did. Empty when an API key did.
The first instant this customer had revenue — when status first became
paying, 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.
The earliest instant anything was asserted about this customer, their subscriptions or their items — the first thing we were told. Set once.
The first instant one of this customer’s subscriptions was live, free or
paying — when status first became one of the two. Set once and kept
through churn.
The customer’s Summerbase id. Anywhere a customer is addressed, one of its identities works too.
What each source calls this customer, as source:id. Any entry addresses it — stripe:cus_123.
What 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.mrr
compares and a list sorted by mrr orders by.
What the customer is called — the name property, resolved to the
highest-priority source that has one. Write properties.name to change it.
The object’s type, always customer.
Your 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_source has everyone’s.
Every 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.
When the customer signed up for the product — the signed_up_at
property, resolved the same way as name. Write
properties.signed_up_at to 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 is
trialing.
Where the customer stands with us, derived from what is live now: paying,
free, churned, trialing or lead. A subscription is live while its
status is active; paying and free are told apart by mrr, so paying
means on a paid plan, whether or not an invoice has been settled. A customer
with nothing live who has subscribed before is churned; one on a trial, or
who has signed up and never subscribed, is trialing; anyone else is a
lead. A change undone inside the project’s collapse window never happened
to the status either.
Everything they are subscribed to, from every source. Expandable.
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.
object
What this subscription is worth a year, in currency_code:
monthly_amount times twelve.
What this subscription comes to each time it bills: the items still on
it, their net_amount summed 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_amount is what it is worth on one footing.
object
The unit these items bill in: day, week, month or year.
How many of interval between charges: 3 and month is quarterly.
The items on this interval summed, each its net_amount, in the
subscription’s currency_code.
A cancellation already booked. It is still in service until then, and
the source says so with status: canceled when it stops.
The currency it bills in. Expandable.
object
Its ISO 4217 code — USD, EUR, DKK.
What it is called, in English: US dollar, Danish krone.
The object’s type, always currency.
The currency it bills in, by its ISO 4217 code.
When the current billing period ends. The next charge is due then, unless a cancellation is booked for it.
The customer who is subscribed. Expandable.
object
What this customer is worth a year, in the project’s reporting currency,
at today’s rate: mrr, rounded to the cent, times twelve.
When the current churn began — the instant status became churned.
Null while the customer is trialing or active, and cleared when they
come back.
The country the customer is billed in. Expandable.
object
Its ISO 3166-1 alpha-2 code: US, DK.
What it is called, in English: United States, Denmark.
The object’s type, always country.
The country the customer is billed in, by its ISO 3166-1 alpha-2 code —
the country_code property, resolved the same way as name, from the
highest-priority source whose value is a country’s code. Expand country
for its name.
When Summerbase first recorded the customer.
The customer’s address, resolved the same way as name.
Every erasure of their personal data, oldest first. Expandable.
A customer erasure records one erasure of a customer’s personal data: the properties and identities removed, who asked, and when Summerbase finished removing every copy. It names what was erased and never holds the erased values.
object
When every copy Summerbase keeps had been removed too, or empty while that
is still to happen — within a day of requested_at.
The customer whose data was erased. Expandable.
object
What this customer is worth a year, in the project’s reporting currency,
at today’s rate: mrr, rounded to the cent, times twelve.
When the current churn began — the instant status became churned.
Null while the customer is trialing or active, and cleared when they
come back.
The country the customer is billed in. Expandable.
object
Its ISO 3166-1 alpha-2 code: US, DK.
What it is called, in English: United States, Denmark.
The object’s type, always country.
The country the customer is billed in, by its ISO 3166-1 alpha-2 code —
the country_code property, resolved the same way as name, from the
highest-priority source whose value is a country’s code. Expand country
for its name.
When Summerbase first recorded the customer.
The customer’s address, resolved the same way as name.
The first instant this customer had revenue — when status first became
paying, 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.
The earliest instant anything was asserted about this customer, their subscriptions or their items — the first thing we were told. Set once.
The first instant one of this customer’s subscriptions was live, free or
paying — when status first became one of the two. Set once and kept
through churn.
The customer’s Summerbase id. Anywhere a customer is addressed, one of its identities works too.
What each source calls this customer, as source:id. Any entry addresses it — stripe:cus_123.
What 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.mrr
compares and a list sorted by mrr orders by.
What the customer is called — the name property, resolved to the
highest-priority source that has one. Write properties.name to change it.
The object’s type, always customer.
Your 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_source has everyone’s.
Every 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.
When the customer signed up for the product — the signed_up_at
property, resolved the same way as name. Write
properties.signed_up_at to 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 is
trialing.
Where the customer stands with us, derived from what is live now: paying,
free, churned, trialing or lead. A subscription is live while its
status is active; paying and free are told apart by mrr, so paying
means on a paid plan, whether or not an invoice has been settled. A customer
with nothing live who has subscribed before is churned; one on a trial, or
who has signed up and never subscribed, is trialing; anyone else is a
lead. A change undone inside the project’s collapse window never happened
to the status either.
The customer whose data was erased.
The slug of the source each erased identity came from, one entry per identity. The identities themselves are not kept.
Each property erased, as record.properties.source.key. A property is
listed once however many values it held.
The erasure’s unique identifier.
The object’s type, always customer_erasure.
When the erasure was asked for. Erased values were gone from every answer moments after.
Who asked for the erasure, when a person did. Empty when an API key did. Expandable.
object
When the account was created.
The email address the account signs in with.
The user’s unique identifier.
The name on the account.
The provider the account signs in with, or null for email and password.
The object’s type, always user.
Who asked for the erasure, when a person did. Empty when an API key did.
The first instant this customer had revenue — when status first became
paying, 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.
The earliest instant anything was asserted about this customer, their subscriptions or their items — the first thing we were told. Set once.
The first instant one of this customer’s subscriptions was live, free or
paying — when status first became one of the two. Set once and kept
through churn.
The customer’s Summerbase id. Anywhere a customer is addressed, one of its identities works too.
What each source calls this customer, as source:id. Any entry addresses it — stripe:cus_123.
What 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.mrr
compares and a list sorted by mrr orders by.
What the customer is called — the name property, resolved to the
highest-priority source that has one. Write properties.name to change it.
The object’s type, always customer.
Your 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_source has everyone’s.
Every 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.
When the customer signed up for the product — the signed_up_at
property, resolved the same way as name. Write
properties.signed_up_at to 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 is
trialing.
Where the customer stands with us, derived from what is live now: paying,
free, churned, trialing or lead. A subscription is live while its
status is active; paying and free are told apart by mrr, so paying
means on a paid plan, whether or not an invoice has been settled. A customer
with nothing live who has subscribed before is churned; one on a trial, or
who has signed up and never subscribed, is trialing; anyone else is a
lead. A change undone inside the project’s collapse window never happened
to the status either.
The customer who is subscribed.
When service stopped, beside status: canceled. Clear it, with status
back to active, to resume a subscription; the same id may be brought
back as often as the source does so.
The subscription’s Summerbase id. Anywhere a subscription is addressed, one of its identities works too.
What each source calls this subscription, as source:id. Any entry addresses it — stripe:cus_123.
The items it is made of, and where the money is. Expandable.
A subscription item is one price on a subscription: a price, a quantity and a
unit amount, billed every interval. Its plan is its price’s. A subscription’s amounts are summed from
its items. Items are usually written with their subscription, as its
items, and can also be changed one at a time.
object
When this item was first recorded.
Whether the item has come off the subscription. When it did is the
effective_at of the write that set this.
What 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 × quantity
less this, each interval. Zero is no discount.
When 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.
The item’s Summerbase id. Anywhere an item is addressed, one of its identities works too.
What each source calls this subscription item, as source:id. Any entry addresses it — stripe:cus_123.
The unit this item bills in.
How many intervals between charges.
What this item comes to each time it is billed, in its subscription’s
currency: unit_amount times quantity, less discount_amount.
The object’s type, always subscription_item.
The plan this item is on: its price’s.
What the plan this item is on is called: its price’s.
The price this item is on, when a source named one. Expandable.
object
Whether 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.
When the price was first seen.
The currency it is listed in, by its ISO 4217 code.
The price’s Summerbase id. Anywhere a price is addressed, one of its identities works too.
What each source calls this price, as source:id. Any entry addresses it — stripe:cus_123.
The unit it bills in. None for a price charged once.
How many intervals between charges.
What 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.
The object’s type, always price.
The source the price came from. Expandable.
object
When 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.
When the source was added.
The source’s unique identifier. Records are identified by its slug.
When the last import gave up, or empty when none has since the last one succeeded. The source’s log says why.
How far the running import has got, from 0 to 1, or empty while it does not know yet.
When the import now running began, or empty when none is. Every metric that reads this source’s records is incomplete until it ends.
What the running import is doing, in a sentence: Importing customers, 1,240 of 8,100.
When the last import finished, or empty when none has.
What the source is called, for people reading a screen.
The object’s type, always source.
Where this source sits when resolving name and email. 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.
The project the source belongs to.
The 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.
The code of the system the source pulls from. custom is a source you
write to yourself, and the only one that accepts writes; stripe is
connected with connect_stripe and fetches for itself.
Whether the connection is to the provider’s test mode rather than a live account; empty while nothing is connected.
How this source’s records are identified — the stripe in
stripe: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.
When 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.
Where 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.
The source the price came from.
The plan the price is on. Expandable.
object
Whether the plan has stopped being offered — the archived property,
resolved to the highest-priority source that says one; Stripe says it
of a product it has archived. Write properties.archived to change it.
Existing subscriptions keep the plan: what somebody paid for last year
does not stop being true when you withdraw it.
When the plan was first seen.
The plan’s Summerbase id. Anywhere a plan is addressed, one of its identities works too.
What each source calls this plan, as source:id. Any entry addresses it — stripe:cus_123.
What the plan is called in a filter, a legend or a breakdown — the
name property, resolved to the highest-priority source that has one.
Write properties.name to change it. Null when no source names it.
The object’s type, always plan.
How many prices are on this plan.
The prices on this plan, in every source. Expandable.
A price is what a subscription item is on, in the source it lives in: a Stripe price, or a plan in a billing system that has no prices. Every price is on one plan, which groups the prices of one thing you sell — monthly and annual, one per currency, or the same plan in two billing systems. A price is created before any subscription item names it.
object
Whether 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.
When the price was first seen.
The currency it is listed in, by its ISO 4217 code.
The price’s Summerbase id. Anywhere a price is addressed, one of its identities works too.
What each source calls this price, as source:id. Any entry addresses it — stripe:cus_123.
The unit it bills in. None for a price charged once.
How many intervals between charges.
What 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.
The object’s type, always price.
The source the price came from. Expandable.
object
When 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.
When the source was added.
The source’s unique identifier. Records are identified by its slug.
When the last import gave up, or empty when none has since the last one succeeded. The source’s log says why.
How far the running import has got, from 0 to 1, or empty while it does not know yet.
When the import now running began, or empty when none is. Every metric that reads this source’s records is incomplete until it ends.
What the running import is doing, in a sentence: Importing customers, 1,240 of 8,100.
When the last import finished, or empty when none has.
What the source is called, for people reading a screen.
The object’s type, always source.
Where this source sits when resolving name and email. 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.
The project the source belongs to.
The 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.
The code of the system the source pulls from. custom is a source you
write to yourself, and the only one that accepts writes; stripe is
connected with connect_stripe and fetches for itself.
Whether the connection is to the provider’s test mode rather than a live account; empty while nothing is connected.
How this source’s records are identified — the stripe in
stripe: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.
When 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.
Where 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.
The source the price came from.
The plan the price is on.
How an item’s unit amount is arrived at on this price.
What one unit is listed at per interval: for a metered price, one unit
of usage. None for a tiered one, whose units cost what their tier says.
Excludes tax.
The plan the price is on.
How an item’s unit amount is arrived at on this price.
What one unit is listed at per interval: for a metered price, one unit
of usage. None for a tiered one, whose units cost what their tier says.
Excludes tax.
The price this item is on, when a source named one.
What the price this item is on is called, when a source named one.
How the unit amount is arrived at.
Your 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_source has everyone’s.
Every 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.
How 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.
The subscription this is an item of. Expandable.
object
The subscription this is an item of.
What one unit costs per interval. Excludes tax and any discount.
What 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’s mrr is these summed across their subscriptions, in
the reporting currency.
The object’s type, always subscription.
The source this subscription lives in — the only one that may write its own fields. Any source may attach properties and identities to it. Expandable.
object
When 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.
When the source was added.
The source’s unique identifier. Records are identified by its slug.
When the last import gave up, or empty when none has since the last one succeeded. The source’s log says why.
How far the running import has got, from 0 to 1, or empty while it does not know yet.
When the import now running began, or empty when none is. Every metric that reads this source’s records is incomplete until it ends.
What the running import is doing, in a sentence: Importing customers, 1,240 of 8,100.
When the last import finished, or empty when none has.
What the source is called, for people reading a screen.
The object’s type, always source.
Where this source sits when resolving name and email. 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.
The project the source belongs to.
The 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.
The code of the system the source pulls from. custom is a source you
write to yourself, and the only one that accepts writes; stripe is
connected with connect_stripe and fetches for itself.
Whether the connection is to the provider’s test mode rather than a live account; empty while nothing is connected.
How this source’s records are identified — the stripe in
stripe: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.
When 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.
Where 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.
The source this subscription lives in — the only one that may write its own fields. Any source may attach properties and identities to it.
Your 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_source has everyone’s.
Every 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.
When Summerbase first recorded it. Never set by a caller.
When 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_at at the real start instead, which is
what an import of history does anyway.
It moves earlier when a later write describes an earlier moment.
Where it is in its life. Not whether it has been paid for.
When the trial ends, or ended. A subscription that trials starts
trialing, so when it began is started_at and its status history.
Who.
The last instant inside the window at which what the customer is worth under the cell’s categories moved — under a type of movement, a movement of that type: when they became new, expanded or churned. Null if it did not move, and for a metric not read from revenue.
What the customer was worth a month at the window’s end, under the cell’s categories, in the reporting currency — except under a cohort metric, where it is what the customer is worth at the end wherever it sits, their share of it under the cell’s categories. Null for a metric not read from revenue.
The object’s type, always metric_customer.
What the customer was worth a month at the window’s start, under the cell’s categories, in the reporting currency at the end’s rate. Null for a metric not read from revenue.
Where the customer stood at the instant a count of customers is read at. Null for any other metric.
Whether another page follows this one.
Pass back as cursor to fetch the next page. Null on the last page.
How many records match altogether, counting every page. Only present when include_total_count=true was sent, on the first page.
Example
{ "data": [ { "contribution": "250.00", "customer_id": "0199a7c2-4e1b-7f38-b9d2-5a6c8e0f1d73", "moved_at": "2026-06-12T15:47:09Z", "mrr": "1250.00", "object": "metric_customer", "starting_mrr": "1000.00", "status": null } ], "has_more": false, "next_cursor": null, "object": "list", "total_count": 1}