Skip to content

List the customers behind a value

POST
/v1/metrics/drill_through/customers
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"
]
}
}'

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.

Media typeapplication/json
object
cursor

The next_cursor of the previous page, to read the page after it.

string
expand

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.

Array<string>
<= 10 items
Allowed values: customer
include_total_count

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.

boolean
limit

How many records to return, 1 to 100. Defaults to 20.

integer
default: 20 >= 1 <= 100
query

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
breakdown

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.

Array
<= 3 items
Any of:

A key: customer.country_code, subscription_item.plan_id, movement_type, revenue_type.

string
currency_code

The currency to report in, by ISO 4217 code: EUR. The project’s reporting currency unless said.

string
>= 3 characters <= 3 characters
filter

Counts only the customers, subscriptions or items the condition matches. See Filters. A POST only.

object
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
object recursive
has_subscription_item

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
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
object recursive
has_subscription_item

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
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item

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
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item

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
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item

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
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item

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
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item

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
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item

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
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
has_subscription_item

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
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
object recursive
has_subscription_item

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
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
object recursive
has_subscription_item

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
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item

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
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item

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
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item

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
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
has_subscription_item

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
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
from

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.

string
interval

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.

string
Allowed values: day week month quarter year
lookback_window

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.

string
<= 16 characters
measure
Any of:
string
Allowed values: starting_mrr new_mrr expansion_mrr reactivation_mrr churned_mrr contraction_mrr exchange_rate_mrr mrr_movement run_rate_movers mrr mrr_growth starting_arr new_arr expansion_arr reactivation_arr churned_arr contraction_arr exchange_rate_arr arr_movement arr arr_growth starting_mrr_lost starting_mrr_gained starting_mrr_retained starting_arr_lost starting_arr_gained starting_arr_retained gross_revenue_churn net_revenue_churn gross_revenue_retention net_revenue_retention arpa_per_month arpa_per_year starting_customers net_new_customers customers starting_paying_customers new_paying_customers reactivated_paying_customers churned_paying_customers net_new_paying_customers paying_customers starting_paying_customers_lost starting_paying_customers_retained customer_churn monthly_customer_churn customer_retention new_leads new_signups signups_converted_to_paid signup_to_paid_conversion leads_converted_to_paid lead_to_paid_conversion median_lead_to_paid_time median_signup_to_paid_time customer_lifespan ltv
revenue_types

The kinds of revenue to count: recurring, usage, or both, which is what MRR, the Monthly Run Rate, counts and the default.

Array<string>
Allowed values: recurring usage
snapshots

Up to eight more dates to read the measures at, each at the end of that day: now-1y, 2026-01-01.

Array<string>
timezone

The timezone to cut days and periods in, by IANA name: Europe/Copenhagen. The project’s reporting timezone unless said. /v1/timezones lists them.

string
to

The end of the range, in the same forms as from. It includes the whole day it names. Today unless said.

string
value
required

Which value of the answer: its measure, the period it is in, and the category_path down the breakdown to it.

object
category_path

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.

Array<string>
measure
required

The measure the value is of, by the key GET /v1/metrics/measures lists it under.

string
period

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.

string

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"
]
}
}

Returns a list of the customers behind the value, each with their contribution to it.

Media typeapplication/json

A page of results.

object
data
required
Array<object>

A metric customer is one customer behind a value of the metrics report, with their share of it.

object
contribution

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.

string format: decimal
customer

The customer, as a record — expand it to get them on each row. Expandable.

object
arr

What this customer is worth a year, in the project’s reporting currency, at today’s rate: mrr, rounded to the cent, times twelve.

string format: decimal
churned_at

When the current churn began — the instant status became churned. Null while the customer is trialing or active, and cleared when they come back.

string format: date-time
country

The country the customer is billed in. Expandable.

object
code
required

Its ISO 3166-1 alpha-2 code: US, DK.

string
name
required

What it is called, in English: United States, Denmark.

string
object
required

The object’s type, always country.

string
Allowed values: country
country_code

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.

string
created_at
required

When Summerbase first recorded the customer.

string format: date-time
email

The customer’s address, resolved the same way as name.

string
<= 255 characters
erasures

Every erasure of their personal data, oldest first. Expandable.

Array<object>

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
completed_at

When every copy Summerbase keeps had been removed too, or empty while that is still to happen — within a day of requested_at.

string format: date-time
customer

The customer whose data was erased. Expandable.

object
arr

What this customer is worth a year, in the project’s reporting currency, at today’s rate: mrr, rounded to the cent, times twelve.

string format: decimal
churned_at

When the current churn began — the instant status became churned. Null while the customer is trialing or active, and cleared when they come back.

string format: date-time
country

The country the customer is billed in. Expandable.

object
code
required

Its ISO 3166-1 alpha-2 code: US, DK.

string
name
required

