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

# Quickstart

> Create an API key, find a covered airport, list its latest ATC transcripts, and download one transmission's audio with the Enhanced Radar API.

This quickstart takes you from a new account to a played ATC transmission. You create an API key, find a covered airport, list its latest transcripts, and download one transmission's audio. Each step shows what the response looks like and which value to carry into the next step.

You need `curl` and [`jq`](https://jqlang.org).

**1. Create an API key**

Sign in to the [dashboard](https://api.enhancedradar.com) and complete onboarding: your profile, phone verification, identity verification, and a payment method.

Then open **Keys**, choose **Create key**, and give the key a name. Copy the secret key and store it somewhere safe; it is shown only once, when it is created.

Keep the key in an environment variable. Never embed it in browser or mobile client code.

```bash theme={null}
export ER_API_KEY="sk_..."
```

**2. Check what requests cost**

[`GET /api/v0/pricing`](https://enhancedradar.com/docs/api/docs/api/api-reference/pricing) is free. This quickstart is charged for 5 transcripts (`transcript`) and 1 audio link (`transcript_audio`).

```bash theme={null}
curl -s -H "Authorization: Bearer $ER_API_KEY" \
  "https://api.enhancedradar.com/api/v0/pricing" \
  | jq '.current_prices[] | select(.priced_item == "transcript" or .priced_item == "transcript_audio") | {priced_item, price_bands}'
```

Each band's `usd_per_unit` is the price of one unit in US dollars. See [Pricing](https://enhancedradar.com/docs/api/docs/api/pricing.md) and [Billing](https://enhancedradar.com/docs/api/docs/api/concepts/billing.md).

**3. Find a covered airport**

Search for an airport by code or name. Search is free.

```bash theme={null}
curl -s -H "Authorization: Bearer $ER_API_KEY" \
  "https://api.enhancedradar.com/api/v0/facilities/search?q=SFO&facility_type=airport&limit=1"
```

```json theme={null}
{
  "facilities": [
    {
      "facility_id": "3667d976-1566-4887-ae34-c024d92f46c7",
      "facility_type": "airport",
      "facility_code": "SFO",
      "facility_name": "San Francisco",
      "airport_municipality": "San Francisco, CA"
    }
  ]
}
```

Search finds every airport we know about, not only the ones we cover. Check that the facility is in [`GET /api/v0/facilities`](https://enhancedradar.com/docs/api/docs/api/api-reference/facilities/list) and count its available channels:

```bash theme={null}
export FACILITY_ID="3667d976-1566-4887-ae34-c024d92f46c7"

curl -s -H "Authorization: Bearer $ER_API_KEY" \
  "https://api.enhancedradar.com/api/v0/facilities" \
  | jq --arg id "$FACILITY_ID" '.facilities[] | select(.facility_id == $id) | [.channel_categories[].atc_channels[] | select(.is_available)] | length'
```

A number above `0` means the API serves data for this airport. No output means we don't cover it; pick another airport.

**4. List the latest transcripts**

Request the last hour of transcripts at that airport, at most 5. The commands below build the window on both macOS and Linux.

```bash theme={null}
export UNTIL=$(date -u +%Y-%m-%dT%H:%M:%SZ)
export SINCE=$(date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -v-1H +%Y-%m-%dT%H:%M:%SZ)

curl -s -D transcripts-headers.txt -H "Authorization: Bearer $ER_API_KEY" \
  "https://api.enhancedradar.com/api/v0/transcripts?since=$SINCE&until=$UNTIL&facility_id=$FACILITY_ID&limit=5" \
  > transcripts.json

jq '.transcripts[] | {audio_sample_id, received_at, transcript}' transcripts.json
```

```json theme={null}
{
  "audio_sample_id": "29e13bdf-08fa-4e44-87a5-ed81a17919a7",
  "received_at": "2026-10-22T22:40:50.311224173Z",
  "transcript": "Iconic 776, uh San Francisco Tower, runway 28R at E cleared for takeoff"
}
```

Transcripts come back newest first. `received_at` is when the transmission's audio clip ended.

> [!NOTE]
>
> If `transcripts` is empty, there was no traffic on the airport's available channels in that hour. Widen the window (up to 48 hours) or try a busier airport. An empty list is not charged. See [Interpreting results](https://enhancedradar.com/docs/api/docs/api/concepts/interpreting-results.md).

**5. Download a transmission's audio**

Take the newest `audio_sample_id`, request a link to its WAV audio, and download it. The link expires 3 minutes after the response, so download it right away.

```bash theme={null}
export AUDIO_SAMPLE_ID=$(jq -r '.transcripts[0].audio_sample_id' transcripts.json)

curl -s -D audio-headers.txt -H "Authorization: Bearer $ER_API_KEY" \
  "https://api.enhancedradar.com/api/v0/transcripts/$AUDIO_SAMPLE_ID/audio" \
  > audio.json

curl -s -o transmission.wav "$(jq -r '.audio_link' audio.json)"
```

`audio.json` looks like this:

```json theme={null}
{
  "audio_sample_id": "29e13bdf-08fa-4e44-87a5-ed81a17919a7",
  "audio_link": "https://.../audio.wav?Policy=...&Signature=...&Key-Pair-Id=...",
  "audio_link_expires_at": "2026-10-22T23:44:06.102311Z"
}
```

Play `transmission.wav` with any audio player, for example `afplay transmission.wav` on macOS.

**6. See what it cost**

Every response carries `X-Charged-Usd`, what the request cost in US dollars with three decimal places, and charged responses also carry `X-Balance-Usd`, your organization's balance after it. The two requests above saved their headers:

```bash theme={null}
grep -i -E '^x-(charged|balance)-usd' transcripts-headers.txt audio-headers.txt
```

The dashboard also shows your organization's usage and balance.

## Next steps

> [card] [Search events](https://enhancedradar.com/docs/api/docs/api/api-reference/events/search.md)
>
> Find go-arounds, diversions, and other notable events in plain words.

> [card] [Stream live data](https://enhancedradar.com/docs/api/docs/api/guides/live-updates.md)
>
> Subscribe to transcripts and statuses over one WebSocket.

> [card] [Interpreting results](https://enhancedradar.com/docs/api/docs/api/concepts/interpreting-results.md)
>
> What empty lists, null statuses, and updates mean.

> [card] [Connect an AI assistant](https://enhancedradar.com/docs/api/docs/api/guides/mcp.md)
>
> Use the same data from Claude, Cursor, or another MCP client.


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