{"openapi":"3.1.0","info":{"title":"Scribberty API","version":"1.0.0","description":"Create transcription jobs, upload audio and fetch finished transcripts. Every request needs an API key from Settings, API keys, sent as `Authorization: Bearer cs_live_...`. Rate limit: 120 requests per minute per key. Pricing: 3 cents per audio minute, charged when a job finishes."},"servers":[{"url":"https://www.scribberty.com/v1"}],"security":[{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer"}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{}}}}},"Job":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"project_id":{"type":["string","null"]},"source":{"type":"string","enum":["upload","url","email","api"]},"status":{"type":"string","enum":["awaiting_upload","queued","transcribing","ready","failed","canceled"]},"progress":{"type":"integer"},"duration_sec":{"type":["number","null"]},"est_cost_cents":{"type":["integer","null"]},"cost_cents":{"type":["integer","null"]},"language":{"type":["string","null"]},"error":{"type":["string","null"]},"created_at":{"type":"string"},"completed_at":{"type":["string","null"]}}},"CreateJob":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"Display name, usually the file name"},"url":{"type":"string","description":"Import from this URL instead of uploading"},"size_bytes":{"type":"integer"},"mime":{"type":"string"},"duration_sec":{"type":"number","description":"Improves the cost estimate"},"project_id":{"type":"string"},"language":{"type":"string","example":"en"},"speakers_expected":{"type":"integer","minimum":1,"maximum":20},"style":{"type":"string","enum":["clean","verbatim"]},"vocabulary":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Names and terms to spell correctly"},"notify_emails":{"type":"string"},"notify_mode":{"type":"string","enum":["off","link","inline","attachment"]},"callback_url":{"type":"string","description":"https URL that receives job.completed / job.failed"}}}}},"paths":{"/jobs":{"get":{"summary":"List jobs","parameters":[{"name":"status","in":"query","schema":{"type":"string"}},{"name":"project_id","in":"query","schema":{"type":"string"}},{"name":"q","in":"query","schema":{"type":"string"}},{"name":"before","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"A page of jobs","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"summary":"Create a job","description":"Returns an `upload_url`. PUT the raw file bytes to it (with Content-Length) and the job is queued. With `url`, the file is fetched for you and no upload is needed. Send an `Idempotency-Key` header to make retries safe.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateJob"}}}},"responses":{"201":{"description":"Job created","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string"},"est_cost_cents":{"type":"integer"},"upload_url":{"type":"string"},"upload_method":{"type":"string"}}}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/jobs/{id}":{"get":{"summary":"Get a job (includes the transcript once ready)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Job","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"summary":"Rename or move a job","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Job","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"summary":"Delete a job, its audio and transcript","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/jobs/{id}/cancel":{"post":{"summary":"Cancel a queued job","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Canceled","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/jobs/{id}/retry":{"post":{"summary":"Retry a failed job","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Queued","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/jobs/{id}/transcript":{"get":{"summary":"Get the transcript document","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Transcript","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"summary":"Replace the transcript (send `version` for optimistic locking)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Saved","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/jobs/{id}/export":{"get":{"summary":"Download the transcript","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"format","in":"query","schema":{"type":"string","enum":["docx","txt","srt","vtt","json","html"]}},{"name":"timestamps","in":"query","schema":{"type":"boolean"}},{"name":"speakers","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"File"},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/jobs/{id}/audio":{"get":{"summary":"Stream the original audio (supports Range)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Audio"},"206":{"description":"Partial audio"},"410":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/estimate":{"get":{"summary":"Estimate the cost of a file","parameters":[{"name":"duration_sec","in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"Estimate","content":{"application/json":{"schema":{"type":"object"}}}}}}}},"webhooks":{"job.completed":{"post":{"summary":"Signed with `Scribberty-Signature: t=<unix>,v1=<hex hmac-sha256 of \"t.body\" using the webhook secret>`","requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Acknowledged"}}}},"job.failed":{"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Acknowledged"}}}}}}