5.0 GA endpoint reference

The eighteen endpoints
customers integrate against.

The customer-facing surface shipped at Eldric 5.0 GA — retention loop, intelligent upload, knowledge-base administration, router classification, custom classification, audit ledger, bundle trust, and model conversion. Each endpoint here is something a customer or operator calls directly. Internal cluster-to-cluster paths (worker poll loops, peer aggregator internals, reindex orchestrator state, background ingest workers) are not in this list.


Auth + license

What you need.

Every endpoint here requires a tenant-scoped API key sent as Authorization: Bearer sk-…. Cross-tenant attempts return 403. The license capability is rag (Standard tier and above) on most endpoints; a few advanced operators require audit, bundle, or training capability (Pro+). Endpoints marked admin require the admin role inside the requesting tenant.


Retention loop · 1 endpoint

Chat feedback.

POST /api/v1/chat/feedback Standard+

Accept or reject an assistant turn #

Customer's thumbs-up on a chat response triggers auto-ingest of cited sources into the appropriate knowledge base, feeds the dream cycle, and seeds the next ENRN training corpus. Thumbs-down marks the answer low-quality.

curl -X POST https://your-cluster.example.com/api/v1/chat/feedback \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "session_id": "sess-abc123",
    "message_id": "msg-456",
    "verdict": "accept"
  }'

Intelligent upload · 4 endpoints

Analyse → preview → commit → poll.

The four-step flow customers see in the chat shell when they drag a file in. The platform suggests; the user confirms; the ingest job runs.

POST /api/v1/upload/analyze Standard+

Inspect a file, return suggested params #

Reads the first few KB, detects content type / language / structure, returns suggested chunking + enrichment defaults. No data persisted yet.

curl -X POST https://your-cluster.example.com/api/v1/upload/analyze \
  -H "Authorization: Bearer $API_KEY" \
  -F "file=@./paper.pdf"
# → {file_id, content_type, language, estimated_chunks,
#    suggested_strategy, suggested_chunk_size, suggested_overlap,
#    suggested_enrichment, extracted_keywords, topic_tags}
POST /api/v1/upload/preview-chunks Standard+

Preview what a strategy would produce #

Returns the first 5–10 chunks the chosen strategy would produce, without persisting. Lets the operator adjust before commit.

curl -X POST https://your-cluster.example.com/api/v1/upload/preview-chunks \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"file_id":"...","strategy":"semantic","chunk_size":512,"overlap":50}'
POST /api/v1/upload/commit Standard+

Fire the ingestion job #

Persists the file, runs chunking + embedding + enrichment per the chosen params, returns a job id for polling.

curl -X POST https://your-cluster.example.com/api/v1/upload/commit \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "file_id": "...",
    "tenant_id": "default",
    "namespace_id": "ai-papers",
    "strategy": "semantic",
    "chunk_size": 512,
    "overlap": 50,
    "enrichment": {"authors": true, "doi": true, "topic_tags": true}
  }'
# → 202 {job_id, estimated_duration_seconds}
GET /api/v1/upload/jobs/{id} Standard+

Poll an ingest job #

curl https://your-cluster.example.com/api/v1/upload/jobs/<job_id> \
  -H "Authorization: Bearer $API_KEY"
# → {status, chunks_done, chunks_total, embedding_done, error}

Knowledge-base administration · 6 endpoints

Per-namespace config + bulk operations.

POST /api/v1/vector/namespaces/{tid}/{ns}/config Standard+ admin

Set chunking strategy for a knowledge base #

Uploads into this namespace skip the suggestion dialog (or pre-fill it with these values).

curl -X POST https://your-cluster.example.com/api/v1/vector/namespaces/<tenant>/<ns>/config \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"strategy":"semantic","chunk_size":512,"chunk_overlap":50}'
POST /api/v1/vector/namespaces/{tid}/{ns}/bulk-delete Standard+ admin

Delete multiple documents #

Returns counts of deleted and per-document failure reasons.

curl -X POST https://your-cluster.example.com/api/v1/vector/namespaces/<tenant>/<ns>/bulk-delete \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"doc_ids":["doc-1","doc-2","doc-3"]}'
POST /api/v1/vector/namespaces/{tid}/{ns}/reindex Standard+ admin

Re-embed every document #

Used after changing the embedding model or chunking strategy. Background job; poll with the returned job_id.

curl -X POST https://your-cluster.example.com/api/v1/vector/namespaces/<tenant>/<ns>/reindex \
  -H "Authorization: Bearer $API_KEY"
# → 202 {job_id, documents}
GET /api/v1/vector/ingest-queue Standard+ admin

View pending ingest jobs #

curl https://your-cluster.example.com/api/v1/vector/ingest-queue \
  -H "Authorization: Bearer $API_KEY"
# → {pending: [{job_id, tenant_id, namespace_id, status}, ...]}
GET /api/v1/vector/stale-chunks Standard+ admin

