Management API: Usage

Last updated 2 November 2026

View .md

The account's rated usage. The overview covers what every operation shares: authentication, roles, errors, pagination, idempotency and If-Match.

Read the account's rated usage of one month

GET /v1/usage · CLI: tonbo usage show

Needs usage.read, which owner and admin hold. A narrowed key may not.

Parameters

NameInTypeRequiredDescription
periodquerystringnoThe calendar month in UTC; the current month when omitted. Matches ^[0-9]{4}-(0[1-9]|1[0-2])$.

Response

StatusAnswer
200Usage
FieldTypeRequiredDescription
dataUsageyes
HeaderStatusDescription
WWW-Authenticate401Authentication scheme required by this API.
Retry-After429Seconds before the client should retry.
Example 200 body
{
  "data": {
    "period": "2026-11",
    "currency": "usd",
    "total_micros": 1,
    "lines": [
      {
        "product": "<product>",
        "region": "<region>",
        "dimension": "<dimension>",
        "model": "<model>",
        "quantity": "<quantity>",
        "amount_micros": 1
      }
    ]
  }
}

Errors

StatusCodeWhenSend againWhat to do
401exchange_requiredThe key acts as an Agent, and an Agent’s key is never sent itself.NoExchange the key for a token at the endpoint the answer’s token_endpoint names, and send the token as Authorization: Bearer. (more)
401unauthenticatedThe request carries no key or token, or one that is invalid, expired or revoked.NoSend a valid key, or a token that has not expired, as Authorization: Bearer. (more)
403forbiddenThe key’s role does not hold the capability the operation needs, the key is narrowed away from the resource, or the account already holds as many of the resource as it may.NoUse a key whose role holds the capability, or one that is not narrowed; delete what you no longer need, or ask for a higher limit. (more)
422validation_errorA parameter, header or body field breaks its rule; errors names each field.NoCorrect the fields errors names; the operation’s reference gives each one’s rule. (more)
429rate_limitedThe key or the account sent more requests than its rate allows.After Retry-AfterWait for the seconds Retry-After names, then send the request again; spread requests out if it recurs. (more)

Retries

  • A read: sending it again changes nothing.
  • 429 carry Retry-After: wait that many seconds, then send the same request again.
Request
curl -sS "https://api.tonbo.dev/v1/usage" \
  -H "Authorization: Bearer $TONBO_API_KEY"

Read the account's writes of yesterday and today, hourly

GET /v1/usage/today · CLI: tonbo usage today

Needs usage.read, which owner and admin hold. A narrowed key may not.

