Skip to main content
An interaction is a run asking a person a question and waiting for the answer. The agent raises one, the run’s status goes to waiting, and nothing else happens until somebody responds — through the app, or through this API. Two endpoints matter: list what is pending, and answer it.
An empty inbox, which is the normal state: nothing is waiting on this account right now.

Where they come from

An agent raises one by calling splox_ui, the interactive-UI tool on the system:splox tool server. What it draws decides the interaction’s type: The API also carries approval and confirmation types, which are the yes-or-no shapes of the same idea. An agent whose tools do not include system:splox cannot ask anything, and its runs never wait.

The object

string
int_...
string
The run that is waiting.
string
approval, text, choice or confirmation.
string
pending, answered, expired or cancelled.
string
The question, as the agent wrote it.
object
Type-specific data safe to render: the options of a choice, the fields of a form.
object | null
The answer once given, with submitted_at merged into it. Null while pending.
string | null
When it stops being answerable, if it has a deadline.
string
Timestamps; answered_at is null until somebody answers.

Finding one

List, newest first, filtered by status and run_id, cursor-paged like every other collection:
Or read one by id with GET /v2/interactions/{interaction_id}. If you are already watching the event stream, you do not have to poll: an interaction.created event arrives the moment a run stops to ask, and interaction.answered when it is resolved.

Answering

The body is the response variant, and it must match the interaction’s type: The answer is applied atomically and the answered interaction comes back with status: "answered", answered_at set, and response carrying what you sent plus submitted_at. The waiting run picks the answer up and continues. Idempotency-Key is required here, not optional — answering is a decision, and a retried request must not be able to answer twice.

When it goes wrong

An id that is not yours, or not an id at all, is a 404 before anything else is looked at — including a missing idempotency key:
Who may answer: the account the interaction belongs to, or the account being billed for the run. Anybody else gets the 404.

In the SDKs

All three generate the idempotency key for you and reuse it on retry.