Skip to main content
POST
Create a follow-up
where is the place, match what counts as arrived, within how long to wait, all explained in Follow-ups. Durations are strings such as 15m, 2h, 1h30m, 10 minutes, or a number of seconds. The answer is the follow-up as waiting, with its id. Nothing calls you back: poll Get a follow-up until status is done. For kind: time, leave match and check_every out. Creating twice makes two waits, so send an Idempotency-Key to make a retry safe. See Idempotency. You can have 25 follow-ups waiting at once; one more is refused with a sentence that says so. Cancel one to make room. MCP tool: create_followup.

Authorizations

Authorization
string
header
required

API key with the vd_sk_ prefix, as Authorization: Bearer vd_sk_.... Create keys in Settings → API Keys.

Headers

Idempotency-Key
string

Any unique string (such as your order id). Resending the same request with the same key within 24 hours returns the first answer (with Idempotent-Replayed: true) and does nothing twice; the same key with a different request is a 422 idempotency_key_reused.

Required string length: 1 - 255

Body

application/json
what
string
required

What you are waiting for, in plain words: shown to the user and read back with the outcome, e.g. 'the sign-in code from greenhouse.io'.

Required string length: 1 - 500
where
WhereRequest · object
required
within
required

How long to wait (or when to check back): '90s', '15m', '2h', '1d', '1h30m', '10 minutes', or a number of seconds. At most 72 hours.

Example:

"15m"

match
MatchRequest · object | null

Not with kind time.

check_every

How often to look, '90s', '15m', '2h', '1d', '1h30m', '10 minutes', or a number of seconds; at least 30 seconds. Default: what suits the place (an inbox is told on arrival; a web page is read every few minutes). Not for time.

Example:

"15m"

Response

The follow-up, waiting. Poll GET /v1/followups/{followup_id} for its outcome.

id
string
required
agent
enum<string>
required

Who is waiting: api for one made here; igris, session or brain for one an in-app agent made.

Available options:
igris,
session,
brain,
api
what
string
required
where
FollowupWhere · object
required
status
enum<string>
required

waiting: timed and checked. done: ended (outcome says how). cancelled. failed: could not be checked (note says why).

Available options:
waiting,
done,
cancelled,
failed
conversation_id
string
default:""

The session or workflow of an in-app agent; empty here.

match
FollowupMatch · object
outcome
enum<string> | null

found: it arrived (found holds it). time_up: a check-back's time came. expired: nothing came in time.

Available options:
found,
time_up,
expired
found
FollowupFound · object | null

The thing that arrived — only it, never the rest of the mailbox.

note
string | null

One plain line on how it ended.

since
string<date-time> | null

Only things that arrived after this count.

next_check_at
string<date-time> | null
deadline
string<date-time> | null
checks
integer
default:0

How many times the place was looked in.

created_at
string<date-time> | null
ended_at
string<date-time> | null