What it is called, in English: United States, Denmark.

string
object
required

The object’s type, always country.

string
Allowed values: country
country_code

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.

string
created_at
required

When Summerbase first recorded the customer.

string format: date-time
email

The customer’s address, resolved the same way as name.

string
<= 255 characters
erasures
Array<object> recursive
first_paying_at

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.

string format: date-time
first_seen_at

The earliest instant anything was asserted about this customer, their subscriptions or their items — the first thing we were told. Set once.

string format: date-time
first_subscribed_at

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.

string format: date-time
id
required

The customer’s Summerbase id. Anywhere a customer is addressed, one of its identities works too.

string format: uuid
identities

What each source calls this customer, as source:id. Any entry addresses it — stripe:cus_123.

Array<string>
mrr

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.

string format: decimal
name

What the customer is called — the name property, resolved to the highest-priority source that has one. Write properties.name to change it.

string
<= 255 characters
object
required

The object’s type, always customer.

string
Allowed values: customer
properties

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.

object
key
additional properties
Any of:
string
properties_by_source

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.

object
key
additional properties

Property keys and their current values.

object
key
additional properties
Any of:
string
signed_up_at

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.

string format: date-time
status
required

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.

string
Allowed values: paying free churned trialing lead
subscriptions

Everything they are subscribed to, from every source. Expandable.

Array<object>

A subscription is what a customer is subscribed to, in the one source it lives in. It is made of items that carry the prices, and its monthly_amount is what they are worth a month; a customer’s mrr is the sum over their subscriptions.

object
annual_amount

What this subscription is worth a year, in currency_code: monthly_amount times twelve.

string format: decimal
billing_amounts

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.

Array<object>
object
interval
required

The unit these items bill in: day, week, month or year.

string
Allowed values: day week month year
interval_count
required

How many of interval between charges: 3 and month is quarterly.

integer
net_amount
required

The items on this interval summed, each its net_amount, in the subscription’s currency_code.

string format: decimal
cancels_at

A cancellation already booked. It is still in service until then, and the source says so with status: canceled when it stops.

string format: date-time
currency

The currency it bills in. Expandable.

object
code
required

Its ISO 4217 code — USD, EUR, DKK.

string
>= 3 characters <= 3 characters
name
required

What it is called, in English: US dollar, Danish krone.

string
<= 100 characters
object
required

The object’s type, always currency.

string
Allowed values: currency
currency_code
required

The currency it bills in, by its ISO 4217 code.

string
>= 3 characters <= 3 characters
current_period_ends_at

When the current billing period ends. The next charge is due then, unless a cancellation is booked for it.

string format: date-time
customer

The customer who is subscribed. Expandable.

object
arr

What this customer is worth a year, in the project’s reporting currency, at today’s rate: mrr, rounded to the cent, times twelve.

string format: decimal
churned_at

When the current churn began — the instant status became churned. Null while the customer is trialing or active, and cleared when they come back.

string format: date-time
country

The country the customer is billed in. Expandable.

object
code
required

Its ISO 3166-1 alpha-2 code: US, DK.

string
name
required

What it is called, in English: United States, Denmark.

string
object
required

The object’s type, always country.

string
Allowed values: country
country_code

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.

string
created_at
required

When Summerbase first recorded the customer.

string format: date-time
email

The customer’s address, resolved the same way as name.

string
<= 255 characters
erasures
Array<object> recursive
first_paying_at

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.

string format: date-time
first_seen_at

The earliest instant anything was asserted about this customer, their subscriptions or their items — the first thing we were told. Set once.

string format: date-time
first_subscribed_at

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.

string format: date-time
id
required

The customer’s Summerbase id. Anywhere a customer is addressed, one of its identities works too.

string format: uuid
identities

What each source calls this customer, as source:id. Any entry addresses it — stripe:cus_123.

Array<string>
mrr

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.

string format: decimal
name

What the customer is called — the name property, resolved to the highest-priority source that has one. Write properties.name to change it.

string
<= 255 characters
object
required

The object’s type, always customer.

string
Allowed values: customer
properties

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.

object
key
additional properties
Any of:
string
properties_by_source

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.

object
key
additional properties

Property keys and their current values.

object
key
additional properties
Any of:
string
signed_up_at

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.

string format: date-time
status
required

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.

string
Allowed values: paying free churned trialing lead
subscriptions
Array<object> recursive
customer_id
required

The customer who is subscribed.

string format: uuid
ended_at

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.

string format: date-time
id
required

The subscription’s Summerbase id. Anywhere a subscription is addressed, one of its identities works too.

string format: uuid
identities

What each source calls this subscription, as source:id. Any entry addresses it — stripe:cus_123.

Array<string>
items

The items it is made of, and where the money is. Expandable.

Array<object>

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
created_at
required

When this item was first recorded.

string format: date-time
deleted
required

