Referenční příručka Webhooků a událostí
LockMyCal umožňuje odesílat HTTP POST požadavky na vámi definované URL endpointy v reálném čase, kdykoliv dojde k události v rezervačním systému.
Podporované typy událostí (Event Types)
| Událost | Spouštěč (Trigger) |
|---|---|
meeting.created |
Klient úspěšně vytvořil novou rezervaci (nebo byl termín schválen organizátorem). |
meeting.cancelled |
Schůzka byla zrušena klientem nebo hostitelem. |
meeting.rescheduled |
Došlo ke změně data nebo času existující rezervace (i po opětovném schválení přesunu). |
meeting.requested |
Nová rezervace čeká na schválení organizátorem. |
meeting.declined |
Organizátor žádost o rezervaci zamítl. |
meeting.request_expired |
Žádost o rezervaci vypršela bez rozhodnutí. |
HTTP Hlavičky požadavku
Každý webhook požadavek obsahuje následující HTTP hlavičky:
Content-Type: application/json
User-Agent: Lockmycal-Webhooks/1.0
X-Lockmycal-Timestamp: 2026-08-30T14:00:00Z
X-Lockmycal-Token: vas_nastaveny_bezpecnostni_token
X-Lockmycal-Delivery-Id: 1234
Ověření pravosti (Security Token)
LockMyCal nepoužívá podpisové schéma HMAC — ověření probíhá prostým porovnáním sdíleného tajného tokenu:
- Při vytváření webhooku v dashboardu (Automatizace → Webhooky) zadejte vlastní Security Token (libovolný dostatečně silný řetězec).
- Na vašem serveru při přijetí požadavku porovnejte hodnotu hlavičky
X-Lockmycal-Tokens tokenem, který jste si nastavili. - Pokud se hodnoty neshodují (nebo hlavička chybí), požadavek odmítněte — nejde o platné volání z LockMyCal.
Struktura JSON Payloadu (meeting.created)
{
"event": "meeting.created",
"timestamp": "2026-08-30T14:00:00Z",
"webhook_id": "42",
"data": {
"meeting": {
"id": 1234,
"uid": "a1b2c3d4-...",
"title": "Konzultace strategie",
"summary": "Konzultace strategie",
"description": null,
"start_time": "2026-09-01T10:00:00+02:00",
"end_time": "2026-09-01T11:00:00+02:00",
"duration": 60,
"status": "confirmed",
"meeting_type": "Konzultace strategie",
"location": "Google Meet",
"organizer": {
"name": "Jan Novák",
"email": "jan.novak@vasedomena.cz",
"title": null,
"user_id": 7
},
"attendee": {
"name": "Petr Svoboda",
"email": "petr.svoboda@klient.cz",
"phone": "+420777123456",
"company": "ACME s.r.o.",
"timezone": "Europe/Prague",
"message": null,
"attachments": [
{
"filename": "zadani.pdf",
"content_type": "application/pdf",
"byte_size": 183204
}
]
},
"guests": [
{
"email": "jana.dvorakova@klient.cz",
"name": "Jana Dvořáková",
"status": "accepted",
"responded_at": "2026-08-30T15:10:00Z"
}
],
"urls": {
"view": "https://vasedomena.cz/.../view",
"reschedule": "https://vasedomena.cz/.../reschedule",
"cancel": "https://vasedomena.cz/.../cancel",
"meeting": "https://meet.google.com/abc-defg-hij"
},
"video": {
"enabled": true,
"room_id": "abc-defg-hij",
"organizer_url": "https://meet.google.com/abc-defg-hij",
"attendee_url": "https://meet.google.com/abc-defg-hij",
"created_at": "2026-08-30T14:00:01Z",
"expires_at": null
},
"created_at": "2026-08-30T14:00:00Z",
"updated_at": "2026-08-30T14:00:00Z"
}
}
}
Note
Pole attendee.attachments obsahuje u příloh od klienta jen název, typ a velikost souboru – žádný odkaz ke stažení. Soubory jsou soukromé a stáhne je organizátor z nástěnky.
Note
Odpovědi na vlastní formulářové otázky (Intake Questions) ani platební údaje nejsou součástí webhook payloadu — pro tyto informace použijte detail rezervace v dashboardu.
Zpracování opakování (Retries) a Idempotence
Pokud váš koncový server vrátí stavový kód jiný než 2xx (nebo do 10 sekund neodpoví), LockMyCal automaticky zopakuje doručení s exponenciálním zpožděním (až 5 pokusů).
Doporučujeme využívat hlavičku X-Lockmycal-Delivery-Id (ID doručení: stejné u všech opakovaných pokusů o jedno doručení a pro každé další doručení jiné) k zajištění idempotentního zpracování ve vašich systémech – příjemce, který si ho uloží, může druhou kopii zahodit.
LockMyCal následuje nejvýše 5 přesměrování a každé z nich ověřuje; token se při přesměrování na jinou doménu neposílá.