{"openapi":"3.1.0","info":{"title":"Syntalith booking","version":"1.0.0","description":"Approved integrations can request a meeting for an authorized person. Only that person can finish booking through their emailed confirmation link. Credentials do not grant Google, mailbox or booking-management access."},"servers":[{"url":"https://meet.syntalith.ai"}],"components":{"securitySchemes":{"bookingCredential":{"type":"http","scheme":"bearer","description":"Expiring, revocable booking:create credential issued privately by Syntalith. Never embed it in browser code."}}},"paths":{"/api/availability/syntalith":{"get":{"operationId":"findSyntalithMeetingTimes","description":"Read available slots. Read /api/config/syntalith/en for noticeHours, horizonDays and the host time zone. Query at most 35 days per request.","parameters":[{"name":"from","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"days","in":"query","schema":{"type":"integer","minimum":1,"maximum":35,"default":7}}],"responses":{"200":{"description":"Available slots with start/end UTC timestamps in milliseconds"},"429":{"description":"Rate limit reached"},"503":{"description":"Booking or calendar unavailable"}}}},"/api/agent/bookings":{"post":{"operationId":"requestSyntalithMeetingForPerson","security":[{"bookingCredential":[]}],"description":"Requires the person’s permission, email, objective and an available slot. No CAPTCHA is required for an authenticated integration. Saves an awaiting_email request and holds the slot for ten minutes. Never reports the meeting as confirmed. Repeat an identical requestKey to recover the same pending request without another email. No confirmation or management token is returned.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["email","description","start","timezone","locale","requestKey","ownerAuthorized"],"properties":{"email":{"type":"string","format":"email","maxLength":254,"description":"The person’s email, never the agent mailbox"},"description":{"type":"string","minLength":1,"maxLength":2000,"description":"What the person wants to discuss or achieve"},"start":{"type":"integer","description":"Choose an exact start timestamp from availability, in UTC milliseconds"},"timezone":{"type":"string","description":"The person’s IANA time zone, such as Europe/Warsaw"},"locale":{"type":"string","enum":["en","pl"]},"requestKey":{"type":"string","pattern":"^[a-zA-Z0-9-]{20,80}$","description":"Unique per intent; reuse unchanged for retries"},"ownerAuthorized":{"type":"boolean","const":true,"description":"Assert that the person authorized the meeting request"}}}}}},"responses":{"202":{"description":"Saved, awaiting the person’s email confirmation","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"requestId":{"type":"string"},"status":{"const":"awaiting_email"},"expires":{"type":"integer"},"verificationRequired":{"const":true},"next":{"type":"string"}}}}}},"400":{"description":"Invalid or unauthorized booking details"},"401":{"description":"Missing, expired, revoked or invalid credential"},"403":{"description":"Owner email outside the credential restriction, or invalid browser origin"},"409":{"description":"Slot taken, changed retry payload or expired pending request"},"429":{"description":"Credential, IP, email or global quota reached; do not evade limits"},"503":{"description":"Booking, calendar or confirmation email unavailable"}}}}}}