Whether the item has come off the subscription. When it did is the effective_at of the write that set this.

boolean
discount_amount
required

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.

string format: decimal
discount_ends_at

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.

string format: date-time
id
required

The item’s Summerbase id. Anywhere an item is addressed, one of its identities works too.

string format: uuid
identities

What each source calls this subscription item, as source:id. Any entry addresses it — stripe:cus_123.

Array<string>
interval
required

The unit this item bills in.

string
Allowed values: day week month year
interval_count
required

How many intervals between charges.

integer
>= 1
net_amount

What this item comes to each time it is billed, in its subscription’s currency: unit_amount times quantity, less discount_amount.

string format: decimal
object
required

The object’s type, always subscription_item.

string
Allowed values: subscription_item
plan_id

The plan this item is on: its price’s.

string format: uuid
plan_name

What the plan this item is on is called: its price’s.

string
price

The price this item is on, when a source named one. Expandable.

object
archived
required

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.

boolean
created_at
required

When the price was first seen.

string format: date-time
currency_code

The currency it is listed in, by its ISO 4217 code.

string
>= 3 characters <= 3 characters
id
required

The price’s Summerbase id. Anywhere a price is addressed, one of its identities works too.

string format: uuid
identities

What each source calls this price, as source:id. Any entry addresses it — stripe:cus_123.

Array<string>
interval

The unit it bills in. None for a price charged once.

string
Allowed values: day week month year
interval_count

How many intervals between charges.

integer
>= 1
name

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.

string
>= 1 characters <= 255 characters
object
required

The object’s type, always price.

string
Allowed values: price
owner_source

The source the price came from. Expandable.

object
connected_at

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.

string format: date-time
created_at
required

When the source was added.

string format: date-time
id
required

The source’s unique identifier. Records are identified by its slug.

string format: uuid
import_failed_at

When the last import gave up, or empty when none has since the last one succeeded. The source’s log says why.

string format: date-time
import_progress

How far the running import has got, from 0 to 1, or empty while it does not know yet.

string format: decimal
import_started_at

When the import now running began, or empty when none is. Every metric that reads this source’s records is incomplete until it ends.

string format: date-time
import_step

What the running import is doing, in a sentence: Importing customers, 1,240 of 8,100.

string
imported_at

When the last import finished, or empty when none has.

string format: date-time
name
required

What the source is called, for people reading a screen.

string
>= 1 characters <= 255 characters
object
required

The object’s type, always source.

string
Allowed values: source
priority
required

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.

integer
project_id
required

The project the source belongs to.

string format: uuid
provider_account_id

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.

string
provider_code
required

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.

string
Allowed values: custom stripe summerbase
sandbox

Whether the connection is to the provider’s test mode rather than a live account; empty while nothing is connected.

boolean
slug
required

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.

string
>= 1 characters <= 100 characters
webhook_installed_at

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.

string format: date-time
webhook_url

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.

string
owner_source_id
required

The source the price came from.

string format: uuid
plan

The plan the price is on. Expandable.

object
archived
required

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.

boolean
created_at
required

When the plan was first seen.

string format: date-time
id
required

The plan’s Summerbase id. Anywhere a plan is addressed, one of its identities works too.

string format: uuid
identities

What each source calls this plan, as source:id. Any entry addresses it — stripe:cus_123.

Array<string>
name

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.

string
<= 255 characters
object
required

The object’s type, always plan.

string
Allowed values: plan
price_count
required

How many prices are on this plan.

integer
prices

The prices on this plan, in every source. Expandable.

Array<object>

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
archived
required

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.

boolean
created_at
required

When the price was first seen.

string format: date-time
currency_code

The currency it is listed in, by its ISO 4217 code.

string
>= 3 characters <= 3 characters
id
required

The price’s Summerbase id. Anywhere a price is addressed, one of its identities works too.

string format: uuid
identities

What each source calls this price, as source:id. Any entry addresses it — stripe:cus_123.

Array<string>
interval

The unit it bills in. None for a price charged once.

string
Allowed values: day week month year
interval_count

How many intervals between charges.

integer
>= 1
name

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.

string
>= 1 characters <= 255 characters
object
required

The object’s type, always price.

string
Allowed values: price
owner_source

The source the price came from. Expandable.

object
connected_at

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.

string format: date-time
created_at
required

When the source was added.

string format: date-time
id
required

The source’s unique identifier. Records are identified by its slug.

string format: uuid
import_failed_at

When the last import gave up, or empty when none has since the last one succeeded. The source’s log says why.

string format: date-time
import_progress

How far the running import has got, from 0 to 1, or empty while it does not know yet.

string format: decimal
import_started_at

When the import now running began, or empty when none is. Every metric that reads this source’s records is incomplete until it ends.

string format: date-time
import_step

What the running import is doing, in a sentence: Importing customers, 1,240 of 8,100.

