---
title: "Dokumentacja REST API"
description: "Wszystkie punkty końcowe publicznego REST API Requiply v1 z metodą HTTP, akceptowanymi typami kluczy i odpowiadającą im metodą SDK oraz konwencje żądań, stronicowanie, daty i błędy."
canonical_url: "https://requiply.com/docs/pl/developers/api-reference"
---
# Dokumentacja REST API

> Wszystkie punkty końcowe publicznego REST API Requiply v1 z metodą HTTP, akceptowanymi typami kluczy i odpowiadającą im metodą SDK oraz konwencje żądań, stronicowanie, daty i błędy.

Publiczne API znajduje się pod adresem:

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

Każde żądanie uwierzytelnia się nagłówkiem `Authorization: Bearer <api-key>`. Zobacz [Uwierzytelnianie i klucze API](https://requiply.com/docs/pl/developers/authentication-and-api-keys). Treści żądań i odpowiedzi są w formacie JSON. [SDK TypeScript](https://requiply.com/docs/pl/developers/typescript-sdk) obsługuje każdy z poniższych punktów końcowych, a jego przewodniki po zasobach szczegółowo opisują pola.

<note>

Dokument OpenAPI nie został jeszcze opublikowany. Najdokładniejszym opisem każdego żądania i odpowiedzi są typy TypeScript w SDK.

</note>

## Punkty końcowe

Punkty końcowe oznaczone jako **Publiczny** przyjmują oba typy kluczy. Punkty końcowe oznaczone jako **Tajny** odrzucają klucz publiczny z kodem `403`.

### Organizacja i katalog

<table>
<thead>
  <tr>
    <th>
      Metoda i ścieżka
    </th>
    
    <th>
      Klucze
    </th>
    
    <th>
      Metoda SDK
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        GET /org/info
      </code>
    </td>
    
    <td>
      Publiczny
    </td>
    
    <td>
      <a href="https://requiply.com/docs/pl/developers/typescript-sdk/organization#orginfo">
        <code>
          org.info()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /org/summary
      </code>
    </td>
    
    <td>
      Tajny
    </td>
    
    <td>
      <a href="https://requiply.com/docs/pl/developers/typescript-sdk/organization#orgsummary">
        <code>
          org.summary()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /categories/list
      </code>
    </td>
    
    <td>
      Publiczny
    </td>
    
    <td>
      <a href="https://requiply.com/docs/pl/developers/typescript-sdk/inventory-and-categories#categorieslist">
        <code>
          categories.list()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /services/list
      </code>
    </td>
    
    <td>
      Publiczny
    </td>
    
    <td>
      <a href="https://requiply.com/docs/pl/developers/typescript-sdk/inventory-and-categories#serviceslist">
        <code>
          services.list()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /inventory/list
      </code>
    </td>
    
    <td>
      Publiczny
    </td>
    
    <td>
      <a href="https://requiply.com/docs/pl/developers/typescript-sdk/inventory-and-categories#inventorylist">
        <code>
          inventory.list()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /inventory/groups/{id}
      </code>
    </td>
    
    <td>
      Publiczny
    </td>
    
    <td>
      <a href="https://requiply.com/docs/pl/developers/typescript-sdk/inventory-and-categories#inventorygetgroup">
        <code>
          inventory.getGroup()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /inventory/status
      </code>
    </td>
    
    <td>
      Tajny
    </td>
    
    <td>
      <a href="https://requiply.com/docs/pl/developers/typescript-sdk/inventory-and-categories#inventorystatus">
        <code>
          inventory.status()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /bundles/list
      </code>
    </td>
    
    <td>
      Publiczny
    </td>
    
    <td>
      <a href="https://requiply.com/docs/pl/developers/typescript-sdk/inventory-and-categories#bundleslist">
        <code>
          bundles.list()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /bundles/{id}
      </code>
    </td>
    
    <td>
      Publiczny
    </td>
    
    <td>
      <a href="https://requiply.com/docs/pl/developers/typescript-sdk/inventory-and-categories#bundlesget">
        <code>
          bundles.get()
        </code>
      </a>
    </td>
  </tr>
</tbody>
</table>

[Zestawy](https://requiply.com/docs/pl/guides/inventory/bundles) to stałe komplety pozycji z jednym rabatem. Oba punkty końcowe zestawów przyjmują opcjonalne parametry zapytania `startDate` i `endDate`. Gdy podasz oba, każdy zestaw zwraca `availableQuantity`, czyli liczbę całych kompletów wolnych w tym okresie. Wymieniane są tylko kompletne, aktywne zestawy. Klucz tajny widzi zestawy zawsze, gdy funkcja Zestawy jest włączona, a klucz publiczny tylko wtedy, gdy włączone są też rekomendacje **Zewnętrzne**. W przeciwnym razie lista jest pusta, a `bundles/{id}` zwraca `404`. `GET /inventory/groups/{id}` zwraca też `bundles`, które zawierają tę grupę.

### Dostępność, ceny i rezerwacje

<table>
<thead>
  <tr>
    <th>
      Metoda i ścieżka
    </th>
    
    <th>
      Klucze
    </th>
    
    <th>
      Metoda SDK
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        POST /availability/calendar
      </code>
    </td>
    
    <td>
      Publiczny
    </td>
    
    <td>
      <a href="https://requiply.com/docs/pl/developers/typescript-sdk/availability-and-pricing#availabilitycalendar">
        <code>
          availability.calendar()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        POST /availability/items
      </code>
    </td>
    
    <td>
      Publiczny
    </td>
    
    <td>
      <a href="https://requiply.com/docs/pl/developers/typescript-sdk/availability-and-pricing#availabilityitems">
        <code>
          availability.items()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        POST /pricing/quote
      </code>
    </td>
    
    <td>
      Publiczny
    </td>
    
    <td>
      <a href="https://requiply.com/docs/pl/developers/typescript-sdk/availability-and-pricing#pricingquote">
        <code>
          pricing.quote()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        POST /bookings/create
      </code>
    </td>
    
    <td>
      Publiczny, tylko zapytania o rezerwację
    </td>
    
    <td>
      <a href="https://requiply.com/docs/pl/developers/typescript-sdk/bookings#bookingscreate">
        <code>
          bookings.create()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /bookings/list
      </code>
    </td>
    
    <td>
      Tajny
    </td>
    
    <td>
      <a href="https://requiply.com/docs/pl/developers/typescript-sdk/bookings#bookingslist">
        <code>
          bookings.list()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /bookings/{id}
      </code>
    </td>
    
    <td>
      Tajny
    </td>
    
    <td>
      <a href="https://requiply.com/docs/pl/developers/typescript-sdk/bookings#bookingsget">
        <code>
          bookings.get()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        POST /bookings/{id}/notes
      </code>
    </td>
    
    <td>
      Tajny
    </td>
    
    <td>
      <a href="https://requiply.com/docs/pl/developers/typescript-sdk/bookings#bookingsaddnote">
        <code>
          bookings.addNote()
        </code>
      </a>
    </td>
  </tr>
</tbody>
</table>

Klucz publiczny musi wysyłać `"asRequest": true` do `POST /bookings/create`. Każde inne żądanie dostaje `403` z `data.reason: "request_only"`.

`POST /pricing/quote` i `POST /bookings/create` przyjmują `bundles: [{ bundleId, quantity }]` obok `items`. `items` może być wtedy puste. Wyceny zwracają `bundleDiscountAmount` (już uwzględnione w `total`) i `lineBundles`, po jednym wpisie na zestaw wyceniony dla danego okresu. Wysłanie zestawów, gdy funkcja Zestawy jest wyłączona, zwraca `403`.

### Klienci

<table>
<thead>
  <tr>
    <th>
      Metoda i ścieżka
    </th>
    
    <th>
      Klucze
    </th>
    
    <th>
      Metoda SDK
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        POST /clients/lookup
      </code>
    </td>
    
    <td>
      Tajny
    </td>
    
    <td>
      <a href="https://requiply.com/docs/pl/developers/typescript-sdk/clients#clientslookup">
        <code>
          clients.lookup()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        POST /clients/create
      </code>
    </td>
    
    <td>
      Tajny
    </td>
    
    <td>
      <a href="https://requiply.com/docs/pl/developers/typescript-sdk/clients#clientscreate">
        <code>
          clients.create()
        </code>
      </a>
    </td>
  </tr>
</tbody>
</table>

### Towary na sprzedaż i sprzedaż

<table>
<thead>
  <tr>
    <th>
      Metoda i ścieżka
    </th>
    
    <th>
      Klucze
    </th>
    
    <th>
      Metoda SDK
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        GET /sale-items/list
      </code>
    </td>
    
    <td>
      Tajny; publiczny, gdy organizacja sprzedaje klientom
    </td>
    
    <td>
      <a href="https://requiply.com/docs/pl/developers/typescript-sdk/sales#saleitemslist">
        <code>
          saleItems.list()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /sale-items/{id}
      </code>
    </td>
    
    <td>
      Tajny; publiczny, gdy organizacja sprzedaje klientom
    </td>
    
    <td>
      <a href="https://requiply.com/docs/pl/developers/typescript-sdk/sales#saleitemsget">
        <code>
          saleItems.get()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /sales/list
      </code>
    </td>
    
    <td>
      Tajny
    </td>
    
    <td>
      <a href="https://requiply.com/docs/pl/developers/typescript-sdk/sales#saleslist">
        <code>
          sales.list()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GET /sales/{id}
      </code>
    </td>
    
    <td>
      Tajny
    </td>
    
    <td>
      <a href="https://requiply.com/docs/pl/developers/typescript-sdk/sales#salesget">
        <code>
          sales.get()
        </code>
      </a>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        POST /sales/create
      </code>
    </td>
    
    <td>
      Tajny
    </td>
    
    <td>
      <a href="https://requiply.com/docs/pl/developers/typescript-sdk/sales#salescreate">
        <code>
          sales.create()
        </code>
      </a>
    </td>
  </tr>
</tbody>
</table>

Te punkty końcowe zwracają `403` z `data.reason: "feature_disabled"`, gdy **Włącz sprzedaż** jest wyłączone w [Funkcje](https://requiply.com/docs/pl/guides/settings/organization/features#w%C5%82%C4%85cz-sprzeda%C5%BC) albo organizacja nie ma planu Advanced. To, co widzi klucz publiczny i kiedy zamiast tego dostaje `selling_disabled`, opisuje strona [Sprzedaż i towary na sprzedaż](https://requiply.com/docs/pl/developers/typescript-sdk/sales#z-kluczem-publicznym).

### Raporty

Wszystkie raporty wymagają **klucza tajnego** i przyjmują parametry w ciągu zapytania.

<table>
<thead>
  <tr>
    <th>
      Metoda i ścieżka
    </th>
    
    <th>
      Metoda SDK
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        GET /reports/revenue
      </code>
    </td>
    
    <td>
      <a href="https://requiply.com/docs/pl/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/pl/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/pl/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/pl/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/pl/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/pl/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/pl/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/pl/developers/typescript-sdk/reports#reportspipeline">
        <code>
          reports.pipeline()
        </code>
      </a>
    </td>
  </tr>
</tbody>
</table>

## Konwencje

<table>
<thead>
  <tr>
    <th>
      Temat
    </th>
    
    <th>
      Zasada
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <strong>
        Parametry
      </strong>
    </td>
    
    <td>
      Punkty końcowe <code>
        GET
      </code>
      
       przyjmują parametry w ciągu zapytania. Punkty końcowe <code>
        POST
      </code>
      
       przyjmują treść w formacie JSON.
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Stronicowanie
      </strong>
    </td>
    
    <td>
      Punkty końcowe list zwracają <code>
        nextCursor
      </code>
      
      . Przekaż go z powrotem jako <code>
        cursor
      </code>
      
      , aby pobrać następną stronę. <code>
        null
      </code>
      
       oznacza, że nie ma więcej stron. <code>
        limit
      </code>
      
       wynosi od 1 do 100 (domyślnie 25) w listach katalogu, dostępności i sprzedaży, od 1 do 200 (domyślnie 50) w <code>
        bookings/list
      </code>
      
       oraz od 1 do 500 (domyślnie 100) w <code>
        inventory/status
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Daty i godziny
      </strong>
    </td>
    
    <td>
      ISO 8601. W wycenach, tworzeniu rezerwacji i <code>
        availability/items
      </code>
      
       data z godziną bez przesunięcia (<code>
        2026-07-01T10:00:00
      </code>
      
      ) jest odczytywana w strefie czasowej organizacji, z uwzględnieniem czasu letniego. Wartość z <code>
        Z
      </code>
      
       lub przesunięciem jest używana bez zmian. Data bez godziny oznacza północ.
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Identyfikatory
      </strong>
    </td>
    
    <td>
      Pozycje, kategorie, usługi, towary na sprzedaż i sprzedaże używają UUID. Rezerwacje i klienci używają liczb. Rezerwacje i sprzedaże mają też numer, który pracownicy widzą w aplikacji: przekaż go z <code>
        ?idKind=org
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Kwoty
      </strong>
    </td>
    
    <td>
      Kwoty są podawane w głównej jednostce waluty organizacji (na przykład <code>
        1250.5
      </code>
      
      ), obok kodu <code>
        currency
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Podnajem
      </strong>
    </td>
    
    <td>
      Pozycje pochodzące od dostawców nigdy nie są zwracane kluczowi publicznemu ani od niego przyjmowane. Klucz tajny widzi je, gdy włączony jest <a href="https://requiply.com/docs/pl/guides/settings/organization/features">
        podnajem
      </a>
      
      .
    </td>
  </tr>
</tbody>
</table>

## Błędy

Nieudane żądanie zwraca kod błędu HTTP i treść w formacie JSON:

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

`message` jest przeznaczony dla ludzi. Gdy API podaje przyczynę w formie czytelnej dla programu, znajduje się ona w `data.reason`, czasem z dodatkowymi polami w `data`. Rozgałęziaj kod według `data.reason`, nigdy według treści komunikatu. Przyczyny wymienia strona [Obsługa błędów](https://requiply.com/docs/pl/developers/typescript-sdk/error-handling#przyczyny-b%C5%82%C4%99d%C3%B3w).

<table>
<thead>
  <tr>
    <th>
      Status
    </th>
    
    <th>
      Typowa przyczyna
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        400
      </code>
    </td>
    
    <td>
      Brakujące lub nieprawidłowe pole, na przykład błędna data albo pusta lista <code>
        items
      </code>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        401
      </code>
    </td>
    
    <td>
      Brak nagłówka <code>
        Authorization
      </code>
      
       albo klucz jest nieznany lub unieważniony.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        403
      </code>
    </td>
    
    <td>
      Ten typ klucza nie może korzystać z punktu końcowego albo funkcja lub uprawnienie jest wyłączone.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        404
      </code>
    </td>
    
    <td>
      Rezerwacja, pozycja, klient lub sprzedaż nie istnieje w tej organizacji.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        409
      </code>
    </td>
    
    <td>
      Żądanie jest sprzeczne z bieżącym stanem, na przykład pozycja jest zarchiwizowana lub jej brak na stanie.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        429
      </code>
    </td>
    
    <td>
      Klucz przekroczył limit żądań. Odczekaj liczbę sekund podaną w <code>
        Retry-After
      </code>
      
      .
    </td>
  </tr>
</tbody>
</table>

Rezerwacja, której organizacja nie może przyjąć, na przykład dlatego, że pozycje są zajęte albo wydanie wypada poza godzinami pracy, **nie** jest błędem: `POST /bookings/create` zwraca `200` z `success: false`. Zobacz [Rezerwacje](https://requiply.com/docs/pl/developers/typescript-sdk/bookings#obs%C5%82uga-odpowiedzi).

## Rejestrowanie sprzedaży przez REST

`POST /sales/create` przyjmuje:

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

Odpowiada kodem `201` ze sprzedażą `sale`, `stockWarnings` (towary, których stan spada poniżej zera, a sprzedaż i tak zostaje zarejestrowana) i płatnością `payment` z linkiem dla metody online. Zasady dotyczące pól opisuje [`sales.create()`](https://requiply.com/docs/pl/developers/typescript-sdk/sales#salescreate).


## Sitemap

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