---
title: "OpenRouter public usage series"
method: GET
path: "/api/v1/public/usage/openrouter"
tags: ["Usage"]
---

# OpenRouter public usage series

`GET /api/v1/public/usage/openrouter`

## Request

- Base URL: `https://api.crbonfree.com`
- URL: `https://api.crbonfree.com/api/v1/public/usage/openrouter`
- Auth: none required
- TypeScript: <https://skmtc.dev/crbonfree/apis/crbonfree-api/docs/api/v1/public/usage/openrouter/get.ts> (a function with typed inputs; its response is checked against the schema)

Monthly token totals from OpenRouter's public rankings dataset (https://openrouter.ai/rankings), with the provider share stack and top models for every complete month. Synced daily by the backend. No auth required. Cached for 30 minutes; `asOf` is the last successful sync, `computedAt` when the payload was computed. The optional `windows` carries the 30 and 365 day figures of the dashboard demo's OpenRouter connection (the numbers its page on /openrouter-demo shows) and is left out when they cannot be computed.

## Response `200`

OpenRouter series

- object
  - `success` true, required
  - `data` PublicOpenRouterUsage, required
    - `asOf` string, required: YYYY-MM-DD of the last successful dataset sync.
    - `coverageEnd` string, required: YYYY-MM-DD; the last day the dataset covered at the last sync. Months whose last day is after this are served as partial.
    - `months` object[], required
      - `month` string, required: Calendar month, YYYY-MM (UTC).
      - `tokens` number, required
      - `partial` boolean: Present and true only for a month the dataset had not fully covered.
    - `byMonth` object[], required
      - `month` string, required
      - `total` number, required
      - `providers` object[], required
        - `slug` string, required
        - `name` string, required
        - `tokens` number, required
        - `pct` number, required
      - `models` object[], required
        - `slug` string, required: OpenRouter permaslug, e.g. deepseek/deepseek-v4-flash-20260731.
        - `name` string, required
        - `provider` string, required
        - `providerSlug` string, required
        - `version` string: ISO date of the model version, when the permaslug carries one.
        - `free` boolean, required
        - `tokens` number, required
        - `pct` number, required
    - `sourceUrl` string, required
    - `computedAt` string, required: ISO-8601; when the backend computed this payload.
    - `windows` object: The 30 and 365 day figures of the dashboard demo's OpenRouter connection, the same numbers that connection's page on /openrouter-demo shows, each in the GET /api/v1/public/usage/crbonlabs shape. They count that one connection only, never the demo's sample connections, so `byProvider` is its single `openrouter` row, not a split by model vendor. OpenRouter's public dataset publishes no request counts, so `totals.requestCount` is not a count of OpenRouter requests. A window that cannot be computed is left out, never zero-filled; with none left, so is `windows`.
      - `30d` PublicShowcaseUsage
        - `range` object, required
          - `start` string, required
          - `end` string, required
        - `totals` object, required
          - `totalTokens` number, required
          - `inputTokens` number, required: Uncached + cached + cache-creation input tokens.
          - `outputTokens` number, required
          - `requestCount` number, required
          - `carbonKg` number, required
          - `electricityKwh` number, required
          - `waterLiters` number, required: Estimated water footprint in liters. ESTIMATE ONLY.
          - `waterLowerBoundL` number, required: Lower uncertainty bound of the water estimate (liters).
          - `waterUpperBoundL` number, required: Upper uncertainty bound of the water estimate (liters).
        - `avgDailyTokens` number, required: totalTokens over the number of days in the range.
        - `daily` object[], required
          - `date` string, required: UTC day, YYYY-MM-DD.
          - `totalTokens` number, required
          - `inputTokens` number, required
          - `outputTokens` number, required
          - `carbonKg` number, required
          - `electricityKwh` number, required
          - `waterLiters` number, required
        - `byProvider` object[], required
          - `provider` string, required
          - `totalTokens` number, required
          - `pct` number, required: Share of the range totalTokens, one decimal, 0–100.
        - `methodology` object, required
          - `factorsVersion` string, required
          - `framework` string, required
        - `computedAt` string, required: ISO-8601; when the backend computed this payload.
      - `365d` PublicShowcaseUsage
        - `range` object, required
          - `start` string, required
          - `end` string, required
        - `totals` object, required
          - `totalTokens` number, required
          - `inputTokens` number, required: Uncached + cached + cache-creation input tokens.
          - `outputTokens` number, required
          - `requestCount` number, required
          - `carbonKg` number, required
          - `electricityKwh` number, required
          - `waterLiters` number, required: Estimated water footprint in liters. ESTIMATE ONLY.
          - `waterLowerBoundL` number, required: Lower uncertainty bound of the water estimate (liters).
          - `waterUpperBoundL` number, required: Upper uncertainty bound of the water estimate (liters).
        - `avgDailyTokens` number, required: totalTokens over the number of days in the range.
        - `daily` object[], required
          - `date` string, required: UTC day, YYYY-MM-DD.
          - `totalTokens` number, required
          - `inputTokens` number, required
          - `outputTokens` number, required
          - `carbonKg` number, required
          - `electricityKwh` number, required
          - `waterLiters` number, required
        - `byProvider` object[], required
          - `provider` string, required
          - `totalTokens` number, required
          - `pct` number, required: Share of the range totalTokens, one decimal, 0–100.
        - `methodology` object, required
          - `factorsVersion` string, required
          - `framework` string, required
        - `computedAt` string, required: ISO-8601; when the backend computed this payload.

## Other responses

- `400`: Bad request — validation failed or malformed JSON body
- `401`: Unauthorized — token missing, expired, or invalid
- `429`: Too many requests — rate limit exceeded
- `500`: Internal server error
- `503`: Not available — showcase organisation not configured, or the OpenRouter dataset has not been synced yet

## Changes

- **2026-10-22** `2e8a8fe9e231`: 1 info
  - added the optional property `data/windows` to the response with the `200` status
- **2026-09-10** `c012db361335`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/crbonfree/apis/crbonfree-api/changes/api/v1/public/usage/openrouter/get.md)

---

[API](https://skmtc.dev/crbonfree/apis/crbonfree-api.md) - [All operations](https://skmtc.dev/crbonfree/apis/crbonfree-api/llms.txt) - [OpenAPI document](https://skmtc.dev/crbonfree/apis/crbonfree-api/revisions/a21ffdb80e67?raw)
