Skip to main content
Drain traffic is attributable: what was delivered, what was dropped, what your destination refused — per drain, per day, per organization.
Metered and reported, not billed. Every usage line comes back with unpriced: true today: the platform measures drain traffic and attributes it to your organization, and charges nothing for it. The line item exists so that the numbers behind any future price are visible before it exists, not after.
Metering is switched on per deployment and is separate from delivery, so it can be armed or disarmed without interrupting your logs. Where it is off, the usage route answers with empty periods rather than an error.

What is metered

One record per settled batch, and one per drop — never one per record. Billable is deliveredRecords − rejectedRecords. Nothing else. Drops and failures appear on the row so you can see the gap and reconcile it against your delivery rows, and they are excluded from every billable total. A retry is not metered. Those records are not settled; they re-enter the pending pool and are metered when they eventually settle. Metering a retry would count the same records twice. A heartbeat, a verification, and an in-band drop report are the platform talking about itself, so none of them is metered either.
The billable figure is computed per batch and then summed — not as Σdelivered − Σrejected. A terminally refused batch meters delivered: 0, rejected: N; on its own row that is zero, but subtracted from a total it would credit N against batches that were delivered successfully. One failed batch would quietly reduce what you are counted for on your successful ones.Bytes are pro-rated by each batch’s own accepted fraction, for the same reason: there is no per-record byte count to subtract, so pro-rating per batch keeps the error inside that batch instead of spreading it across the month.

GET /admin/orgs/:orgId/usage/log-drains

Scope: usage:read — the same scope as the rest of the usage dashboard, and narrower than logs:manage. The response reports your own traffic and carries no drain configuration, no endpoint, and no credential.
string
YYYY-MM. Defaults to the current UTC month.
Response
usd is max(eventsUsd, bytesUsd) — never the sum. The per-event and per-GiB readings are alternative readings of the same traffic, and adding them would count one delivery twice. No monetary figure is ever written onto a usage record. The line is priced at read time from the current price card, which is why correcting a card fixes last month’s report rather than only next month’s. unpriced: true means the price card is all zeroes — metered, not yet priced.

Daily allowances

Each drain has a daily event and byte allowance from your tier: Going over degrades the drain in steps rather than cutting it off: warn and error records are the last to go: the ladder never drops them before it pauses the drain. Counters reset at 00:00 UTC.
A read of a drain reports your plan’s live limits, not the ones in force when the drain was created. An organization that upgrades this morning is told its new ceiling straight away, on the same quota block, with its counters, resetsAt and degradation untouched. There is nothing to re-create and nothing to migrate.
An organization on a negotiated allowance sees its own numbers here rather than its tier’s defaults.

Reconciling against your own destination

The usage numbers and the delivery rows for the same batch carry the same counts, so the comparison is an equality rather than a tolerance. Delivery rows are kept for 7 days, so only a recent window can be compared this way.
A gap means metering was off for part of the window, or a process died between writing a delivery row and its usage record. It never means a record was delivered twice.
This is a read model, not a ledger. It reports what the meter wrote. A window in which metering was off is a window with no records, and there is no backfill — delivery rows expire after 7 days, so only a recent gap can be reconstructed at all. Treat the numbers as reconciliation-grade rather than accounting-grade.

See also