Decide a Hover Suggested Action
POST https://app.hover.team/api/v1/hover/spaces/{space_id}/generated-items/{generated_item_id}/suggested-action/decisions
Atomically approve a pending Suggested Action into one active Todo,
mark it as Not an action, or restore a dismissed proposal. The caller
must be an active confirmed Contributor or Subscriber in the exact
launched Space. Request IDs make retries idempotent and expected
versions prevent reordered clients from overwriting newer decisions.
Changes: New in Zulip 12.0 (feature level ZF-82baeb).
Usage examples
The -u line implements HTTP Basic authentication.
See the Authorization header documentation for how
to get those credentials for Zulip users and bots.
curl -sSX POST https://app.hover.team/api/v1/hover/spaces/2/generated-items/3/suggested-action/decisions \
-u EMAIL_ADDRESS:API_KEY \
--data-urlencode decision=approve \
--data-urlencode request_id=e3437e2d-a109-4676-a3f6-6d45ea16e131 \
--data-urlencode expected_version=1 \
--data-urlencode 'reason=Already handled by the venue team.' \
--data-urlencode 'wording=Confirm the venue booking.' \
--data-urlencode assignee_user_id=9 \
--data-urlencode due_date=2026-08-31
Parameters
space_id integer required in path
Example: 2
The ID of the Hover Space containing the generated item.
generated_item_id integer required in path
Example: 3
The ID of the generated item whose suggested action should be decided.
decision string required
Example: "approve"
The decision to apply to the Suggested Action.
Must be one of: "approve", "not_action", "restore".
request_id string required
Example: "e3437e2d-a109-4676-a3f6-6d45ea16e131"
A unique idempotency key for this decision.
expected_version string required
Example: "1"
The current Suggested Action version expected by the caller.
reason string | null optional
Example: "Already handled by the venue team."
Optional only for not_action.
wording string | null optional
Example: "Confirm the venue booking."
Reviewed wording to confirm with approve.
assignee_user_id string | null optional
Example: "9"
Confirmed Space member to assign, or null to leave unassigned.
due_date string | null optional
Example: "2026-08-31"
Due date to confirm with approve, or null to clear it.
Response
Return values
Example response(s)
Changes: As of Zulip 7.0 (feature level 167), if any
parameters sent in the request are not supported by this
endpoint, a successful JSON response will include an
ignored_parameters_unsupported array.
A typical successful JSON response may look like:
{
"changed": true,
"msg": "",
"result": "success",
"suggested_action": {
"assignable_users": [],
"assignee": null,
"due_date": null,
"history_count": 0,
"id": 1,
"recent_transitions": [],
"source_proposal": {
"assignee_display_name": null,
"assignee_ref": null
},
"state": "pending",
"todo": null,
"version": 1,
"wording": "Confirm venue"
}
}
The current Suggested Action returned after a stale decision request.
{
"msg": "The Suggested Action has changed.",
"result": "error",
"suggested_action": {
"assignable_users": [],
"assignee": null,
"due_date": null,
"history_count": 0,
"id": 1,
"recent_transitions": [],
"source_proposal": {
"assignee_display_name": null,
"assignee_ref": null
},
"state": "pending",
"todo": null,
"version": 2,
"wording": "Confirm venue"
}
}