API overview
The Rekall REST API — base URLs, auth, versioning, and the endpoint map. Generated faithfully from the OpenAPI 3.1 spec.
The Rekall REST API is JSON over HTTP, latency-first. The same API is served by the
managed cloud and by an enterprise self-hosted binary (rekall serve) — only the base URL
changes.
Source of truth
Every schema, example, and error on these pages is transcribed from the OpenAPI 3.1 spec
(openapi.yaml), published at /v1/openapi.json. Both SDKs are generated from it plus a
handwritten ergonomic layer, so drift is impossible.
Base URL
| Environment | Base URL |
|---|---|
| Managed cloud | https://api.rekall.sh/v1 |
Enterprise self-hosted (rekall serve) | e.g. https://rekall.internal.acme.com/v1 |
The path is version-prefixed (/v1); additive changes never break clients.
Authentication
All endpoints except GET /health require a per-project API key as a bearer token:
Authorization: Bearer rk_live_8c2hd0…Create keys in the dashboard (managed cloud), or with rekall keys create on an enterprise
self-hosted deployment. Enterprise deployments may run with auth disabled
(rekall serve --no-auth) for local development only.
curl https://api.rekall.sh/v1/stores \
-H "Authorization: Bearer $REKALL_API_KEY"Endpoint map
| Method | Path | Description |
|---|---|---|
POST | /stores | Create a store |
GET | /stores | List stores |
GET | /stores/{store} | Get a store |
DELETE | /stores/{store} | Delete a store |
POST | /stores/{store}/documents | Ingest documents |
GET | /stores/{store}/documents | List documents |
GET | /stores/{store}/documents/{id} | Get document info |
DELETE | /stores/{store}/documents/{id} | Delete a document |
POST | /stores/{store}/search | Search |
GET | /health | Health check |
Stores are addressable by name or id
The {store} path parameter accepts a store name or id everywhere — e.g.
/v1/stores/contracts/search. Nobody should have to look up an id to run a query.
Conventions
latency_mson every search response — engine-only, measured server-side.- Idempotency: the
Idempotency-Keyheader is supported on ingest; replays of the same key return the original response without re-ingesting. - Pagination: list endpoints take
limit+cursorand return an opaquenext_cursor(nullwhen exhausted). - Errors are structured and prescriptive — every error body carries a
type, amessage, and afix. See the Errors page.