Build on HykeCal
A plain HTTP API — no SDK required. Public endpoints are CORS-open, so you can call them straight from browser JS in any project. A typed npm client exists for convenience, not as a requirement.
Public endpoints
No auth. Safe to call from browser code. Rate-limited per IP — booking creation: 5/hour, slot lookups: 60 per 10 minutes. A 429means back off, not that something's broken.
GET
/api/v1/event-typesActive event types.GET
/api/v1/event-types/:slug/slots?from=&to=Available UTC instants in a range (max 31 days).POST
/api/v1/bookingsCreate a booking.DELETE
/api/v1/bookings/:id?token=Cancel your own booking.Owner-authenticated endpoints
Session cookie or Authorization: Bearer <HYKECAL_API_KEY>. Server-to-server only — never expose your API key in browser JS.
GET/POST
/api/v1/admin/event-typesList / create event types.PATCH/DELETE
/api/v1/admin/event-types/:idUpdate / delete.GET
/api/v1/admin/availabilityWeekly rules + date overrides.PUT
/api/v1/admin/availability/weeklyReplace the weekly grid.GET/DELETE
/api/v1/admin/bookings[/:id]List / owner-cancel.Example: fetch available slots
hykecal-client
import { createHykeCalClient } from "hykecal-client";
const hykecal = createHykeCalClient({
baseUrl: "https://hykecal.vercel.app",
});
const slots = await hykecal.getSlots(
"15-min-call",
new Date(),
new Date(Date.now() + 14 * 864e5),
);Plain fetch
const res = await fetch(
"https://hykecal.vercel.app/api/v1" +
"/event-types/15-min-call/slots" +
"?from=2026-09-01T00:00:00Z" +
"&to=2026-09-14T00:00:00Z"
);
const { slots } = await res.json();Example: create a booking
curl -X POST https://hykecal.vercel.app/api/v1/bookings \
-H "Content-Type: application/json" \
-d '{
"eventTypeSlug": "15-min-call",
"start": "2026-09-01T14:00:00.000Z",
"name": "Ada Lovelace",
"email": "ada@example.com"
}'
# -> 201 { "id": "...", "cancelUrl": "..." }
# -> 409 if that slot's gone by the time this arrivesFull reference and error handling: see the hykecal-client README or the docs.