API reference
Every route a personal API token can call, grouped as in the sidebar. Each entry gives the route’s scopes, whether it spends minutes, its rate limit, and its parameters and fields.
- Base URL:
https://app.lobbe.ai/api/v1 - Authentication: every request sends
Authorization: Bearer $LOBBE_TOKEN. - OpenAPI document:
https://app.lobbe.ai/api/v1/openapi.json, also served here as/openapi.json. These pages are generated from the same document.
| Route | What it does | Scopes |
|---|---|---|
GET /whoami |
Who this token belongs to, its scopes, its daily cap and the upload limits | Any live token |
Meetings
Section titled “Meetings”| Route | What it does | Scopes |
|---|---|---|
GET /recordings/ready |
List finished meetings, newest first | recordings:read |
GET /recordings/search |
Search the owner’s finished meetings by their words, newest meeting first | recordings:query |
GET /recordings/{id}/ask/quote |
What asking this meeting a question will cost, in minutes | recordings:query |
POST /recordings/{id}/ask |
Ask one meeting a question, answered from its transcript and Lobbe; each answer is charged | recordings:query |
GET /recordings/{id}/bundle |
One finished meeting: its transcript, its Lobbe and its stats; ?format=markdown returns one Markdown document | recordings:read |
GET /recordings/{id}/status |
One meeting’s progress; at NAMING, the link that asks the owner to name the speakers | recordings:read or recordings:write |
POST /recordings |
Submit a meeting’s audio (multipart); answers 202 with its status link | recordings:write |
POST /recordings/{id}/naming |
Skip naming the speakers: unnamed voices take Lobbe’s suggestions and the Lobbe is made | recordings:write |
POST /recordings/{id}/retry |
Retry a failed meeting: the step that failed runs again, at no new charge | recordings:write |
Events
Section titled “Events”| Route | What it does | Scopes |
|---|---|---|
GET /events |
What happened to the owner’s meetings since a cursor: created, waiting for names, ready, failed, updated, deleted | recordings:read or recordings:write |
Series
Section titled “Series”| Route | What it does | Scopes |
|---|---|---|
GET /series/readable |
The series you own or joined | series:read |
GET /series/{id} |
One series you own or joined: its name, its defaults and how many finished meetings it holds | series:read |
PATCH /series/{id} |
Change a series you own: its name, type and default language, title style or calendar | series:write |
POST /series |
Create a series: its name, type and default language, title style and calendar | series:write |
GET /series/{id}/keyterms |
A series’ vocabulary (owner only), and whether the account’s vocabulary applies too | series:read |
PUT /series/{id}/keyterms |
Replace a series’ vocabulary (owner only); a meeting that uses vocabulary carries its surcharge | series:write |
GET /series/{id}/ask/quote |
What asking this series a question will cost, in minutes, and over how many meetings | series:query |
POST /series/{id}/ask |
Ask a whole series a question, answered across its finished meetings; each answer is charged | series:query |
Account
Section titled “Account”| Route | What it does | Scopes |
|---|---|---|
GET /account |
The account: who owns it, its wallet balance in minutes, and its settings | account:read |
GET /account/keyterms |
The account’s vocabulary: words transcription should recognize | account:read |
PUT /account/keyterms |
Replace the account’s vocabulary; a meeting that uses vocabulary carries its surcharge | account:write |
GET /account/memory |
What Lobbe remembers about the account’s owner, as the settings screen lists it | account:read |
PATCH /account/settings |
Change speaker naming, memory learning or the summary email; nothing else | account:write |
PATCH /account/memory/{id} |
Rewrite one memory item; an edited item is kept as you wrote it | account:write |
DELETE /account/memory/{id} |
Delete one memory item | account:write |
Conventions
Section titled “Conventions”- Every successful JSON response carries
schemaVersion: 1. Ignore fields you don’t know. An error body is{ error: … }only, with noschemaVersion, and?format=markdownanswers Markdown text. x-lobbe-scopeslists the scopes that open a route: any one of them admits a token."any"(onGET /whoami) means every live token, whatever its scopes.x-lobbe-spendsistrueon a route that can spend minutes; send those anIdempotency-Keyheader (Idempotency and retries).x-lobbe-rate-limitnames the route’sclassand that class’s budget per token,requestsperwindowSeconds. Every route in a class shares the one budget (the table below).x-lobbe-summary-faandx-lobbe-description-facarry the same texts in Persian.PATCH /series/{id}andPATCH /account/settingstake at least one field (minProperties: 1): an empty body is a400.- Errors answer
{ error: { code, message, details? } }:codeis the contract, andmessagemay change. Every code is on Errors. - One exception keeps its original shape: the bundle’s
409 NOT_READYputsdetailsbesideerror, not inside it, anddetails.statussays where the meeting is:
{ "error": { "code": "NOT_READY", "message": "…" }, "details": { "status": "TRANSCRIBING" }}Rate limits
Section titled “Rate limits”| Class | Budget per token | Routes |
|---|---|---|
read |
600 requests per 10 minutes | GET /whoami, GET /recordings/ready, GET /recordings/{id}/bundle, GET /recordings/{id}/status, GET /events, GET /series/readable, GET /series/{id}, GET /series/{id}/keyterms, GET /account, GET /account/keyterms, GET /account/memory |
submit |
30 requests per 10 minutes | POST /recordings, POST /recordings/{id}/naming, POST /recordings/{id}/retry |
search |
120 requests per 10 minutes | GET /recordings/search, GET /recordings/{id}/ask/quote, GET /series/{id}/ask/quote |
ask |
30 requests per 10 minutes | POST /recordings/{id}/ask, POST /series/{id}/ask |
settings |
60 requests per 10 minutes | POST /series, PATCH /series/{id}, PUT /series/{id}/keyterms, PATCH /account/settings, PUT /account/keyterms, PATCH /account/memory/{id}, DELETE /account/memory/{id} |