Documents
Grounding material for practice calls: what the simulated customer is assumed to know, and what a rep's answers are checked against.
List documents
GET /api/nn-coach/documents — any member
Get a document
GET /api/nn-coach/documents/{uuid} — any member
Create a document
POST /api/nn-coach/documents — manager or above
{
"title": "Standing Desk Pro — specs and pricing",
"source": "Product catalogue 2026",
"content": "₹52,000 including installation. Three-year warranty…"
}
| Field | Notes |
|---|---|
title | |
source | Where the material came from, for attribution |
content | The text itself |
The response omits content — you just sent it, so it is not echoed back.
Delete a document
DELETE /api/nn-coach/documents/{uuid} — manager or above
Embed documents
POST /api/nn-coach/documents/embed — manager or above
Chunks and embeds documents so they can be retrieved during a run. A document is not used for grounding until this has run.
pgvector is required, not optionalUnlike nextneural_converse and nextneural_assist, nextneural_coach's migration has no fallback
for a missing pgvector extension — the binary will not come up without it.
CREATE EXTENSION vector needs superuser, and the app's own database role is
not one. See apps/nn_coach/ops/local_dbsetup.sh, which creates the role, the
database, and the extension in the right order.
Why reading is open but writing is not
Anyone practising can read the documents; adding or removing what everyone is
graded against is a manager action. Changing the grounding material silently
changes every subsequent score, which makes it configuration rather than
day-to-day work.
Configuration
GET /api/nn-coach/config — what this deployment has available:
{
"default_max_turns": 50,
"max_concurrent_runs": 8,
"proxy_model": "x-ai/grok-4.3",
"tts_provider": "sarvam",
"tts_providers": ["sarvam", "nextneural", "elevenlabs", "grok", "deepgram", "silent"],
"judge_api_url": "http://127.0.0.1:8080",
"voice_api_url": "https://api-stage.nextneural.ai"
}
default_max_turns applies to scenarios that set no max_turns of their own,
and tts_providers is the set accepted by a run's tts_provider.