API status & changelog
What uptime and response time to expect, the limits that apply today, and how we roll out changes. The machine-readable version is at /api/status.json.
Latency & error SLOs
These are the service-level objectives we hold ourselves to. They are targets, not a contractual SLA: the API is in early access and provided as available. We alert on the objectives that have a live in-process signal (egress probe latency and consecutive extraction failures) and monitor the rest from request telemetry.
| Objective | Target | Window | How it is evaluated |
|---|---|---|---|
| API availability Share of API requests that return a response other than a 5xx, over a 30-day rolling window. |
99.5% of requests succeed |
30-day rolling | non_5xx_ratio >= 99.5% |
| Response time — cached and metadata endpoints Cached transcripts, /api/health, /api/plans and other metadata reads. Liveness must never block on a third-party call. |
p95 ≤ 500 ms |
30-day rolling | p95 <= 500 ms |
| Response time — uncached extraction A first-time transcript extraction (YouTube caption fetch) for a single public video. Cached repeats are served from the response-time objective above. |
p95 ≤ 8 s |
30-day rolling | p95 <= 8 s |
| YouTube egress probe latency Latency of the background egress probe reported at /api/health and /api/health/egress. A rising probe is an early warning that extraction will degrade. |
p95 ≤ 2,000 ms |
rolling probe | probe latency <= 2,000 ms |
| Consecutive extraction failures Consecutive failed extractions before an operator alert fires. Any run of three is treated as a dependency incident, not a user error. |
0 (alert at 3) |
live | consecutive_failures < 3 |
| Server error rate Share of API requests that return a 5xx. Expected extraction failures (blocked/unavailable videos) return a mapped 4xx and are not counted here. |
< 1% of requests are 5xx |
30-day rolling | 5xx_ratio < 1% |
| Liveness response time GET /api/health and GET /api/health/ready must answer immediately; dependency state is reported, not awaited, on the liveness path. |
≤ 100 ms |
live | liveness responds <= 100 ms |
Health endpoints: GET /api/health is a liveness check that always answers immediately and never blocks on a third-party call. GET /api/health/ready is a readiness check that returns 503 when the YouTube egress is unavailable, so orchestrators can take a broken instance out of rotation. GET /api/health/egress runs one bounded egress probe on demand.
Current limits
- Free plan: 10,000 credits per account, 120 requests per minute per key.
- Anonymous visitors: 600 credits per day per visitor, no key required.
- Batch requests: up to 50 video IDs per
POST /v1/transcriptscall. - Credits are consumed per successful transcript; a batch authorizes its full cost before processing.
- Higher limits are available for larger workloads — see
/api/plansor contact us.
Rate-limit policy
Rate limits are per API key (or per visitor/IP for anonymous traffic) and are returned on every response:
| Header | Meaning |
|---|---|
X-RateLimit-Limit | The request ceiling for the current minute. |
X-RateLimit-Remaining | Requests left in the current window. |
X-RateLimit-Reset | Unix time when the window resets. |
Retry-After | Seconds to wait, sent with a 429. |
When you exceed the limit the API returns 429 RATE_LIMITED with a Retry-After header. We recommend exponential backoff with jitter and honoring Retry-After. A burst above the limit is rejected, not queued.
Deprecation policy
- Additive changes ship without notice. New endpoints, new optional parameters and new response fields are backwards compatible.
- Breaking changes are announced here and in the changelog below at least 90 days before they take effect, with a migration path.
- Deprecated endpoints keep working for at least 12 months after the announcement, and responses may carry a
DeprecationorSunsethint header. - Versioning. The API is served under
/v1. A future incompatible version will be introduced alongside/v1rather than replacing it in place, so existing integrations keep working.
Changelog
- September 2026 — Published /api/status: latency/error SLOs, rate-limit and deprecation policy, and this changelog. Added a readiness probe at /api/health/ready and operator alerting for egress health regressions and runs of consecutive extraction failures. Live status is available at /api/status.json.
- September 2026 — Batch transcript requests now authorize the whole batch cost up front, returning a clear INSUFFICIENT_CREDITS error instead of partially charging a request that cannot complete.
- September 2026 — Translation fallback hardened: keyless auto-translated tracks that YouTube bot-gates were removed, and native-language translation returns real translations.
- September 2026 — Signup hardened with a CAPTCHA challenge and multi-account abuse protection, plus a credit-exhausted upgrade nudge in the dashboard.
- September 2026 — Developer API site redesign, an API blog in 10 languages, and dedicated legal and contact pages.
- September 2026 — Consumer site redesign and the post-analysis video workspace.
Incidents
This page and /api/status.json are the source of truth for availability. If something looks wrong, include the X-Request-ID from the failing response and send us a message — that is usually enough to reproduce it.