REST API

A JSON API for calendars, events, feeds and subscriptions. Authenticate every request with a cs_live_* key.

Authentication

curl
curl https://calsync.cc/api/v1/me \
  -H "Authorization: Bearer cs_live_YOUR_KEY_HERE"

Create keys in API Keys (sign-in required). Keys are hashed at rest; the full secret is shown exactly once. Personal keys bill against your free plan, org-scoped keys against the organization's plan.

Endpoints

MethodPathDescription
GET/api/v1/meAuthenticated caller, plan and usage
GET/api/v1/calendarsList accessible calendars
POST/api/v1/calendarsCreate a calendar (personal key)
GET/api/v1/calendars/:idGet a calendar
PATCH/api/v1/calendars/:idUpdate a calendar
DELETE/api/v1/calendars/:idDelete a calendar and events
GET/api/v1/events?calendarId=List events on a calendar
POST/api/v1/eventsCreate an event
GET/api/v1/events/:idGet an event
PATCH/api/v1/events/:idUpdate an event
DELETE/api/v1/events/:idDelete an event
GET/api/v1/feeds/:slugFeed info + ICS URL for a calendar
GET/api/v1/subscriptionsSubscriber counts

Example: create a calendar

Node.js / fetch
const res = await fetch("https://calsync.cc/api/v1/calendars", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    Authorization: "Bearer cs_live_YOUR_KEY_HERE",
  },
  body: JSON.stringify({ title: "Tour dates", slug: "tour-2026" }),
});
const { calendar } = await res.json(); // 201 Created

Errors & limits

401

UNAUTHORIZED

Missing or invalid API key

403

ORGANIZATION_INACTIVE

The org that owns the key is past due

403

SCOPE_FORBIDDEN

The key lacks the required scope

402

PLAN_LIMIT_REACHED

Monthly included requests exhausted (Free / soft cap)

429

RATE_LIMIT

Too many requests — check Retry-After

Successful responses include X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Plan headers so you can monitor usage programmatically.