Публичные read-only эндпоинты в формате JSON. Базовый путь:
https://airquality.am/{locale}/air-quality-app/v1/, где {locale} — en, ru или hy.
Допустим только метод GET. Ответы в кодировке application/json; charset=utf-8.
Передавайте осмысленный заголовок User-Agent (название приложения или проекта). В примерах на этой странице используется docs-example.
API можно использовать для личных виджетов, интеграций и других продуктов. При публикации в открытый доступ укажите airquality.am как источник данных.
Файловые выгрузки и лицензирование описаны на странице открытых данных (см. также readme.txt и DbCL для файлов).
Объект в массиве providers[] в ответе stations.json.
| Поле | Тип | Описание |
|---|---|---|
id | string | Слаг провайдера (например в поле Station.provider) |
title | string | Название провайдера для отображения |
url | string | Ссылка на страницу провайдера на сайте или пустая строка |
image | string | URL иконки для светлой темы |
image_dark | string | URL иконки для тёмной темы |
Объект в stations[] или единственный объект ответа station/{id}.json.
| Поле | Тип | Описание |
|---|---|---|
id | integer | Идентификатор станции |
status | string | Строка статуса (например online, offline) |
title | string | Адрес или название точки на языке запроса |
city | string|null | Город или null |
city_slug | string|null | Слаг города для URL или null |
district | string|null | Район или null |
district_slug | string|null | Слаг района или null |
latitude | number | Широта в десятичных градусах (WGS-84) |
longitude | number | Долгота в десятичных градусах (WGS-84) |
is_bad_thp | boolean | Подозрительные температура/влажность/давление |
measurement_time | string|null | Время последнего измерения (ISO 8601) или null при офлайне |
temperature | number|null | °C (среднее за час) |
humidity | number|null | Относительная влажность % |
pressure | number|null | Атмосферное давление в паскалях (Па), целое число; для гектопаскалей разделить на 100 |
aqi | integer|null | US EPA AQI по последнему часовому среднему |
pm2.5 | number|null | PM2.5 µg/m³ (скорректированное при наличии) |
pm2.5_raw | number|null | Сырое PM2.5 µg/m³ |
pm10 | number|null | PM10 µg/m³ |
pm1 | number|null | PM1 µg/m³ |
wind_speed | number|null | Скорость ветра (м/с) |
wind_direction | string|null | Направление ветра (например N, NE) |
uv | number|null | УФ-индекс |
rain | number|null | Осадки (мм) |
no2 | number|null | NO₂ (ppb) |
so2 | number|null | SO₂ µg/m³ |
o3 | number|null | O₃ µg/m³ |
dust | number|null | Пыль (PM) µg/m³ |
usvh | number|null | Мощность дозы (µSv/h) |
lux | null | Зарезервировано; сейчас всегда null |
provider | string | Слаг провайдера (см. Provider.id) |
url | string | Канонический URL страницы станции на airquality.am |
Объекты в regions[] для города или ответ region/{slug}.json, если slug — город.
| Поле | Тип | Описание |
|---|---|---|
slug | string | Слаг города |
title | string | Название города на языке запроса |
measurement_time | string|null | Время для используемой сводки (ISO 8601) или null |
temperature | number|null | °C (агрегировано) |
humidity | number|null | Относительная влажность % |
pressure | number|null | Как у станции: в паскалях (Па); для гПа разделить на 100 |
aqi | integer|null | US EPA AQI |
pm2.5 | number|null | PM2.5 µg/m³ |
pm10 | number|null | PM10 µg/m³ |
no2 | number|null | NO₂ ppb |
url | string | Страница города на airquality.am |
map_latitude | number | Широта центра карты (десятичные градусы) |
map_longitude | number | Долгота центра карты (десятичные градусы) |
map_delta | number | Параметр масштаба карты |
is_hidden | boolean | Скрыт ли город в части списков |
Те же поля, что у Region (город) для показаний и карты, с отличиями: slug — слаг района; title — название района; дополнительно city и city_slug — родительский город. У района нет поля is_hidden.
Один элемент массивов внутри 24h, 7d, 30d, 1y, 2y в ответах истории. Массив может быть пустым [], если за окно нет данных (например станция офлайн). Отдельные поля могут быть null.
История станции содержит avg_pm25_raw. История региона — поле station_count вместо него (без avg_pm25_raw).
В почасовых рядах (24h, 7d) обычно нет полей min_* / max_*; в суточных точках 30d есть и массивы range_*, и отдельные min_* / max_*.
| Поле | Тип | Описание |
|---|---|---|
timestamp | string | Начало интервала (ISO 8601) |
avg_temperature | number|null | °C |
avg_humidity | number|null | Относительная влажность % |
avg_pressure | number|null | Как у текущих показаний: в паскалях (Па); для гПа разделить на 100 |
avg_pm25 | number|null | PM2.5 µg/m³ |
avg_pm10 | number|null | PM10 µg/m³ |
avg_pm25_raw | number|null | Сырое PM2.5 µg/m³ (только история станции) |
avg_no2 | number|null | NO₂ ppb |
avg_usvh | number|null | Мощность дозы µSv/h |
avg_dust | number|null | Пыль (PM) µg/m³ |
avg_so2 | number|null | SO₂ µg/m³ |
avg_o3 | number|null | O₃ µg/m³ |
avg_wind_direction | number|null | Направление ветра (градусы по часовой стрелке от севера) |
avg_wind_speed | number|null | Скорость ветра (м/с) |
total_rain | number|null | Осадки за интервал (мм), если применимо |
station_count | number|null | Оценка числа станций в среднем (только история региона) |
range_temperature | [number, number]|null | [min, max] °C для суточных и более крупных интервалов, когда есть |
range_pm25 | [number, number]|null | [min, max] PM2.5 µg/m³ |
range_pm10 | [number, number]|null | [min, max] PM10 µg/m³ |
range_dust | [number, number]|null | [min, max] пыль (PM) µg/m³ |
range_wind_speed | [number, number]|null | [min, max] скорость ветра (м/с) |
range_aqi | [integer, integer]|null | [min, max] US EPA AQI за интервал |
aqi | integer|null | US EPA AQI |
min_temperature, max_temperature | number|null | Суточные и подобные интервалы: экстремумы °C; часто в 30d, обычно нет в почасовых 24h/7d |
min_pm25, max_pm25, min_pm10, max_pm10 | number|null | Тот же принцип интервалов; значения в µg/m³ |
min_no2, max_no2 | number|null | Тот же принцип интервалов; значения в ppb |
min_dust, max_dust | number|null | Тот же принцип интервалов; пыль (PM) µg/m³ |
min_wind_speed, max_wind_speed | number|null | Тот же принцип интервалов; значения в м/с |
min_* / max_* соответствуют концам интервалов из range_*, когда оба присутствуют.
Вместо https://airquality.am/en/... можно подставить ru или hy. Во всех примерах:
curl -sS -H 'User-Agent: docs-example' 'URL'
GET /v1/stations.jsonОтвет: { "providers": [...], "stations": [...], "regions": [...] }. В списке станций только видимые, не принудительно скрытые.
curl -sS -H 'User-Agent: docs-example' 'https://airquality.am/en/air-quality-app/v1/stations.json'
GET /v1/station/{id}.jsonОдин объект Station. 404, если станции нет.
curl -sS -H 'User-Agent: docs-example' 'https://airquality.am/en/air-quality-app/v1/station/1.json'
GET /v1/station/{id}-history.jsonОбъект с пятью массивами HistoryPoint: 24h (почасово), 7d (почасово), 30d (по дням), 1y (по месяцам), 2y (по месяцам). В примере — станция 126 (на момент проверки есть почасовые данные); у офлайн-станции массивы могут быть пустыми.
curl -sS -H 'User-Agent: docs-example' 'https://airquality.am/en/air-quality-app/v1/station/126-history.json'
GET /v1/region/{slug}.jsonОдин объект Region (город или район). slug — латиница в нижнем регистре и дефисы (например yerevan). 404, если не найден.
curl -sS -H 'User-Agent: docs-example' 'https://airquality.am/en/air-quality-app/v1/region/yerevan.json'
GET /v1/region/{slug}-history.jsonТе же пять ключей, что у истории станции; для региона в точках есть station_count.
curl -sS -H 'User-Agent: docs-example' 'https://airquality.am/en/air-quality-app/v1/region/yerevan-history.json'