The account's Streams writes per UTC hour of yesterday and today, in three lanes: databases (its databases, with each Machine's database, logs and inbox), streams (its raw streams) and other (session processing, a Volume's ledger and usage accounted to a bucket rather than a stream), as the other rows of /usage/databases and /usage/streams hold them; every write is in exactly one lane. Summed over every region the account reaches, with each region's meter checkpoint; a region that cannot be read is named in unavailable_regions and left out of the sums. A write counts in the hour that holds its settlement hour, so the current hour grows until it ends; an hour that starts after now answers null. Activity, not money: Usage & billing (/usage) shows what is charged.

Response

StatusAnswer
200The account's writes of yesterday and today
FieldTypeRequiredDescription
dataUsageTodayyesThe account's writes of yesterday and today, hourly, per lane.
HeaderStatusDescription
WWW-Authenticate401Authentication scheme required by this API.
Retry-After429Seconds before the client should retry.
Example 200 body
{
  "data": {
    "granularity": "hour",
    "from": "2026-11-02T09:30:00.000Z",
    "to": "2026-11-02T09:30:00.000Z",
    "as_of": "2026-11-02T09:30:00.000Z",
    "regions": [
      {
        "region": "<region>",
        "as_of": "2026-11-02T09:30:00.000Z"
      }
    ],
    "series": {
      "databases": [
        {
          "start": "2026-11-02T09:30:00.000Z",
          "write_units": 0,
          "append_bytes": 0,
          "records": 0
        }
      ],
      "streams": [
        {
          "start": "2026-11-02T09:30:00.000Z",
          "write_units": 0,
          "append_bytes": 0,
          "records": 0
        }
      ],
      "other": [
        {
          "start": "2026-11-02T09:30:00.000Z",
          "write_units": 0,
          "append_bytes": 0,
          "records": 0
        }
      ]
    },
    "unavailable_regions": [
      "<unavailable_regions>"
    ]
  }
}

Errors

StatusCodeWhenSend againWhat to do
401exchange_requiredThe key acts as an Agent, and an Agent’s key is never sent itself.NoExchange the key for a token at the endpoint the answer’s token_endpoint names, and send the token as Authorization: Bearer. (more)
401unauthenticatedThe request carries no key or token, or one that is invalid, expired or revoked.NoSend a valid key, or a token that has not expired, as Authorization: Bearer. (more)
403forbiddenThe key’s role does not hold the capability the operation needs, the key is narrowed away from the resource, or the account already holds as many of the resource as it may.NoUse a key whose role holds the capability, or one that is not narrowed; delete what you no longer need, or ask for a higher limit. (more)
429rate_limitedThe key or the account sent more requests than its rate allows.After Retry-AfterWait for the seconds Retry-After names, then send the request again; spread requests out if it recurs. (more)

Retries

  • A read: sending it again changes nothing.
  • 429 carry Retry-After: wait that many seconds, then send the same request again.
Request
curl -sS "https://api.tonbo.dev/v1/usage/today" \
  -H "Authorization: Bearer $TONBO_API_KEY"

Read each database's usage of one month at list price

GET /v1/usage/databases · CLI: tonbo database usage

Needs usage.read, which owner and admin hold. A narrowed key may not.

One row per listed database version (name, stream creation time and counting history) metered in the month, rolled up by contracts/streams-databases/v1.json kinds.values.<kind>.usage: a Machine's logs and inbox streams are added into its database's row, and a Volume's ledger into other; in every region the account reaches, including databases deleted during the month, plus other for metered usage outside the account's databases (its streams, which /usage/streams lists, session processing and anything unattributed), so the rows and other add up to the account's metered total. Values are at list price, before the monthly allowance and credit; Usage & billing (/usage) shows what is charged.

Parameters

NameInTypeRequiredDescription
periodquerystringnoThe calendar month in UTC; the current month when omitted. Matches ^[0-9]{4}-(0[1-9]|1[0-2])$.
sortqueryone of "-list_value" or "name"noBy list value, highest first (the default), or by name. Default "-list_value".
prefixquerystringnoOnly databases whose name starts with this prefix. 1 to 85 characters. Matches ^(?!m\.)(?!vol\.)(?!s\.)(?!session\.)(?!proc\.)[a-z0-9][a-z0-9._-]{0,84}$.
namesquerystringnoOnly these databases, 1 to 100 listed names, comma-separated (a database name or a Machine's database). At least 1 characters.
cursorquerystringnoOpaque cursor tied to the original query shape. At least 1 characters.
limitqueryintegernoThe most items one page holds, 1 to 200; 50 when omitted. A page may hold fewer; read on with next_cursor until it is null. Default 50. 1 to 200.

Response

StatusAnswer
200Per-database usage
FieldTypeRequiredDescription
periodstringyesThe calendar month counted, in UTC; the period asked for, or the current month. Matches ^[0-9]{4}-(0[1-9]|1[0-2])$.
as_ofstring (date-time) or nullyesThe oldest meter checkpoint among the regions read; usage after it is not yet counted. Null before a region's first.
currency"usd"yesusd: every _micros value is in millionths of a US dollar.
basis"at_list_price_before_allowance_and_credit"yesValues are at list price, before the monthly allowance and credit apply; GET /v1/usage answers what the account is charged.
pricingobjectyesThe list prices of contracts/billing/streams-prices-v1.json the values use.
pricing.write_unit_bytesintegeryesThe bytes of one write unit. A write counts one unit for each started unit of its bytes, and at least one.
pricing.write_micros_per_million_unitsintegeryesThe price of a million write units, in micro-dollars.
pricing.retention_micros_per_gib_monthintegeryesThe price of keeping one GiB for one month, in micro-dollars.
pricing.retention_unit_bytesintegeryesThe bytes of the GiB that price is quoted for, 1024^3.
pricing.retention_month_secondsintegeryesThe seconds of the month that price is quoted for, 30 days.
dataarray of DatabaseUsageyesOne row per database version metered in the month, in the order sort names.
otherDatabaseUsageAmountsyesMetered usage outside the account's databases (its streams, session processing and anything unattributed), in every region read.
next_cursorstring or nullyesThe cursor of the next page, sent with the same other parameters; null on the last page.
unavailable_regionsarray of stringyesRegions whose usage could not be read; their databases and other are missing from this answer.
HeaderStatusDescription
WWW-Authenticate401Authentication scheme required by this API.
Retry-After429Seconds before the client should retry.
Example 200 body
{
  "period": "2026-11",
  "as_of": "2026-11-02T09:30:00.000Z",
  "currency": "usd",
  "basis": "at_list_price_before_allowance_and_credit",
  "pricing": {
    "write_unit_bytes": 1,
    "write_micros_per_million_units": 1,
    "retention_micros_per_gib_month": 1,
    "retention_unit_bytes": 1,
    "retention_month_seconds": 1
  },
  "data": [
    {
      "write_units": "<write_units>",
      "retention_gib_months": "<retention_gib_months>",
      "snapshot_gib_months": "<snapshot_gib_months>",
      "list_value_micros": 0,
      "name": "<name>",
      "kind": "database",
      "owner_id": "3f1c2a9e-5b7d-4c8e-9f10-2a3b4c5d6e7f",
      "region": "<region>",
      "stream_created_at": "2026-11-02T09:30:00.000Z",
      "counted_since": "<counted_since>",
      "state": "active",
      "created_at": "2026-11-02T09:30:00.000Z",
      "deleted_at": "2026-11-02T09:30:00.000Z"
    }
  ],
  "other": {
    "write_units": "<write_units>",
    "retention_gib_months": "<retention_gib_months>",
    "snapshot_gib_months": "<snapshot_gib_months>",
    "list_value_micros": 0
  },
  "next_cursor": "<next_cursor>",
  "unavailable_regions": [
    "<unavailable_regions>"
  ]
}

Errors

StatusCodeWhenSend againWhat to do
401exchange_requiredThe key acts as an Agent, and an Agent’s key is never sent itself.NoExchange the key for a token at the endpoint the answer’s token_endpoint names, and send the token as Authorization: Bearer. (more)
401unauthenticatedThe request carries no key or token, or one that is invalid, expired or revoked.NoSend a valid key, or a token that has not expired, as Authorization: Bearer. (more)
403forbiddenThe key’s role does not hold the capability the operation needs, the key is narrowed away from the resource, or the account already holds as many of the resource as it may.NoUse a key whose role holds the capability, or one that is not narrowed; delete what you no longer need, or ask for a higher limit. (more)
422validation_errorA parameter, header or body field breaks its rule; errors names each field.NoCorrect the fields errors names; the operation’s reference gives each one’s rule. (more)
429rate_limitedThe key or the account sent more requests than its rate allows.After Retry-AfterWait for the seconds Retry-After names, then send the request again; spread requests out if it recurs. (more)

Retries

  • A read: sending it again changes nothing.
  • 429 carry Retry-After: wait that many seconds, then send the same request again.
Request
curl -sS "https://api.tonbo.dev/v1/usage/databases" \
  -H "Authorization: Bearer $TONBO_API_KEY"

Read each stream's usage of one month at list price

GET /v1/usage/streams · CLI: tonbo stream usage

Needs usage.read, which owner and admin hold. A narrowed key may not.

One row per stream version (name, stream creation time and counting history) metered in the month, in every region the account reaches, including streams deleted during the month, plus other for metered usage outside the account's streams (its databases, session processing and anything unattributed), so the rows and other add up to the account's metered total, as /usage/databases does for databases; no stream is a row of both. Values are at list price, before the monthly allowance and credit, which databases and streams share; Usage & billing (/usage) shows what is charged.

Parameters

NameInTypeRequiredDescription
periodquerystringnoThe calendar month in UTC; the current month when omitted. Matches ^[0-9]{4}-(0[1-9]|1[0-2])$.
sortqueryone of "-list_value" or "name"noBy list value, highest first (the default), or by name. Default "-list_value".
prefixquerystringnoOnly streams whose name starts with this prefix. 1 to 85 characters. Matches ^(?!m\.)(?!vol\.)(?!s\.)(?!session\.)(?!proc\.)[a-z0-9][a-z0-9._-]{0,84}$.
namesquerystringnoOnly these streams, 1 to 100 stream names, comma-separated. At least 1 characters.
cursorquerystringnoOpaque cursor tied to the original query shape. At least 1 characters.
limitqueryintegernoThe most items one page holds, 1 to 200; 50 when omitted. A page may hold fewer; read on with next_cursor until it is null. Default 50. 1 to 200.

Response

StatusAnswer
200Per-stream usage
FieldTypeRequiredDescription
periodstringyesThe calendar month counted, in UTC; the period asked for, or the current month. Matches ^[0-9]{4}-(0[1-9]|1[0-2])$.
as_ofstring (date-time) or nullyesThe oldest meter checkpoint among the regions read; usage after it is not yet counted. Null before a region's first.
currency"usd"yesusd: every _micros value is in millionths of a US dollar.
basis"at_list_price_before_allowance_and_credit"yesValues are at list price, before the monthly allowance and credit apply; GET /v1/usage answers what the account is charged.
pricingobjectyesThe list prices of contracts/billing/streams-prices-v1.json the values use.
pricing.write_unit_bytesintegeryesThe bytes of one write unit. A write counts one unit for each started unit of its bytes, and at least one.
pricing.write_micros_per_million_unitsintegeryesThe price of a million write units, in micro-dollars.
pricing.retention_micros_per_gib_monthintegeryesThe price of keeping one GiB for one month, in micro-dollars.
pricing.retention_unit_bytesintegeryesThe bytes of the GiB that price is quoted for, 1024^3.
pricing.retention_month_secondsintegeryesThe seconds of the month that price is quoted for, 30 days.
dataarray of StreamUsageyesOne row per stream version metered in the month, in the order sort names.
otherDatabaseUsageAmountsyesMetered usage outside the account's streams (its databases, session processing and anything unattributed), in every region read.
next_cursorstring or nullyesThe cursor of the next page, sent with the same other parameters; null on the last page.
unavailable_regionsarray of stringyesRegions whose usage could not be read; their streams and other are missing from this answer.
HeaderStatusDescription
WWW-Authenticate401Authentication scheme required by this API.
Retry-After429Seconds before the client should retry.
Example 200 body
{
  "period": "2026-11",
  "as_of": "2026-11-02T09:30:00.000Z",
  "currency": "usd",
  "basis": "at_list_price_before_allowance_and_credit",
  "pricing": {
    "write_unit_bytes": 1,
    "write_micros_per_million_units": 1,
    "retention_micros_per_gib_month": 1,
    "retention_unit_bytes": 1,
    "retention_month_seconds": 1
  },
  "data": [
    {
      "write_units": "<write_units>",
      "retention_gib_months": "<retention_gib_months>",
      "snapshot_gib_months": "<snapshot_gib_months>",
      "list_value_micros": 0,
      "name": "<name>",
      "region": "<region>",
      "stream_created_at": "2026-11-02T09:30:00.000Z",
      "counted_since": "<counted_since>",
      "state": "active",
      "created_at": "2026-11-02T09:30:00.000Z",
      "deleted_at": "2026-11-02T09:30:00.000Z"
    }
  ],
  "other": {
    "write_units": "<write_units>",
    "retention_gib_months": "<retention_gib_months>",
    "snapshot_gib_months": "<snapshot_gib_months>",
    "list_value_micros": 0
  },
  "next_cursor": "<next_cursor>",
  "unavailable_regions": [
    "<unavailable_regions>"
  ]
}

Errors

StatusCodeWhenSend againWhat to do
401exchange_requiredThe key acts as an Agent, and an Agent’s key is never sent itself.NoExchange the key for a token at the endpoint the answer’s token_endpoint names, and send the token as Authorization: Bearer. (more)
401unauthenticatedThe request carries no key or token, or one that is invalid, expired or revoked.NoSend a valid key, or a token that has not expired, as Authorization: Bearer. (more)
403forbiddenThe key’s role does not hold the capability the operation needs, the key is narrowed away from the resource, or the account already holds as many of the resource as it may.NoUse a key whose role holds the capability, or one that is not narrowed; delete what you no longer need, or ask for a higher limit. (more)
422validation_errorA parameter, header or body field breaks its rule; errors names each field.NoCorrect the fields errors names; the operation’s reference gives each one’s rule. (more)
429rate_limitedThe key or the account sent more requests than its rate allows.After Retry-AfterWait for the seconds Retry-After names, then send the request again; spread requests out if it recurs. (more)

Retries

  • A read: sending it again changes nothing.
  • 429 carry Retry-After: wait that many seconds, then send the same request again.
Request
curl -sS "https://api.tonbo.dev/v1/usage/streams" \
  -H "Authorization: Bearer $TONBO_API_KEY"

Objects

DatabaseUsage

FieldTypeRequiredDescription
write_unitsstringyesWrite units, an integer as text. Matches ^(0|[1-9][0-9]*)$.
retention_gib_monthsstringyesThe retained log in GiB-months (GiB = 1024^3 bytes, month = retention_month_seconds), a decimal as text.
snapshot_gib_monthsstring or nullyesSnapshots in GiB-months, a decimal as text; null when never reported.
list_value_microsintegeryesThe value at list price in micro-dollars, before allowance and credit. At least 0.
namestring or stringyesThe database's name; a Machine's database is m.<machine id>.
kindone of "database" or "machine"yesdatabase for one a member created, machine for a Machine's own.
owner_idstring (uuid) or nullyesThe Machine that owns a machine row, whose logs and inbox streams are added into it; null for a member's database.
regionstringyesThe database's region. Matches ^[a-z]{2}-[a-z]+-[0-9]$.
stream_created_atstring (date-time)yesWhen Ursula created the stream version; with counted_since, the version the row is.
counted_sincestringyesThe Ursula usage history the version began counting in, 16 hex digits. Matches ^[0-9a-f]{16}$.
stateone of "active" or "deleted"yesactive while this version of the database exists, deleted once it was deleted; a deleted version's usage in the month still counts.
created_atstring (date-time) or nullyesNull for a metered version the registry does not know.
deleted_atstring (date-time) or nullyesWhen this version was deleted; null while it is active.
Example DatabaseUsage
{
  "write_units": "<write_units>",
  "retention_gib_months": "<retention_gib_months>",
  "snapshot_gib_months": "<snapshot_gib_months>",
  "list_value_micros": 0,
  "name": "<name>",
  "kind": "database",
  "owner_id": "3f1c2a9e-5b7d-4c8e-9f10-2a3b4c5d6e7f",
  "region": "<region>",
  "stream_created_at": "2026-11-02T09:30:00.000Z",
  "counted_since": "<counted_since>",
  "state": "active",
  "created_at": "2026-11-02T09:30:00.000Z",
  "deleted_at": "2026-11-02T09:30:00.000Z"
}

DatabaseUsageAmounts

FieldTypeRequiredDescription
write_unitsstringyesWrite units, an integer as text. Matches ^(0|[1-9][0-9]*)$.
retention_gib_monthsstringyesThe retained log in GiB-months (GiB = 1024^3 bytes, month = retention_month_seconds), a decimal as text.
snapshot_gib_monthsstring or nullyesSnapshots in GiB-months, a decimal as text; null when never reported.
list_value_microsintegeryesThe value at list price in micro-dollars, before allowance and credit. At least 0.
Example DatabaseUsageAmounts
{
  "write_units": "<write_units>",
  "retention_gib_months": "<retention_gib_months>",
  "snapshot_gib_months": "<snapshot_gib_months>",
  "list_value_micros": 0
}

StreamUsage

FieldTypeRequiredDescription
write_unitsstringyesWrite units, an integer as text. Matches ^(0|[1-9][0-9]*)$.
retention_gib_monthsstringyesThe retained log in GiB-months (GiB = 1024^3 bytes, month = retention_month_seconds), a decimal as text.
snapshot_gib_monthsstring or nullyesSnapshots in GiB-months, a decimal as text; null when never reported.
list_value_microsintegeryesThe value at list price in micro-dollars, before allowance and credit. At least 0.
namestringyesThe stream's name, without s.. 1 to 83 characters. Matches ^(?!m\.)(?!vol\.)(?!s\.)(?!session\.)(?!proc\.)(?!(?:streams|new)$)(?!.*\.\.)[a-z0-9](?:[a-z0-9._-]{0,81}[a-z0-9])?$.
regionstringyesThe stream's region. Matches ^[a-z]{2}-[a-z]+-[0-9]$.
stream_created_atstring (date-time)yesWhen Ursula created the stream version; with counted_since, the version the row is.
counted_sincestringyesThe Ursula usage history the version began counting in, 16 hex digits. Matches ^[0-9a-f]{16}$.
stateone of "active" or "deleted"yesactive while this version of the stream exists, deleted once it was deleted; a deleted version's usage in the month still counts.
created_atstring (date-time) or nullyesNull for a metered version the registry does not know.
deleted_atstring (date-time) or nullyesWhen this version was deleted; null while it is active.
Example StreamUsage
{
  "write_units": "<write_units>",
  "retention_gib_months": "<retention_gib_months>",
  "snapshot_gib_months": "<snapshot_gib_months>",
  "list_value_micros": 0,
  "name": "<name>",
  "region": "<region>",
  "stream_created_at": "2026-11-02T09:30:00.000Z",
  "counted_since": "<counted_since>",
  "state": "active",
  "created_at": "2026-11-02T09:30:00.000Z",
  "deleted_at": "2026-11-02T09:30:00.000Z"
}

Usage

FieldTypeRequiredDescription
periodstringyesThe calendar month counted, in UTC; the period asked for, or the current month. Matches ^[0-9]{4}-(0[1-9]|1[0-2])$.
currency"usd"yesusd: every _micros amount is in millionths of a US dollar.
total_microsintegeryesThe month's total, the sum of every line's amount_micros.
linesarray of objectyesOne line for each product, region, dimension and model charged in the month, in that order.
lines[].productstringyesThe product charged, such as streams for databases and streams, or machines.
lines[].regionstringyesThe region the usage was in.
lines[].dimensionstringyesWhat was measured, such as write_units or retention_byte_seconds.
lines[].modelstring or nullyesThe model the line was priced for, for a product priced by model; null otherwise.
lines[].quantitystringyesDecimal quantity, as text.
lines[].amount_microsintegeryesThe line's charge, in micro-dollars.
Example Usage
{
  "period": "2026-11",
  "currency": "usd",
  "total_micros": 1,
  "lines": [
    {
      "product": "<product>",
      "region": "<region>",
      "dimension": "<dimension>",
      "model": "<model>",
      "quantity": "<quantity>",
      "amount_micros": 1
    }
  ]
}

UsageToday

The account's writes of yesterday and today, hourly, per lane.

FieldTypeRequiredDescription
granularityone of "hour"yesOne point per UTC hour.
fromstring (date-time)yesYesterday's start, UTC.
tostring (date-time)yesTomorrow's start, UTC (exclusive).
as_ofstring (date-time) or nullyesThe oldest checkpoint of the regions read; null when one of them has none or no region was read.
regionsarray of objectyesEach region read, by id, with its meter's checkpoint.
regions[].regionstringyesThe region. Matches ^[a-z]{2}-[a-z]+-[0-9]$.
regions[].as_ofstring (date-time) or nullyesWhen its meter last completed a poll; null when it has never completed one.
seriesobjectyesThe writes of each lane, 48 hourly points each, oldest first.
series.databasesarray of WritePointyesThe account's databases, with each Machine's database, logs and inbox.
series.streamsarray of WritePointyesThe account's raw streams.
series.otherarray of WritePointyesEverything else metered for the account (session processing, a Volume's ledger, usage accounted to a bucket rather than a stream).
unavailable_regionsarray of stringyesRegions of the account that could not be read, left out of the sums.
Example UsageToday
{
  "granularity": "hour",
  "from": "2026-11-02T09:30:00.000Z",
  "to": "2026-11-02T09:30:00.000Z",
  "as_of": "2026-11-02T09:30:00.000Z",
  "regions": [
    {
      "region": "<region>",
      "as_of": "2026-11-02T09:30:00.000Z"
    }
  ],
  "series": {
    "databases": [
      {
        "start": "2026-11-02T09:30:00.000Z",
        "write_units": 0,
        "append_bytes": 0,
        "records": 0
      }
    ],
    "streams": [
      {
        "start": "2026-11-02T09:30:00.000Z",
        "write_units": 0,
        "append_bytes": 0,
        "records": 0
      }
    ],
    "other": [
      {
        "start": "2026-11-02T09:30:00.000Z",
        "write_units": 0,
        "append_bytes": 0,
        "records": 0
      }
    ]
  },
  "unavailable_regions": [
    "<unavailable_regions>"
  ]
}

WritePoint

One step of a write series.

FieldTypeRequiredDescription
startstring (date-time)yesThe step's start, on its UTC hour or day.
write_unitsinteger or nullyesWrite units committed in the step (contracts/billing/streams-prices-v1.json write_unit_bytes each); null for a step that starts after now. At least 0.
append_bytesinteger or nullyesBytes appended in the step; null for a step that starts after now. At least 0.
recordsinteger or nullyesRecords appended in the step; null for a step that starts after now. At least 0.
Example WritePoint
{
  "start": "2026-11-02T09:30:00.000Z",
  "write_units": 0,
  "append_bytes": 0,
  "records": 0
}