Calendar

Calendar

List calendars, manage events, query availability, propagate RSVPs, and run a Horato-native virtual calendar.

The calendar surface normalizes Google and Microsoft calendars, and adds a virtual calendar for accounts that have no external calendar provider.

Calendars and events

List calendars on a connection, then create, read, update, and delete events. Times are ISO 8601; include the event timezone so recurring and all-day handling stays correct. Conference links (Google Meet, Microsoft Teams) are requested per event and returned on the event.

Create an eventbash
curl -X POST https://api.hora.to/v1/calendars/cal_primary/events \
  -H "Authorization: Bearer $HORATO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"connection_id":"conn_123","title":"Intro call","start":"2026-06-10T16:00:00Z","end":"2026-06-10T16:30:00Z","timezone":"America/Costa_Rica"}'

Availability and free/busy

Query raw free/busy across one or more calendars, or ask the availability engine for bookable slots. Availability accounts for the host timezone, working windows, notice, and buffers, so slots are safe to offer to an invitee.

Query free/busybash
curl -X POST https://api.hora.to/v1/calendars/freebusy/query \
  -H "Authorization: Bearer $HORATO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"connection_id":"conn_123","calendar_ids":["primary"],"from":"2026-06-10T00:00:00Z","to":"2026-06-11T00:00:00Z"}'

RSVP and conferencing

Respond to invitations (accept, tentative, decline) and the response propagates to the provider. Request a conference link on an event so meetings created through Horato carry a join URL.

Virtual calendar

When an account has no Google, Microsoft, or Apple calendar, create a Horato-native virtual calendar. It activates immediately with no OAuth, behaves like any other calendar connection, and is a first-class scheduling and recorder target — bookings, reminders, and meeting notetakers all work against it.

Create it by connecting the `virtual` provider; a default virtual calendar is provisioned automatically.

Create a virtual calendar connectionbash
curl -X POST https://api.hora.to/v1/connections \
  -H "Authorization: Bearer $HORATO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"provider":"virtual"}'