Поддержка
Чат для вопросов по API
Мгновенно ответим на ваши вопросы
api@ati.su
Электронная почта техподдержки
Тикетная система
Оставить заявку на отдел
«Консультанты по интеграции (API)»
api.ati.su - заказы, торги, площадки
Наш телеграм-канал
Код в ATI.SU:
Выход
Для подтверждения действия введите пароль
Чтобы продолжить, введите пароль для пользователя

Требования и ограничения

Ограничения при работе с API

Ограничение частоты запросов — не более 10 запросов в секунду на контакт.

При количестве запросов более 10 rps, сервер ответит статусом — код 429 Too Many Requests.

Повторите запрос через 100 мс, в случае повторного получения ответа 429 увеличивайте время ожидания в два раза (100 мс, 200 мс, 400мс и т.д.).

Ограничения при работе с конкретными эндпоинтами

PUT api.ati.su/v2/cargos/{guid}

Ограничение частоты запросов — не более 5000 запросов за 24 часа на контакт.
При достижении лимита, сервер ответит статусом 429 Too Many Requests в течение 24 часов.

Требования к http запросам

С 1 июля 2022 года не гарантируется работоспособность интеграций, которые не удовлетворяют следующим требованиям

Передавать обязательные заголовки

  • Accept-Encoding: gzip, deflate, br. Ожидается, что приложение должно уметь принимать сжатый контент.
  • User-Agent: ati_integrator_<код в ATI.SU>, например, ati_integrator_64357
  • Authorization: Bearer {authorizationToken}, кроме метода получения токена
  • Content-Type: application/json
  • Accept: application/json или text/xml

Использовать https (TLS 1.2 или TLS 1.3)

Поддержка схемы http прекращается с 1 августа 2022 года


Поддержать автоматический редирект

В случае ответов сервера со статусами 301 и 302, необходимо следовать редиректам по указанному в заголовке Location адресу.


Делать retry на запросы, упавшие с ошибкой сокета

Симптомы: ошибки ECONNRESET(104) и ENOTCONN (107)

Пример реализации на C#

private HttpClient _client = new HttpClient();
private async Task<T> DoHttpCall<T>(string url)
{
    var tries = 3;
    do
    {
        try
        {
            var response = await _client.GetAsync(url);
            var result = await response.Content.ReadFromJsonAsync<T>();
            return result;
        }
        catch (HttpRequestException)
        {
        }
        tries--;
    } while (tries > 0);
    return default;
}