Аутентификация
Для того, чтобы воспользоваться API необходимо иметь действующий аккаунт в системе и токен авторизации. Токен авторизации можно сгенерировать в личном профиле в пункте «API».
Использование сгенерированного токена
Сгенерированный токен должен передаваться в HTTP-заголовке Authorization во всех API-запросах.
Authorization: Bearer wGGtaQVncybYmhbiAab9poccBWoU4n0c1H0ee2zVyICWEM7B9s0DFrzU
Пример запроса на получение активных событий при помощи утилиты curl (подставьте свой токен):
curl --location 'https://detector404.uz/api/v1/alerts' \
--header 'Authorization: Bearer wGGtaQVncybYmhbiAab9poccBWoU4n0c1H0ee2zVyICWEM7B9s0DFrzU'
Ограничения API
Вы можете запрашивать данные за месяц, квартал или год (зависит от прав вашей учетной записи).
Установлены следующие ограничения на частоту запросов к API:
Кириллица в данных
Названия полулярных сервисов иногда написаны кириллицей (Яндекс, ВК Видео и т.д.).
Согласно RFC3986, URI может состоять только из символов латинского алфавита и некоторых специальных символов. Использование в URI пробелов или названий сервисов в кириллице может вызывать ошибку 422 Unprocessable (invalid) entity. Для избежания этого, существует механизм кодирования недопустимых символов с помощью метода Percent-Encoding (см. RFC3986).
К сожалению, не все реализации прикладных программ правильно используют данный механизм.
В связи с этим рекомендуется заранее преобразовывать названия сервисов, в которых присутствуют пробелы или кириллица, методом Percent-Encoding. Исходное название должно быть в кодировке UTF-8.
Альтернативой является использовать специальные названия сервисов, составленные только из допустимых символов. Для каждого сервиса существует такое название, возвращаемое в поле urlname методами /services и /services/branch/{branch}.
Примеры для сервиса Tenge Bank
Запрос c предварительно закодированным названием:
curl --location 'https://detector404.ru/api/v1/service/%D0%91%D0%B0%D0%BD%D0%BA%20%D0%92%D0%A2%D0%91/status' \
--header 'Authorization: Bearer wGGtaQVncybYmhbiAab9poccBWoU4n0c1H0ee2zVyICWEM7B9s0DFrzU'
Запрос cо специальным названием:
curl --location 'https://detector404.ru/api/v1/service/tengebankuz/status' \
--header 'Authorization: Bearer wGGtaQVncybYmhbiAab9poccBWoU4n0c1H0ee2zVyICWEM7B9s0DFrzU'
Белый список
Метод для получения списка адресов, с которых detector404 осуществляет проверки доступности
URL
/api/v1/whitelist
Метод
GET
Описание возвращаемых данных
Метод возвращает JSON-массив, состоящий из объектов со следующими полями:
Примечание
Данный метод использует отдельный токен авторизации, доступный для партнеров по запросу.
Пример
Запрос:
curl --location 'https://detector404.uz/api/v1/whitelist' \
--header 'Authorization: Bearer wGGtaQVncybYmhbiAab9poccBWoU4n0c1H0ee2zVyICWEM7B9s0DFrzU'
Ответ:
[ { "ip": "94.158.57.110", "city": "Ташкент", "active": true }, { "ip": "37.110.214.233", "city": "Самарканд", "active": true }, { "ip": "178.208.68.48", "city": "Бухара", "active": true } ]
События
Метод для получения текущих активных событий
URL
/api/v1/alerts
Метод
GET
Описание возвращаемых данных
Метод возвращает JSON-объект со следующими полями:
Массив data состоит из объектов со следующими обязательными полями:
Возможные типы событий и дополнительные поля, индивидуальные для каждого типа:
url - недоступность страницы, дополнительные поля:
latency - большая задержка ответа страницы у конкретного провайдера в конкретном городе, дополнительные поля:
isp - проблемы у провайдера в городе, дополнительные поля:
city - проблемы в городе, дополнительные поля:
complaints - всплеск жалоб пользователей, дополнительные поля:
function - перестала работать какая-то функция сервиса, дополнительные поля:
Пример
Запрос:
curl --location 'https://detector404.uz/api/v1/alerts' \
--header 'Authorization: Bearer wGGtaQVncybYmhbiAab9poccBWoU4n0c1H0ee2zVyICWEM7B9s0DFrzU'
Ответ:
{ "success": true, "data": [ { "id": 17112941194, "time": "2024-03-24T15:28:07.717409+00:00", "type": "complaints", "service": "Uzum Market", "num": 14 }, { "id": 17112941193, "time": "2024-03-24T15:28:07.717409+00:00", "type": "latency", "provider": "Uztelecom", "place": "Ташкент", "url": "https://humans.uz/", "service": "HUMANS", "num": 11.794 }, { "id": 17112926215, "time": "2024-03-24T15:03:41.542004+00:00", "type": "url", "url": "https://tengebank.uz", "service": "Tenge Bank", "num": 5 } ] }
Ответ в случае ошибки:
{ "success": false, "error": "Произошла ошибка при выполнении запроса, проверьте параметры" }
Отфильтрованные события
Метод для получения текущих активных событий, превосходящих указанные в профиле пользователя пороги
URL
/api/v1/alerts/filtered
Метод
GET
Описание возвращаемых данных
Единственное отличие от метода /alerts состоит в том, что возвращаются не все текущие события, а только те, для которых значение дополнительного параметра num не меньше указанного в профиле пользователя порога для данного типа события
Метод возвращает JSON-объект со следующими полями:
Массив data состоит из объектов со следующими обязательными полями:
Возможные типы событий и дополнительные поля, индивидуальные для каждого типа:
url - недоступность страницы, дополнительные поля:
latency - большая задержка ответа страницы у конкретного провайдера в конкретном городе, дополнительные поля:
isp - проблемы у провайдера в городе, дополнительные поля:
city - проблемы в городе, дополнительные поля:
complaints - всплеск жалоб пользователей, дополнительные поля:
function - перестала работать какая-то функция сервиса, дополнительные поля:
Пример
Запрос:
curl --location 'https://detector404.uz/api/v1/alerts/filtered' \
--header 'Authorization: Bearer wGGtaQVncybYmhbiAab9poccBWoU4n0c1H0ee2zVyICWEM7B9s0DFrzU'
Ответ:
{ "success": true, "data": [ { "id": 17112941194, "time": "2024-03-24T15:28:07.717409+00:00", "type": "complaints", "service": "Uzum Market", "num": 14 }, { "id": 17112941193, "time": "2024-03-24T15:28:07.717409+00:00", "type": "latency", "provider": "Uztelekom", "place": "Ташкент", "url": "https://humans.uz/", "service": "Humans", "num": 11.794 }, { "id": 17112926215, "time": "2024-03-24T15:03:41.542004+00:00", "type": "url", "url": "https://www.uzse.uz/", "service": "Фондовая Биржа «Тошкент»", "num": 5 } ] }
Ответ в случае ошибки:
{ "success": false, "error": "Произошла ошибка при выполнении запроса, проверьте параметры" }
Отрасли
Метод для получения списка отраслей в классификации сервисов
URL
/api/v1/branches
Метод
GET
Описание возвращаемых данных
Метод возвращает JSON-объект со следующими полями:
Пример
Запрос:
curl --location 'https://detector404.uz/api/v1/branches' \
--header 'Authorization: Bearer wGGtaQVncybYmhbiAab9poccBWoU4n0c1H0ee2zVyICWEM7B9s0DFrzU'
Ответ:
{ "success": true, "data": [ "Популярное", "Финансы", "Общение", "Телеком", "AI", "ВПН", "IT", "Бизнес", "Гостех" ] }
Ответ в случае ошибки:
{ "success": false, "error": "Произошла ошибка при выполнении запроса, проверьте параметры" }
Сервисы
Метод для получения списка сервисов
URL
/api/v1/services
Метод
GET
Описание возвращаемых данных
Метод возвращает JSON-объект со следующими полями:
Массив data состоит из объектов со следующими обязательными полями:
Пример
Запрос:
curl --location 'https://detector404.uz/api/v1/services' \
--header 'Authorization: Bearer wGGtaQVncybYmhbiAab9poccBWoU4n0c1H0ee2zVyICWEM7B9s0DFrzU'
Ответ:
{ "success": true, "data": [ { "name": "NBU", "urlname": "nbuuz", "ecosystem": null, "urls": 1, "branches": [ "Финансы" ] }, { "name": "Mobiuz", "urlname": "mobiuz", "ecosystem": null, "urls": 2, "branches": [ "Телеком" ] } ] }
Ответ в случае ошибки:
{ "success": false, "error": "Произошла ошибка при выполнении запроса, проверьте параметры" }
Сервисы отрасли
Метод для получения списка сервисов одной отрасли
URL
/api/v1/services/branch/{branch}
Подставляемые значения:
Метод
GET
Описание возвращаемых данных
Метод возвращает JSON-объект со следующими полями:
Массив data состоит из объектов со следующими обязательными полями:
Пример
Запрос:
curl --location 'https://detector404.uz/api/v1/services/branch/Финансы' \
--header 'Authorization: Bearer wGGtaQVncybYmhbiAab9poccBWoU4n0c1H0ee2zVyICWEM7B9s0DFrzU'
Ответ:
{ "success": true, "data": [ { "name": "Tenge Bank", "urlname": "tengebankuz", "ecosystem": null, "urls": 2 }, { "name": "Uzum Bank", "urlname": "uzumbank", "ecosystem": null, "urls": 2 } ] }
Ответ в случае ошибки:
{ "success": false, "error": "Произошла ошибка при выполнении запроса, проверьте параметры" }
События сервиса
Метод для получения текущих событий сервиса по данным мониторинга
URL
/api/v1/service/{service}/alerts
Подставляемое значение:
Метод
GET
Описание возвращаемых данных
Метод возвращает JSON-объект со следующими полями:
Массив data состоит из объектов со следующими обязательными полями:
Возможные типы событий и дополнительные поля, индивидуальные для каждого типа:
url - недоступность страницы, дополнительные поля:
latency - большая задержка ответа страницы у конкретного провайдера в конкретном городе, дополнительные поля:
isp - проблемы у провайдера в городе (включается в случае если сервис является провайдером связи), дополнительные поля:
complaints - всплеск жалоб пользователей, дополнительные поля:
function - перестала работать какая-то функция сервиса, дополнительные поля:
Пример
Запрос:
curl --location 'https://detector404.uz/api/v1/service/Unired/alerts' \
--header 'Authorization: Bearer wGGtaQVncybYmhbiAab9poccBWoU4n0c1H0ee2zVyICWEM7B9s0DFrzU'
Ответ:
{ "success": true, "data": [ { "id": 17350524178, "time": "2024-12-24T14:02:52.724695+00:00", "type": "url", "url": "https://unired.uz", "service": "Unired", "place": "uz", "num": 31, "private": false }, { "id": 17350524134, "time": "2024-12-24T14:02:15.269713+00:00", "type": "latency", "provider": "Uztelecom", "place": "Ташкент", "url": "https://unired.uz", "service": "Unired", "num": 0.658, "private": false }, { "id": 17350521990, "time": "2024-12-24T13:59:14.799644+00:00", "type": "latency", "provider": Ucell", "place": "Самарканд", "url": "https://unired.uz", "service": "Unired", "num": 1.256, "private": false }, { "id": 17350486902, "time": "2024-12-24T13:10:06.590936+00:00", "type": "latency", "provider": "Beeline Uzbekistan", "place": "Бухара", "url": "https://unired.uz", "service": "Unired", "num": 0.651, "private": false } ] }
Ответ в случае ошибки:
{ "success": false, "error": "Произошла ошибка при выполнении запроса, проверьте параметры" }
Отфильтрованные события сервиса
Метод для получения текущих событий сервиса, превосходящих указанные в профиле пользователя пороги
URL
/api/v1/service/{service}/alerts/filtered
Подставляемое значение:
Метод
GET
Описание возвращаемых данных
Единственное отличие от метода /service/{service}/alerts состоит в том, что возвращаются не все текущие события сервиса, а только те, для которых значение дополнительного параметра num не меньше указанного в профиле пользователя порога для данного типа событий.
Метод возвращает JSON-объект со следующими полями:
Массив data состоит из объектов со следующими обязательными полями:
Возможные типы событий и дополнительные поля, индивидуальные для каждого типа:
url - недоступность страницы, дополнительные поля:
latency - большая задержка ответа страницы у конкретного провайдера в конкретном городе, дополнительные поля:
isp - проблемы у провайдера в городе (включается в случае если сервис является провайдером связи), дополнительные поля:
complaints - всплеск жалоб пользователей, дополнительные поля:
function - перестала работать какая-то функция сервиса, дополнительные поля:
Пример
Запрос:
curl --location 'https://detector404.uz/api/v1/service/Unired/alerts/filtered' \
--header 'Authorization: Bearer wGGtaQVncybYmhbiAab9poccBWoU4n0c1H0ee2zVyICWEM7B9s0DFrzU'
Ответ:
{ "success": true, "data": [ { "id": 17350524178, "time": "2024-12-24T14:02:52.724695+00:00", "type": "url", "url": "https://unired.uz", "service": "Unired", "place": "uz", "num": 31, "private": false }, { "id": 17350521990, "time": "2024-12-24T13:59:14.799644+00:00", "type": "latency", "provider": "Uztelekom", "place": "Ташкент", "url": "https://unired.uz", "service": "Unired", "num": 1.256, "private": false } ] }
Ответ в случае ошибки:
{ "success": false, "error": "Произошла ошибка при выполнении запроса, проверьте параметры" }
Комментарии
Метод для получения списка комментариев пользователей в отношении сервиса за конкретный день
URL
/api/v1/service/{service}/comments/date/{date}
Подставляемые значения:
Метод
GET
Описание возвращаемых данных
Метод возвращает JSON-объект со следующими полями:
Массив data состоит из объектов со следующими обязательными полями:
Объект category состоит из пар ключ-значение, где в качестве ключа выступает одна из категорий, к которым был отнесен комментарий, а в качестве значения - массив названий подкатегорий данной категории, к которым он может быть отнесен.
Пример
Запрос:
curl --location 'https://detector404.uz/api/v1/service/Mygovuz/comments/date/2024-03-19' \
--header 'Authorization: Bearer wGGtaQVncybYmhbiAab9poccBWoU4n0c1H0ee2zVyICWEM7B9s0DFrzU'
Ответ:
{ "success": true, "data": [ { "time": "2024-03-19T08:08:31.643480+03:00", "text": "портал интерактивных государственных услуг сбой", "author": "Алишер", "likes": 8, "category": { "Сбой сайта": [ "Не отрывается/не загружается/не работает сайт" ] } } ] }
Ответ в случае ошибки:
{ "success": false, "error": "Произошла ошибка при выполнении запроса, проверьте параметры" }
Графики
Метод для получения данных, позволяющих строить графики, отражающие поведение сервиса в конкретный день
URL
/api/v1/service/{service}/graph/date/{date}
Подставляемые значения:
Метод
GET
Описание возвращаемых данных
Метод возвращает JSON-объект со следующими полями:
Объект data имеет следующие поля:
Все вышеуказанные массивы состоят из двухэлементных массивов, которые следует интерпретировать как [время, значение], где время - это стандартный UNIX timestamp.
Пример
Запрос:
curl --location 'https://detector404.uz/api/v1/service/Mygovuz/graph/date/today' \
--header 'Authorization: Bearer wGGtaQVncybYmhbiAab9poccBWoU4n0c1H0ee2zVyICWEM7B9s0DFrzU'
Ответ:
{ "success": true, "data": { "latency": [[1711289700, 186], [1711290000, 170]], "errors": [[1711290000, 3], [1711290300, 2]], "totals": [[1711290000, 8], [1711290300, 7]], "social": [[1711289700, 1], [1711290000, 1]] } }
Ответ в случае ошибки:
{ "success": false, "error": "Произошла ошибка при выполнении запроса, проверьте параметры" }
Статистика
Метод для получения статистики по комментариям и жалобам на сервис
URL
/api/v1/service/{service}/stats/date/{date}
Подставляемые значения:
Метод
GET
Описание возвращаемых данных
Метод возвращает JSON-объект со следующими полями:
Объект data имеет следующие поля:
regions - массив со статистикой жалоб по регионам, состоит из объектов со следующими полями:
complaints - массив со статистикой комментариев по категориям, состоит из объектов со следующими полями:
Пример
Запрос:
curl --location 'https://detector404.uz/api/v1/service/Mygovuz/stats/date/2024-03' \
--header 'Authorization: Bearer wGGtaQVncybYmhbiAab9poccBWoU4n0c1H0ee2zVyICWEM7B9s0DFrzU'
Ответ:
{ "success": true, "data": { "regions": [ { "region": "Согдийская область", "percent": 80.76923076923077 }, { "region": "Хатлонская область", "percent": 3.8461538461538463 } ], "complaints": [ { "complaint": "Сбой сайта", "percent": 42.97520661157025, "detailed": [ { "type": "Не отрывается/не загружается/не работает сайт", "percent": 42.97520661157025 } ] }, { "complaint": "Сбой личного кабинета", "percent": 37.1900826446281, "detailed": [ { "type": "Не могу зайти в ЛК/аккаунт/приложение", "percent": 30.578512396694215 }, { "type": "Проблема с паролем/восстановлением аккаунта", "percent": 6.6115702479338845 } ] } ] } }
Ответ в случае ошибки:
{ "success": false, "error": "Произошла ошибка при выполнении запроса, проверьте параметры" }
Таймлайн проблем
Метод для получения информации о наличии проблем у сервиса с поминутной разбивкой
URL
/api/v1/service/{service}/problems/date/{date}
Подставляемые значения:
Метод
GET
Описание возвращаемых данных
Метод возвращает JSON-объект со следующими полями:
Массив data состоит из объектов со следующими полями:
Примечание
Метод неявным образом использует пороги, выставленные пользователем в профиле: для числа городов, недоступность из которых ресурса считается проблемной, и для количества жалоб за последние 15 минут, при которой всплеск жалоб считается проблемой.
Пример
Запрос:
curl --location 'https://detector404.uz/api/v1/service/Mygovuz/problems/date/2024-03-15' \
--header 'Authorization: Bearer wGGtaQVncybYmhbiAab9poccBWoU4n0c1H0ee2zVyICWEM7B9s0DFrzU'
Ответ:
{ "success": true, "data": [ { "time": "2024-03-15 00:00+03:00", "errors": false, "complaints": false }, { "time": "2024-03-15 00:01+03:00", "errors": false, "complaints": false }, ... ] }
Ответ в случае ошибки:
{ "success": false, "error": "Произошла ошибка при выполнении запроса, проверьте параметры" }
Статус
Метод для получения текущего статуса сервиса по данным мониторинга
URL
/api/v1/service/{service}/status
Подставляемое значение:
Метод
GET
Описание возвращаемых данных
Метод возвращает JSON-объект со следующими полями:
Объект data имеет следующие поля:
Объект complaints имеет следующие поля:
Пример
Запрос:
curl --location 'https://detector404.uz/api/v1/service/Mygovuz/status' \
--header 'Authorization: Bearer wGGtaQVncybYmhbiAab9poccBWoU4n0c1H0ee2zVyICWEM7B9s0DFrzU'
Ответ:
{ "success": true, "data": { "down": { "https://my.gov.uz": ["Алишер"] }, "social": false, "complaints": { "by_place": [ ["Согдийская область",80.3], ["Хатлонская область",5.3], ... ], "by_isp": [ ["Comnet ",20.0], ["Turon Telecom",20.0], ["Uztelecom",20.0], ... ] } } }
Ответ:
{ "success": true, "data": { "down": { "https://my.gov.uz": ["Алишер"] }, "social": 95, "complaints": { "by_place": [ ["Согдийская область",80.3], ["Хатлонская область",5.3], ... ], "by_isp": [ ["Comnet ",20.0], ["Turon Telecom",20.0], ["Uztelecom",20.0], ... ] } } }
Ответ в случае ошибки:
{ "success": false, "error": "Произошла ошибка при выполнении запроса, проверьте параметры" }
URLs
Метод для получения списка страниц в мониторинге
URL
/api/v1/service/{service}/urls
Подставляемое значение:
Метод
GET
Описание возвращаемых данных
Метод возвращает JSON-объект со следующими полями:
Пример
Запрос:
curl --location 'https://detector404.uz/api/v1/service/Mygovuz/urls' \
--header 'Authorization: Bearer wGGtaQVncybYmhbiAab9poccBWoU4n0c1H0ee2zVyICWEM7B9s0DFrzU'
Ответ:
{ "success": true, "data": [ "https://my.gov.uz", ] }
Ответ в случае ошибки:
{ "success": false, "error": "Произошла ошибка при выполнении запроса, проверьте параметры" }
Графики CDN
Метод для получения данных, позволяющих строить графики, отражающие параметры CDN конкретного провайдера за последнее время.
URL
/api/v1/cdn/{provider}/graph/{period}/{quantile}
Подставляемые значения:
Метод
GET
Описание возвращаемых данных
Метод возвращает JSON-объект со следующими полями:
Объект data имеет следующие поля:
В каждом из вышеуказанных полей возвращается массив, состоящий из двухэлементных массивов, которые следует интерпретировать как [время, значение], где время - это стандартный UNIX timestamp. Значения для параметров rtt и ttfb - в миллисекундах, для down - в мегабитах в секунду, для avail - в процентах.
Пример
Запрос:
curl --location 'https://detector404.uz/api/v1/cdn/cdnvideo/graph/6h/P50' \
--header 'Authorization: Bearer wGGtaQVncybYmhbiAab9poccBWoU4n0c1H0ee2zVyICWEM7B9s0DFrzU'
Ответ:
{ "success": true, "data": { "rtt": [[1762322100.0,7],[1762322400.0,7], ... ], "ttfb-https": [[1762322100.0,157], [1762322400.0,156], ... ], "ttfb-http": [[1762322100.0,120], [1762322400.0,121], ... ], "down-notcached": [[1762322100.0,4.2266845703125], [1762322400.0,4.20379638671875], ... ], "down-cached": [[1762322100.0,106.78863525390625], [1762322400.0,106.3690185546875], ... ], "avail-https": [[1762322700.0,99.71248876909254], [1762323000.0,99.70230121163407], ... ], "avail-http": [[1762322700.0,99.70950256057021], [1762323000.0,99.71426020180374], ... ] } }
Ответ в случае ошибки:
{ "success": false, "error": "Произошла ошибка при выполнении запроса, проверьте параметры" }
Поиск информации об IP-адресе
Сервис предоставляет возможность бесплатно получать данные о географической принадлежности IP-адреса.
Аутентификация не требуется
Endpoint
https://geoip.detector404.uz
URL
/api/v1/ip/{ip}
Подставляемое значение:
Метод
GET
Описание возвращаемых данных
Метод возвращает JSON-объект со следующими полями:
Пример
Запрос:
curl --location 'https://geoip.detector404.uz/api/v1/ip/195.12.41.8'
Ответ:
{ "success": true, "data": { "ip_address": "195.12.41.8", "country": { "ccode": "ch", "country": "Швейцария", "isproxy": true, "issatellite": false, "location": "Обвальден, Энгельберг", "latitude": 46.8186, "longitude": 8.4387 }, "isp": { "ismobile": true, "isp": "GIB-Solutions", "org": "Tele alpin AG, CH-6390 Engelberg" } } }
Ответ в случае ошибки:
{ "success": false, "error": "Произошла ошибка при выполнении запроса, проверьте параметры" }