Scriber REST API
A token-authenticated REST API to read (and optionally write) everything Scriber stores — meetings, transcripts, summaries, participants and their memories — from your own scripts and integrations.
Overview
- Base URL: the same origin as your dashboard, under
/api/v1— e.g.https://your-scriber-host/api/v1. - Auth: a bearer token in the
Authorizationheader (see below). It's separate from the dashboard login. - Format: JSON responses (text for transcript/summary, image bytes for avatars).
- Scopes:
read(GET only) orreadwrite(GET + PUT).
Create a token
Open the dashboard Settings
Sign in to the dashboard and open Settings (⚙️). Scroll to API access.
Name it and pick a scope
Enter a name (e.g. analytics-script), choose Read only or Read & write, and click Create token.
Copy it now
The full token is shown once — copy it immediately. Scriber stores only a hash, so it can't show it again. You can see each token's name, prefix, scope and last-used time later, rename/re-scope it, or delete it to revoke access.
Authentication
Send the token as a bearer credential on every request:
Authorization: Bearer <your-token>
401 Unauthorized— missing header or unknown/revoked token.403 Forbidden— valid token, but it's read-only and you called a write endpoint.
Scopes
| Scope | Can do |
|---|---|
read | All GET endpoints — list/read meetings, transcripts, summaries, participants, memories, avatars, stats. |
readwrite | Everything read can, plus PUT to edit transcripts, summaries, participant profiles and memories. |
Read endpoints any token
| Method & path | Returns |
|---|---|
GET /api/v1/me | Info about the calling token (name, scope, usage). |
GET /api/v1/stats | Aggregate stats + live active-session count. |
GET /api/v1/meetings?limit=&offset= | Paginated meeting list, newest first ({total, items}). |
GET /api/v1/meetings/{id} | One meeting incl. metadata and processing log. |
GET /api/v1/meetings/{id}/transcript | Transcript as text (?download=1 for attachment). |
GET /api/v1/meetings/{id}/transcripts | Transcript versions: the original plus any regenerated with another engine ({items, can_regenerate, …}). |
GET /api/v1/meetings/{id}/transcripts/{tid} | One version's text — tid is original or a version id (?download=1). |
GET /api/v1/meetings/{id}/summary | Summary as Markdown (?download=1). |
GET /api/v1/meetings/{id}/audio | The kept meeting audio, Ogg/Opus or WAV (?download=1). |
GET /api/v1/participants?limit=&offset= | Paginated participant list ({total, items}). |
GET /api/v1/participants/{id} | One participant incl. memory and joined sessions. |
GET /api/v1/participants/{id}/memory | The participant's Markdown memory ({content}). |
GET /api/v1/participants/{id}/avatar | The participant's avatar image. |
Write endpoints readwrite
| Method & path | Body → effect |
|---|---|
PUT /api/v1/meetings/{id}/transcript | {"content": "…"} → overwrite the transcript. |
PUT /api/v1/meetings/{id}/summary | {"content": "…"} → overwrite the summary. |
PUT /api/v1/participants/{id} | {"display_name"?, "description"?} → update the profile. |
PUT /api/v1/participants/{id}/memory | {"content": "…"} → overwrite the memory file. |
Examples
List recent meetings:
curl -H "Authorization: Bearer $TOKEN" \
https://your-scriber-host/api/v1/meetings?limit=5
Download a meeting summary as Markdown:
curl -H "Authorization: Bearer $TOKEN" \
https://your-scriber-host/api/v1/meetings/20260706-140233-ab12/summary
Edit a participant's memory (needs a readwrite token):
curl -X PUT \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"content": "# Notes\n- Prefers to be called Sam."}' \
https://your-scriber-host/api/v1/participants/123456789012345678/memory
Check what a token can do:
curl -H "Authorization: Bearer $TOKEN" https://your-scriber-host/api/v1/me
# {"name":"analytics-script","scope":"read","created_at":"…","last_used_at":"…"}
MCP server
The same data is also available over the
Model Context Protocol, so AI assistants
(Claude Code, Claude Desktop, Cursor, …) get purpose-built tools instead of raw HTTP.
The MCP server listens on its own port (MCP_PORT, default
8081, streamable HTTP at /mcp) and authenticates with the
same API tokens and scopes as the REST API. It runs by default, but the
shipped compose file publishes the port on 127.0.0.1 only, so it stays
private to the machine; set MCP_ENABLED=false to turn it off entirely.
Add it to Claude Code:
claude mcp add --transport http scriber http://127.0.0.1:8081/mcp \
--header "Authorization: Bearer $TOKEN"
Or in any client that takes a JSON server config:
{
"mcpServers": {
"scriber": {
"type": "http",
"url": "http://127.0.0.1:8081/mcp",
"headers": { "Authorization": "Bearer <your-token>" }
}
}
}
| Tools | Scope |
|---|---|
get_stats, list_meetings, get_meeting, get_transcript, get_summary, list_transcript_versions, get_transcript_version, list_participants, get_participant, get_participant_memory | any token |
update_transcript, update_summary, update_participant, update_participant_memory | readwrite |
Token security
- Tokens are 48-character alphanumeric secrets (
[A-Za-z0-9]) — ~285 bits of entropy, safe to paste into a chat without characters being mangled, and infeasible to brute-force. - Scriber stores only a SHA-256 hash; the plaintext is shown once at creation and never persisted.
- Revoke a token any time by deleting it in Settings — the change is immediate.
- Prefer
readscope unless a client genuinely needs to write. Treat tokens like passwords. - The API is served over the same TLS endpoint as your dashboard — always call it over HTTPS in production.