Export the platform-wide key usage-limits report as CSV

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.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…
Query Params
tenantIds
array of uuids

Optional: Filter by specific tenants (comma-separated UUIDs)

tenantIds
Headers
string
enum
Defaults to application/problem+json

Generated from available response content types

Allowed:
Responses

Language
Credentials
Bearer
JWT
URL
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
text/csv
application/problem+json