API Documentation
Two endpoints, same query parameters. No authentication required.
Endpoints
GET
/event.ics Returns a downloadable .ics file (RFC 5545). Works as a direct link in emails, websites, or anywhere a URL is accepted.
Content-Type:
text/calendar; charset=utf-8 GET
/links Returns JSON with pre-built deep links for Google Calendar, Outlook, Yahoo, and a direct ICS download URL. CORS-enabled for client-side use.
Content-Type:
application/json; charset=utf-8 Response shape
{
"ics_url": "https://api.getcal.link/event.ics?title=...",
"google_url": "https://calendar.google.com/calendar/render?...",
"outlook_url": "https://outlook.live.com/calendar/0/action/compose?...",
"yahoo_url": "https://calendar.yahoo.com/?..."
} Query parameters
| Parameter | Required | Description |
|---|---|---|
title | Yes | Event title |
start | Yes | Start datetime — ISO 8601 (2026-02-15T14:00:00Z) or compact (20260215T140000Z) |
end | Yes | End datetime — same formats as start |
description | No | Event description (newlines supported) |
location | No | Event location or meeting URL |
url | No | A URL to attach to the event |
organizer | No | Organizer display name |
organizer_email | No | Organizer email address |
reminder | No | Minutes before event to trigger an alarm (e.g. 15) |
uid | No | Unique event ID — auto-generated if omitted |
rrule | No | Recurrence rule, e.g. FREQ=WEEKLY;COUNT=10 |
Date and time formats
Both start and end accept:
- ISO 8601 —
2026-02-15T14:00:00Zor2026-02-15T14:00:00+00:00 - Compact ICS —
20260215T140000Z
All datetimes are normalised to UTC. The end must be after start.
Recurrence rules
The rrule parameter accepts standard iCalendar recurrence rules (RFC 5545 Section 3.8.5.3).
FREQ=DAILY;COUNT=5 Repeat daily for 5 days FREQ=WEEKLY;BYDAY=MO,WE,FR Every Monday, Wednesday, Friday FREQ=MONTHLY;BYMONTHDAY=1;COUNT=12 First of every month for a year Examples
Direct ICS download link (HTML)
<a href="https://api.getcal.link/event.ics?title=Team+standup&start=2026-02-15T14:00:00Z&end=2026-02-15T14:30:00Z&reminder=15">
Add to Calendar
</a> Fetch links from JavaScript
const res = await fetch(
'https://api.getcal.link/links?title=Team+standup&start=2026-02-15T14:00:00Z&end=2026-02-15T14:30:00Z'
);
const links = await res.json();
// links.ics_url — direct .ics download
// links.google_url — Google Calendar deep link
// links.outlook_url — Outlook Web deep link
// links.yahoo_url — Yahoo Calendar deep link cURL
curl "https://api.getcal.link/links?title=Team+standup&start=2026-02-15T14:00:00Z&end=2026-02-15T14:30:00Z" | jq . Liquid / Braze email template
<a href="https://api.getcal.link/event.ics?title={{ event_name | url_encode }}&start={{ event_start }}&end={{ event_end }}&location={{ event_location | url_encode }}">
Add to Calendar
</a> Mailchimp merge tags
<a href="https://api.getcal.link/event.ics?title=*|EVENT_TITLE|*&start=*|EVENT_START|*&end=*|EVENT_END|*">
Add to Calendar
</a> Error handling
Errors return JSON with an error field and the appropriate HTTP status code:
| Status | Meaning |
|---|---|
400 | Missing or invalid parameter (message describes the issue) |
405 | Method not allowed (only GET is supported) |
429 | Rate limit exceeded (MCP endpoint only, 100 req/min) |
404 | Unknown path |
{ "error": "Missing required parameter(s): title, start" } CORS
All endpoints return permissive CORS headers. You can call the API directly from browser JavaScript on any domain:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, OPTIONS
Access-Control-Allow-Headers: Content-Type