A speech engine.
A simple boundary.

Vox Homini v1 turns audio into a transcript and a punctuated, paragraph-structured version. Call it from your application's server.

Keep authentication server-side.

All /v1 routes require an Authorization: Bearer <client API key> header. Client keys are configured by the operator. Provider credentials stay inside the Vox Homini service; do not ship either kind of credential in browser code.

Your server sends the audio buffer. Vox Homini handles recognition and text structuring through external providers and returns the result. Trubado is the first integration, not a requirement to use the API.

Audio in. Both texts out.

POST /v1/process

Send multipart/form-data with a single file field named audio. The service validates decoded audio, performs speech recognition, then adds punctuation, case and paragraphs.

curl --request POST \
  "$YOUR_VOX_ENDPOINT/v1/process" \
  --header "Authorization: Bearer $VOX_API_KEY" \
  --form "audio=@voice-note.wav"

Set these environment variables in your server-side environment. This page does not make API requests.

Response fields

rawText
string · The speech-recognition transcript before text structuring.
text
string · The punctuated, paragraph-structured text.
provider
string · The text-structuring provider label. Existing labels include minimax-direct and stt-verbatim.
audioDurationMs
number · Authoritative duration of the decoded audio, in milliseconds.
durationMs
number · Duration reported by the processing operation, in milliseconds. Not a latency promise.

Use the whole pipeline.
Or call each step.

POST /v1/audio/inspect

Input: the same multipart audio file. Decodes and validates audio without calling providers. Returns { audioDurationMs: number, normalizedBytes: number }. Use the decoded duration for application-side quota decisions before a provider request.

POST /v1/transcriptions

Input: the same multipart audio file. Validates audio and performs speech recognition without text structuring. Returns { text: string, durationMs: number, audioDurationMs: number }.

POST /v1/normalize

Input: JSON { "text": "your transcript" } with Content-Type: application/json. Adds punctuation, case and paragraphs while preserving words, language and profanity. Returns { text: string, provider: string, durationMs: number }.

GET /v1/capabilities

Authenticated version, limits and readiness/availability information. It does not expose provider credentials.

The boundary matters.

Your application remains responsible for its user authentication, consent, quotas, history and retry policy. Do not automatically repeat a failed billable request without considering its outcome.

Schema and availability.

GET /openapi.json provides the machine-readable v1 schema, authentication requirements, request/response structures, error statuses and limits at your deployment's base URL. Consult that deployed schema for exact error handling; this guide does not invent undocumented response details.

GET /health is the public liveness endpoint. GET /ready reports readiness without revealing secrets. Neither replaces the authenticated API.

V1 contract · No fixed language list, accuracy benchmark, processing-time promise, pricing or public key-issuance flow is asserted here.