What is RAVEN?
RAVEN reads your documents and answers questions about them. You upload files — PDFs, Word documents, Excel sheets, text — and RAVEN remembers what's inside. Your application then asks RAVEN questions in plain English, and RAVEN replies with an answer plus the exact passages it pulled the answer from.
You don't run any AI models yourself. You don't manage a database. You don't pick an embedding service. RAVEN handles all of that behind the scenes. Your application just makes HTTPS calls.
How it works
- You add documents. Upload a file, or point RAVEN at a folder in S3. RAVEN parses the text, breaks it into pieces, and stores them in a way that's searchable by meaning.
- Your app asks a question. A normal HTTPS request with the question text.
- RAVEN returns an answer. Plain text response with citations back to the source passages so users can verify it.
Two ways to use RAVEN
Easy mode — let RAVEN handle the AI
You send a question, RAVEN sends back a written answer. RAVEN picks the right passages, builds the prompt, calls the LLM, and formats the response. You don't need to know anything about prompts or AI.
Your app → POST /v1/chat → RAVEN → "The warranty is 25 years…"
Custom mode — bring your own AI
You send a question, RAVEN sends back the matching passages from your documents (no AI answer, just the raw passages). You feed those passages into your own AI agent.
Your app → POST /v1/search → RAVEN → [passage 1, passage 2, …]
│
▼
Your own AI → answer
You can use both at once — easy mode for general questions, custom mode for the specific endpoint where you need control.
Connecting your application — 3 steps
Step 1 — Get an API key
Ask a RAVEN operator for a key. You tell them an application ID (kebab-case, like myapp or marketing-tool) and where your documents live. They hand you back one API key. Treat it like a password.
Step 2 — Add documents
Pick the path that matches where your files are.
A. From this console. Click Ingest in the left nav, drop a folder or files, click Submit. Good for trying it out.
B. Single file from your backend.
curl -X POST "$RAVEN_HOST/v1/ingest" \ -H "X-API-Key: $RAVEN_KEY" \ -F "file=@./contract.pdf" \ -F "application_id=myapp" \ -F "project_id=q1-rfp"
C. Whole folder already in S3.
curl -X POST "$RAVEN_HOST/v1/ingest/source/prefix" \
-H "X-API-Key: $RAVEN_KEY" \
-H "Content-Type: application/json" \
-d '{
"application_id": "myapp",
"project_id": "q1-rfp",
"s3_prefix": "s3://your-bucket/q1-rfp/"
}'
Step 3 — Ask questions
Easy mode (RAVEN writes the answer):
curl -X POST "$RAVEN_HOST/v1/chat" \
-H "X-API-Key: $RAVEN_KEY" \
-H "Content-Type: application/json" \
-d '{
"application_id": "myapp",
"project_id": "q1-rfp",
"question": "What is the warranty period?"
}'
Custom mode (RAVEN returns matching passages):
curl -X POST "$RAVEN_HOST/v1/search" \
-H "X-API-Key: $RAVEN_KEY" \
-H "Content-Type: application/json" \
-d '{
"application_id": "myapp",
"project_id": "q1-rfp",
"query": "warranty period",
"top_k": 8
}'
That's the whole integration. Three HTTP calls.
Common things you'll do
| What | How |
|---|---|
| Add a document | POST /v1/ingest (file) or POST /v1/ingest/source/prefix (S3 folder) |
| Ask a question | POST /v1/chat |
| Ask many questions at once | POST /v1/chat/batch (up to 50 in one call) |
| Stream the answer as it's written | POST /v1/chat with "stream": true |
| Get just the matching passages | POST /v1/search |
| See what's been indexed | GET /v1/documents |
| Check ingest progress | GET /v1/jobs |
| Replace a document | DELETE /v1/documents/{id}, then re-ingest |
| See the audit trail | GET /v1/audit/answers |
When something goes wrong
| You see | What it means | Fix |
|---|---|---|
401 missing_api_key | No X-API-Key header | Add the header |
401 invalid_api_key | Key is wrong | Re-check the value, ask operator if rotated |
403 namespace_forbidden | Your key doesn't own this application_id/project_id | Confirm the IDs match what the operator assigned you |
400 source_uri must be s3:// | You pasted an https:// URL | Use s3://bucket/key (or use /v1/ingest/source/prefix which accepts both) |
403 Source bucket not allowed | S3 bucket isn't in the allow-list | Copy file to an allowed bucket, or ask operator to add yours |
Job stuck in queued for >5 min | Worker busy or upstream rate-limited | Check GET /v1/jobs/{job_id} for the current stage |
503 answer_failed on chat | No documents indexed yet for this namespace | Wait for ingest to finish (check Jobs tab) |
| Webhook never arrives | Receiver returning non-2xx, or HMAC failing | Check GET /v1/audit/events for webhook.delivery_failed |
Recent activity
Service health
Ingest Jobs
Job detail
Documents
Document detail
Audit Trail
Review answer provenance, citation health, and tool traces.
Answer detail
Ingest
Recent ingestions
Operations console
Stuck jobs
Dead-lettered jobs
Jobs by tenant
Applications & projects
Scopes register automatically when your app calls ingest, chat, or search with a valid namespace.
Delete removes documents, the vector index, catalog rows, and jobs for that project.
Requires an admin API key and request header X-Confirm-Destroy: yes.
API keys
Webhooks
Vector indexes
Search Console
Personas (Domain Knowledge)
Personas are tenant-authored system prompts the chat agent uses on top of
RAVEN’s built-in safety rules. Each call to /v1/chat or
/v1/chat/batch can pass domain_knowledge_id; with no id,
the default for the calling application is applied. This list shows all
personas for your tenant (not only the current application filter).