---
title: "API Reference"
description: "Hosts, conventions, and every speech endpoint you can call with a platform API key."
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.dev.navana.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# API Reference

The speech APIs are what you call in production. The platform app issues the
API key and tracks what you spend; it is not something your integration calls.

## Endpoints

| Method | Endpoint | Purpose |
| --- | --- | --- |
| `POST` | [`stt.navana.ai/api/transcribe`](/api-reference/transcribe) | Transcribe an audio file in one request |
| `WSS` | [`stt.navana.ai`](/api-reference/transcribe-streaming) | Live transcription over WebSocket |
| `POST` | [`tts.navana.ai/tts/bytes`](/api-reference/synthesize) | Synthesize a block of text in one request |
| `WSS` | [`tts.navana.ai`](/api-reference/synthesize-streaming) | Live synthesis over WebSocket |

## Conventions

**Authentication.** Speech-to-text takes an `X-Api-Key` header, including on
the WebSocket upgrade. Text-to-speech takes `X-API-Key` over HTTP and an
`auth_token` field in the opening frame over WebSocket. See
[Authentication](/authentication).

**Correlation.** You generate a `transaction_id`, which must be a valid UUID,
on every transcription request. Responses carry a `call_id` identifying the
transcription itself. Log both.

**Audio.** Transcription takes a file upload or raw PCM frames, and models are
trained at 8 kHz, the rate telephony delivers. Synthesis returns raw audio with
no container, in the encoding you name in `output_format`.

**Errors.** Failures come back with a meaningful HTTP status. On the
non-streaming endpoint the JSON body carries `status: "error"` along with
`error` and `message`. Full list in
[Errors and debugging](/api-reference/errors).

**Versioning.** Paths are unversioned. There is no `Accept-Version` header and
no `/v1` prefix.

## Reading this reference

Each endpoint page follows the same structure: signature, authentication,
parameters, an example request in several languages, the response with every
field explained, and the errors specific to that endpoint.

If you are making a first call, start with [Quickstart](/quickstart) instead.
You do not need to read a full endpoint page to get a result.

Source: https://docs.dev.navana.ai/api-reference/index.mdx
