---
title: "Quickstart"
description: "Create a key, transcribe your first file, and read the response, in about five minutes."
---

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

# Quickstart

Transcribe an audio file in three steps. You need an account on the platform
app and an audio file to send.

1. **Create an API key**

   Sign in at [platform.navana.ai](https://platform.navana.ai), open **API
   Keys** in the sidebar, and click **Create API Key**. The key is shown in
   full exactly once, at creation, so copy it now.

```bash title="Terminal"
export BODHI_API_KEY="bd_xxxxxxxxxxxx.xxxxxxxx…"
```

   Keys look like `bd_<prefix>.<secret>`. Only a hash of the secret is stored,
   so a lost key cannot be recovered and you create a new one instead. See
   [API keys](/api-keys) for the full lifecycle.

2. **Transcribe a file**

   Post the file to the transcription endpoint with your key in the
   `X-Api-Key` header. Pick a model that matches your audio's language. The
   full list is in [Models and languages](/speech-to-text/models).

```bash
  curl -X POST https://stt.navana.ai/api/transcribe \
    -H "X-Api-Key: $BODHI_API_KEY" \
    -F "model=hi-banking-v2-8khz" \
    -F "transaction_id=$(uuidgen)" \
    -F "aux=true" \
    -F "audio_file=@recording.wav"
```

```python
  import os, uuid, requests

  response = requests.post(
      "https://stt.navana.ai/api/transcribe",
      headers={"X-Api-Key": os.environ["BODHI_API_KEY"]},
      data={
          "model": "hi-banking-v2-8khz",
          "transaction_id": str(uuid.uuid4()),
          "aux": "true",
      },
      files={"audio_file": ("recording.wav", open("recording.wav", "rb"), "audio/wav")},
      timeout=120,
  )
  response.raise_for_status()
  print(response.json()["text"])
```

```ts
  import { openAsBlob } from 'node:fs'

  const form = new FormData()
  form.set('model', 'hi-banking-v2-8khz')
  form.set('transaction_id', crypto.randomUUID())
  form.set('aux', 'true')
  form.set('audio_file', await openAsBlob('recording.wav'), 'recording.wav')

  const res = await fetch('https://stt.navana.ai/api/transcribe', {
    method: 'POST',
    headers: { 'X-Api-Key': process.env.BODHI_API_KEY! },
    body: form,
  })
  if (!res.ok) throw new Error(await res.text())

  const { text } = await res.json()
  console.log(text)
```
```go
  package main

  import (
  	"bytes"
  	"encoding/json"
  	"fmt"
  	"io"
  	"mime/multipart"
  	"net/http"
  	"os"

  	"github.com/google/uuid"
  )

  func main() {
  	file, err := os.Open("recording.wav")
  	if err != nil {
  		panic(err)
  	}
  	defer file.Close()

  	var body bytes.Buffer
  	form := multipart.NewWriter(&body)
  	form.WriteField("model", "hi-banking-v2-8khz")
  	form.WriteField("transaction_id", uuid.NewString())
  	form.WriteField("aux", "true")
  	part, _ := form.CreateFormFile("audio_file", "recording.wav")
  	io.Copy(part, file)
  	form.Close()

  	req, _ := http.NewRequest(http.MethodPost,
  		"https://stt.navana.ai/api/transcribe", &body)
  	req.Header.Set("X-Api-Key", os.Getenv("BODHI_API_KEY"))
  	req.Header.Set("Content-Type", form.FormDataContentType())

  	resp, err := http.DefaultClient.Do(req)
  	if err != nil {
  		panic(err)
  	}
  	defer resp.Body.Close()

  	var out struct {
  		Text   string `json:"text"`
  		CallID string `json:"call_id"`
  	}
  	json.NewDecoder(resp.Body).Decode(&out)
  	fmt.Println(out.Text)
  }
```

   `transaction_id` is yours to generate and has to be a valid UUID. It is how
   you tie this request to your own logs.

3. **Read the response**

```json
{
  "text": "बिल्कुल आपकी पूरी सहायता की जाएगी",
  "call_id": "f99e79ca-6a2b-42f1-8d6b-fd0855e791de",
  "status": "success"
}
```

   `text` is the full transcript and `status` is `success` or `error`. Because
   the request set `aux=true`, the response also carries an `aux_info` object
   with per-segment timings, tokens, and confidence scores. Those are what you
   use to align a transcript against playback, or to flag low-confidence spans
   for review. See the [API reference](/api-reference/transcribe) for every
   field.

## What you were charged

The call drew down your account's credit balance, metered on the audio's
duration. Your balance and per-request usage are on the **Usage & Analytics**
and **Billing** pages in the platform.

## Next steps

- [Streaming transcription](/speech-to-text/streaming) — Read transcripts as the words are still being spoken.
- [Models and languages](/speech-to-text/models) — Every model, and how to pick one.
- [Handle errors](/api-reference/errors) — Every status code, what causes it, and what to do about it.
- [Authentication](/authentication) — Where the key goes for each API.

Source: https://docs.dev.navana.ai/quickstart/index.mdx
