IntoCal documentation
IntoCal is booking and scheduling infrastructure for humans, developers and AI agents. Embed a booking page in one line, call the REST API from any language, or let an agent book meetings over MCP.
Quickstart
Pick the integration that matches your stack.
Authentication
Get a key in 30 seconds at intocal.com/start — sign up, click Generate, copy the code. Secret keys (sk_live_…) are server-side only. Public keys (pk_live_…) are scoped to a single host and safe in the browser.
curl "https://api.intocal.com/v1/event-types" \
-H "Authorization: Bearer sk_live_..."All timestamps are ISO-8601 UTC. Every write endpoint accepts an Idempotency-Key header.
TypeScript SDK
@intocal/sdk works in Node, Bun, Deno, Cloudflare Workers and the browser.
npm install @intocal/sdkimport { IntoCal } from "@intocal/sdk";
const cal = new IntoCal({ apiKey: process.env.INTOCAL_API_KEY! });
const types = await cal.eventTypes.list({ host_id: "host_uuid" });
const slots = await cal.slots.query({
event_type_id: types.data[0].id,
host_id: "host_uuid",
from: "2026-10-01T00:00:00Z",
to: "2026-10-08T00:00:00Z",
timezone: "Europe/Tallinn",
});
const booking = await cal.bookings.create({
event_type_id: types.data[0].id,
host_id: "host_uuid",
slot_start: slots.data.slots[0].start,
timezone: "Europe/Tallinn",
invitee: { name: "Jane Doe", email: "jane@example.com" },
});React components
@intocal/react ships <InlineWidget /> and <PopupButton />. The iframe auto-resizes via postMessage. Works with Next.js, Remix, Vite and CRA.
npm install @intocal/reactimport { InlineWidget, PopupButton } from "@intocal/react";
<InlineWidget
user="jane"
eventType="intro-30"
prefill={{ name: "Acme", email: "lead@acme.com" }}
onBookingCreated={(b) => console.log("booked", b.id)}
/>
<PopupButton user="jane" eventType="intro-30">Book a call</PopupButton>HTML embed
No framework needed — works on WordPress, Webflow, Shopify, Squarespace, Framer or plain HTML.
<script src="https://intocal.com/embed.js" async></script>
<div data-intocal="jane/intro-30"></div>Your public booking page also works standalone at intocal.com/book/jane/intro-30, and your profile lives at intocal.com/u/jane.
MCP for AI agents
IntoCal hosts a remote Model Context Protocol server per user over Streamable HTTP — nothing to install. Paste your URL into Claude, ChatGPT, Cursor, Codex or Windsurf.
claude mcp add --transport http intocal https://api.intocal.com/mcp/YOUR-USERNAME{
"mcpServers": {
"intocal": { "url": "https://api.intocal.com/mcp/YOUR-USERNAME" }
}
}Prefer a local stdio server? Install @intocal/mcp and set INTOCAL_API_KEY. Full details on the MCP page.
REST API
Base URL https://api.intocal.com/v1. Endpoints cover event types, slot queries, bookings (create, reschedule, cancel), hosts and webhooks.
curl -X POST "https://api.intocal.com/v1/bookings" \
-H "Authorization: Bearer sk_live_..." \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"event_type_id":"evt_123","host_id":"host_123","slot_start":"2026-10-02T09:00:00Z","timezone":"Europe/Tallinn","invitee":{"name":"Jane","email":"jane@example.com"}}'Webhooks
Subscribe to booking.created, booking.canceled and booking.rescheduled. Payloads are signed with X-IntoCal-Signature: sha256=<hmac>.
await cal.webhooks.create({
url: "https://your-app.com/webhooks/intocal",
events: ["booking.created", "booking.canceled", "booking.rescheduled"],
provider: "generic",
});Resources
FAQ
What is the IntoCal API base URL?
All REST endpoints live under https://api.intocal.com/v1. Authenticate with an Authorization: Bearer sk_live_… header.
How do I get an API key?
Go to intocal.com/start — sign up free (no card), click Generate API key, and copy the ready-to-run code with your key already filled in. Secret keys start with sk_live_ and must stay server-side; public keys start with pk_live_ and are scoped to a single host for browser use.
Which packages does IntoCal publish on npm?
@intocal/sdk (typed TypeScript client), @intocal/react (InlineWidget and PopupButton) and @intocal/mcp (Model Context Protocol server for AI agents).
Do I need a backend to embed a booking page?
No. The embed script and the React components render a hosted booking iframe, so no server code is required. Use the SDK only when you want to query slots or create bookings yourself.
Are write requests safe to retry?
Yes. Every write endpoint accepts an Idempotency-Key header, so retries never create duplicate bookings.
Start building
Free tier, no credit card. Get an API key in under a minute.
