Booking-driven missions
Calendar API: bookings drive missions
Your booking system pushes signed JSON events to Sentinel. During an active window, cameras mapped to the space automatically use that event’s mission.
1. Map the space
A camera config’s spaceUuid must exactly equal the event’s space_uuid. Multiple cameras sharing a space switch together.
2. Push a signed event
POST /api/enterprise/calendar/events
Content-Type: application/json
X-Sentinel-Timestamp: 1751990400
X-Sentinel-Signature: sha256=<HMAC-SHA256(secret, timestamp + "." + raw_body)>{
"events": [
{
"id": "booking-001",
"space_uuid": "room-studio-a",
"start": "2026-09-28T21:00:00+08:00",
"end": "2026-09-28T22:00:00+08:00",
"title": "Private booking",
"kind": "one_to_one",
"preset_id": "elder_fall_detect"
}
]
}Events are accepted only after a calendar API secret is configured. The signature includes a timestamp; requests outside the five-minute window are rejected to reduce replay risk.
Fields and priority
| Field | Purpose |
|---|---|
| id | Stable unique key; re-sending the ID updates the event. |
| space_uuid | Maps to camera space. |
| start / end | Timezone-aware ISO timestamps; end must be after start. |
| prompt / preset_id | Mission for the booking; custom prompt wins. |
Priority: event prompt → event preset_id → space default mission → the camera’s original mission. Overlapping bookings resolve to the latest start.
3. Reconcile and delete
GET /api/enterprise/calendar/events?space_uuid=room-studio-a&active=1
DELETE /api/enterprise/calendar/events/booking-001