Pozwól agentom AI rezerwować w Twojej firmie

Serwer MCP, API REST i podpisane webhooki, z kluczami pod kontrolą właściciela i zasadami salonu sprawdzanymi przy każdej rezerwacji.

Serwer MCP

Model Context Protocol pozwala asystentowi AI bezpośrednio wywoływać narzędzia Cadenspot: Streamable HTTP i JSON-RPC 2.0 pod jednym adresem, a każdy klucz działa tylko dla jednej firmy.

POSThttps://cadenspot.com/api/mcp

Narzędzia

Klucz widzi i wywołuje tylko narzędzia, na które pozwalają jego uprawnienia.

Uprawnienie availability:read

  • list_event_typesUsługi do zarezerwowania: czas trwania, cena, opcje, zasady i przygotowanie.
  • list_staffStylistki, o które klient może poprosić przy danej usłudze.
  • get_available_slotsWolne terminy jednej usługi, do 14 dni na wywołanie, według godzin, rezerwacji i podłączonych kalendarzy.

Uprawnienie bookings:read

  • get_bookingJedna rezerwacja po numerze: status i to, co jeszcze można zmienić.
  • find_client_bookingsWizyty klienta wyszukane po telefonie lub e-mailu.
  • get_client_contextKrótka karta dzwoniącego: wizyty, nieobecności, ostatnia usługa, nadchodzące terminy.

Uprawnienie bookings:write

  • intakeZacznij tutaj: przekaż słowa klienta; serwer wybierze usługę i kolejny krok.
  • propose_slotsDo 3 terminów pasujących do prośby klienta; gdy znany jest telefon lub e-mail, pierwszy jest blokowany na 10 minut.
  • hold_slotBlokuje termin do 10 minut, gdy klient potwierdza.
  • release_holdZwalnia zablokowany termin.
  • create_bookingRezerwuje termin, ponownie sprawdzony z zasadami i kalendarzami; ta sama osoba nigdy nie zostanie na nim zarezerwowana dwa razy.
  • reschedule_bookingPrzenosi rezerwację na inny termin; obie strony dostają zaktualizowane zaproszenie.
  • escalate_to_ownerPrzekazuje właścicielowi zwroty, skargi i wszystko, co nietypowe.
  • join_waitlistDopisuje klienta do listy oczekujących, gdy żaden termin nie pasuje.

Uprawnienie bookings:cancel

  • cancel_bookingOdwołuje, gdy agent przekaże confirmed: true (po „tak” klienta), i proponuje bliskie terminy na nową rezerwację.

Uprawnienie bookings:approve

  • decide_requestAkceptuje lub odrzuca prośbę o rezerwację; wymaga uprawnienia bookings:approve.

Podłącz swojego asystenta

Dodaj to do konfiguracji klienta MCP (Claude Code czyta ją z .mcp.json) i zamień YOUR_API_KEY na klucz z Panel → Ustawienia → Klucze API. Inne klienty potrzebują tego samego adresu i nagłówka Authorization.

