Skip to content

Availability

Three endpoints for finding available time slots.

Returns available slots across all of an agent’s calendars.

GET /v1/agents/:id/availability
ParameterTypeRequiredDefaultDescription
startdatetimeYesStart of time range (ISO 8601)
enddatetimeYesEnd of time range (must be after start)
slot_durationstringNo30m15m, 30m, 45m, 1h, or 2h
include_busybooleanNofalseInclude busy slots in response
Terminal window
curl "https://api.chronary.ai/v1/agents/agt_a1b2c3d4/availability?start=2026-04-07T09:00:00Z&end=2026-04-07T17:00:00Z&slot_duration=30m" \
-H "Authorization: Bearer chr_sk_your_key_here"
{
"slots": [
{ "start": "2026-04-07T09:00:00Z", "end": "2026-04-07T09:30:00Z" },
{ "start": "2026-04-07T09:30:00Z", "end": "2026-04-07T10:00:00Z" },
{ "start": "2026-04-07T15:00:00Z", "end": "2026-04-07T15:30:00Z" }
]
}

Same parameters, scoped to one calendar.

GET /v1/calendars/:id/availability
Terminal window
curl "https://api.chronary.ai/v1/calendars/cal_x1y2z3/availability?start=2026-04-07T09:00:00Z&end=2026-04-07T17:00:00Z" \
-H "Authorization: Bearer chr_sk_your_key_here"
StatusTypeCause
404not_foundCalendar not found

Find time slots where multiple agents are all free.

GET /v1/availability
ParameterTypeRequiredDefaultDescription
agentsstringYesComma-separated agent IDs
startdatetimeYesStart of time range (ISO 8601)
enddatetimeYesEnd of time range
slot_durationstringNo30m15m, 30m, 45m, 1h, or 2h
calendarsstringNoComma-separated calendar IDs to narrow scope
include_busybooleanNofalseInclude busy slots
Terminal window
curl "https://api.chronary.ai/v1/availability?agents=agt_a1b2c3d4,agt_e5f6g7h8&start=2026-04-07T09:00:00Z&end=2026-04-07T17:00:00Z&slot_duration=30m" \
-H "Authorization: Bearer chr_sk_your_key_here"
PlanMax agents per queryMax date range
Free5 agents30 days
Pro20 agents90 days
CustomCustomCustom
StatusTypeCause
400bad_requestToo many agents for your plan
400bad_requestDate range exceeds plan limit

Availability rules let you pad events with buffer time and restrict free slots to working hours on a per-calendar basis. Rules are applied automatically to all three availability endpoints above — the engine expands each event by the configured buffers and marks time outside working hours as busy before computing free slots.

By default, calendars have no rules: buffers are 0, there are no working-hours restrictions, and every minute outside an event is considered free. Rules are stored per calendar, so a single agent can mix strict (business hours) and always-on calendars.

Upsert rules for a calendar. Any existing rules are replaced.

PUT /v1/calendars/:id/availability-rules
FieldTypeRequiredDefaultDescription
buffer_before_minutesintegerNo0Minutes of buffer before each event (0120)
buffer_after_minutesintegerNo0Minutes of buffer after each event (0120)
working_hoursobject | nullNonullPer-day working-hours map. null means no working-hours restriction
timezonestringNo"UTC"IANA timezone for working_hours (e.g. America/New_York)

working_hours is an object keyed by lowercase 3-letter weekday abbreviations. Each day is optional; days that are omitted are treated as entirely non-working.

Day keyValue
mon, tue, wed, thu, fri, sat, sun{ "start": "HH:MM", "end": "HH:MM" }

start and end are 24-hour local times in the configured timezone. end must be after start. At least one day must be present when working_hours is not null.

Terminal window
curl -X PUT https://api.chronary.ai/v1/calendars/cal_01H9X4M2P5R8T6V0/availability-rules \
-H "Authorization: Bearer chr_sk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"buffer_before_minutes": 15,
"buffer_after_minutes": 15,
"working_hours": {
"mon": { "start": "09:00", "end": "17:00" },
"tue": { "start": "09:00", "end": "17:00" },
"wed": { "start": "09:00", "end": "17:00" },
"thu": { "start": "09:00", "end": "17:00" },
"fri": { "start": "09:00", "end": "17:00" }
},
"timezone": "America/New_York"
}'
{
"id": "avr_01H9X4M2P5R8T6V0",
"calendar_id": "cal_01H9X4M2P5R8T6V0",
"buffer_before_minutes": 15,
"buffer_after_minutes": 15,
"working_hours": {
"mon": { "start": "09:00", "end": "17:00" },
"tue": { "start": "09:00", "end": "17:00" },
"wed": { "start": "09:00", "end": "17:00" },
"thu": { "start": "09:00", "end": "17:00" },
"fri": { "start": "09:00", "end": "17:00" }
},
"timezone": "America/New_York",
"created_at": "2026-04-07T12:00:00.000Z",
"updated_at": "2026-04-07T12:00:00.000Z"
}
StatusTypeCause
400bad_requestBuffer outside 0120, end not after start, or empty working_hours object
404not_foundCalendar not found

GET /v1/calendars/:id/availability-rules

Returns the current rules for the calendar.

Terminal window
curl https://api.chronary.ai/v1/calendars/cal_01H9X4M2P5R8T6V0/availability-rules \
-H "Authorization: Bearer chr_sk_your_key_here"

Same shape as the PUT response above.

StatusTypeCause
404not_foundCalendar not found, or no rules set for this calendar

Removes buffers and working-hours restrictions. After deletion, the calendar reverts to the default “every minute is free unless blocked by an event” behavior.

DELETE /v1/calendars/:id/availability-rules
Terminal window
curl -X DELETE https://api.chronary.ai/v1/calendars/cal_01H9X4M2P5R8T6V0/availability-rules \
-H "Authorization: Bearer chr_sk_your_key_here"

Empty body.

StatusTypeCause
404not_foundCalendar not found, or no rules set for this calendar