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,
"official": false,
"notice": "Unofficial. Not for operational use. Confirm on frequency."
}
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_relay_airport
Airport info plus latest conditions. Requires icao. Available on Free, ATIS Relay Plus, and Commercial. This endpoint never starts a phone-line dial. The transcribed ATIS/AWOS fields are included when the latest servable report is from the past hour. If there is no transcribed report in that window, the request still succeeds: transcript, transcript_letter, transcript_valid_time, and audio are null, and call_status is na. That empty transcribed payload is not an error. 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. That add-on is included with no extra usage charge. Free keys that pass include=notams still receive the normal airport payload plus a notice that NOTAMs require a paid plan. transcript_valid_time is Unix epoch seconds. When D-ATIS is present, each slot is a raw FAA record; timestamp on those records is Unix epoch milliseconds.
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": {
"atis": {
"airportID": "KSFO",
"letter": "B",
"dataBody": "SFO ATIS INFO B 1656Z. ...",
"time": 1656,
"DATISTime": 201656,
"editType": "C",
"srcAddr": "SFOATXA",
"timestamp": 1730225400000
},
"departure": null,
"arrival": null
},
"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" }
],
"official": false,
"notice": "Unofficial. Not for operational use. Confirm on frequency."
}
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
Starts a phone-line capture for ATIS or AWOS/ASOS. Requires icao. Optional product may be awos or asos, the same as the website request form. ATIS Relay Plus and Commercial only (402 on a free key). Airports with no phone path, including D-ATIS-only airports, return 422 with error not_dialable. Use GET /api/atis_relay_airport for current conditions, or D-ATIS when that airport publishes it. If a current report is too recent to poll the phone again, the endpoint returns that existing report with 200 and {"message":"Recent weather report with transcript exists"} instead of placing a new call. A new call returns 202 and {"message":"Call in progress"}.
curl "https://atisrelay.com/api/atis_relay_dial?icao=KSEE" \
-H "X-Api-Key: $TOKEN"
Response:
{ "message": "Call in progress" }
curl "https://atisrelay.com/api/atis_relay_dial?icao=KJRB&product=awos" \
-H "X-Api-Key: $TOKEN"
Response:
{ "message": "Call in progress" }
curl "https://atisrelay.com/api/atis_relay_dial?icao=KSFO" \
-H "X-Api-Key: $TOKEN"
Response:
{ "error": "not_dialable", "hint": "Use GET /api/atis_relay_airport for current conditions, or D-ATIS when that airport publishes it." }
GET /api/audio/:token
Fetches the audio for a link returned by GET /api/atis_relay_airport. 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 API keys, ATIS Relay Plus API inclusions, and Commercial usage are on the API and Commercial plans page.
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 transcribed report when it is from the past hour, and never dials. Audio links on that endpoint are ATIS Relay Plus and Commercial only.
GET /api/atis_relay_dial starts a new ATIS or AWOS/ASOS 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. Calls follow the Phone Line Policy: at most once every 10 minutes (20 minutes for ATIS), one call at a time, and a recent capture is not billed as a dial.
Report payloads include official: false and a notice string: Unofficial. Not for operational use. Confirm on frequency. Existing fields stay in place. When a payload already has a more specific notice, such as a paid-plan audio or NOTAM message, that specific notice is kept.
GET /api/datis/all and GET /api/notams need ATIS Relay Plus or Commercial.
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.422 Unprocessable Entitythe airport has no ATIS or AWOS/ASOS phone path (GET /api/atis_relay_dial,errornot_dialable).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. Per-minute burst limits always apply. GET /api/audio/:token counts against the same per-minute burst and daily limits as GET /api/atis_relay_airport.
GET /api/datis/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.
Usage billing
Each plan keeps its included allowance free. Usage billing is opt-in. Commercial is self-serve from the API and Commercial plans page as a metered subscription. Without opt-in, extra daily calls still return 429 at the limit, same as today.
API usage beyond the included daily amount is billed per request, with a separate rate for each endpoint.
Scheduled ATIS, ASOS, or AWOS reports are a separate one-off product. ATIS Relay Plus includes a monthly allowance of scheduled reports, then the one-off price applies. We try up to 3 times. If the report does not go through after those attempts, we restore a credit or refund the charge. Extra texts around the scheduled time are an add-on; each extra text that does not go through is refunded.
Audio retrieval is available on paid plans and is charged when the audio is fetched. Paid keys may still pass include=notams on airport requests. NOTAMs on that add-on are included, with no extra charge.
When you are charged
Usage charges apply only after you go past the included allowance for your plan, and only if usage billing is turned on for the account. Included calls stay free. If usage billing is off, extra daily calls and extra monthly dials return 429 at the limit instead of being billed.
GET /api/atis_relay_airport is 0.2 cents ($0.002) per call. The charge is the same whether a transcript is present or not. This endpoint never starts a phone-line dial. Transcribed ATIS/AWOS fields are filled in when a servable report is from the past hour. If there is none, the request still succeeds and is still billed: transcript, transcript_letter, transcript_valid_time, and audio are null, and call_status is na.
GET /api/atis is $0.001 per call. GET /api/datis/all is 2 cents per call. GET /api/notams (the standalone endpoint) is 0.2 cents per call. Paid keys may pass include=notams on airport requests. That NOTAMs add-on is included, with no extra charge. GET /api/audio/:token is 0.3 cents each time the audio is fetched, on paid plans.
GET /api/atis_relay_dial bills in two ways. A new phone-line capture is 19 cents, and only when that call returns a usable report. Usable means a complete transcript, a valid information letter, and audio. Failed calls, busy lines, closed lines, failed transcription, and reports that do not meet that quality bar are not charged. If the recording callback is retried, the same dial is never charged twice.
If a usable report is recent enough that this endpoint returns it instead of dialing, the call is 2 cents. That 2 cent charge is for the recent report, not a dial. Recent enough means the report was captured in the last 10 minutes, or its ATIS time is from the last 65 minutes. A report that is still in progress, with no transcript yet, is not billed as a recent report.
A 422 not_dialable response is not billed as a phone dial and does not consume the monthly phone allowance. That response means the airport has no ATIS or AWOS/ASOS phone path, so no call is placed.
If a delivered scheduled report is inaccurate, use Report inaccurate on the scheduled report page within 7 days of delivery. Approved claims restore an included report or refund the card. That remedy is an accuracy credit.
Usage rates, effective 2026-10-20. These per-request rates apply to usage beyond your plan's included limits, and only if you've turned on usage billing or have a Commercial plan. Each endpoint's monthly total is rounded to the nearest cent, half-up. The binding rate card, with its effective date and past versions, is at /pricing/usage. We email at least 30 days' notice before any rate increase, and changes take effect on the first day of a UTC month.
| Endpoint | Per 1,000 | Per call |
|---|---|---|
/api/atis_relay_airport ATIS/AWOS single |
$2 | $0.002 |
/api/atis D-ATIS single |
$1 | $0.001 |
/api/datis/all |
$20 | 2 cents |
/api/notams standalone |
$2 | 0.2 cent |
/api/audio fetch |
$3 | 0.3 cent |
/api/atis_relay_dial recent report, not a dial (too recent to re-dial) |
$20 | 2 cents |
/api/atis_relay_dial phone dial overage |
$190 | 19 cents |
Usage billing is governed by our Paid Features Terms and, for Commercial plans, the Commercial section of our API Terms. When you turn it on, you authorize us to charge your saved card each month for billable usage, up to the monthly limit you set. Billable usage means successful responses beyond your plan's included limits; errors and 429 responses aren't billed. We email your usage statement on the 1st of each month and charge it on the 11th. You can turn usage billing off at any time. That stops new charges immediately; usage already incurred is still billed. Paid Features Terms. API Terms.
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 API is subject to the ATIS Relay Terms of Use. These API Terms are Additional Terms under Section 20 of the Terms of Use. 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 you paid us in the 12 months before the event giving rise to the claim. 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.
- Notice to end users. If you show API data to anyone else, display this notice next to it: "Unofficial. Not for operational use. Confirm on frequency." Don't remove or hide warnings or status fields the API provides.
- Keys. Keep your API key secret. You're responsible for all usage under it. Tell us immediately if it's exposed, and we'll replace it.
- Caching. You may cache API responses for up to 24 hours to reduce requests. You may not build or offer an archive of ATIS Relay data.
- Availability. We don't offer an uptime commitment, service-level agreement, or service credits. We may change, limit, or suspend the API, and we'll try to give notice before breaking changes.
Commercial API Terms
These terms apply while you have a Commercial plan.
- License. You may display and deliver API data, including audio, to your end users inside your own app, website, or service, subject to these API Terms. This is the separate written agreement referred to in Section 14 of the Terms of Use.
- Not permitted. You may not resell, sublicense, or distribute raw API data or audio as a data feed or bulk export; use it to build a service that competes with ATIS Relay; rebroadcast audio on any radio frequency; or let end users call the API with your key. We do not support calling these phone lines for non-aviation purposes.
- Attribution. Show "Data: ATIS Relay," linked to atisrelay.com, wherever API data appears, unless we agree otherwise in writing.
- Your end users. Your terms with your end users must say the data is unofficial and not for operational use, and must not promise more than these terms allow. You're responsible for your product and for how your end users use it.
- Business use. Commercial plans are for businesses and organizations. By starting one, you confirm you're acting for a business and agree to these terms on its behalf.
- Billing. Usage beyond included limits is billed monthly under our Paid Features Terms. You must set a monthly limit. Calls to airport weather phone lines follow our Phone Line Policy; a Commercial plan includes no calls beyond it.
- Larger use. If your billable usage would exceed $1,000 in a month, or you want to redistribute data beyond what this section allows, you'll need a signed order form with us.
- Suspension and termination. We may suspend Commercial access if you breach these terms, if a payment stays unpaid for 14 days, or to protect the Service. Either of us may end a Commercial plan on 30 days' notice, or immediately for a material breach. When it ends, stop using API data and delete any cached data within 7 days.
- Indemnity. In addition to the indemnity above, you'll defend and indemnify us against third-party claims, including claims by your end users, arising from your product or your use of API data in it.
Commercial inquiries: support@atisrelay.com