Skip to main content

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…"
}
FieldNotes
title
sourceWhere the material came from, for attribution
contentThe 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 optional

Unlike 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.