string
imported_at

When the last import finished, or empty when none has.

string format: date-time
name
required

What the source is called, for people reading a screen.

string
>= 1 characters <= 255 characters
object
required

The object’s type, always source.

string
Allowed values: source
priority
required

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.

integer
project_id
required

The project the source belongs to.

string format: uuid
provider_account_id

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.

string
provider_code
required

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.

string
Allowed values: custom stripe summerbase
sandbox

Whether the connection is to the provider’s test mode rather than a live account; empty while nothing is connected.

boolean
slug
required

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.

string
>= 1 characters <= 100 characters
webhook_installed_at

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.

string format: date-time
webhook_url

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.

string
owner_source_id
required

The source the price came from.

string format: uuid
plan
object recursive
plan_id
required

The plan the price is on.

string format: uuid
pricing_model

How an item’s unit amount is arrived at on this price.

string
Allowed values: fixed tiered metered
properties

Your source’s properties on this price, as they stand now. What you write here is what you read back — another source’s values never appear in it and can never be overwritten through it. properties_by_source has everyone’s.

object
key
additional properties
Any of:
string
properties_by_source

Every source’s properties on this price, keyed by source slug — including your own. Read-only: a write only ever reaches the source it is attributed to.

object
key
additional properties

Property keys and their current values.

object
key
additional properties
Any of:
string
unit_amount

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.

string format: decimal
properties

Your source’s properties on this plan, 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.

object
key
additional properties
Any of:
string
properties_by_source

Every source’s properties on this plan, keyed by source slug — including your own. Read-only: a write only ever reaches the source it is attributed to.

object
key
additional properties

Property keys and their current values.

object
key
additional properties
Any of:
string
plan_id
required

The plan the price is on.

string format: uuid
pricing_model

How an item’s unit amount is arrived at on this price.

string
Allowed values: fixed tiered metered
properties

Your source’s properties on this price, as they stand now. What you write here is what you read back — another source’s values never appear in it and can never be overwritten through it. properties_by_source has everyone’s.

object
key
additional properties
Any of:
string
properties_by_source

Every source’s properties on this price, keyed by source slug — including your own. Read-only: a write only ever reaches the source it is attributed to.

object
key
additional properties

Property keys and their current values.

object
key
additional properties
Any of:
string
unit_amount

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.

string format: decimal
price_id

The price this item is on, when a source named one.

string format: uuid
price_name

What the price this item is on is called, when a source named one.

string
pricing_model
required

How the unit amount is arrived at.

string
Allowed values: fixed tiered metered
properties

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.

object
key
additional properties
Any of:
string
properties_by_source

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.

object
key
additional properties

Property keys and their current values.

object
key
additional properties
Any of:
string
quantity
required

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.

string format: decimal
subscription

The subscription this is an item of. Expandable.

object
object recursive
subscription_id
required

The subscription this is an item of.

string format: uuid
unit_amount
required

What one unit costs per interval. Excludes tax and any discount.

string format: decimal
monthly_amount
required

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.

string format: decimal
object
required

The object’s type, always subscription.

string
Allowed values: subscription
owner_source

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
connected_at

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.

string format: date-time
created_at
required

When the source was added.

string format: date-time
id
required

The source’s unique identifier. Records are identified by its slug.

string format: uuid
import_failed_at

When the last import gave up, or empty when none has since the last one succeeded. The source’s log says why.

string format: date-time
import_progress

How far the running import has got, from 0 to 1, or empty while it does not know yet.

string format: decimal
import_started_at

When the import now running began, or empty when none is. Every metric that reads this source’s records is incomplete until it ends.

string format: date-time
import_step

What the running import is doing, in a sentence: Importing customers, 1,240 of 8,100.

string
imported_at

When the last import finished, or empty when none has.

string format: date-time
name
required

What the source is called, for people reading a screen.

string
>= 1 characters <= 255 characters
object
required

The object’s type, always source.

string
Allowed values: source
priority
required

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.

integer
project_id
required

The project the source belongs to.

string format: uuid
provider_account_id

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.

string
provider_code
required

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.

string
Allowed values: custom stripe summerbase
sandbox

Whether the connection is to the provider’s test mode rather than a live account; empty while nothing is connected.

boolean
slug
required

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.

string
>= 1 characters <= 100 characters
webhook_installed_at

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.

string format: date-time
webhook_url

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.

string
owner_source_id
required

The source this subscription lives in — the only one that may write its own fields. Any source may attach properties and identities to it.

string format: uuid
properties

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.

object
key
additional properties
Any of:
string
properties_by_source

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.

object
key
additional properties

Property keys and their current values.

object
key
additional properties
Any of:
string
recorded_at
required

When Summerbase first recorded it. Never set by a caller.

string format: date-time
started_at
required

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.

string format: date-time
status
required

