Quickstart
Five minutes from curl to a live delivery. You'll mint an API key,
schedule a one-shot webhook, and watch Scheduleit fire it.
1. Get a project-scoped API key
- Sign in at getscheduleit.app.
- Open a project (or create one).
- Click Issue project-scoped key and copy the key — it's shown
once. It looks like
sk_followed by 64 hex characters.
Event operations need a project-scoped key (the button above issues exactly that). The project is taken from the key, so you never pass a project id in requests. Treat the key as a secret — never commit or log it.
2. Set up somewhere to receive the webhook
For a throwaway target, open webhook.site and copy your unique URL. Any endpoint that accepts a POST works; you just want to see the delivery arrive.
3. Schedule your first event
Schedule a one-shot webhook a minute into the future. Replace the key and the target URL:
curl -sS -X POST https://getscheduleit.app/api/events \
-H "Authorization: Bearer sk_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"schedule": { "kind": "oneshot", "fireAt": "2026-07-04T12:00:00Z" },
"target": { "channel": "webhook", "url": "https://webhook.site/YOUR-ID" },
"payloadBase64": "eyJoZWxsbyI6IndvcmxkIn0="
}'
schedule— when to fire. Here, once atfireAt(an ISO-8601 UTC time,Zsuffix required). See Scheduling for intervals and cron.target— where to deliver. Awebhooktarget needs aurl; see the Webhook channel. For email, see the Email channel.payloadBase64(optional) — the bytes to deliver as the request body, base64-encoded. Above is{"hello":"world"}; generate your own withprintf '{"hello":"world"}' | base64. Up to 1 MB decoded.idempotencyKey(optional) — a string (≤200 chars); a repeat POST with the same key in the same project returns the existing event instead of creating a duplicate.
The response is 201 Created with the stored event — note state is
scheduled and nextFireAt is when it will fire:
{
"id": "0f9c2b6e-1a3d-4c7e-9b2a-8d5e1f0a4c33",
"state": "scheduled",
"schedule": { "kind": "oneshot", "fireAt": "2026-07-04T12:00:00.000Z" },
"target": { "channel": "webhook", "url": "https://webhook.site/YOUR-ID" },
"nextFireAt": "2026-07-04T12:00:00.000Z",
"attempts": 0,
"lastError": null
}
A
fireAtin the past isn't an error — the event fires on the next poll, effectively immediately. Handy for testing.
4. Watch it fire
Grab the id from the response. Fetch the event (the header is elided
here and below — every request needs it):
curl -sS https://getscheduleit.app/api/events/0f9c2b6e-...
After the fire time, state moves to delivered (or dead_letter if
every attempt failed). For the per-attempt history — status codes,
timestamps, retries — read the deliveries:
curl -sS https://getscheduleit.app/api/events/0f9c2b6e-.../deliveries
To call off a still-pending event:
curl -sS -X DELETE https://getscheduleit.app/api/events/0f9c2b6e-...
Next steps
- Scheduling — one-shot, interval, and cron.
- Webhook channel — verify HMAC signatures, retries, dead-letter.
- Email channel — verify an address, then deliver to it.
- MCP integration — drive all of this from an AI agent.
- API reference — every endpoint and schema.