API & Integration Guide
Welcome to the developer guide for the Verbatim AI API.
Welcome to the developer guide for the Verbatim AI API. This guide explains how to authenticate, how the API is
organized, and how to build a client that ingests documents and runs AI queries against them.
Verbatim AI is a Retrieval-Augmented Generation (RAG) platform. You upload documents into a corpus, the platform
vectorizes and indexes them, and you then ask questions in a session: the platform retrieves the most relevant
passages and asks a large language model to answer using them as context.
Where to find things
| Resource | Link |
|---|---|
| API docs | https://www.verbatim-ai.com/api-docs/ |
| API Status | https://verbatim-ai.openstatus.dev |
| Swagger playground | https://www.verbatim-ai.com/api-docs/swagger/ |
| OpenAPI specification (JSON) | https://www.verbatim-ai.com/api-docs/openapi.json |
| Backoffice user guide | Console user guide |
| Managing API keys in the backoffice | API keys |
The OpenAPI spec is the source of truth for exact request/response schemas. This guide covers the concepts and
workflows that the spec alone does not explain.
Base URLs
| Environment | Base URL |
|---|---|
| Staging | https://staging-api.verbatim-ai.com |
| Production | https://api.verbatim-ai.com |
All examples in this guide use relative paths (e.g. POST /v1/corpus/). Prefix them with the base URL of the
environment you target.
Core concepts
| Concept | Description |
|---|---|
| Organization | The top-level tenant. Every token is bound to exactly one organization (the oid claim). All data is scoped to it. |
| Corpus | A knowledge base. Holds documents and sessions, and is the unit every other resource is scoped to. |
| Document | A file ingested into a corpus (PDF, DOCX, HTML…). Ingestion is asynchronous: convert → summarize → chunk → embed. |
| Session | A conversation thread bound to one or more corpora. How its queries are answered is decided per query by the agent. |
| Post | A single user query or system answer inside a session. Answers carry attachments — the document chunks used as context. |
Table of contents
Read these in order if you are integrating for the first time:
- API domains & conventions — the scope of each domain, base paths, pagination, error format,
and an end-to-end client walkthrough. - Authentication — the two ways to authenticate (RSA JWT and access tokens), how scopes
work, and which to use when. - RSA keys user guide — install and use
scripts/build_keys.pyto generate a key pair, publish
the public key, and mint JWTs. Includes a language-agnostic recipe for signing JWTs in any stack. - Access keys — short-lived, scoped tokens for untrusted clients (browser JavaScript, the
chatbot widget). - Security best practices — how to handle keys and tokens safely.
Conventions at a glance
- Versioning — public endpoints live under
/v1/. Backoffice-only endpoints live under
/_/v1/and are not reachable with the credentials described in this guide. - Authentication — every
/v1/request needs either anAuthorization: Bearer <jwt>
header or anX-Access-Token: <token>header. See Authentication. - Pagination — list endpoints accept
pageSize(default25) andpageIndex
(default0, zero-based). - IDs — all resource identifiers are UUIDv4 strings.
- Timestamps — ISO-8601 in UTC, e.g.
2026-04-23T04:06:51Z. - Errors — non-2xx responses return a JSON body matching the
Errorschema (timestamp,status,error,
message,path).
Quick start
-
Get an organization and register a public RSA key in the
backoffice. -
On your backend, mint an RSA-signed JWT — see the
RSA keys guide. -
Call the API with
Authorization: Bearer <jwt>:curl -H "Authorization: Bearer $JWT" \ https://staging-api.verbatim-ai.com/v1/auth/whoami -
Create a corpus, upload a document, open a session, and ask a question — the full sequence is
in API domains & conventions. -
For browser clients, don't ship your private key. Instead mint a short-lived
access token from your backend and hand it to the frontend.
Updated about 1 hour ago