API Reference
Multiplist exposes a REST API at /api/v1/* for headless integrations. For tool-style access from MCP clients (Claude Desktop, ChatGPT, agent frameworks), use the MCP endpoint at /mcp instead — it takes a different token type. See Authentication for the full split.
# Base URL
https://multiplist.ai/api/v1
# Authentication
Every request requires an API Key. Generate one in Settings → API Keys inside the Multiplist app.
Authorization: Bearer mp_live_…
API Keys use the mp_live_ prefix, are SHA-256 hashed at rest, and carry scoped permissions. They are not valid on the /mcp endpoint — use an MCP Token for that.
# Bring-your-own-LLM headers
Endpoints that run inference (/extract, /synthesize, /batch/extract) require you to supply an LLM key on each request:
X-LLM-Provider: openai # or "anthropic"
X-LLM-API-Key: sk-…
Multiplist never stores these — they're used for the lifetime of the request and discarded.
# Scopes
| Scope | What it grants |
|---|---|
extract | POST /extract, POST /batch/extract, POST /batch/:jobId/cancel |
read | GET /seeds/:sourceId, GET /batch/:jobId, GET /batch |
synthesize | POST /synthesize (also requires extract and read) |
Grant the minimum scope needed at key creation.
# Rate limiting
Rate limits are tiered by plan:
- Starter — 60 req/min
- Growth — 300 req/min
- Pro — 1,000 req/min
Exceeding the limit returns HTTP 429 with a Retry-After header.
# Response envelope
Every response — success or error — uses the same shape:
Success:
{
"ok": true,
"data": { },
"meta": {
"requestId": "req_abc123",
"duration_ms": 42,
"version": "v1"
}
}
Error:
{
"ok": false,
"error": {
"code": "INVALID_API_KEY",
"message": "The provided API key is invalid or has been revoked.",
"details": { "keyPrefix": "mp_live_xxxxxxxx..." }
},
"meta": { "requestId": "req_abc123", "version": "v1" }
}
Common error codes: INVALID_API_KEY, INSUFFICIENT_SCOPE, MISSING_LLM_KEY, INVALID_REQUEST, CONTENT_TOO_LARGE, RATE_LIMITED, NOT_FOUND, INTERNAL_ERROR.
# Endpoints
# POST /extract
Send content (a conversation transcript, document, voice memo, article) and get back structured seeds. Requires the extract scope and X-LLM-Provider / X-LLM-API-Key headers.
Body:
{
"content": "string (required, ≤ 500KB)",
"source_type": "conversation | document | voice_memo | article",
"platform": "string",
"title": "string",
"container_id": "uuid (required, but informational only — sources are vault-native)",
"skill_id": "uuid",
"categories": "all" ,
"options": {
"confidence_threshold": "high | medium | low",
"include_emergence": true,
"include_provenance": true
}
}
# GET /seeds/:sourceId
Retrieve all seeds extracted from a given source. Requires the read scope.
# POST /synthesize
Cross-source pattern detection. Pass 2–10 source IDs and an optional focus prompt to surface convergence, contradictions, and evolution across them. Requires extract + read scopes and BYO-LLM headers.
Body:
{
"source_ids": ["uuid", "uuid"],
"focus": "string",
"options": {
"detect_convergence": true,
"detect_contradictions": true,
"detect_evolution": true
}
}
# POST /batch/extract
Queue many extractions in a single batch job. Requires the extract scope.
# GET /batch/:jobId
Poll progress on a batch job. Requires the read scope.
# POST /batch/:jobId/cancel
Cancel an in-flight batch job. Requires the extract scope.
# GET /batch
List recent batch jobs for the calling key's user. Requires the read scope.
# Related
- Authentication — generating keys, OAuth 2.1 with PKCE, the API Key vs MCP Token split.
- MCP Tools Reference — the MCP equivalent of these endpoints, for tool-using clients.