Where it is in its life. Not whether it has been paid for.

string
Allowed values: pending trialing active paused canceled
trial_ends_at

When the trial ends, or ended. A subscription that trials starts trialing, so when it began is started_at and its status history.

string format: date-time
customer_id
required

The customer whose data was erased.

string format: uuid
erased_identity_sources
required

The slug of the source each erased identity came from, one entry per identity. The identities themselves are not kept.

Array<string>
erased_properties
required

Each property erased, as record.properties.source.key. A property is listed once however many values it held.

Array<string>
id
required

The erasure’s unique identifier.

string format: uuid
object
required

The object’s type, always customer_erasure.

string
Allowed values: customer_erasure
requested_at
required

When the erasure was asked for. Erased values were gone from every answer moments after.

string format: date-time
requested_by

Who asked for the erasure, when a person did. Empty when an API key did. Expandable.

object
created_at
required

When the account was created.

string format: date-time
email
required

The email address the account signs in with.

string
<= 255 characters
id
required

The user’s unique identifier.

string format: uuid
name
required

The name on the account.

string
oauth_provider

The provider the account signs in with, or null for email and password.

string
object
required

The object’s type, always user.

string
Allowed values: user
requested_by_id

Who asked for the erasure, when a person did. Empty when an API key did.

string format: uuid
first_paying_at

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.

string format: date-time
first_seen_at

The earliest instant anything was asserted about this customer, their subscriptions or their items — the first thing we were told. Set once.

string format: date-time
first_subscribed_at

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.

string format: date-time
id
required

The customer’s Summerbase id. Anywhere a customer is addressed, one of its identities works too.

string format: uuid
identities

What each source calls this customer, as source:id. Any entry addresses it — stripe:cus_123.

Array<string>
mrr

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.

string format: decimal
name

What the customer is called — the name property, resolved to the highest-priority source that has one. Write properties.name to change it.

string
<= 255 characters
object
required

The object’s type, always customer.

string
Allowed values: customer
properties

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.

object
key
additional properties
Any of:
string
properties_by_source

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.

object
key
additional properties

Property keys and their current values.

object
key
additional properties
Any of:
string
signed_up_at

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.

string format: date-time
status
required

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.

string
Allowed values: paying free churned trialing lead
subscriptions

Everything they are subscribed to, from every source. Expandable.

Array<object>

A subscription is what a customer is subscribed to, in the one source it lives in. It is made of items that carry the prices, and its monthly_amount is what they are worth a month; a customer’s mrr is the sum over their subscriptions.

object
annual_amount

What this subscription is worth a year, in currency_code: monthly_amount times twelve.

string format: decimal
billing_amounts

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.

Array<object>
object
interval
required

The unit these items bill in: day, week, month or year.

string
Allowed values: day week month year
interval_count
required

How many of interval between charges: 3 and month is quarterly.

integer
net_amount
required

The items on this interval summed, each its net_amount, in the subscription’s currency_code.

string format: decimal
cancels_at

A cancellation already booked. It is still in service until then, and the source says so with status: canceled when it stops.

string format: date-time
currency

The currency it bills in. Expandable.

object
code
required

Its ISO 4217 code — USD, EUR, DKK.

string
>= 3 characters <= 3 characters
name
required

What it is called, in English: US dollar, Danish krone.

string
<= 100 characters
object
required

The object’s type, always currency.

string
Allowed values: currency
currency_code
required

The currency it bills in, by its ISO 4217 code.

string
>= 3 characters <= 3 characters
current_period_ends_at

When the current billing period ends. The next charge is due then, unless a cancellation is booked for it.

string format: date-time
customer

The customer who is subscribed. Expandable.

object
arr

What this customer is worth a year, in the project’s reporting currency, at today’s rate: mrr, rounded to the cent, times twelve.

string format: decimal
churned_at

When the current churn began — the instant status became churned. Null while the customer is trialing or active, and cleared when they come back.

string format: date-time
country

The country the customer is billed in. Expandable.

object
code
required

Its ISO 3166-1 alpha-2 code: US, DK.

string
name
required

What it is called, in English: United States, Denmark.

string
object
required

The object’s type, always country.

string
Allowed values: country
country_code

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.

string
created_at
required

When Summerbase first recorded the customer.

string format: date-time
email

The customer’s address, resolved the same way as name.

string
<= 255 characters
erasures

Every erasure of their personal data, oldest first. Expandable.

Array<object>

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
completed_at

When every copy Summerbase keeps had been removed too, or empty while that is still to happen — within a day of requested_at.

string format: date-time
customer

The customer whose data was erased. Expandable.

object
arr

What this customer is worth a year, in the project’s reporting currency, at today’s rate: mrr, rounded to the cent, times twelve.

string format: decimal
churned_at

When the current churn began — the instant status became churned. Null while the customer is trialing or active, and cleared when they come back.

