> ## 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 секунд
* При отриманні трьох помилок протягом 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 ** – під час виконання виникла помилка.
