The endpoints
Each one below lists its plan tier, every parameter, the response shape and an example. They are the same entries as in the full reference, which carries all 48 operations of the API on one page.
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_..."