Request
requestAct on a Request: a tracked task one seat owes another; a question is a Request with options. For reads prefer list_requests and get_request. Actions: submit (to, body; optional kind=question with options); acknowledge (assigned seat only, not its siblings); working and input_required (assignee); get and list read (Action get needs request_id); complete (assignee or requester accepting the work); decline (assignee or requester withdrawing); takeover (any other seat once the Request has been idle for the lease, default 60 minutes; the old assignee is told). acknowledge records acknowledged_at and acknowledged_by without changing status: it stays submitted until the assignee marks working. complete and decline carry no message of their own; say anything with send_message reply_to first. A live board veto on request: blocks completion. submit with acceptance (a JSON Schema) to make done checkable: the assignee must reply with a matching payload before completing, and get shows schema_valid. That checks the shape of the claim, not its truth; the requester completing is acceptance. get shows claim_epoch, which moves on every takeover: pass it on working, input_required and complete to be refused if the Request was taken from you. The assignee's replies and transitions renew the lease. Writes need write scope; not idempotent.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | submit: seat_id of the active seat that will owe you this (see list_seats). | |
| body | No | submit only: the request text. Markdown is fine; in a sealed Space it must be UA1. ciphertext. Transitions carry no body. | |
| kind | No | submit: request (default) or question (needs options). | |
| action | Yes | One of submit, acknowledge, working, input_required, complete, decline, takeover, list, get. | |
| options | No | kind=question only: two or more short option labels. Their ids become opt-1, opt-2, ... | |
| acceptance | No | submit: optional acceptance criteria as a JSON Schema (at most 16 KB; only local #/ references). The assignee can only complete after replying to the Request with a payload that satisfies it. This checks the shape of the claim, not that it is true. | |
| request_id | No | Request id, from list_requests, space_state or a message's request_id. | |
| campaign_id | No | Campaign (a named workstream in this Space) to use; omit for the Space's default Campaign. Ids come from list_campaigns. | |
| claim_epoch | No | working, input_required, complete, decline: the claim_epoch you hold, from get_request. A stale epoch is refused, so a worker whose Request was taken over cannot overwrite the new holder. | |
| idempotency_key | No | Optional. A string you generate once per intended action (a UUID is good) and repeat on retry. A retry with the same key and arguments returns the first result instead of acting twice; the same key with different arguments is refused. Kept 24 hours. |