Identify chunks needing re-embed #

Used by the model-upgrade detector. Returns the count and per-namespace breakdown.

curl https://your-cluster.example.com/api/v1/vector/stale-chunks \
  -H "Authorization: Bearer $API_KEY"
# → {count: 12345, by_namespace: {...}}
POST /api/v1/vector/chunk-preview Standard+ admin

Preview chunks for an already-stored document #

curl -X POST https://your-cluster.example.com/api/v1/vector/chunk-preview \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"tenant_id":"default","namespace_id":"ai-papers","doc_id":"doc-123"}'

Router · 4 endpoints

Classification + per-tenant taxonomy.

POST /api/v1/router/classify Standard+

Classify a query into an intent class #

Three-tier resolution: base classifier → tenant overlay → LLM fallback when confidence is below threshold. Returns the assigned class with confidence and the source of the decision.

curl -X POST https://your-cluster.example.com/api/v1/router/classify \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"summarise the indemnification clause in contract X"}'

# → {
#     "class": "ContractReview",
#     "confidence": 0.91,
#     "source": "overlay",
#     "fallback_chain": ["base", "overlay"]
#   }
POST /api/v1/router/custom-classes Pro+ admin

UPSERT a custom intent class #

Add your own intent classes ("PatientTriage", "ContractReview", "AnomalyTrend") alongside the 128 built-ins. Trains an overlay classifier from the labelled examples.

curl -X POST https://your-cluster.example.com/api/v1/router/custom-classes \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "tenant_id": "law-firm-acme",
    "class_name": "ContractReview",
    "description": "queries about clause review, redlines, indemnification",
    "examples": ["summarise the indemnification clause in...", "what'\''s the term length on..."]
  }'
GET /api/v1/router/custom-classes Pro+

List a tenant's custom classes #

curl "https://your-cluster.example.com/api/v1/router/custom-classes?tenant_id=law-firm-acme" \
  -H "Authorization: Bearer $API_KEY"
DELETE /api/v1/router/custom-classes Pro+ admin

Remove a custom class #

curl -X DELETE "https://your-cluster.example.com/api/v1/router/custom-classes?tenant_id=law-firm-acme&class_name=ContractReview" \
  -H "Authorization: Bearer $API_KEY"

Audit ledger · 3 endpoints

Hash-chained read surface for compliance.

GET /api/v1/audit/events Standard+ admin

List audit events #

Hash-chained log of every AI-assisted decision and admin-side mutation. Tamper-evident: events cannot be retroactively edited.

curl "https://your-cluster.example.com/api/v1/audit/events?since=2026-05-01T00:00:00Z&tenant_id=hospital-cardiology" \
  -H "Authorization: Bearer $API_KEY"
GET /api/v1/audit/events/{id} Standard+ admin

Get one event with hash-chain context #

Returns the event detail including prev_hash and this_hash so compliance can verify the chain.

curl https://your-cluster.example.com/api/v1/audit/events/evt-abc123 \
  -H "Authorization: Bearer $API_KEY"
POST /api/v1/audit/export Pro+ admin

Export a signed JSON slice for auditors #

Returns a signed JSON document (Ed25519 over the events array) the customer hands to their compliance auditor.

curl -X POST https://your-cluster.example.com/api/v1/audit/export \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"since":"2026-01-01T00:00:00Z","until":"2026-12-31T23:59:59Z","tenant_id":"hospital-cardiology"}'

Bundle trust · 2 endpoints

Trust a .nexus signing key.

Adds (or revokes) a third-party Ed25519 public key to the trust list so signed bundles from that key can be imported.

POST /api/v1/bundle/trust Pro+ admin

Trust a bundle signing key #

curl -X POST https://your-cluster.example.com/api/v1/bundle/trust \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"key_id":"acme-research","public_key":"<base64-ed25519>","label":"Acme research group"}'
DELETE /api/v1/bundle/trust/{key_id} Pro+ admin

Revoke trust #

curl -X DELETE https://your-cluster.example.com/api/v1/bundle/trust/acme-research \
  -H "Authorization: Bearer $API_KEY"

Models · 1 endpoint

Convert HuggingFace → GGUF.

POST /api/v1/models/convert Pro+ admin

Pull and convert a HuggingFace model #

Pulls a HuggingFace model into local storage and converts to GGUF for Inferenced or llama.cpp consumption. Long-running; returns a job id.

curl -X POST https://your-cluster.example.com/api/v1/models/convert \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "hf_repo": "meta-llama/Llama-3.2-3B-Instruct",
    "quantization": "Q4_K_M"
  }'

Going further

Where to go from here.

The OpenAPI 3.1 spec is importable into Postman, Insomnia, or any code-generation tool. The 25-section catalogue covers the full endpoint surface (including internal cluster-to-cluster paths not listed here). The public API surface page lists only the Internet-reachable endpoints. For the prose how-to side: using RAG, chunking strategies, RAG on demand, custom classification.