Returns the SAME report GET /usage-limits serves on this plane, rendered as an RFC 4180
CSV attachment for an audit package, a spreadsheet or a third party. The optional
tenantIds filter is the one the JSON endpoint accepts and narrows the same population.
One computation, two representations. The figures are produced once, by the same
service call the JSON endpoint makes, and then written. Nothing is recomputed for the
export, so the file and the screen cannot disagree about a number.
What the file states about itself. It opens with a #-led preamble carrying, in the
artifact rather than in a covering email: the report name; the scope — which states
whether the read covered ALL tenants or an explicit filtered set, and names the ids when
it was filtered, because a cross-tenant figure with no statement of which tenants it
spans is not evidence; the population (keys subject to a hard maxUsageLimit, meaning
one greater than zero — a key with no cap is outside the report, because a percentage
of an absent limit does not exist, and under the platform sentinel an unlimited key is
stored as 0 rather than as an absent value); the completeness of the rows
(COMPLETE); and then EVERY member the JSON
response publishes, keyed by that member's own JSON name, including
usageHighAbovePercent, usageCriticalAbovePercent and generatedAt. The instant is
the report's own, never a second clock reading taken at write time.
The data records follow, one per key, under a header row that IS
UsageLimitKeyInfo's member list in declaration order. The file terminates with
# EXPORT COMPLETE; its ABSENCE is the third state, and means the stream broke before
the end — an HTTP 200 already on the wire cannot be retracted, so a short well-formed
CSV with no marker must not be read as the whole report.
Why produces names application/json as well as text/csv: the success
representation is CSV, but every refusal this operation can answer is an RFC 9457
application/problem+json body. A mapping that narrowed produces to text/csv alone
would be unselectable by a client sending Accept: application/json, which collapses
those error bodies along with the success status.
Authorization: the report's own scope — platform.analytics.read. Exporting a
report is reading it, so it grants nothing the screen does not.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||