Developer API

Narrate text with the Reader API (included in Reader Pro and the Knowledge Suite) and run Scholar tools with the Scholar API (included in Scholar Institution). Calls follow the same plan rules and use the same minutes and credits as the apps.

Authentication

Create a key on your Subscription page and send it in the Authorization header. Keys are shown once; revoke a key there at any time. Each key may make 60 requests a minute.

Authorization: Bearer lvr_your_key

Errors are JSON { "error": "...", "code": "..." } with status 401 (missing or revoked key), 403 (PLAN_FEATURE_LOCKED, PLAN_LIMIT), 402 (out of minutes or credits) or 429 (rate limit).

Endpoints

GET/api/v1/me

Any key

Your plans, API scopes, Reader minutes and Scholar credits.

curl https://loudvoicereader-scholar.com/api/v1/me -H "Authorization: Bearer lvr_your_key"

GET/api/v1/voices

Reader API

The voices your plan can use. Pass a voice's id as voiceId.

POST/api/v1/tts

Reader API

Narrate up to a book's worth of text. The first segment's audio URL comes back at once; the rest is generated in the background — poll the task for it. Reuse the same docId for every part of one book.

curl -X POST https://loudvoicereader-scholar.com/api/v1/tts \
  -H "Authorization: Bearer lvr_your_key" \
  -H "Content-Type: application/json" \
  -d '{"text": "Chapter one…", "voiceId": "openai-alloy-narrative",
       "tonality": "narrative", "speed": 1.0, "docId": "my-book-1"}'

Response: taskId, totalChunks, segment0.presigned_url (audio), creditsCharged.

GET/api/v1/tts/tasks/{taskId}

Reader API

Progress of a narration and the audio URL of each segment.

POST/api/v1/scholar

Scholar API

Run a Scholar action on a document: chat, summarize, translate, quiz, recommend, websearch, humanize, compile, extractData, findTopics, evidenceTable, advancedReport. Each uses Scholar credits as in the app.

curl -X POST https://loudvoicereader-scholar.com/api/v1/scholar \
  -H "Authorization: Bearer lvr_your_key" \
  -H "Content-Type: application/json" \
  -d '{"action": "summarize", "documentText": "…full text…"}'

Long actions (compile, advancedReport, humanize) stream whitespace while they work, then the JSON result — read the whole response before parsing.