0.11.0
- Removed three operations that were declared but never served:
GET /v1/jobs(job groups are the unit of work; list and read them through/v1/groups),GET /v1/shows/{show_id}(search and charts carry the metadata, the episodes listing carries the catalogue), and/v1/preferences. - Added
GET /v1/resolve, a pointer to canonical ids and cache and price hints without a job, andGET /v1/languages, the supported-language table. POST /v1/billing/refundstays declared and says on its own operation that it is not yet routed.request_idmay contain hyphens: a refusal generated at the edge carries the gateway’s own id.- Search results are ordered by title match, then catalogue size; an exact title search and a fuzzy search are merged so the show a name means is always a candidate.
- The quote ceiling is the estimate plus 25%, up from 10%, because feeds routinely under-state their length.
0.10.0
- Checkout, the Customer Portal and the invoice list are served from the
dashboard, and the billing address gets
GETandPUT /v1/billing/address. - Checkout takes a plan
tier, never a Stripe price identifier. - New error code
tier_unchangedfor a checkout against the plan already held. - Quote responses carry
balance_creditsandreserved_credits, so an API-key caller sees what it holds before it confirms.
0.9.0
- The API key operations are served: create, list, revoke. A create shows the plaintext key exactly once.
- New error code
api_key_limit_reached; the limit travels in the message. - Test-mode keys (
hk_test_) remain declared and refused: the fixture corpus that makes them useful does not exist yet.
0.8.0 and 0.8.1
GET /v1/usageandGET /v1/limitsare served, for the dashboard’s session only. 0.8.1 withdrew the declaration that an API key could call them; an API-key caller reads its balance from any quote response instead.- Usage gains a daily series for the current period, the plan’s included credits, the credits held beyond them, and when the allowance resets.
0.7.0
POST /v1/sessionestablishes the dashboard’s session and repairs an account whose sign-up trigger was cut short, so a confirmed sign-in always has an account behind it.
0.6.0
- Account state is a typed refusal:
account_suspended,account_closedandaccount_not_found, on writes only. Reads keep working until the account’s keys are revoked. GET /v1/reads/{read_id}is new: the transcript behind a cached read a confirm already paid for, in every format, charging nothing.
0.5.0
- New error codes
request_in_progress(retry with the same idempotency key),quote_unverifiedandexpected_total_mismatch. - A confirm may restate the quote’s total as
expected_total_credits; the API refuses to spend past it. - Cache hits at submit time carry the
X-Transcript-*andX-Credits-Chargedheaders.
0.4.0
- Transcript delivery is served:
GET /v1/transcripts/{job_id}andGET /v1/episodes/{episode_id}/transcript, injson,text,srt,vttandmd.
0.3.0
- The write surface: confirm a quote into a job group, list groups, read a group, cancel a group. Every job belongs to a group; a single submit is a group of one.
0.2.0
- The credential travels only as
Authorization: Bearer hk_live_...; thex-api-keyalias is gone. - Show search marks music-led shows instead of dropping them. Category charts and quotes are new.

