Deadlines and timing
How long approval lasts, what respond_by means for get_answer, send_update and follow_up, when Simp contacts people (the recipient window), how many times it calls, and what happens at the deadline.
Every task has two clocks: the user's approval and, for every kind except call, the deadline you set with respond_by. Simp owns everything in between: when to contact each person, how, and how often. You never pick a time slot or a route.
Approval: one hour#
On the default permission mode nothing happens until the user approves the task in the Simp app. Approval lasts 1 hour from creation. A task still unapproved after that is closed as an expired approval (get_task shows cancelled with "Approval window expired.") and nobody is contacted. Create it again if the user still wants it.
On notify_only and on rights_based connections where the task fits the granted rights, there is no approval step: the task starts a couple of seconds after creation and the user is told. See Permission modes.
kind: "call": placed once approved#
A call task has no deadline. It is placed as soon as it is approved, subject to the same gates as any call (the platform switch, the user's AI minutes, destination policy and calling hours). Sending respond_by with a call is refused with invalid_respond_by.
respond_by: the deadline for an answer#
Required for get_answer, send_update and follow_up.
| Rule | Detail | Error if broken |
|---|---|---|
| Format | ISO 8601 with an offset (Z or +hh:mm). A naive timestamp is ambiguous and refused. | invalid_respond_by |
| Range | At least 1 hour and at most 14 days ahead. | invalid_respond_by |
{
"kind": "get_answer",
"objective": "Ask Anna if she can do Saturday lunch.",
"participants": [{ "name": "Anna", "phone": "+447700900123" }],
"options": ["Yes", "No", "Maybe"],
"respond_by": "2026-10-07T18:00:00+01:00"
}Pick the deadline the user actually has. Simp does not chase faster because the deadline is close, and it never contacts anyone after it.
When people are contacted: the recipient window#
Simp contacts a participant only between 08:00 and 21:00 in the participant's local time, worked out from their number. A task created at night waits for the morning. When the number does not say which time zone applies, Simp uses only the hours that are inside the window everywhere the number could be. When the country cannot be determined, or the window does not open again before respond_by, the participant is not contacted and shows as unreachable.
The window is the recipient's, not the user's: a London user asking someone in New York waits for New York's morning.
How people are reached, and how often#
Simp chooses the route for each participant under its routing policy, which is voice by default: the participant gets a phone call from the user's simp, who asks the question and records the answer. You never choose the route, and get_task shows it only after the participant has answered.
- A task makes one call attempt per participant by default, and never schedules one after
respond_by. boundaries.may_call: falseforbids phoning for the task. Under the default policy that leaves no route, so the participant isunreachableand the result says so.- Business calls (
kind: "call") keep their own retry ladder for no answer and busy lines.
At the deadline#
When respond_by passes:
Every participant who has not answered becomes expired.
The task publishes its one result, written once and never changed. Its statusisanswered(everyone answered),partial(some did),declined(they said no),no_answerorexpired(nobody answered in time). The task itself readscompletefor the first three andundeterminedfor the last two.
A webhook subscription receives task.result_ready(see Webhooks).
A task can also finish early: once every participant has answered or declined, the result is published without waiting for the deadline.
Cancelling#
cancel_task (or tasks/cancel through the tasks extension) withdraws a task that is still awaiting approval, or ends one that is running; a live call ends immediately. Confirm with the user first. A task that has published its result can no longer be cancelled.
