> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://help.pricer24.com/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# Общая информация о работе с API

В Pricer24 есть API, которое вы можете использовать для интеграции с вашими учетными системами. Обращаем ваше внимание на то, что API доступно не во всех тарифных планах.

# Общая информация 

* End-point для работы с API - https://api.pricer24.com/
* API использует REST-архитектуру
* Все запросы и ответы API используют формат JSON
* Для работы с API вам необходим ключ
* Описание существующих методов и их параметров можно увидеть в [Swagger](https://api.pricer24.com/swagger/index.html), где можно отправить готовые запросы и посмотреть на ответ сервера

### Ограничения
* Не более 10 запросов в секунду
* Время на выполнение запроса - 60 секунд
* При получении 3х ошибок в течении 60 секунд - ключ будет заблокирован на 30 секунд

# Авторизация

Для авторизации необходимо к запросу добавлять query-параметр **ApiKey** со значением вашего ключа. В общем виде ваш запрос будет выглядеть так: 
`https://api.pricer24.com/v1/{имя_ресурса}?ApiKey={key}&Param1={value1}&Param2={value2}`

### Получение API-ключа

||| Для работы с API мы настоятельно рекомендуем создавать отдельного пользователя, который будет использоваться исключительно для обмена данными
1. В приложении переходим Настройки → Компания → Пользователи
2. Нажимаем на кнопку "Создать" и создаем нового пользователя
3. Открываем созданного пользователя
4. Во вкладке "Роли" добавляем пользователю необходимые права
5. Во вкладке "API-ключи" нажимаем на кнопку "Создать"

Созданный ключ, автоматически копируется в буфер обмена. Теперь вы можете использовать его для интеграции.

# «Пагинация» 

Большинство GET-методов в API поддерживают «пагинацию» (постраничную выдачу). Для работы с пагинацией вам необходимо использовать query-параметры:
* **MaxResultCount** - сколько записей необходимо вернуть 
* **SkipCount** - сколько записей необходимо пропустить

### Особенности
* Максимально возможное значение для **MaxResultCount** = 1000, если передать большее значение - вы получите ошибку
* По-умолчанию **MaxResultCount** = 10, если параметр не передавать, то сервер вернет только 10 записей
* По-умолчанию **SkipCount** = 0
* Общее кол-во записей содержится в свойстве **totalCount** объекта **result**:
![](https://storage.crisp.chat/users/helpdesk/website/c264ea040288d800/image_1hcra7l.png)

В общем виде ваш запрос будет выглядеть **GET** `https://api.pricer24.com/v1/{method}?SkipCount={PageSize}*{PageNumber-1}&MaxResultCount={PageSize}&ApiKey={key}`, где:
* **PageSize** - размер страницы
* **PageNumber** - номер страницы

Кол-во страниц можно вычислить по простой формуле *Ceil(TotalCount / PageSize)*, где Ceil - округление вверх до целого. 

### Пример
Если общее кол-во записей = 2700, и мы будем получать ответ по 1000 записей, для получения всех записей необходимо будет отправить 3 запроса:
1. `https://api.pricer24.com/v1/{имя_ресурса}?SkipCount=0&MaxResultCount=1000&ApiKey={key}` - получаем первую 1000 записей
2. `https://api.pricer24.com/v1/{имя_ресурса}?SkipCount=1000&MaxResultCount=1000&ApiKey={key}` - получаем следующую 1000 записей
3. `https://api.pricer24.com/v1/{имя_ресурса}?SkipCount=2000&MaxResultCount=1000&ApiKey={key}` - получаем последние 700 записей

# Query-параметр Include

Для того, чтобы ответ был максимально легковесным, по-умолчанию возвращается минимальная информация об объектах. Для получения расширенной информации, необходимо передавать query-параметр **Include**, где через запятую необходимо перечислить, по каким объектам нужна расширенная информация.

### Пример
При отправке запроса **GET** `https://api.pricer24.com/v1/contractors?ApiKey={key}` без Include сервер вернет такой ответ:
![](https://storage.crisp.chat/users/helpdesk/website/c264ea040288d800/image_17tqz1k.png)
Массивы объектов **contractorPriceTypes** и **contractorWarehouses** имеют значения null, т.к. не возвращаются сервером. 

Однако, если отправить запрос **GET** `https://api.pricer24.com/v1/contractors?ApiKey={key}&Include=PriceTypes,Warehouses`, то ответ уже будет содержать цены и склады контрагента:
![](https://storage.crisp.chat/users/helpdesk/website/c264ea040288d800/image_1ow0028.png)

# Обработка ошибок

Сервер возвращает стандартные коды ответов:
* **200** - запрос успешно выполнен
* **401** - ошибка авторизации
* **403** - не хватает прав
* **404** - метод не найден
* **501** - внутренняя ошибка сервера, скорей всего запрос составлен некорректно

В случае ошибки, информация о ней будет возвращена в объекте **error**:
![](https://storage.crisp.chat/users/helpdesk/website/c264ea040288d800/image_1t3a92s.png)
Также для определения успешен запрос или нет, можно обрабатывать свойство **success**, где **true** - запрос выполнен успешно, **false **- во время выполнения возникла ошибка.