Calendar-as-a-service for AI agents. Base URL: https://caldave.ai
Most endpoints require a Bearer token. Include it in every request:
Authorization: Bearer sk_live_your_api_key_here
Exceptions: POST /agents (no auth), GET /feeds (token in query param), and POST /inbound (token in URL path).
Create a new agent identity. Returns credentials you must save — the API key is shown once.
curl -s -X POST https://caldave.ai/agents
{
"agent_id": "agt_x7y8z9AbCd",
"api_key": "sk_live_abc123...",
"message": "Store these credentials securely. The API key will not be shown again."
}
Create a new calendar for the authenticated agent.
curl -s -X POST https://caldave.ai/calendars \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{"name": "Work Schedule", "timezone": "America/Denver"}'
{
"calendar_id": "cal_a1b2c3XyZ",
"name": "Work Schedule",
"timezone": "America/Denver",
"email": "cal-a1b2c3XyZ@caldave.ai",
"ical_feed_url": "https://caldave.ai/feeds/cal_a1b2c3XyZ.ics?token=feed_...",
"feed_token": "feed_...",
"inbound_webhook_url": "https://caldave.ai/inbound/inb_...",
"message": "This calendar can receive invites at cal-a1b2c3XyZ@caldave.ai. ..."
}
List all calendars for the authenticated agent.
curl -s https://caldave.ai/calendars \
-H "Authorization: Bearer YOUR_API_KEY"
Get a single calendar by ID.
curl -s https://caldave.ai/calendars/cal_a1b2c3XyZ \
-H "Authorization: Bearer YOUR_API_KEY"
Update calendar settings. All fields are optional.
curl -s -X PATCH https://caldave.ai/calendars/cal_a1b2c3XyZ \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{"name": "Updated Name", "timezone": "America/New_York"}'
Delete a calendar and all its events. Returns 204 on success.
curl -s -X DELETE https://caldave.ai/calendars/cal_a1b2c3XyZ \
-H "Authorization: Bearer YOUR_API_KEY"
Create an event on a calendar. Supports one-off and recurring events.
curl -s -X POST https://caldave.ai/calendars/CAL_ID/events \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"title": "Team standup",
"start": "2025-03-01T09:00:00-07:00",
"end": "2025-03-01T09:15:00-07:00",
"location": "https://meet.google.com/abc-defg-hij"
}'
curl -s -X POST https://caldave.ai/calendars/CAL_ID/events \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"title": "Daily weather email",
"start": "2025-03-01T08:00:00-07:00",
"end": "2025-03-01T08:05:00-07:00",
"metadata": {"action": "send_email", "prompt": "Send weather forecast"},
"recurrence": "FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR"
}'
instances_created count.List events with optional filters. Returns expanded recurring event instances.
curl -s "https://caldave.ai/calendars/CAL_ID/events?start=2025-03-01T00:00:00Z&limit=10" \
-H "Authorization: Bearer YOUR_API_KEY"
Get a single event by ID.
curl -s https://caldave.ai/calendars/CAL_ID/events/evt_abc123 \
-H "Authorization: Bearer YOUR_API_KEY"
Update an event. For recurring events: patching an instance marks it as an exception; patching the parent propagates to all non-exception instances.
curl -s -X PATCH https://caldave.ai/calendars/CAL_ID/events/evt_abc123 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{"title": "Updated title", "location": "Room 42"}'
Delete an event. For recurring event instances, use the mode query parameter.
single — cancel this instance only (default)future — cancel this and all future instancesall — delete entire seriescurl -s -X DELETE "https://caldave.ai/calendars/CAL_ID/events/evt_abc123?mode=single" \
-H "Authorization: Bearer YOUR_API_KEY"
Get the next N events starting from now. Designed for agent polling.
curl -s https://caldave.ai/calendars/CAL_ID/upcoming \
-H "Authorization: Bearer YOUR_API_KEY"
{
"events": [...],
"next_event_starts_in": "PT14M30S"
}
next_event_starts_in is an ISO 8601 duration showing how long until the next event. Useful for setting poll intervals.Plain text table of upcoming events. Useful for quick inspection via curl or agent debugging.
curl -s https://caldave.ai/calendars/CAL_ID/view \
-H "Authorization: Bearer YOUR_API_KEY"
Work (cal_xxx) tz: America/Denver
-----------------------------------------
TITLE START ...
-----------------------------------------
Daily standup 2026-02-13 16:00:00Z ...
-----------------------------------------
1 event(s)
Accept or decline an inbound calendar invite.
curl -s -X POST https://caldave.ai/calendars/CAL_ID/events/evt_abc123/respond \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{"response": "accepted"}'
Read-only iCalendar feed. Subscribe to this URL from Google Calendar, Apple Calendar, or any iCal-compatible app. The feed_token is returned when you create a calendar.
curl -s "https://caldave.ai/feeds/cal_a1b2c3XyZ.ics?token=feed_xyz789"
Receives forwarded emails containing .ics calendar invite attachments. Each calendar has a unique webhook URL (returned at creation as inbound_webhook_url). Supports Postmark and AgentMail providers.
agentmail_api_key.
{ "status": "created", "event_id": "evt_xxx" }
{ "status": "updated", "event_id": "evt_xxx" }
{ "status": "cancelled", "event_id": "evt_xxx" }
{ "status": "ignored", "reason": "..." }
Get up and running in three steps:
curl -s -X POST https://caldave.ai/agents
Save the agent_id and api_key from the response.
curl -s -X POST https://caldave.ai/calendars \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{"name": "My Calendar", "timezone": "America/Denver"}'
Save the calendar_id, email, and feed URLs from the response.
curl -s -X POST https://caldave.ai/calendars/YOUR_CAL_ID/events \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"title": "My first event",
"start": "2025-03-01T10:00:00-07:00",
"end": "2025-03-01T11:00:00-07:00"
}'