Introduction
TimeTriggers is a service that schedules HTTP requests to fire later. Think of it as a time-delayed HTTP proxy: you send us a request, we hold it, and we send it to your target at the time you specify — once, or on a recurring cron schedule.
The problem it solves
Scheduling tasks in a distributed system is hard. You need persistent storage, a reliable scheduler, retry logic, and a way to see what happened. TimeTriggers gives you:
- Scheduling in one API call. We store your request and fire it when it's due.
- A record of every attempt. We store each attempt's response status and the first 10 KB of the response body (or the error), and you can inspect them in the dashboard.
- Retries when you want them. Automatic retries with fixed or exponential backoff are opt-in: tag the trigger and give that tag a tag policy with retries, via the API or the dashboard. Without one, a failed attempt is final and is marked as a dead letter.
Good to know
- An attempt succeeds only when your target answers with a
2xxstatus. Any other status, a network error or a timeout is a failure. - Trigger status and results are visible in the dashboard only; the API doesn't return them. TimeTriggers doesn't send failure alerts.
Use cases
- Sending a reminder email 24 hours before an appointment
- Triggering a webhook at a specific business hour
- Scheduling follow-up actions after a grace period
- Delaying notifications to optimal delivery times
- Running a recurring job on a cron schedule (e.g. weekday morning digest, hourly health pings) — see Recurring triggers
How it works
- Send an HTTP request to
https://api.timetriggers.io/schedulewith the method, headers and body you want your target to receive. - Add
ttr-headers to say where and when:ttr-urlheader is the full target URL (query string included), andttr-scheduled-atheader is an ISO 8601 date, an expression likenow | add 1h, or acron(...)schedule. Leavettr-scheduled-atheader out to fire right away. Authenticate withttr-api-keyheader. - We store your request and answer with a
triggerId. - When the time comes, we send the request to your target.
The method you call /schedule with is the method we fire: send a PUT and we fire a PUT; a POST with a JSON body is fired with the same body and Content-Type. Your headers are forwarded too, except ttr- headers and connection-level headers such as Host and Connection. See Schedule a trigger for the details.
If ttr-scheduled-atheader is an absolute time that is already in the past, the trigger is recorded as skipped and never fires — the API still answers 200. Send ttr-run-missedheader set to true to fire it right away instead. Times based on now, such as now | add 5m, are never skipped. See Past-dated triggers.
Quickstart
1. Get an API key
API keys are created in the dashboard:
- Sign in with your email address. We email you a 6-digit code — there's no password, and your first sign-in creates your account.
- You land on the API Keys page. Click Create key, optionally give the key a name, then click Create.
- Click Copy next to the new key. Keys start with
ttr_.
New accounts start on the Free plan, with 500 /schedule calls per month (see Quota). More in Dashboard → API keys.
2. Schedule a request
Replace the API key placeholder with your key and run:
curl https://api.timetriggers.io/schedule \-X POST \-H "ttr-api-key: YOUR_API_KEY" \-H "ttr-url: https://httpbin.org/post" \-H "ttr-scheduled-at: now | add 1m" \-H "Content-Type: application/json" \-d '{"hello":"world"}'
Call the API from your backend, never from a web page: your API key is a secret, and the API doesn't allow cross-origin requests from web pages, so browsers block the request. See Call the API from your server.
You get back JSON like this:
{"triggerId": "3f2b8c1e-7d4a-4e5b-9c2f-1a2b3c4d5e6f","scheduledAt": "2030-01-01T09:00:00.000Z","operation": "schedule","kind": "job","monthQuotaRemaining": 499}
Your scheduledAt will differ: it's the resolved fire time, which for this example is one minute after your request, in whole seconds. See Response for every field.
Keep the triggerId, or set your own key with ttr-custom-keyheader: that's how you edit or cancel the trigger later.
3. Check the result
The request fires at its scheduled time, usually within a couple of seconds of it (How triggers fire). Open Triggers in the dashboard to see the trigger's status and, once it has fired, the status code and body your target returned.
Next steps
- Schedule a trigger — every header, date expressions, custom keys, tags and titles
- Recurring triggers — cron schedules and time zones
- Tag policies — retries, throughput, concurrency and timeouts
- How triggers fire — statuses, success and failure, delivery guarantees
- Dashboard — API keys, trigger history and replays