v1 · Stable

API Reference

Authentication

All requests require a bearer token in the Authorization header.

Authorization: Bearer ct_live_••••••••

Generate keys in your dashboard after signing in. Keys are bcrypt-hashed at rest and shown only once at creation.

Rate limits

30 requests per minute and 1000 requests per day per key. Exceeding either returns 429.

POST /api/v1/runs

Submit an audio file for transcription + insight extraction.

POST /api/v1/runs
Content-Type: multipart/form-data
Authorization: Bearer $KEY

Fields:
  audio          binary  required  (mp3, wav, m4a, webm; max 200 MB)
  template_slug  string  required  (e.g. "sales-discovery")

→ 202 Accepted
{
  "run_id": "uuid",
  "status": "queued",
  "created_at": "2026-06-15T12:00:00Z"
}

GET /api/v1/runs/:id

Poll for status and results. When status === "done", transcript, executive summary, and insights are populated.

GET /api/v1/runs/{run_id}
Authorization: Bearer $KEY

→ 200 OK
{
  "run": { "id", "status", "duration_sec", "language", "templates": { "slug", "name" } },
  "transcript": { "full_text", "segments": [{ "speaker", "start", "end", "text" }], "language" },
  "executive_summary": { "summary", "key_takeaways": [], "recommended_actions": [], "risk_flags": [], "sentiment" },
  "insights": [
    { "category", "key", "label", "value", "confidence", "evidence_quote", "evidence_timestamp" }
  ]
}

GET /api/v1/templates

List all built-in templates and their insight schemas.

GET /api/v1/templates
Authorization: Bearer $KEY

→ 200 OK
{ "templates": [{ "slug", "name", "category", "short_description", "insight_schema" }] }

Errors

All errors return { error: { code, message } } with appropriate HTTP status.

  • 401 missing_bearer / invalid_key
  • 400 invalid_body / missing_audio / missing_template
  • 404 template_not_found / not_found
  • 413 file_too_large
  • 429 rate_limited_minute / rate_limited_day