Skip to main content
The API’s version is the version of its OpenAPI document, which the API Reference is generated from. Each entry below is the customer-visible part of one version; the document itself carries the full reasoning.

0.16.0

  • Added feed_url and itunes_id beside episode_id on POST /v1/transcripts. An episode nobody has transcribed yet, as GET /v1/shows/{show_id}/episodes lists 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. An episode_id alone still works for an episode the catalog holds, and its 404 episode_not_found now says what to send.

0.15.0

  • Added read_id to every transcript read (POST /v1/transcripts on a cache hit, GET /v1/episodes/{episode_id}/transcript, and GET /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_title and episode_title to 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/transcripts on 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 and null where unknown, as on jobs created before this version.

0.13.0

  • One call is the default path. POST /v1/transcripts takes 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 with 404 upload_not_found, 409 upload_not_received (retryable) or 422 upload_mismatch.
  • Added max_credits on POST /v1/transcripts: the most one call may take. A call whose ceiling — or cached-read price — is above it is refused 422 max_credits_exceeded before 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/mcp accepts 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 404 codes, oauth_request_not_found and connected_app_not_found.
  • The MCP server’s new transcribe tool takes one episode and returns its transcript; see Using the MCP tools.

0.12.0

  • Added uploads. POST /v1/uploads announces an audio file you hold and returns a presigned PUT; a quote takes uploads: [{ upload_id }] and prices each from the duration you declared, reported as quote_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 reasons upload_not_found, upload_not_received and upload_mismatch.
  • POST /v1/uploads answers 409 with account_suspended, account_closed or account_not_found for 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, and GET /v1/languages, the supported-language table.
  • POST /v1/billing/refund stays declared and says on its own operation that it is not yet routed.
  • request_id may 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 GET and PUT /v1/billing/address.
  • Checkout takes a plan tier, never a Stripe price identifier.
  • New error code tier_unchanged for a checkout against the plan already held.
  • Quote responses carry balance_credits and reserved_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/usage and GET /v1/limits are 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/session establishes 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_closed and account_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_unverified and expected_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-* and X-Credits-Charged headers.

0.4.0

  • Transcript delivery is served: GET /v1/transcripts/{job_id} and GET /v1/episodes/{episode_id}/transcript, in json, text, srt, vtt and md.

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_...; the x-api-key alias is gone.
  • Show search marks music-led shows instead of dropping them. Category charts and quotes are new.