DocsCalendar Reference
Documentation

Calendar API

List, create, and delete Google Calendar events on a connected account, authenticated with your personal API key.

Overview

Works on any Google account connected from the dashboard. Base URL: https://api.reinterface.com/api/v1. All responses are JSON. Last updated: 2026-08-08.

Every event endpoint accepts an optional calendar_id (from GET /calendar/calendars); omit it to use the account's primary calendar.

Authentication

Requests carry a short-lived access token, not your API key. POST your personal key to /api/v1/token once, then send the token it returns in the Authorization header for the next hour. Find your key under Dashboard → Settings → API keys. connection_id is optional: with one connected account every endpoint defaults to it; with several, pick one via GET /google/accounts.

Exchange your key for a token
curl -X POST https://api.reinterface.com/api/v1/token \
  -H "x-api-key: <YOUR_API_KEY>"

# {"access_token":"eyJ...","token_type":"Bearer","expires_in":3600}
Auth header
-H "Authorization: Bearer <ACCESS_TOKEN>"

List calendars

GET/api/v1/calendar/calendars

List the account's calendars

Request
curl https://api.reinterface.com/api/v1/calendar/calendars \
  -H "Authorization: Bearer <ACCESS_TOKEN>"
Response
{
  "calendars": [
    {
      "id": "user@gmail.com",
      "summary": "user@gmail.com",
      "primary": true,
      "accessRole": "owner",
      "timeZone": "Europe/Berlin",
      "color": "#9fe1e7"
    }
  ]
}

List events

GET/api/v1/calendar/events

List events, soonest first

Query params, all optional: max_results (default 10, max 50), time_min (RFC3339 lower bound, e.g. only upcoming events), calendar_id, and connection_id.

Request
curl "https://api.reinterface.com/api/v1/calendar/events?max_results=10&time_min=2026-07-17T00:00:00Z" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"
Response
{
  "events": [
    {
      "id": "abc123def456",
      "summary": "Team sync",
      "description": "Weekly catch-up",
      "location": "Meet",
      "start": "2026-07-20T10:00:00+02:00",
      "end": "2026-07-20T10:30:00+02:00",
      "htmlLink": "https://www.google.com/calendar/event?eid=..."
    }
  ]
}

Create an event

POST/api/v1/calendar/events

Create an event

Required: summary, start, end (RFC3339). Optional: description, location, timeZone, calendar_id, connection_id.

Request
curl -X POST https://api.reinterface.com/api/v1/calendar/events \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "content-type: application/json" \
  -d '{
    "summary": "Team sync",
    "start": "2026-07-20T10:00:00Z",
    "end": "2026-07-20T10:30:00Z",
    "timeZone": "UTC"
  }'
Response
{
  "id": "abc123def456",
  "summary": "Team sync",
  "status": "confirmed",
  "htmlLink": "https://www.google.com/calendar/event?eid=..."
}

Delete an event

DELETE/api/v1/calendar/events/{id}

Delete an event (idempotent)

Request
curl -X DELETE "https://api.reinterface.com/api/v1/calendar/events/abc123def456" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"
Response
{
  "success": true,
  "id": "abc123def456",
  "status": "deleted"
}
Deletion is idempotent: deleting an event that is already gone still returns 200, because the intent (the event should not exist) is satisfied either way.

Errors

Errors return { "success": false, "error": { "code", "message" } }.

StatusCodeMeaning
401unauthorizedMissing, invalid or expired access token
400invalid_requestMissing required fields
403missing_scopeAccount lacks a Calendar permission, reconnect it
404not_foundconnection_id does not exist or is not yours
404google_account_not_connectedNo connected Google account
502calendar_event_failedGoogle Calendar rejected the request

Endpoint summary

MethodPathPurpose
GET/api/v1/calendar/calendarsList the account's calendars
GET/api/v1/calendar/eventsList calendar events
POST/api/v1/calendar/eventsCreate a calendar event
DELETE/api/v1/calendar/events/{id}Delete a calendar event