API
Version 1 · part of the Enterprise plan
The API lets your own programs list your organization’s calendars, read their events and add events. It answers in JSON. API keys come with the Enterprise plan (see Pricing).
Calendar app subscriptions
Private calendar subscriptions are included on every plan, including Free. In Settings, Calendar subscriptions, each accepted member or viewer can create a read-only iCal link for a calendar they can access. These personal links do not require an API key. Replacing or revoking a link stops the old link; account, membership and calendar privacy checks apply on every refresh.
Public calendar links, website embeds and public iCal feeds require Pro or Enterprise to enable. The JSON API described below remains an Enterprise feature.
Keys
- An owner or admin makes a key under Settings, Organization, API Keys. The key is shown once, when it is made: copy it then. Only a fingerprint of it is stored, so it cannot be shown again; if it is lost, revoke it on the same page and make a new one.
- Send it with every request in the
Authorizationheader:Authorization: Bearer ec_… - A key works for its own organization only, and for every calendar there except private ones (a private calendar is seen only by the person who made it).
- Anyone who has the key can read and add events, so keep it out of web pages and shared files.
- Reading also works from a browser where you are signed in (you see what you see in the app). Adding events always needs a key.
Times
Every timed event has an IANA timezone, such as America/New_York. Send local start_at/end_at values in that zone, or ISO times carrying Z or an offset to identify an exact instant. If omitted, the calendar's default zone is used (existing calendars use America/New_York). Changing a calendar default never changes existing events. Nonexistent clock-change times are rejected; use an explicit offset to choose a repeated clock-change hour.
Event lists return offset ISO start/end values for timed events, so clients can convert to the viewer's zone. extendedProps includes the original start_at, end_at, timezone, and derived UTC values. All-day events return date-only values with an exclusive end and do not move across time zones. The legacy tz field remains accepted; use timezone for the canonical event zone.
Endpoints
All addresses start with https://eventcalendar.tech/api/v1.
GET /api/v1/calendars
The calendars the key can use, with the id you need to add an event.
curl -H "Authorization: Bearer ec_..." https://eventcalendar.tech/api/v1/calendars
{"data":[{"id":"8f0c...","name":"Family","description":null,"color":"#3B82F6","visibility":"members"}]}
GET /api/v1/events?start=…&end=…
Events that overlap the range, from all calendars the key can use. start and end are dates or local times (2026-10-01, 2026-11-01T00:00); without them you get the current month.
curl -H "Authorization: Bearer ec_..." "https://eventcalendar.tech/api/v1/events?start=2026-10-01&end=2026-11-01"
{"data":[{"id":"3b1d...","title":"Practice","start":"2026-10-20 18:00:00","end":"2026-10-20 19:30:00",
"allDay":false,"color":"#3B82F6","extendedProps":{"calendar_id":"8f0c...","description":"","location":"Gym"}}]}
POST /api/v1/events
Adds an event. Send a JSON object (Content-Type: application/json):
calendar_id(required): fromGET /api/v1/calendarsstart_at(required) andend_at: local times, see Timestitle,description,location: textall_day:trueorfalsetimezone: canonical IANA event zone; defaults to the calendar zonetz: legacy client zone, retained for compatibility
The answer is 201 Created with the new event in the same shape as above. Events added with a key are recorded as made by the organization’s owner. Email reminders are set by each person in the app, not through the API.
curl -X POST -H "Authorization: Bearer ec_..." -H "Content-Type: application/json" \
-d '{"calendar_id":"8f0c...","title":"Practice","start_at":"2026-10-20T18:00","end_at":"2026-10-20T19:30","location":"Gym"}' \
https://eventcalendar.tech/api/v1/events
Errors
400: the request is not valid (a missing or impossible time, an unknowncalendar_id, a list where text belongs); the message says why.401: no key was sent (or a change was sent without one).403: the key is unknown or revoked, or its organization is not on the Enterprise plan.
Questions: info@weldonpc.com.