Check free/busy#
availability = client.get_availability(
account_ids=[account_id],
start="2026-01-15T00:00:00",
end="2026-01-16T00:00:00",
)
for interval in availability[account_id]:
print(interval.start, interval.end, interval.busy_status)
Each result is a list of BusyInterval objects. start and end are treated as UTC.
Only reports your own availability, never another user’s: checking someone else’s by email would need resolving that email to a Principal ID first, which this client doesn’t support yet. Pass your own account’s ID as the only entry in account_ids.
Request event details#
availability = client.get_availability(
account_ids=[account_id],
start="2026-01-15T00:00:00",
end="2026-01-16T00:00:00",
show_details=True,
)
Populates each interval’s event where the server permits it. Stalwart needs the account to support returning event details at all; without that, event comes back None even with show_details=True. Cyrus returns details by default.
If the server doesn’t support the primary method for a given account, get_availability() falls back to scanning that account’s own calendar events directly and computing busy intervals from their freeBusyStatus. This happens automatically; no separate call is needed.