GET /health
Liveness probe (no auth)
Responses
| Status | Meaning |
|---|---|
200 | OK |
Response fields
| Field | Type | Description |
|---|---|---|
status | string | |
version | string |
Example
curl https://api.livetennisapi.com/api/public/v1/health
GET /usage
Your own usage vs quota (FREE — any tier)
Durable daily usage for the calling key: tier, limits, today's calls (current to the second) and a 30-day history. The per-minute window is on the X-RateLimit-* headers of every response, not here. Calls to this endpoint are quota-exempt — checking your usage never consumes it.
Responses
| Status | Meaning |
|---|---|
200 | Usage summary |
401 | Missing, unknown, or disabled credentials |
429 | Rate limit exceeded (Retry-After header present). Three body shapes, told apart by error and scope: the per-MINUTE limit (rate_limited, with upgrade_url, tier and price naming the next tier up); the per-DAY quota (rate_limited with scope: "day", limit_per_day, and resets_at — the absolute ISO instant the daily window resets); and abuse_throttled with retry_at_epoch — a 24-hour block applied to clients that keep hammering far past their cap, which a well-behaved retry loop never sees. Fix the loop rather than retrying through it. |
Response fields
| Field | Type | Description |
|---|---|---|
principal | string | Opaque ref to your own key |
tier | string (free, basic, pro, ultra) | |
base_tier | string | Subscription tier; equals tier unless a temporary grant is active |
tier_expires_at | string or null | When a temporary tier grant reverts, else null |
channel | string | |
limits | object | |
today | object | |
history | array of object | Last 30 days, oldest first |
as_of | string |
Example
curl https://api.livetennisapi.com/api/public/v1/usage \
-H "Authorization: Bearer twjp_..."