string format: date-time
country

The country the customer is billed in. Expandable.

object
code
required

Its ISO 3166-1 alpha-2 code: US, DK.

string
name
required

What it is called, in English: United States, Denmark.

string
object
required

The object’s type, always country.

string
Allowed values: country
country_code

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.

string
created_at
required

When Summerbase first recorded the customer.

string format: date-time
email

The customer’s address, resolved the same way as name.

string
<= 255 characters
erasures
Array<object> recursive
first_paying_at

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.

string format: date-time
first_seen_at

The earliest instant anything was asserted about this customer, their subscriptions or their items — the first thing we were told. Set once.

string format: date-time
first_subscribed_at

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.

string format: date-time
id
required

The customer’s Summerbase id. Anywhere a customer is addressed, one of its identities works too.

string format: uuid
identities

What each source calls this customer, as source:id. Any entry addresses it — stripe:cus_123.

Array<string>
mrr

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.

string format: decimal
name

What the customer is called — the name property, resolved to the highest-priority source that has one. Write properties.name to change it.

string
<= 255 characters
object
required

The object’s type, always customer.

string
Allowed values: customer
properties

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.

object
key
additional properties
Any of:
string
properties_by_source

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.

object
key
additional properties

Property keys and their current values.

object
key
additional properties
Any of:
string
signed_up_at

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.

string format: date-time
status
required

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.

string
Allowed values: paying free churned trialing lead
subscriptions
Array<object> recursive
customer_id
required

The customer whose data was erased.

string format: uuid
erased_identity_sources
required

The slug of the source each erased identity came from, one entry per identity. The identities themselves are not kept.

Array<string>
erased_properties
required

Each property erased, as record.properties.source.key. A property is listed once however many values it held.

Array<string>
id
required

The erasure’s unique identifier.

string format: uuid
object
required

The object’s type, always customer_erasure.

string
Allowed values: customer_erasure
requested_at
required

When the erasure was asked for. Erased values were gone from every answer moments after.

string format: date-time
requested_by

Who asked for the erasure, when a person did. Empty when an API key did. Expandable.

object
created_at
required

When the account was created.

string format: date-time
email
required

The email address the account signs in with.

string
<= 255 characters
id
required

The user’s unique identifier.

string format: uuid
name
required

The name on the account.

string
oauth_provider

The provider the account signs in with, or null for email and password.

string
object
required

The object’s type, always user.

string
Allowed values: user
requested_by_id

Who asked for the erasure, when a person did. Empty when an API key did.

string format: uuid
first_paying_at

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.

string format: date-time
first_seen_at

The earliest instant anything was asserted about this customer, their subscriptions or their items — the first thing we were told. Set once.

string format: date-time
first_subscribed_at

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.

string format: date-time
id
required

The customer’s Summerbase id. Anywhere a customer is addressed, one of its identities works too.

string format: uuid
identities

What each source calls this customer, as source:id. Any entry addresses it — stripe:cus_123.

Array<string>
mrr

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.

string format: decimal
name

What the customer is called — the name property, resolved to the highest-priority source that has one. Write properties.name to change it.

string
<= 255 characters
object
required

The object’s type, always customer.

string
Allowed values: customer
properties

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.

object
key
additional properties
Any of:
string
properties_by_source

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.

object
key
additional properties

Property keys and their current values.

object
key
additional properties
Any of:
string
signed_up_at

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.

string format: date-time
status
required

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.

string
Allowed values: paying free churned trialing lead
subscriptions
Array<object> recursive
customer_id
required

The customer who is subscribed.

string format: uuid
ended_at

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.

string format: date-time
id
required

The subscription’s Summerbase id. Anywhere a subscription is addressed, one of its identities works too.

string format: uuid
identities

What each source calls this subscription, as source:id. Any entry addresses it — stripe:cus_123.

Array<string>
items

The items it is made of, and where the money is. Expandable.

Array<object>

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
created_at
required

When this item was first recorded.

string format: date-time
deleted
required

Whether the item has come off the subscription. When it did is the effective_at of the write that set this.

boolean
discount_amount
required

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.

string format: decimal
discount_ends_at

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.

string format: date-time
id
required

The item’s Summerbase id. Anywhere an item is addressed, one of its identities works too.

string format: uuid
identities

What each source calls this subscription item, as source:id. Any entry addresses it — stripe:cus_123.

Array<string>
interval
required

The unit this item bills in.

string
Allowed values: day week month year
interval_count
required

How many intervals between charges.

integer
>= 1
net_amount

What this item comes to each time it is billed, in its subscription’s currency: unit_amount times quantity, less discount_amount.

string format: decimal
object
required

The object’s type, always subscription_item.

string
Allowed values: subscription_item
plan_id

The plan this item is on: its price’s.

string format: uuid
plan_name

What the plan this item is on is called: its price’s.

