Web - Scheduling

Free Webhook Schedule API Endpoint

Send one callback later or repeat it on a fixed interval. The job survives your process and can be read, waited on or cancelled through its bearer URL.

  • No API key
  • One or recurring
  • Wait up to 25s
  • SSRF-guarded

Schedule and check

POST/webhook_schedule

GET/webhook_schedule/{schedule_id}

https://aisenseapi.com/services/v1

Schedule a delivery

curl -X POST https://aisenseapi.com/services/v1/webhook_schedule \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/hook", "delay_seconds": 1200, "payload": {"job": 42}}'
{
  "ok": true,
  "schedule_id": "b4ee9fc4-e939-47d7-b522-1a68e553c546",
  "status": "scheduled",
  "fire_at_timestamp": 1787181214,
  "fire_at_datetime": "2026-08-19T23:13:34+00:00",
  "result_url": "https://aisenseapi.com/services/v1/webhook_schedule/b4ee9fc4-e939-47d7-b522-1a68e553c546",
  "wait_url": "https://aisenseapi.com/services/v1/webhook_schedule/b4ee9fc4-e939-47d7-b522-1a68e553c546/wait/25",
  "expire_timestamp": 1787267614,
  "expire_datetime": "2026-08-20T23:13:34+00:00"
}

Keep the schedule_id. It is the only route back to the job, and there is no listing call that would find it for you. The result_url field saves you building that path by hand.

Give it a delay or a fire time

Send delay_seconds to count forward from now, or fire_at as a Unix timestamp. Pick one.

FieldTypeDescription
urlstringA public HTTP or HTTPS URL on port 80 or 443.
delay_secondsintegerSeconds to the first delivery.
fire_atintegerUnix time of the first delivery.
payloadobjectThe JSON body sent to the target. Maximum 32 KB.
everyintegerOptional repeat interval from 60 to 86400 seconds.

The first fire time must sit between 5 seconds and 24 hours from creation. A recurring job must start before its fixed 24-hour end.

The resolution is one minute. Delivery runs once a minute, so a due job fires on the next worker pass. Schedule in minutes and treat finer timing as approximate.

curl -X POST https://aisenseapi.com/services/v1/webhook_schedule \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/hook", "delay_seconds": 2}'

{"error":"fire_at must be between 5 seconds and 24 hours from now."}

A delay_seconds of 90000 draws the identical error, because it reaches past the 24-hour ceiling.

Repeat on a fixed grid

curl -X POST https://aisenseapi.com/services/v1/webhook_schedule \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com/health","delay_seconds":60,"every":300,"payload":{"probe":"agent-7"}}'

The interval stays on its original grid. If the worker misses a slot, that slot is counted in missed and skipped instead of being sent late. fires counts completed deliveries. Three consecutive transport failures stop a recurring job. A successful response clears the failure streak.

Read, wait or cancel

curl https://aisenseapi.com/services/v1/webhook_schedule/e12681a8-f24f-4f24-9e34-7bbb0a9f9a77/wait/25

Add /wait/0 through /wait/25. The response adds waited_seconds and wait_reason, and returns early when the state changes or becomes terminal.

{
  "ok": true,
  "schedule_id": "e12681a8-f24f-4f24-9e34-7bbb0a9f9a77",
  "status": "scheduled",
  "url": "https://example.com/hook",
  "created_at_timestamp": 1787180038,
  "created_at_datetime": "2026-08-19T22:53:58+00:00",
  "fire_at_timestamp": 1787180048,
  "fire_at_datetime": "2026-08-19T22:54:08+00:00",
  "attempts": 0
}

Cancel a non-terminal job with:

curl -X DELETE https://aisenseapi.com/services/v1/webhook_schedule/{schedule_id}

An unknown or expired identifier answers with HTTP 404. Cancelling a terminal job returns HTTP 409.

Status values

A job may report scheduled or retry while it is active. A one-shot job ends as fired, failed or cancelled. A recurring job normally ends as completed after its 24-hour window. It may also become failed, blocked or cancelled.

Fired means the target answered. It does not mean the target returned 2xx. The HTTP response is recorded in http_status, so a target that replies 500 is still a fired one-shot job.

{
  "status": "fired",
  "attempts": 1,
  "http_status": 405,
  "response_excerpt": "<!doctype html><html lang=\"en\"><head><title>Example Domain</title>...",
  "fired_at_timestamp": 1787180101,
  "fired_at_datetime": "2026-08-19T22:55:01+00:00"
}

A one-shot transport failure is retried once. A recurring job stops after three consecutive transport failures. Results remain readable until the reported expiry.

How the free webhook schedule API endpoint delivers

  1. You post the job

    The target and the payload are stored, and a schedule_id comes back immediately. Your own process is free to exit.

  2. The clock runs on our side

    Nothing is held open. No connection, no polling loop and no timer of yours has to survive the wait.

  3. The request goes out

    At the fire time we send the payload to your URL and record what came back, including the HTTP status and an excerpt of the response body.

  4. You read the outcome

    A GET on result_url tells you which of the two end states the job reached, and how many attempts it took.

This is the timer an autonomous process does not otherwise have. A script that wants something to happen in twenty minutes usually has to stay alive for twenty minutes. Here it does not.

What it will not call

Private, loopback, link-local and reserved addresses are refused. The check runs at creation and again at delivery time, with the connection pinned to the address that was checked, so a hostname cannot pass validation and then quietly repoint at an internal service.

curl -X POST https://aisenseapi.com/services/v1/webhook_schedule \
  -H "Content-Type: application/json" \
  -d '{"url": "http://127.0.0.1/hook", "delay_seconds": 60}'

{"error":"Target address is private or reserved."}

Redirects are never followed, and credentials in the URL are rejected outright. These guards are what keep a public scheduler from becoming a tool for reaching inside private networks.

Common uses

Most callers reach the free webhook schedule API endpoint from a pipeline rather than a browser. Four patterns come up again and again.

Agent wait states

Let an autonomous process pause and be woken by a callback instead of holding a connection.

Timeouts and reminders

Schedule a follow-up that fires unless something cancels it first.

Retry after a delay

Re-trigger a step a few minutes after a transient failure.

Deferred notifications

Send a message at a specific later time without running a scheduler yourself.

Privacy and limits

The target and payload are stored while the job is active. Keep secrets out of the payload. The schedule ID is a bearer secret and there is no list operation.

The target URL is capped at 2048 characters and the JSON payload at 32 KB. Each creator address may cause at most 1440 delivery attempts per 24 hours. The public service also shares one limit of 5000 incoming requests per IP per 24 hours.

Point the job at a target you control. Redirects, URL credentials and private or reserved targets are refused.