---
title: "Довідник REST API"
description: "Кожен ендпоінт публічного REST API Requiply v1: HTTP-метод, типи ключів, які він приймає, метод SDK, що його обгортає. А також правила запитів, пагінація, дати та помилки."
canonical_url: "https://requiply.com/docs/uk/developers/api-reference"
---
# Довідник REST API

> Кожен ендпоінт публічного REST API Requiply v1: HTTP-метод, типи ключів, які він приймає, метод SDK, що його обгортає. А також правила запитів, пагінація, дати та помилки.

Публічний API розташований за адресою:

```text
https://api.requiply.com/api/public/v1
```

Кожен запит автентифікується через `Authorization: Bearer <api-key>`; див. [Автентифікація та API ключі](https://requiply.com/docs/uk/developers/authentication-and-api-keys). Тіла запитів і відповідей передаються в JSON. [TypeScript SDK](https://requiply.com/docs/uk/developers/typescript-sdk) обгортає кожен ендпоінт нижче, а його посібники з ресурсів докладно описують поля.

<note>

Документ OpenAPI поки не опубліковано. Найточніше кожен запит і відповідь описують типи TypeScript у SDK.

</note>

## Ендпоінти

Ендпоінти **Публічний** приймають обидва типи ключів. Ендпоінти **Секретний** відхиляють публічний ключ із `403`.

### Організація та каталог

<table>
<thead>
  <tr>
    <th>
      Метод і шлях
    </th>
    
    <th>
      Ключі
    </th>
    
    <th>
      Метод SDK
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        GET /org/info
      </code>
    </td>
    
    <td>
      Публічний
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/organization#orginfo">
        <code>
          org.info()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /org/summary
      </code>
    </td>
    
    <td>
      Секретний
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/organization#orgsummary">
        <code>
          org.summary()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /categories/list
      </code>
    </td>
    
    <td>
      Публічний
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/inventory-and-categories#categorieslist">
        <code>
          categories.list()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /services/list
      </code>
    </td>
    
    <td>
      Публічний
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/inventory-and-categories#serviceslist">
        <code>
          services.list()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /inventory/list
      </code>
    </td>
    
    <td>
      Публічний
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/inventory-and-categories#inventorylist">
        <code>
          inventory.list()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /inventory/groups/{id}
      </code>
    </td>
    
    <td>
      Публічний
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/inventory-and-categories#inventorygetgroup">
        <code>
          inventory.getGroup()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /inventory/status
      </code>
    </td>
    
    <td>
      Секретний
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/inventory-and-categories#inventorystatus">
        <code>
          inventory.status()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /bundles/list
      </code>
    </td>
    
    <td>
      Публічний
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/inventory-and-categories#bundleslist">
        <code>
          bundles.list()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /bundles/{id}
      </code>
    </td>
    
    <td>
      Публічний
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/inventory-and-categories#bundlesget">
        <code>
          bundles.get()
        </code>
      </a>
    </td>
  </tr>
</tbody>
</table>

[Комплекти](https://requiply.com/docs/uk/guides/inventory/bundles) є фіксованими наборами товарів з однією знижкою. Обидва ендпоінти комплектів приймають необовʼязкові параметри запиту `startDate` і `endDate`. Якщо передати обидва, кожен комплект повідомляє `availableQuantity`, тобто кількість цілих наборів, вільних у цей період. Вони перелічують лише повні активні комплекти. Секретний ключ бачить комплекти щоразу, коли ввімкнено функцію «Комплекти». Публічний ключ бачить їх, лише коли також увімкнено рекомендації **Зовнішні**. Інакше список порожній, а `bundles/{id}` повертає `404`. `GET /inventory/groups/{id}` також повертає `bundles`, що містять цю групу.

### Доступність, ціни та бронювання

<table>
<thead>
  <tr>
    <th>
      Метод і шлях
    </th>
    
    <th>
      Ключі
    </th>
    
    <th>
      Метод SDK
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        POST /availability/calendar
      </code>
    </td>
    
    <td>
      Публічний
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/availability-and-pricing#availabilitycalendar">
        <code>
          availability.calendar()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        POST /availability/items
      </code>
    </td>
    
    <td>
      Публічний
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/availability-and-pricing#availabilityitems">
        <code>
          availability.items()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        POST /pricing/quote
      </code>
    </td>
    
    <td>
      Публічний
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/availability-and-pricing#pricingquote">
        <code>
          pricing.quote()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        POST /bookings/create
      </code>
    </td>
    
    <td>
      Публічний, лише запити на бронювання
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/bookings#bookingscreate">
        <code>
          bookings.create()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /bookings/list
      </code>
    </td>
    
    <td>
      Секретний
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/bookings#bookingslist">
        <code>
          bookings.list()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /bookings/{id}
      </code>
    </td>
    
    <td>
      Секретний
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/bookings#bookingsget">
        <code>
          bookings.get()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        POST /bookings/{id}/notes
      </code>
    </td>
    
    <td>
      Секретний
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/bookings#bookingsaddnote">
        <code>
          bookings.addNote()
        </code>
      </a>
    </td>
  </tr>
</tbody>
</table>

Публічний ключ має надсилати `"asRequest": true` у `POST /bookings/create`. Будь-що інше отримує `403` з `data.reason: "request_only"`.

`POST /pricing/quote` і `POST /bookings/create` приймають `bundles: [{ bundleId, quantity }]` поруч з `items`; тоді `items` може бути порожнім. Розрахунки ціни повертають `bundleDiscountAmount` (уже враховано в `total`) і `lineBundles`, по одному запису на кожен комплект із ціною за період. Якщо надіслати комплекти, коли функцію «Комплекти» вимкнено, відповідь буде `403`.

### Клієнти

<table>
<thead>
  <tr>
    <th>
      Метод і шлях
    </th>
    
    <th>
      Ключі
    </th>
    
    <th>
      Метод SDK
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        POST /clients/lookup
      </code>
    </td>
    
    <td>
      Секретний
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/clients#clientslookup">
        <code>
          clients.lookup()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        POST /clients/create
      </code>
    </td>
    
    <td>
      Секретний
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/clients#clientscreate">
        <code>
          clients.create()
        </code>
      </a>
    </td>
  </tr>
</tbody>
</table>

### Товари на продаж і продажі

<table>
<thead>
  <tr>
    <th>
      Метод і шлях
    </th>
    
    <th>
      Ключі
    </th>
    
    <th>
      Метод SDK
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        GET /sale-items/list
      </code>
    </td>
    
    <td>
      Секретний; публічний, поки організація продає клієнтам
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/sales#saleitemslist">
        <code>
          saleItems.list()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /sale-items/{id}
      </code>
    </td>
    
    <td>
      Секретний; публічний, поки організація продає клієнтам
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/sales#saleitemsget">
        <code>
          saleItems.get()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /sales/list
      </code>
    </td>
    
    <td>
      Секретний
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/sales#saleslist">
        <code>
          sales.list()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /sales/{id}
      </code>
    </td>
    
    <td>
      Секретний
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/sales#salesget">
        <code>
          sales.get()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        POST /sales/create
      </code>
    </td>
    
    <td>
      Секретний
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/sales#salescreate">
        <code>
          sales.create()
        </code>
      </a>
    </td>
  </tr>
</tbody>
</table>

Ці ендпоінти повертають `403` з `data.reason: "feature_disabled"`, поки **Увімкнути продажі** вимкнено у [Функції](https://requiply.com/docs/uk/guides/settings/organization/features#%D1%83%D0%B2%D1%96%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%B8-%D0%BF%D1%80%D0%BE%D0%B4%D0%B0%D0%B6%D1%96) або організація не на тарифі Advanced. Що бачить публічний ключ і коли він натомість отримує `selling_disabled`, описано в [Продажі та товари на продаж](https://requiply.com/docs/uk/developers/typescript-sdk/sales#%D0%B7-%D0%BF%D1%83%D0%B1%D0%BB%D1%96%D1%87%D0%BD%D0%B8%D0%BC-%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BC).

### Звіти

Усі звіти потребують **секретного ключа** і приймають параметри в рядку запиту.

<table>
<thead>
  <tr>
    <th>
      Метод і шлях
    </th>
    
    <th>
      Метод SDK
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        GET /reports/revenue
      </code>
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/reports#reportsrevenue">
        <code>
          reports.revenue()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /reports/bookings-summary
      </code>
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/reports#reportsbookingssummary">
        <code>
          reports.bookingsSummary()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /reports/utilization
      </code>
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/reports#reportsutilization">
        <code>
          reports.utilization()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /reports/top-items
      </code>
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/reports#reportstopitems">
        <code>
          reports.topItems()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /reports/top-clients
      </code>
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/reports#reportstopclients">
        <code>
          reports.topClients()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /reports/outstanding
      </code>
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/reports#reportsoutstanding">
        <code>
          reports.outstanding()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /reports/overdue
      </code>
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/reports#reportsoverdue">
        <code>
          reports.overdue()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /reports/pipeline
      </code>
    </td>
    
    <td>
      <a href="https://requiply.com/docs/uk/developers/typescript-sdk/reports#reportspipeline">
        <code>
          reports.pipeline()
        </code>
      </a>
    </td>
  </tr>
</tbody>
</table>

## Правила

<table>
<thead>
  <tr>
    <th>
      Тема
    </th>
    
    <th>
      Правило
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <strong>
        Параметри
      </strong>
    </td>
    
    <td>
      Ендпоінти <code>
        GET
      </code>
      
       приймають параметри в рядку запиту. Ендпоінти <code>
        POST
      </code>
      
       приймають тіло JSON.
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Пагінація
      </strong>
    </td>
    
    <td>
      Ендпоінти списків повертають <code>
        nextCursor
      </code>
      
      . Передайте його назад як <code>
        cursor
      </code>
      
      , щоб отримати наступну сторінку; <code>
        null
      </code>
      
       означає, що сторінок більше немає. <code>
        limit
      </code>
      
       становить від 1 до 100 (за замовчуванням 25) для списків каталогу, доступності та продажів, від 1 до 200 (за замовчуванням 50) для <code>
        bookings/list
      </code>
      
       і від 1 до 500 (за замовчуванням 100) для <code>
        inventory/status
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Дати й час
      </strong>
    </td>
    
    <td>
      ISO 8601. У розрахунках ціни, створенні бронювання та <code>
        availability/items
      </code>
      
       дата й час без зсуву (<code>
        2026-07-01T10:00:00
      </code>
      
      ) читаються в часовому поясі організації з урахуванням переходу на літній час. Значення із <code>
        Z
      </code>
      
       або зсувом використовується як є. Дата без часу означає північ.
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Ідентифікатори
      </strong>
    </td>
    
    <td>
      Товари, категорії, послуги, товари на продаж і продажі використовують UUID. Бронювання й клієнти використовують числа. Бронювання й продажі також мають номер, який співробітники бачать у застосунку: передавайте його з <code>
        ?idKind=org
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Гроші
      </strong>
    </td>
    
    <td>
      Суми вказуються в основній одиниці валюти організації (наприклад, <code>
        1250.5
      </code>
      
      ) поруч із кодом <code>
        currency
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Суборенда
      </strong>
    </td>
    
    <td>
      Товари від постачальників ніколи не повертаються публічному ключу й не приймаються від нього. Секретний ключ бачить їх, коли ввімкнено <a href="https://requiply.com/docs/uk/guides/settings/organization/features">
        суборенду
      </a>
      
      .
    </td>
  </tr>
</tbody>
</table>

## Помилки

Невдалий запит отримує HTTP-статус помилки та тіло JSON:

```json
{
  "statusCode": 409,
  "message": "Only 2 × Memory card 128 GB left",
  "data": { "reason": "out_of_stock", "saleItemId": "3f6c…", "availableQuantity": 2 }
}
```

`message` призначене для людей. Коли API надає машиночитну причину, вона міститься в `data.reason`, іноді з додатковими полями в `data`. Будуйте логіку на `data.reason`, а не на тексті повідомлення. Причини перелічено в [Обробка помилок](https://requiply.com/docs/uk/developers/typescript-sdk/error-handling#%D0%BF%D1%80%D0%B8%D1%87%D0%B8%D0%BD%D0%B8-%D0%BF%D0%BE%D0%BC%D0%B8%D0%BB%D0%BE%D0%BA).

<table>
<thead>
  <tr>
    <th>
      Статус
    </th>
    
    <th>
      Типова причина
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        400
      </code>
    </td>
    
    <td>
      Відсутнє чи неправильно сформоване поле, наприклад недійсна дата чи порожній список <code>
        items
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        401
      </code>
    </td>
    
    <td>
      Заголовок <code>
        Authorization
      </code>
      
       відсутній, або ключ невідомий чи відкликаний.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        403
      </code>
    </td>
    
    <td>
      Тип ключа не може використовувати ендпоінт, або функцію чи дозвіл вимкнено.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        404
      </code>
    </td>
    
    <td>
      Бронювання, товару, клієнта чи продажу не існує в цій організації.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        409
      </code>
    </td>
    
    <td>
      Запит конфліктує з поточним станом, наприклад товар архівовано або його немає в наявності.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        429
      </code>
    </td>
    
    <td>
      Ключ перевищив обмеження частоти запитів. Зачекайте стільки секунд, скільки вказано в <code>
        Retry-After
      </code>
      
      .
    </td>
  </tr>
</tbody>
</table>

Бронювання, яке організація не може прийняти, наприклад тому що товари зайняті або видача припадає на неробочий час, **не** є помилкою: `POST /bookings/create` повертає `200` із `success: false`. Див. [Бронювання](https://requiply.com/docs/uk/developers/typescript-sdk/bookings#%D0%BE%D0%B1%D1%80%D0%BE%D0%B1%D0%BA%D0%B0-%D0%B2%D1%96%D0%B4%D0%BF%D0%BE%D0%B2%D1%96%D0%B4%D1%96).

## Запис продажу через REST

`POST /sales/create` приймає:

```json
{
  "lines": [{ "saleItemId": "3f6c…", "quantity": 2 }],
  "clientId": 23,
  "paymentMethod": "payOnPickup",
  "soldAt": "2026-09-29T14:00:00Z",
  "note": "Counter sale"
}
```

Він повертає `201` із `sale`, `stockWarnings` (товари, залишок яких опускається нижче нуля; продаж однаково записується) і `payment` з посиланням для онлайн-способу оплати. Правила полів описано в [`sales.create()`](https://requiply.com/docs/uk/developers/typescript-sdk/sales#salescreate).


## Sitemap

See the full [sitemap](https://requiply.com/docs/sitemap.md) for all pages.
