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 Authorization header (see below). It's separate from the dashboard login.
  • Format: JSON responses (text for transcript/summary, image bytes for avatars).
  • Scopes: read (GET only) or readwrite (GET + PUT).

Create a token

1

Open the dashboard Settings

Sign in to the dashboard and open Settings (⚙️). Scroll to API access.

2

Name it and pick a scope

Enter a name (e.g. analytics-script), choose Read only or Read & write, and click Create token.

3

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

ScopeCan do
readAll GET endpoints — list/read meetings, transcripts, summaries, participants, memories, avatars, stats.
readwriteEverything read can, plus PUT to edit transcripts, summaries, participant profiles and memories.

Read endpoints any token

Method & pathReturns
GET /api/v1/meInfo about the calling token (name, scope, usage).
GET /api/v1/statsAggregate 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}/transcriptTranscript as text (?download=1 for attachment).
GET /api/v1/meetings/{id}/transcriptsTranscript 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}/summarySummary as Markdown (?download=1).
GET /api/v1/meetings/{id}/audioThe 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}/memoryThe participant's Markdown memory ({content}).
GET /api/v1/participants/{id}/avatarThe participant's avatar image.

Write endpoints readwrite

Method & pathBody → 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>" }
    }
  }
}
ToolsScope
get_stats, list_meetings, get_meeting, get_transcript, get_summary, list_transcript_versions, get_transcript_version, list_participants, get_participant, get_participant_memoryany token
update_transcript, update_summary, update_participant, update_participant_memoryreadwrite

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 read scope 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.