string
price

The price this item is on, when a source named one. Expandable.

object
archived
required

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.

boolean
created_at
required

When the price was first seen.

string format: date-time
currency_code

The currency it is listed in, by its ISO 4217 code.

string
>= 3 characters <= 3 characters
id
required

The price’s Summerbase id. Anywhere a price is addressed, one of its identities works too.

string format: uuid
identities

What each source calls this price, as source:id. Any entry addresses it — stripe:cus_123.

Array<string>
interval

The unit it bills in. None for a price charged once.

string
Allowed values: day week month year
interval_count

How many intervals between charges.

integer
>= 1
name

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.

string
>= 1 characters <= 255 characters
object
required

The object’s type, always price.

string
Allowed values: price
owner_source

The source the price came from. Expandable.

object
connected_at

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.

string format: date-time
created_at
required

When the source was added.

string format: date-time
id
required

The source’s unique identifier. Records are identified by its slug.

string format: uuid
import_failed_at

When the last import gave up, or empty when none has since the last one succeeded. The source’s log says why.

string format: date-time
import_progress

How far the running import has got, from 0 to 1, or empty while it does not know yet.

string format: decimal
import_started_at

When the import now running began, or empty when none is. Every metric that reads this source’s records is incomplete until it ends.

string format: date-time
import_step

What the running import is doing, in a sentence: Importing customers, 1,240 of 8,100.

string
imported_at

When the last import finished, or empty when none has.

string format: date-time
name
required

What the source is called, for people reading a screen.

string
>= 1 characters <= 255 characters
object
required

The object’s type, always source.

string
Allowed values: source
priority
required

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.

integer
project_id
required

The project the source belongs to.

string format: uuid
provider_account_id

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.

string
provider_code
required

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.

string
Allowed values: custom stripe summerbase
sandbox

Whether the connection is to the provider’s test mode rather than a live account; empty while nothing is connected.

boolean
slug
required

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.

string
>= 1 characters <= 100 characters
webhook_installed_at

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.

string format: date-time
webhook_url

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.

string
owner_source_id
required

The source the price came from.

string format: uuid
plan

The plan the price is on. Expandable.

object
archived
required

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.

boolean
created_at
required

When the plan was first seen.

string format: date-time
id
required

The plan’s Summerbase id. Anywhere a plan is addressed, one of its identities works too.

string format: uuid
identities

What each source calls this plan, as source:id. Any entry addresses it — stripe:cus_123.

Array<string>
name

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.

string
<= 255 characters
object
required

The object’s type, always plan.

string
Allowed values: plan
price_count
required

How many prices are on this plan.

integer
prices

The prices on this plan, in every source. Expandable.

Array<object>

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
archived
required

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.

boolean
created_at
required

When the price was first seen.

string format: date-time
currency_code

The currency it is listed in, by its ISO 4217 code.

string
>= 3 characters <= 3 characters
id
required

The price’s Summerbase id. Anywhere a price is addressed, one of its identities works too.

string format: uuid
identities

What each source calls this price, as source:id. Any entry addresses it — stripe:cus_123.

Array<string>
interval

The unit it bills in. None for a price charged once.

string
Allowed values: day week month year
interval_count

How many intervals between charges.

integer
>= 1
name

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.

string
>= 1 characters <= 255 characters
object
required

The object’s type, always price.

string
Allowed values: price
owner_source

The source the price came from. Expandable.

object
connected_at

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.

string format: date-time
created_at
required

When the source was added.

string format: date-time
id
required

The source’s unique identifier. Records are identified by its slug.

string format: uuid
import_failed_at

When the last import gave up, or empty when none has since the last one succeeded. The source’s log says why.

string format: date-time
import_progress

How far the running import has got, from 0 to 1, or empty while it does not know yet.

string format: decimal
import_started_at

When the import now running began, or empty when none is. Every metric that reads this source’s records is incomplete until it ends.

string format: date-time
import_step

What the running import is doing, in a sentence: Importing customers, 1,240 of 8,100.

string
imported_at

When the last import finished, or empty when none has.

string format: date-time
name
required

What the source is called, for people reading a screen.

string
>= 1 characters <= 255 characters
object
required

The object’s type, always source.

string
Allowed values: source
priority
required

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.

integer
project_id
required

The project the source belongs to.

string format: uuid
provider_account_id

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.

string
provider_code
required

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.

string
Allowed values: custom stripe summerbase
sandbox

Whether the connection is to the provider’s test mode rather than a live account; empty while nothing is connected.

boolean
slug
required

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.

string
>= 1 characters <= 100 characters
webhook_installed_at

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.

string format: date-time
webhook_url

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.

string
owner_source_id
required

The source the price came from.

string format: uuid
plan
object recursive
plan_id
required

The plan the price is on.

string format: uuid
pricing_model

How an item’s unit amount is arrived at on this price.

