ATIS Relay API
Authentication
Create a free ATIS Relay account and issue a key under Account → API key. Include this header on every request:
X-Api-Key: <token>
One key per account. Keys can be revoked from the same page.
Available Endpoints
GET /api/atis
Retrieve the latest D-ATIS for one airport. Requires icao. Available on Free, ATIS Relay Plus, and Commercial.
curl "https://atisrelay.com/api/atis?icao=KSFO" \
-H "X-Api-Key: $TOKEN"
Response:
{
"atis": {
"airportID": "KSFO",
"atisCode": "B",
"letter": "B",
"dataBody": "SFO ATIS INFO B 1656Z. ..."
},
"departure": null,
"arrival": null
}
GET /api/datis/all
Returns every current D-ATIS in one response. ATIS Relay Plus and Commercial only. Free keys receive 403. The server caches this payload for 5 minutes and shares that cache across callers. Each key may call this endpoint once every 5 minutes. A second call inside that window returns 429 with Retry-After. This endpoint does not count against the per-airport per-minute burst used by GET /api/atis and GET /api/atis_relay_airport.
curl "https://atisrelay.com/api/datis/all" \
-H "X-Api-Key: $TOKEN"
Response:
{
"cached_at": "2026-10-17T19:00:00Z",
"cache_ttl_seconds": 300,
"airports": {
"KSFO": {
"atis": { "airportID": "KSFO", "letter": "B", "dataBody": "SFO ATIS INFO B 1656Z. ..." },
"departure": null,
"arrival": null
}
}
}
GET /api/atis/all
Commercial only. Plus and Free keys receive 403. Returns every current ATIS, AWOS, and D-ATIS transcript plus parsed values (information letter, Zulu time, wind, visibility, and altimeter) in the same shape the per-airport endpoint uses for those fields. Runway geometry stays on GET /api/runways. Audio links are Commercial only and expire after 24 hours. Request a new link after it expires. The server caches the condition data for 5 minutes and shares that cache across callers. Audio links are created when the response is sent. Each key may call this endpoint once every 5 minutes. A second call inside that window returns 429 with Retry-After. This endpoint does not count against the per-airport per-minute burst.
curl "https://atisrelay.com/api/atis/all" \
-H "X-Api-Key: $TOKEN"
Response:
{
"cached_at": "2026-10-17T19:00:00Z",
"cache_ttl_seconds": 300,
"airports": [
{
"icao": "KSFO",
"name": "San Francisco International Airport",
"transcript": "Information Bravo...",
"transcript_letter": "B",
"transcript_valid_time": 1730225400,
"call_status": "ready",
"audio": "https://atisrelay.com/api/audio/TOKEN",
"source": "phone",
"datis": { "atis": { "letter": "B" }, "departure": null, "arrival": null },
"parsed": { "letter": "B", "zulu_time": 1730225400, "wind": "28012KT", "visibility": "10", "altimeter": "3008" }
}
]
}
GET /api/atis_relay_airport
Airport info plus latest conditions. Requires icao. Available on Free, ATIS Relay Plus, and Commercial. Audio links are included for ATIS Relay Plus and Commercial keys. Free keys receive audio as null and a notice that audio requires a paid plan. Audio links expire after 24 hours. Request a new link after it expires. Fetching an audio link counts against the key's per-minute and daily limits. Paid keys may add include=notams to attach the same NOTAMs the airport pages use. Free keys that pass include=notams still receive the normal airport payload plus a notice that NOTAMs require a paid plan.
curl "https://atisrelay.com/api/atis_relay_airport?icao=KSFO&include=notams" \
-H "X-Api-Key: $TOKEN"
Response:
{
"transcript": "Information Bravo...",
"transcript_letter": "B",
"transcript_valid_time": 1730225400,
"call_status": "ready",
"audio": "https://atisrelay.com/api/audio/TOKEN",
"metar": { "report": "KSFO 121656Z ...", "flight_rules": "VFR" },
"datis": { "raw": "..." },
"airport": { "icao": "KSFO", "name": "San Francisco International Airport" },
"notams": [
{ "text": "!SFO 10/001 RWY 28L CLSD", "type": "N", "effective_dt": "2026-10-01T12:00:00Z", "age": "new" }
]
}
GET /api/atis_relay_index
Lists supported airports.
curl https://atisrelay.com/api/atis_relay_index \
-H "X-Api-Key: $TOKEN"
Response:
{
"datis": ["KJFK", "KLAX", "KSFO"],
"transcribed": ["KAPA", "KCRQ", "KSEE"]
}
GET /api/atis_relay_dial
Initiates ATIS capture for non-D-ATIS airports. Requires icao. ATIS Relay Plus and Commercial only (402 on a free key).
curl "https://atisrelay.com/api/atis_relay_dial?icao=KSEE" \
-H "X-Api-Key: $TOKEN"
Response:
{ "message": "Call in progress" }
GET /api/audio/:token
Fetches the audio for a link returned by GET /api/atis_relay_airport or GET /api/atis/all. ATIS Relay Plus and Commercial only. Audio links expire after 24 hours. Request a new link after it expires. Each fetch counts against the key's per-minute and daily limits. Expired or invalid links return 404.
curl -L "https://atisrelay.com/api/audio/TOKEN" \
-H "X-Api-Key: $TOKEN"
GET /api/notams
Returns current NOTAMs for one airport. Requires icao. ATIS Relay Plus and Commercial only. Free keys receive 403. Reuses the same FAA NOTAM fetch and 15-minute cache as uncovered airport pages. Counts against the normal per-key minute and daily limits.
curl "https://atisrelay.com/api/notams?icao=KSEE" \
-H "X-Api-Key: $TOKEN"
Response:
{
"icao": "KSEE",
"notams": [
{ "text": "!SEE 10/001 TWY A CLSD", "type": "N", "effective_dt": "2026-10-01T12:00:00Z", "effective_end_dt": "2026-10-15T23:59:00Z", "age": "new" }
]
}
GET /api/runways
Returns runway data. Provide icao or faa_loc_id.
curl "https://atisrelay.com/api/runways?icao=KSFO" \
-H "X-Api-Key: $TOKEN"
Response:
[
{ "rwy_id": "10L/28R", "rwy_len": 11870, "rwy_width": 200, "surface": "ASPH" }
]
GET /api/freqs
Returns frequencies. Provide icao or faa_loc_id.
curl "https://atisrelay.com/api/freqs?icao=KSFO" \
-H "X-Api-Key: $TOKEN"
Response:
[
{ "name": "TOWER", "frequency": "120.50", "twr_comm_call": "San Francisco Tower" }
]
GET /api/airport_rmks
Returns FAA airport remarks. Provide icao or faa_loc_id.
curl "https://atisrelay.com/api/airport_rmks?icao=KSFO" \
-H "X-Api-Key: $TOKEN"
Response:
[
{ "element": "SERVICES", "remark": "FUEL 100LL JET A" }
]
Plans
Free
$0
Personal API key
- Digital ATIS, METAR, and airport data
- Phone-line ATIS/AWOS is included when it's already on the site: if someone else requested it, or a community station transcribed it
- Free keys can't start a new phone-line dial
- Bulk dumps and NOTAMs need a paid plan
ATIS Relay Plus
$5.99/month
$24.99/year
Plus membership benefits
- Phone-line ATIS/AWOS
- Unlimited on-demand ATIS in the app, on the web, or by text
- Cancel any time
API
- Start new phone-line ATIS/AWOS captures
- 100 new dials per UTC month
- Station hosts get 3× the dials: 300 new dials per UTC month
- Bulk D-ATIS
- Per-airport NOTAMs
By accessing or using the API, you agree to our API Terms and Terms of Service, including:
- Attribution: Applications must link to ATISrelay.com.
- FAA Data: SWIM data must display NOT FOR OPERATIONAL USE.
- Data Quality: Warnings about unreliable or outdated data must be displayed.
- Liability: Data is provided as-is, without warranty. Liability is limited, and you agree to indemnify us for claims arising from misuse or violations of the terms.
The API is not a substitute for official aviation information, and you must communicate this to the end users of your API integration.
What's included
Free keys can read digital ATIS, METAR, airport data, and any phone-line or community transcript that's already on the site: another request, or a community station. GET /api/atis_relay_airport returns that existing report. Audio links on that endpoint and on GET /api/atis/all are ATIS Relay Plus and Commercial only.
GET /api/atis_relay_dial starts a new phone-line capture and needs the ATIS Relay plan (402 on a free key, 429 after the monthly dial cap of 100 new dials per UTC month). Station hosts get 3× the dials: 300 new dials per UTC month.
GET /api/datis/all and GET /api/notams need ATIS Relay Plus or Commercial. GET /api/atis/all is Commercial only.
Status Codes
200 OKsuccess.202 Accepteda new phone-line capture was started (GET /api/atis_relay_dial).400 Bad Requesta required parameter is missing (icaoon airport endpoints).401 Unauthorizedmissing or invalid API key.402 Payment Requireda free API key cannot start a new phone-line dial.403 Forbiddenthe key's plan cannot use this endpoint, or a personal API key was used on an app-only endpoint (GET /api/recents).404 Not Foundresource unavailable, including an expired or invalid audio link.429 Too Many Requestsdaily, burst, monthly phone-line, or bulk 5-minute limit exceeded.502 Bad GatewayNOTAMs could not be fetched right now (GET /api/notams).
GET /api/recents is for the ATIS Relay iOS app (app_key) and the GPT inbound bearer token. Personal X-Api-Key tokens receive 403.
Rate limits
Personal API keys are limited by plan. These caps apply to the key.
| Plan | Per minute | Per day | Phone-line dials |
|---|---|---|---|
| Free | 10 | 500 | Cannot start a new phone-line dial |
| ATIS Relay Plus | 30 | 1000 | 100 new dials per UTC month |
| Commercial | 60 | 5000 | No monthly dial cap |
Automated or excessive use may be limited.
Response headers
Successful and limited API-key responses include:
X-RateLimit-Limit: daily request allowance for the keyX-RateLimit-Remaining: requests left in the current UTC dayX-RateLimit-Reset: when the daily window resets (ISO-8601 UTC)
When a key is over its minute or daily cap, the API returns 429 Too Many Requests and sets Retry-After to the number of seconds to wait. For a burst limit that is usually 60 seconds. For the daily cap it is the time left in the UTC day. GET /api/audio/:token counts against the same per-minute burst and daily limits as GET /api/atis_relay_airport.
GET /api/datis/all and GET /api/atis/all allow one successful call per key every 5 minutes. Those calls do not increment the per-airport per-minute burst. If you call again sooner, the API returns 429 and Retry-After is the time left in that 5-minute window.
Recommended implementation
A little caching goes a long way, both for your app and for everyone else using the service.
- Cache responses. D-ATIS updates at most every few minutes. Watch the information letter and refetch only when that letter changes or the report looks stale, for example no more than once per 1-2 minutes per airport. Audio links expire after 24 hours. Request a new link after it expires.
- If you receive
429, wait at least as long asRetry-After, then retry with exponential backoff and jitter. Do not keep sending the same request in a tight loop. - Do not poll the website HTML. Use this API.
- Batch or limit the airports you follow. Fetch only the fields you need, and avoid walking the full airport list on a timer.
- Send a descriptive
User-Agentthat names your app and includes a contact address, for exampleMyWxApp/1.0 (ops@example.com). - ATIS Relay does not currently offer webhooks. If you need push updates later, contact support. Until then, poll only when a cached report may have changed.
API Terms
Use of the ATIS Relay Application Programming Interface (API) is subject to the ATIS Relay Terms of Service. The following additional conditions apply:
- Attribution. Unless otherwise agreed in writing, applications using the API must provide a visible link to ATISrelay.com.
- FAA Data. Data originating from Federal Aviation Administration (FAA) System Wide Information Management (SWIM) must display the warning: NOT FOR OPERATIONAL USE.
- No FAA Endorsement. You may not represent or imply that the API, its data, or your application is approved, certified, or endorsed by the FAA.
- Data Quality Warnings. You are responsible for checking and prominently displaying any warnings indicating that information is outdated, incomplete, unavailable, or of questionable quality. You may not suppress or misrepresent warnings provided by the API.
- Operational Restrictions. The API is provided for informational purposes and must not be relied upon as the sole source of information for flight operations or safety-critical decisions. Users must independently verify information through appropriate official sources.
- Disclaimer of Warranties. The API and its data are provided “AS IS” and “AS AVAILABLE,” without warranties of any kind, express or implied, including warranties of accuracy, completeness, availability, fitness for a particular purpose, or non-infringement, to the maximum extent permitted by law.
- Limitation of Liability. To the maximum extent permitted by law, Torrey Systems, LLC, its owners, officers, employees, and agents shall not be liable for indirect, incidental, consequential, special, or punitive damages arising from use of the API, including losses resulting from inaccurate, delayed, incomplete, or unavailable data. Their total aggregate liability arising out of or relating to the API shall not exceed the greater of $100 or the fees paid by you for the API during the preceding 12 months. Nothing in this provision excludes liability that cannot lawfully be limited.
- Indemnification. You agree to defend, indemnify, and hold harmless Torrey Systems, LLC, its owners, officers, employees, and agents against third-party claims, liabilities, damages, and reasonable legal expenses arising from your violation of these terms, unlawful use of the API, or negligent or willful misconduct in connection with the API.
Commercial inquiries: support@flyownnav.com