Send meeting transcript text and get back a running summary, a consolidated overview, or an answer grounded in the conversation. Transcription stays in the browser; this API is the server-side AI over the text. Authenticated by API key, metered per organisation.
Get an API keyBase URL is your Worker domain. Every request and response is application/json.
Send the API key on every /v1 request, in either header form:
Authorization: Bearer lt_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
X-API-Key: lt_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXMint keys at the key dashboard or with POST /api/keys. Only the SHA-256 hash is stored; the raw key is shown once. lt_live_ and lt_test_ keys both bill against the same organisation counter and differ only by label. Key management is authenticated by your account access token, not by an API key.
| Method | Path | Auth | Purpose |
|---|---|---|---|
| POST | /v1/generate | API key | Summary, overview, or Q&A over a transcript |
| GET | /v1/usage | API key | Plan, calls used, remaining, tokens used |
| POST | /api/keys | Account token | Mint a key (returned once) |
| GET | /api/keys | Account token | List keys and organisation summary |
| DELETE | /api/keys/:id | Account token | Revoke a key |
Request body fields:
| Field | Type | Required | Notes |
|---|---|---|---|
type | string | yes | summary, overview, or qa |
text | string | summary, overview | Transcript text. Truncated at 60,000 characters |
question | string | qa | The question or drafting request. Truncated at 2,000 characters |
history | array | no | [{ "role": "user"|"model", "content": "…" }]. Last 20 turns kept |
outLang | string | no | English, Japanese, Portuguese, Spanish, German, French, Italian |
type behaviour| type | Output |
|---|---|
summary | One to two short lines summarising a segment, roughly 25 words |
overview | Consolidated bullet overview of the full transcript, with a decisions and actions block when present |
qa | Answers a question grounded in the transcript, or drafts the actual words to say when asked to |
curl -sS https://<worker>/v1/generate \
-H "Authorization: Bearer $LT_KEY" \
-H "content-type: application/json" \
-d '{
"type": "qa",
"text": "…transcript so far…",
"question": "Draft a one-line closing remark that confirms the next step."
}'200{
"text": "…model output…",
"usage": { "promptTokenCount": 812, "candidatesTokenCount": 96, "totalTokenCount": 908 },
"meta": { "plan": "startup", "cap": 20000, "remaining": 19860 }
}Response headers report the meter: X-RateLimit-Limit, X-RateLimit-Remaining, and X-Usage-Total-Tokens. Each successful call decrements the monthly allowance by one, regardless of token count.
curl -sS https://<worker>/v1/usage -H "Authorization: Bearer $LT_KEY"{
"plan": "startup",
"calls_used": 140,
"cap": 20000,
"remaining": 19860,
"tokens_used": 1284310,
"period_reset_at": "2026-09-01T00:00:00+00:00"
}Obtain the account token with a Supabase password grant, then call the Worker. Most teams simply use the dashboard instead.
# 1. sign in
TOKEN=$(curl -sS "$SUPABASE_URL/auth/v1/token?grant_type=password" \
-H "apikey: $SUPABASE_ANON" -H "content-type: application/json" \
-d '{"email":"[email protected]","password":"…"}' | jq -r .access_token)
# 2. mint a key (returned once)
curl -sS https://<worker>/api/keys \
-H "authorization: Bearer $TOKEN" -H "content-type: application/json" \
-d '{"name":"production-backend","mode":"live"}'
# 3. list keys
curl -sS https://<worker>/api/keys -H "authorization: Bearer $TOKEN"
# 4. revoke a key
curl -sS -X DELETE https://<worker>/api/keys/<id> -H "authorization: Bearer $TOKEN"| Plan | Calls / month | Soft rate (req/min) |
|---|---|---|
dev | 200 | 20 |
startup | 20,000 | 120 |
scale | 200,000 | 600 |
The monthly cap is enforced atomically in the database and resets at the start of each calendar month. The per-minute rate is a best-effort guard, not a billing boundary.
Every error is { "error": "<code>" } with the HTTP status below.
| Status | error | Cause |
|---|---|---|
| 400 | invalid_json | Body was not valid JSON |
| 400 | unknown_type | type not in summary, overview, qa |
| 401 | api_key_required | No key on a /v1 request |
| 401 | invalid_key | Key not found or revoked |
| 403 | org_suspended | Organisation status is not active |
| 429 | quota_exceeded | Monthly call cap reached |
| 429 | rate_limited | Per-minute soft guard tripped |
| 502 | ai_unavailable | Upstream model error |
No. The API operates on transcript text you supply. No audio reaches the server, and transcript text is not stored; only token counts and call metadata are recorded for billing.
Each successful call decrements a monthly call allowance by one, regardless of token count. Token counts are recorded per call so you can analyse cost. See plans for the monthly caps.
Send your API key on every /v1 request as an Authorization: Bearer header or an X-API-Key header. Keys are shown once at creation and stored only as a hash.
The API returns 429 with quota_exceeded. The counter resets at the start of each calendar month, and upgrading the plan raises the cap on the next call.
Create a new key, deploy it, then revoke the old one. Revocation takes effect immediately for the next call.