string
Allowed values: fixed tiered metered
properties

Your source’s properties on this price, as they stand now. What you write here is what you read back — another source’s values never appear in it and can never be overwritten through it. properties_by_source has everyone’s.

object
key
additional properties
Any of:
string
properties_by_source

Every source’s properties on this price, keyed by source slug — including your own. Read-only: a write only ever reaches the source it is attributed to.

object
key
additional properties

Property keys and their current values.

object
key
additional properties
Any of:
string
unit_amount

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.

string format: decimal
properties

Your source’s properties on this plan, 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.

object
key
additional properties
Any of:
string
properties_by_source

Every source’s properties on this plan, keyed by source slug — including your own. Read-only: a write only ever reaches the source it is attributed to.

object
key
additional properties

Property keys and their current values.

object
key
additional properties
Any of:
string
plan_id
required

The plan the price is on.

string format: uuid
pricing_model

How an item’s unit amount is arrived at on this price.

string
Allowed values: fixed tiered metered
properties

Your source’s properties on this price, as they stand now. What you write here is what you read back — another source’s values never appear in it and can never be overwritten through it. properties_by_source has everyone’s.

object
key
additional properties
Any of:
string
properties_by_source

Every source’s properties on this price, keyed by source slug — including your own. Read-only: a write only ever reaches the source it is attributed to.

object
key
additional properties

Property keys and their current values.

object
key
additional properties
Any of:
string
unit_amount

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.

string format: decimal
price_id

The price this item is on, when a source named one.

string format: uuid
price_name

What the price this item is on is called, when a source named one.

string
pricing_model
required

How the unit amount is arrived at.

string
Allowed values: fixed tiered metered
properties

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.

object
key
additional properties
Any of:
string
properties_by_source

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.

object
key
additional properties

Property keys and their current values.

object
key
additional properties
Any of:
string
quantity
required

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.

string format: decimal
subscription

The subscription this is an item of. Expandable.

object
object recursive
subscription_id
required

The subscription this is an item of.

string format: uuid
unit_amount
required

What one unit costs per interval. Excludes tax and any discount.

string format: decimal
monthly_amount
required

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.

string format: decimal
object
required

The object’s type, always subscription.

string
Allowed values: subscription
owner_source

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
connected_at

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.

string format: date-time
created_at
required

When the source was added.

string format: date-time
id
required

The source’s unique identifier. Records are identified by its slug.

string format: uuid
import_failed_at

When the last import gave up, or empty when none has since the last one succeeded. The source’s log says why.

string format: date-time
import_progress

How far the running import has got, from 0 to 1, or empty while it does not know yet.

string format: decimal
import_started_at

When the import now running began, or empty when none is. Every metric that reads this source’s records is incomplete until it ends.

string format: date-time
import_step

What the running import is doing, in a sentence: Importing customers, 1,240 of 8,100.

string
imported_at

When the last import finished, or empty when none has.

string format: date-time
name
required

What the source is called, for people reading a screen.

string
>= 1 characters <= 255 characters
object
required

The object’s type, always source.

string
Allowed values: source
priority
required

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.

integer
project_id
required

The project the source belongs to.

string format: uuid
provider_account_id

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.

string
provider_code
required

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.

string
Allowed values: custom stripe summerbase
sandbox

Whether the connection is to the provider’s test mode rather than a live account; empty while nothing is connected.

boolean
slug
required

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.

string
>= 1 characters <= 100 characters
webhook_installed_at

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.

string format: date-time
webhook_url

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.

string
owner_source_id
required

The source this subscription lives in — the only one that may write its own fields. Any source may attach properties and identities to it.

string format: uuid
properties

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.

object
key
additional properties
Any of:
string
properties_by_source

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.

object
key
additional properties

Property keys and their current values.

object
key
additional properties
Any of:
string
recorded_at
required

When Summerbase first recorded it. Never set by a caller.

string format: date-time
started_at
required

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.

string format: date-time
status
required

Where it is in its life. Not whether it has been paid for.

string
Allowed values: pending trialing active paused canceled
trial_ends_at

When the trial ends, or ended. A subscription that trials starts trialing, so when it began is started_at and its status history.

string format: date-time
customer_id
required

Who.

string format: uuid
moved_at

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.

string format: date-time
mrr

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.

string format: decimal
object
required

The object’s type, always metric_customer.

string
Allowed values: metric_customer
starting_mrr

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.

string format: decimal
status

Where the customer stood at the instant a count of customers is read at. Null for any other metric.

string
Allowed values: paying free churned trialing lead
has_more
required

Whether another page follows this one.

boolean
next_cursor

Pass back as cursor to fetch the next page. Null on the last page.

string
object
required
string
Allowed values: list
total_count

How many records match altogether, counting every page. Only present when include_total_count=true was sent, on the first page.

integer

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
}