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

# Quickstart

> Transcribe a recording with speaker labels.

<Steps>
  <Step title="Get an API key">
    Sign in at [playground.aircaps.com](https://playground.aircaps.com), open **API keys**, and create a key. It is shown once.

    ```bash theme={null}
    export AIRCAPS_API_KEY="aircaps_sk_..."
    ```
  </Step>

  <Step title="Submit audio">
    Pass a URL the API can download (public or presigned):

    ```bash theme={null}
    curl https://api.aircaps.com/v1/transcripts \
      -H "Authorization: Bearer $AIRCAPS_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"model": "a5s-async-v1", "audio_url": "https://example.com/meeting.mp3", "language_code": "en"}'
    ```

    `language_code` is optional (default `en`).

    The response is a transcript object with `"status": "queued"` or `"processing"` and an `id` like `tr_01k6z...`.
  </Step>

  <Step title="Get the result">
    ```bash theme={null}
    curl https://api.aircaps.com/v1/transcripts/tr_01k6z... \
      -H "Authorization: Bearer $AIRCAPS_API_KEY"
    ```

    Poll until `status` is `completed` (or `error`), or pass a `webhook_url` when you submit to be notified instead.
  </Step>
</Steps>

## Local files in Python

```python theme={null}
# pip install requests
import os, sys, time, requests

API = "https://api.aircaps.com/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['AIRCAPS_API_KEY']}"}

# 1. Upload straight to storage
upload = requests.post(f"{API}/files/upload-url", headers=HEADERS).json()
with open(sys.argv[1], "rb") as f:
    requests.put(upload["upload_url"], data=f).raise_for_status()

# 2. Transcribe
job = requests.post(f"{API}/transcripts", headers=HEADERS,
                    json={"model": "a5s-async-v1", "file_id": upload["id"], "language_code": "en"}).json()

# 3. Wait for the result
while job["status"] in ("queued", "processing"):
    time.sleep(3)
    job = requests.get(f"{API}/transcripts/{job['id']}", headers=HEADERS).json()

for u in job["utterances"]:
    print(f"[{u['start']:7.1f}s] {u['speaker']}: {u['text']}")
```

<Note>
  **Language:** both models transcribe English only today. Pass `language_code` (batch) or `language` (streaming) as `en` or a regional variant such as `en-US` or `en-GB`. Any other value returns `unsupported_language`. Multilingual support is planned and will be available soon.
</Note>

Next: [batch transcription in depth](/guides/async-transcription) or [live streaming](/guides/streaming).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.