0.16.0
- Added
feed_urlanditunes_idbesideepisode_idonPOST /v1/transcripts. An episode nobody has transcribed yet, asGET /v1/shows/{show_id}/episodeslists it, is transcribed by its id plus the feed URL and Apple id that listing took; the feed is read for the item whose id matches, and the job keeps that id. Anepisode_idalone still works for an episode the catalog holds, and its404 episode_not_foundnow says what to send.
0.15.0
- Added
read_idto every transcript read (POST /v1/transcriptson a cache hit,GET /v1/episodes/{episode_id}/transcript, andGET /v1/reads/{read_id}itself). It is the receipt the read was charged under:GET /v1/reads/{read_id}delivers the same transcript again, in any format, for nothing.
0.14.0
- Added
show_titleandepisode_titleto a job’s status (GET /v1/transcripts/{job_id}), to every member of a group (GET /v1/groups/{group_id}), and to a transcript read (POST /v1/transcriptson a cache hit,GET /v1/reads/{read_id},GET /v1/episodes/{episode_id}/transcript). They are the titles the job or read was created with, so a list of ids can say what each one is. Both are always present andnullwhere unknown, as on jobs created before this version.
0.13.0
- One call is the default path.
POST /v1/transcriptstakes a fourth input shape,upload_id, so an upload is transcribed with one call and no quote. It is checked exactly as a quote checks it and refused with404 upload_not_found,409 upload_not_received(retryable) or422 upload_mismatch. - Added
max_creditsonPOST /v1/transcripts: the most one call may take. A call whose ceiling — or cached-read price — is above it is refused422 max_credits_exceededbefore anything is held; a dry run with the cap refuses the same way. The cap never lowers the reservation. - The guides now lead with the one-call path; quotes and confirms are the path for selections.
- Sign in to the MCP server.
https://api.audivo.dev/mcpaccepts OAuth 2.1 as well as API keys, so Claude, ChatGPT and other clients that support MCP sign-in connect with the URL alone. See Connect your client. - Added connected apps: every app connected by sign-in is listed in the
dashboard under Settings → Connected apps and can be disconnected
there, with the same five-minute bound as a revoked key. Four control-plane
operations back the consent page and that list, with two new
404codes,oauth_request_not_foundandconnected_app_not_found. - The MCP server’s new
transcribetool takes one episode and returns its transcript; see Using the MCP tools.
0.12.0
- Added uploads.
POST /v1/uploadsannounces an audio file you hold and returns a presignedPUT; a quote takesuploads: [{ upload_id }]and prices each from the duration you declared, reported asquote_basis: declared. The transcript is cached for your account alone and the file is kept seven days. See Uploads. - New error code
upload_quota_exceeded(429) when an account already holds its allowance of 10 GiB across 100 unexpired uploads; new quote exclusion reasonsupload_not_found,upload_not_receivedandupload_mismatch. POST /v1/uploadsanswers409withaccount_suspended,account_closedoraccount_not_foundfor an account that may not hold an upload allowance, before anything is written.- Three new job failure messages under
processing_failed, for an upload that vanished, one that does not match its announcement, and audio that runs past the ceiling its declared duration reserved.
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.

