Skip to content

Usage and reports

Limitry counts every check per limit, per subject, per hour. Reports in the app and the API are at most about a minute behind. Test and live each have their own usage: the app shows the side you picked, and the API answers for the key’s environment.

The Usage page shows, for the limit you pick:

  • Last 30 days: units used per day (UTC), across all subjects. A plan that keeps less history shows fewer days: Free keeps 7.
  • Right now: the subjects using the limit, most used first, with what each has used and has left in its current period. For a limit that resets on each subject’s billing date or from first use, that’s each subject’s own period. A subject that was refused shows how many of its checks were refused. Owners and admins can Reset a subject, which resets it at once (see When limits reset).
The Usage page's Last 30 days chart for AI budget: 14,262 cents used across all users, rising toward the end of the month, with quieter weekends.The Usage page's Last 30 days chart for AI budget: 14,262 cents used across all users, rising toward the end of the month, with quieter weekends.The Usage page's Last 30 days chart for AI budget: 14,262 cents used across all users, rising toward the end of the month, with quieter weekends.The Usage page's Last 30 days chart for AI budget: 14,262 cents used across all users, rising toward the end of the month, with quieter weekends.
The Usage page's Right now table: users by use this month; the top two used all 200 cents, with 2 and 6 checks refused.The Usage page's Right now table: users by use this month; the top two used all 200 cents, with 2 and 6 checks refused.The Usage page's Right now table: users by use this month; the top two used all 200 cents, with 2 and 6 checks refused.The Usage page's Right now table: users by use this month; the top two used all 200 cents, with 2 and 6 checks refused.

Busiest subjects, at the bottom of the page, lists the five subjects that made the most checks a second in the last 7 days, with when. The figure is a minute’s checks divided by 60, for the subject’s busiest minute. Limitry handles up to about 100 checks a second on one subject. A subject making 60 or more a second gets a note that it’s busy: Limitry is handling it, and there’s nothing for you to do.

A limit’s use over time, by day (the default) or by hour, and who is using it in the current window. A key or token needs limits:read:

import { createClient } from "@limitry/sdk";
const limitry = createClient();
const history = await limitry.usage.query({
limitId: "lmt_3f0c…",
granularity: "day",
});
const now = await limitry.usage.subjects({ limitId: "lmt_3f0c…" });

The history has every bucket in the range, zeros included, each with used, allowed and refused. Add subject (as kind:id, such as user:usr_123) for one subject, and from and to (ISO times) for a different range. The default range is the last 30 days, and no range reaches further back than your plan’s history (Free keeps 7 days; see Plan allowances). used is net: Limitry gives back the unused part of a reservation, and all of a released one.

For a balance (window total), what’s left includes the credits you’ve added.

Limitry keeps usage for 13 months on every plan. Your plan sets how far back you can look: 7 days on Free, 90 days on Pro, 13 months on Growth. After an upgrade, the older usage is there to see.

To read a whole billing period after it ends, use Pro or Growth. On Free, send each finished hour to your billing system as it ends, as Use Limitry with Stripe does.

The first time a limit refuses a subject in a window, your webhook endpoints receive limit.reached. Here a user has spent this month’s AI budget:

{
"type": "limit.reached",
"data": {
"limitId": "lmt_…",
"name": "AI budget",
"action": "ai-call",
"unit": "cents",
"window": "month",
"subject": { "kind": "user", "id": "usr_123" },
"environment": "live",
"windowStart": "2026-10-01T00:00:00.000Z",
"resetsAt": "2026-11-01T00:00:00.000Z"
}
}

It’s sent once per subject, limit and window, not on every refused check. environment says whether it happened in test or live, and only that environment’s endpoints receive it. resetsAt is null for a balance. Add an endpoint under Settings → Webhooks.

To hear before a subject is refused, use limit.threshold_crossed, sent at 80% and 100% of a limit. See Warnings before a limit.

limitry.standing(...) in the SDKs (limitry usage standing on the CLI) answers where one subject stands on every limit that applies to it, exactly as a check would see it. It’s what you call to show your own users how much they have left. See Show users where they stand.