AgentCal is an API-first calendar platform built for the agentic era. No OAuth nightmares. No per-seat caps. One API call creates a calendar. Scale to thousands.
from agentcal import AgentCal client = AgentCal(api_key="ac_...") # One call. One calendar identity. calendar = client.calendars.create( name="Fleet Coordinator", timezone="America/New_York" ) # Schedule with a prompt payload client.calendars.events.create( calendar.calendar_id, summary="Daily health check", start="2026-03-12T09:00:00-05:00", end="2026-03-12T09:15:00-05:00", recurrence=["RRULE:FREQ=DAILY"], prompt_payload={ "action": "health_check", "targets": ["prod-01", "prod-02"], "on_failure": "page_oncall" } ) # CalDAV + iCal included. No extra setup. print(calendar.caldav_url) print(calendar.ical_url)
Every existing calendar API was designed for a human clicking "Allow" in a browser. Your agents don't have a browser. They shouldn't need one.
Everything your agents need to own time — as first-class participants in the scheduling universe.
Install the SDK, grab an API key from the console, and you're scheduling.
from agentcal import AgentCal
client = AgentCal(api_key="ac_...")
# Create a calendar
calendar = client.calendars.create()
# Schedule an event
client.calendars.events.create(
calendar.calendar_id,
summary="Sync with engineering",
start="2026-03-12T10:00:00-05:00",
end="2026-03-12T11:00:00-05:00",
)
# Subscribe from any CalDAV client
print(calendar.caldav_url)
print(calendar.ical_url)
import { AgentCal } from "agentcal";
const client = new AgentCal({ apiKey: "ac_..." });
// Create a calendar
const calendar = await client.calendars.create();
// Schedule an event
await client.calendars.events.create(
calendar.calendarId, {
summary: "Sync with engineering",
start: "2026-03-12T10:00:00-05:00",
end: "2026-03-12T11:00:00-05:00",
}
);
// Subscribe from any CalDAV client
console.log(calendar.caldavUrl);
console.log(calendar.icalUrl);
Find mutual availability across agents and humans in one call.
# Find mutual availability across agents and humans
proposal = client.availability.negotiate(
calendar_ids=[
"[email protected]",
"[email protected]",
"[email protected]" # works with external CalDAV too
],
time_min="2026-03-12T09:00:00-05:00",
time_max="2026-03-14T17:00:00-05:00",
duration_minutes=30,
)
# Auto-book the best slot
best = proposal.options[0]
client.calendars.events.create(
calendar.calendar_id,
summary="Cross-agent sync",
start=best.start, end=best.end,
attendees=["[email protected]", "[email protected]"]
)
Attach a prompt_payload to any event.
When the event fires, AgentCal sends a webhook to your agent with full context —
no separate cron service, no polling, no glue code.
Embed any JSON into the prompt_payload field — action type, target IDs, escalation rules, context.
Point AgentCal at your agent's endpoint. We handle HMAC signing, retries, and delivery guarantees.
AgentCal delivers an event.triggered webhook with the full event object and payload.
No polling. No separate scheduler. Calendar is now the single source of truth for time-based agent behavior.
{
"event_type": "event.triggered",
"calendar_id": "cal_abc123",
"event_id": "evt_def456",
"event": {
"summary": "Nightly pipeline audit",
"start": "2026-03-14T02:00:00Z",
"recurrence": ["RRULE:FREQ=DAILY"],
"prompt_payload": {
"action": "audit_pipeline",
"pipeline_id": "etl-prod-001",
"on_failure": "page_oncall",
"notify_channel": "nats://fleet.alerts"
}
},
"triggered_at": "2026-03-14T02:00:00.123Z"
}
Webhooks are HMAC-signed. The SDK verifies automatically. Also available via WebSocket streaming and NATS JetStream.
AgentCal is built on open standards and plugs into the ecosystem you already use.
No per-seat fees. No arbitrary quotas. Calendars are cheap to run — pricing reflects that.
Not a workaround. Not a scratchpad cron. A first-class scheduling identity that talks to the whole world. API key in 60 seconds.
Free tier available. No credit card required to start.