Szybki start
Ten przewodnik prowadzi przez cały przepływ na Twojej organizacji w Rezeri: klucz, usługi, wolne terminy, rezerwacja, jej odczyt i anulowanie. Potrzebujesz tylko curl.
1. Konto i klucz
Dział zatytułowany „1. Konto i klucz”- Potrzebujesz organizacji w Rezeri z planem, który obejmuje dostęp do API — zobacz cennik. Panel jest pod adresem
app.rezeri.com. - W panelu dodaj co najmniej jedną aktywną usługę, przypisz do niej pracownika i ustaw mu godziny pracy. API pokazuje tylko usługi, które klient może zarezerwować, a bez godzin pracy
GET /v1/availabilitynie zwróci żadnego slotu. - Otwórz Ustawienia → API i webhooki (sekcja widoczna tylko dla właściciela organizacji) i utwórz klucz ze scopes:
services:read,availability:read,bookings:read,bookings:write. - Skopiuj klucz. Zobaczysz go tylko raz. Ma postać
rez_live_<key_id>_<sekret>.
Zapisz klucz w zmiennej środowiskowej:
export REZERI_API_KEY="rez_live_..."2. Lista usług
Dział zatytułowany „2. Lista usług”curl https://api.rezeri.com/v1/services \ -H "Authorization: Bearer $REZERI_API_KEY"Odpowiedź to strona listy:
{ "data": [ { "id": "21db474e-f72b-41af-a63f-9e8394402158", "name": "Strzyżenie męskie", "duration_minutes": 30, "price": "90.00", "currency": "PLN", "modes": ["offline"], "payment": "none", "staff_ids": ["244a0e58-ee93-4117-9365-a3aac2e779b4"], "required_client_fields": ["name", "email"] } ], "has_more": false, "next_cursor": null}Zanotuj id usługi. Dwa pola decydują o tym, co wyślesz w kroku 4:
required_client_fields— dane klienta, których organizacja wymaga (namezawsze, do tegoemail,phonealbo oba).payment—nonealbooptionalpozwala zarezerwować bez płatności online.requiredidepositoznaczają płatność z góry — zobacz Płatności online.
3. Wolne terminy
Dział zatytułowany „3. Wolne terminy”Podaj usługę i zakres dat (from i to włącznie, YYYY-MM-DD, najwyżej 31 dni). Poniższy przykład pyta o najbliższe 7 dni (działa w macOS i Linuksie):
SERVICE_ID="21db474e-f72b-41af-a63f-9e8394402158" # id usługi z kroku 2FROM=$(date -u +%F)TO=$(date -u -v+7d +%F 2>/dev/null || date -u -d '+7 days' +%F)curl "https://api.rezeri.com/v1/availability?service_id=$SERVICE_ID&from=$FROM&to=$TO" \ -H "Authorization: Bearer $REZERI_API_KEY"{ "data": [ { "start": "2026-10-21T08:00:00+02:00", "end": "2026-10-21T08:30:00+02:00", "staff_id": "244a0e58-ee93-4117-9365-a3aac2e779b4" } ]}Każdy slot ma pracownika, który go obsłuży. Wybierz jeden slot i zapisz jego wartości:
START="2026-10-21T08:00:00+02:00" # start wybranego slotuSTAFF_ID="244a0e58-ee93-4117-9365-a3aac2e779b4" # staff_id wybranego slotu4. Rezerwacja
Dział zatytułowany „4. Rezerwacja”Wyślij start i staff_id wybranego slotu oraz dane klienta. Jako klienta podaj siebie — własne imię i własny adres e-mail. To prawdziwa rezerwacja: potwierdzenie e-mailem (i SMS-em, jeśli organizacja je wysyła) trafi na podany adres, a pracownik dostanie powiadomienie o nowej rezerwacji. Jeśli required_client_fields zawiera phone, dodaj też swój numer w polu phone.
MY_NAME="Anna Kowalska" # Twoje imię i nazwiskoNagłówek Idempotency-Key jest wymagany — to Twój unikalny identyfikator tej próby. Jeśli połączenie zerwie się w trakcie, ponów żądanie z tym samym kluczem, a nie powstanie druga rezerwacja. Zobacz Idempotencja.
curl -X POST https://api.rezeri.com/v1/bookings \ -H "Authorization: Bearer $REZERI_API_KEY" \ -H "Idempotency-Key: 6c0f4a52-order-1001" \ -H "Content-Type: application/json" \ -d '{ "service_id": "'"$SERVICE_ID"'", "staff_id": "'"$STAFF_ID"'", "start": "'"$START"'", "client": {"name": "'"$MY_NAME"'", "email": "'"$MY_EMAIL"'"}, "metadata": {"order_id": "1001"} }'Odpowiedź 201 Created zawiera pełną rezerwację:
{ "id": "311905c9-7a15-45c0-8b66-1dd2e8711875", "public_code": "RT7ER2KMRW", "status": "accepted", "service_id": "21db474e-f72b-41af-a63f-9e8394402158", "staff_id": "244a0e58-ee93-4117-9365-a3aac2e779b4", "start": "2026-10-21T08:00:00+02:00", "end": "2026-10-21T08:30:00+02:00", "price": "90.00", "currency": "PLN", "payment": {"required": false, "status": "not_required", "amount": null, "url": null}, "no_show_at": null, "manage_url": "https://app.rezeri.com/b/RT7ER2KMRW", "metadata": {"order_id": "1001"}, "created_at": "2026-10-19T11:17:50.711828+02:00"}Zapisz id. Pole metadata wraca w każdej odpowiedzi z tą rezerwacją — możesz tam trzymać identyfikator z własnego systemu.
status zależy od ustawień usługi: accepted (przyjęta), pending (czeka na akceptację pracownika) albo awaiting_payment (czeka na płatność online).
Gdy ktoś zajmie termin przed Tobą, dostaniesz 409 slot_unavailable. Pobierz wtedy wolne terminy ponownie.
5. Odczyt rezerwacji
Dział zatytułowany „5. Odczyt rezerwacji”BOOKING_ID="311905c9-7a15-45c0-8b66-1dd2e8711875" # id z odpowiedzi kroku 4curl "https://api.rezeri.com/v1/bookings/$BOOKING_ID" \ -H "Authorization: Bearer $REZERI_API_KEY"Odpowiedź ma ten sam kształt co w kroku 4. Rezerwacja jest też widoczna w kalendarzu w panelu.
6. Anuluj rezerwację testową
Dział zatytułowany „6. Anuluj rezerwację testową”Na koniec zwolnij termin. Body jest opcjonalne — możesz podać powód (reason, do 500 znaków). Idempotency-Key jest tu opcjonalny.
curl -X POST "https://api.rezeri.com/v1/bookings/$BOOKING_ID/cancel" \ -H "Authorization: Bearer $REZERI_API_KEY" \ -H "Content-Type: application/json" \ -d '{"reason": "Rezerwacja testowa integracji"}'Odpowiedź 200 OK zawiera rezerwację ze statusem cancelled. Anulowanie też wysyła wiadomości: e-mail (i SMS, jeśli organizacja je wysyła) o odwołaniu wizyty na Twój adres oraz powiadomienie dla pracownika. Więcej o testowaniu: Testowanie integracji.
Usługa płatna online
Dział zatytułowany „Usługa płatna online”Jeśli usługa ma payment: "required" albo "deposit", w kroku 4 dodaj return_url — adres https na domenie dozwolonej dla klucza. Rezerwacja powstanie ze statusem awaiting_payment i adresem płatności w payment.url. Cały przepływ opisuje Płatności online, a płatność bez prawdziwych pieniędzy sprawdzisz w trybie testowym bramki — zobacz Testowanie integracji.
- Rezerwacje i dostępność — filtry listy, anulowanie, przełożenie.
- Błędy — katalog kodów
code. - Referencja API — wszystkie pola i parametry.