.mcp.json
{
  "mcpServers": {
    "cadenspot": {
      "type": "http",
      "url": "https://cadenspot.com/api/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

API REST v1

Dla kodu, który nie jest klientem MCP: zwykłe HTTPS i JSON, z tymi samymi kluczami i uprawnieniami. Klucz wysyłaj jako token Bearer.

  • GET/api/v1/services

    Firma i jej usługi do rezerwacji, z cenami z ustawień właściciela.availability:read
  • GET/api/v1/availability

    Wolne terminy jednej usługi, liczone na bieżąco, do 14 dni.availability:read
  • POST/api/v1/bookings

    Rezerwuje termin. Wyślij nagłówek Idempotency-Key, by ponowienie nigdy nie zarezerwowało dwa razy.bookings:write
  • GET/api/v1/bookings/:id

    Jedna rezerwacja i dozwolone jeszcze działania.bookings:read
  • PATCH/api/v1/bookings/:id

    Odwołuje (bookings:cancel) lub przenosi (bookings:write) rezerwację.bookings:cancelbookings:write

Błędy wracają jako JSON ze stałym kodem i komunikatem: 401 przy złym kluczu, 403 gdy brakuje uprawnienia, 429 przy limicie.

Pierwsze wywołanie

curl
curl https://cadenspot.com/api/v1/services \
  -H "Authorization: Bearer YOUR_API_KEY"

Webhooki

Dowiaduj się, gdy coś się dzieje. Właściciel dodaje endpoint w Panel → Ustawienia → Webhooki i wybiera zdarzenia.

  • booking.createdRezerwacja została potwierdzona.
  • booking.requestedRezerwacja czeka na zgodę właściciela.
  • booking.rescheduledRezerwacja została przeniesiona.
  • booking.cancelledRezerwacja została odwołana.
  • booking.declinedWłaściciel odrzucił prośbę albo wygasła.
  • booking.reminderOkoło 24 godzin przed wizytą.
  • booking.no_showWłaściciel oznaczył, że klient nie przyszedł.
  • escalation.createdAgent przekazał rozmowę właścicielowi.
  • waitlist.slot_openedZwolnił się termin i lista oczekujących dostała informację.
  • rebook.dueKlient powinien umówić kolejną wizytę.

Podpisane wysyłki

Każda wysyłka zawiera x-veyracal-signature (v1= i szesnastkowy HMAC-SHA256 znacznika czasu, kropki i surowej treści), x-veyracal-timestamp (sekundy Unix), x-veyracal-event i x-veyracal-delivery. Zanim porównasz HMAC, odrzuć wysyłkę, jeśli brakuje znacznika czasu lub podpisu albo mają zły format, lub jeśli znacznik czasu różni się od Twojego zegara o ponad 300 sekund; potem porównaj w stałym czasie i usuwaj duplikaty po id wysyłki. Nieudana wysyłka jest próbowana łącznie do 5 razy.

Bezpieczne z założenia

  • Klucze z minimalnymi uprawnieniami

    Każdy klucz należy do jednej firmy i robi tylko to, co zaznaczy właściciel: sprawdza wolne terminy, rezerwuje, odwołuje lub zatwierdza. Klucze mogą wygasać, można je unieważnić i są przechowywane tylko jako hash.

  • Zasady salonu przy każdym żądaniu

    Godziny, przerwy, wyprzedzenie, dzienne limity i to, jak daleko naprzód można rezerwować, serwer sprawdza przy każdej rezerwacji, blokadzie i zmianie terminu. Żadne narzędzie nie przyjmuje ceny: ceny pochodzą wyłącznie z ustawień właściciela. Ta sama osoba nigdy nie zostanie zarezerwowana dwa razy na ten sam termin.

  • Bezpieczne ponawianie

    Z kluczem idempotencji powtórzone żądanie zwraca tę samą rezerwację zamiast tworzyć drugą, a klucz nigdy nie zwróci rezerwacji innej firmy. Przez MCP termin zajęty w międzyczasie wraca z bliskimi alternatywami.

  • Człowiek do trudnych spraw

    Zwroty, skargi i nagłe sprawy trafiają do właściciela przez escalate_to_owner, a intake wykrywa je w słowach klienta. Odwołanie wymaga confirmed: true, wysyłanego dopiero po „tak” klienta, a akceptacja lub odrzucenie prośby wymaga klucza z uprawnieniem bookings:approve.

Pytania

Które asystenty AI mogą się połączyć?
Każdy asystent lub platforma agentów obsługująca zdalne serwery MCP przez HTTP oraz każdy kod, który potrafi wywołać API HTTPS.
Jak zdobyć klucz API?
Właściciel firmy tworzy go w Panel → Ustawienia → Klucze API, wybiera uprawnienia i kopiuje go raz: później nie jest już pokazywany.
Czy agent może zarezerwować poza godzinami otwarcia albo zmienić cenę?
Nie. Każda rezerwacja, blokada i zmiana terminu jest sprawdzana z godzinami, przerwami, wyprzedzeniem i dziennymi limitami właściciela, a żadne narzędzie nie przyjmuje ceny: ceny pochodzą wyłącznie z jego ustawień.
Co jeśli to samo żądanie zostanie wysłane dwa razy?
Wyślij ten sam klucz idempotencji (idempotencyKey w MCP, nagłówek Idempotency-Key w REST), a drugie żądanie zwróci pierwszą rezerwację.
Co się dzieje, gdy klient prosi o zwrot albo składa skargę?
Agent wywołuje escalate_to_owner: właściciel dostaje e-mail, sprawa pojawia się w jego skrzynce, a webhook escalation.created zostaje wysłany.
Czy są limity zapytań?
Tak. Obecnie każdy klucz ma 120 żądań naraz, potem 2 na sekundę, liczone osobno dla MCP i REST. Limity mogą się zmienić.

Gotowy, by się połączyć?

Prowadzisz salon lub studio? Najpierw utwórz link do rezerwacji; asystent będzie w nim rezerwował.

Utwórz darmowy link do rezerwacji

Budujesz agenta? Napisz do nas, a wyślemy Ci pełną dokumentację API i MCP.

Napisz do nas