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

# Quickstart

> Transcribe your first audio file in 5 minutes

<Steps>
  <Step title="Create an API key">
    Sign in to the [Typeless Console](https://platform.typelessapi.com) and create an
    API key. The key is shown **only once** at creation — store it somewhere safe.
  </Step>

  <Step title="Set your API key">
    ```bash theme={null}
    export TYPELESS_API_KEY="tls_sk_..."
    ```
  </Step>

  <Step title="Transcribe an audio file">
    Send a `wav`, `ogg`, or `webm` file (up to 50 MB / 5 minutes):

    <CodeGroup>
      ```bash cURL theme={null}
      curl -X POST https://api.typelessapi.com/v1/transcribe \
        -H "Authorization: Token $TYPELESS_API_KEY" \
        -F "audio=@meeting.wav" \
        -F "model=typeless-1.0-pro"
      ```

      ```python Python theme={null}
      import os
      import requests

      with open("meeting.wav", "rb") as f:
          resp = requests.post(
              "https://api.typelessapi.com/v1/transcribe",
              headers={"Authorization": f"Token {os.environ['TYPELESS_API_KEY']}"},
              files={"audio": f},
              data={"model": "typeless-1.0-pro"},
          )
      print(resp.json())
      ```

      ```javascript JavaScript theme={null}
      import fs from "node:fs";

      const form = new FormData();
      form.append("audio", new Blob([fs.readFileSync("meeting.wav")]), "meeting.wav");
      form.append("model", "typeless-1.0-pro");

      const resp = await fetch("https://api.typelessapi.com/v1/transcribe", {
        method: "POST",
        headers: { Authorization: `Token ${process.env.TYPELESS_API_KEY}` },
        body: form,
      });
      console.log(await resp.json());
      ```
    </CodeGroup>
  </Step>

  <Step title="Read the response">
    ```json theme={null}
    {
      "status": "success",
      "result": {
        "transcript": "Let's move the launch to next Thursday and loop in the design team early.",
        "detected_language": "en",
        "duration_seconds": 42.5
      },
      "usage": {
        "billed_audio_seconds": 42.5,
        "output_token_count": 128
      },
      "request_id": "01JXXXXXXXXXXXXXXXXXXXXXXX"
    }
    ```

    * `result.transcript` — the refined, ready-to-use text
    * `result.detected_language` — detected automatically when `language` is not set
    * `usage.billed_audio_seconds` — what you are billed on (15-second minimum per request)
    * `request_id` — include this when contacting support
  </Step>
</Steps>

## Next steps

<CardGroup cols={3}>
  <Card title="Streaming" icon="wave-pulse" href="/guides/streaming">
    Transcribe live audio over WebSocket
  </Card>

  <Card title="Models & Pricing" icon="scale-balanced" href="/models-pricing">
    Pick the right model tier
  </Card>

  <Card title="Error handling" icon="triangle-exclamation" href="/reference/errors">
    Handle failures gracefully
  </Card>
</CardGroup>
