Docs
← chronapilot.com v 2026-05-12
ChronaPilot API Platform · Docs

Build on the operating
layer of time.

One API for calendars, voice intent, traffic-aware ETAs, weather-adjusted departure timing, and webhook orchestration. Drop in ChronaPilot and ship scheduling-heavy features in days, not quarters.

v 2026-05-12 · 14.2M API calls / week · 99.95% uptime · P99 < 120ms
curl
Node.js
Python
Your first call
curl https://api.chronapilot.com/v1/events \
  -H "Authorization: Bearer sk_test_..." \
  -H "Chronapilot-Version: 2026-05-20" \
  -d '{
    "title": "Lunch with Sarah",
    "start_time": "2026-05-22T12:00:00-07:00",
    "location": { "name": "Buena Vista Cafe" }
  }'
import ChronaPilot from '@chronapilot/node';
const cp = new ChronaPilot('sk_test_...');

const event = await cp.events.create({
  title: 'Lunch with Sarah',
  start_time: '2026-05-22T12:00:00-07:00',
  location: { name: 'Buena Vista Cafe' },
});

// Subscribe to live ETA updates
const s = await cp.events.subscribe(event.id);
s.on('departure.updated', d => console.log(d.earliest_departure));
import chronapilot
chronapilot.api_key = 'sk_test_...'

event = chronapilot.Event.create(
    title='Lunch with Sarah',
    start_time='2026-05-22T12:00:00-07:00',
    location={'name': 'Buena Vista Cafe'},
)

# Subscribe to live ETA updates
for ev in chronapilot.Event.subscribe(event.id):
    print(ev.earliest_departure)
curl
Node.js
Python
Go
Ruby
PHP
Create a calendar event with live departure monitoring
curl https://api.chronapilot.com/v1/events \
  -H "Authorization: Bearer sk_test_4eC39HqLyjWDarjtT1zdp7dc" \
  -H "Chronapilot-Version: 2026-05-20" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "title": "Lunch with Sarah",
    "start_time": "2026-05-22T12:00:00-07:00",
    "end_time": "2026-05-22T13:00:00-07:00",
    "timezone": "America/Los_Angeles",
    "location": {
      "name": "Buena Vista Cafe",
      "address": "2765 Hyde St, San Francisco, CA 94109"
    }
  }'
import ChronaPilot from '@chronapilot/node';
const cp = new ChronaPilot('sk_test_4eC39HqLyjWDarjtT1zdp7dc');

const event = await cp.events.create({
  title: 'Lunch with Sarah',
  start_time: '2026-05-22T12:00:00-07:00',
  end_time: '2026-05-22T13:00:00-07:00',
  timezone: 'America/Los_Angeles',
  location: {
    name: 'Buena Vista Cafe',
    address: '2765 Hyde St, San Francisco, CA 94109'
  }
});

// Subscribe to ETA updates
const stream = await cp.events.subscribe(event.id);
stream.on('departure.updated', d => console.log(d.earliest_departure));
import chronapilot
chronapilot.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc'

event = chronapilot.Event.create(
    title='Lunch with Sarah',
    start_time='2026-05-22T12:00:00-07:00',
    end_time='2026-05-22T13:00:00-07:00',
    timezone='America/Los_Angeles',
    location={
        'name': 'Buena Vista Cafe',
        'address': '2765 Hyde St, San Francisco, CA 94109'
    }
)
import "github.com/chronapilot/chronapilot-go"
cp := chronapilot.NewClient("sk_test_4eC39HqLyjWDarjtT1zdp7dc")

event, err := cp.Events.Create(ctx, &chronapilot.EventParams{
    Title:     chronapilot.String("Lunch with Sarah"),
    StartTime: chronapilot.String("2026-05-22T12:00:00-07:00"),
    EndTime:   chronapilot.String("2026-05-22T13:00:00-07:00"),
    Timezone:  chronapilot.String("America/Los_Angeles"),
    Location: &chronapilot.LocationParams{
        Name:    chronapilot.String("Buena Vista Cafe"),
        Address: chronapilot.String("2765 Hyde St, San Francisco, CA 94109"),
    },
})
require 'chronapilot'
Chronapilot.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc'

event = Chronapilot::Event.create(
  title: 'Lunch with Sarah',
  start_time: '2026-05-22T12:00:00-07:00',
  end_time: '2026-05-22T13:00:00-07:00',
  timezone: 'America/Los_Angeles'
)
<?php
$cp = new \Chronapilot\Client('sk_test_4eC39HqLyjWDarjtT1zdp7dc');
$event = $cp->events->create([
  'title' => 'Lunch with Sarah',
  'start_time' => '2026-05-22T12:00:00-07:00',
  'end_time' => '2026-05-22T13:00:00-07:00',
  'timezone' => 'America/Los_Angeles',
]);
JSON
Response · 201 Created · req_1A2b3C4d5E6f
{
  "id": "evt_1abc2def3ghi",
  "object": "event",
  "title": "Lunch with Sarah",
  "start_time": "2026-05-22T12:00:00-07:00",
  "end_time": "2026-05-22T13:00:00-07:00",
  "location": {
    "name": "Buena Vista Cafe",
    "address": "2765 Hyde St, San Francisco, CA 94109",
    "lat": 37.8064,
    "lng": -122.4203
  },
  "monitoring": {
    "status": "monitoring",
    "earliest_departure": "2026-05-22T11:32:00-07:00",
    "latest_departure": "2026-05-22T11:42:00-07:00",
    "traffic_level": "light",
    "confidence": "high"
  },
  "created_at": "2026-05-20T18:14:22Z",
  "livemode": false,
  "request_id": "req_1A2b3C4d5E6f"
}
Quickstart

First call in 60 seconds

Grab a sandbox key, hit your first endpoint, and watch a live departure window update — under a minute.

Begin quickstart →
Concepts

How the platform works

Authentication, Connect, idempotency, webhooks, versioning, errors — the architectural primitives every integration uses.

Read concepts →
Reference

Every endpoint, in depth

Calendars, Events, Free/Busy, Departure intelligence, Voice realtime — fully documented with code in six languages.

API reference →
Production-grade primitives

Built on what we already ship.

Every primitive on this site is grounded in code running in production at cal.chronapilot.com. The developer API is a clean surface over the same engine that runs the consumer app.

Universal calendar layer

One API, three providers. Google, Microsoft Graph and iCloud OAuth, push notification channels, delta sync and webhook renewal handled for you.

Traffic-aware departures

Departure windows recomputed every minute against live traffic and weather. departure.updated webhooks fire when the window shifts.

Voice realtime, pre-bound to a calendar

WebSocket endpoint backed by gpt-realtime. Tools are scoped to the user's calendar so the AI can read, propose, confirm, and execute.

Webhook reliability

HMAC-signed, 24 retries over 72 hours, replay from the dashboard. Chronapilot-Signature verification helpers in every SDK.

Idempotency by default

Every mutating endpoint takes an Idempotency-Key. Retries within 24h return the original response — no duplicate state.

Sandbox parity

Identical surface at api-sandbox.chronapilot.com. Synthetic users and calendars pre-seeded. Test keys never hit prod.