---
title: "Dispatcher Action"
method: POST
path: "/coord/cycles/{root}/dispatcher-actions"
tags: ["coord"]
---

# Dispatcher Action

`POST /coord/cycles/{root}/dispatcher-actions`

## Request

- Base URL: `https://app.tascan.io/api/v1`
- URL: `https://app.tascan.io/api/v1/coord/cycles/{root}/dispatcher-actions`
- Auth: HTTP bearer

Record a chief-of-staff dispatcher action on a coordination cycle as a receipt (protocol v0.2 D6, POST /coord/cycles/:root/dispatcher-actions): hand_review_approve, hand_review_revise, park, bundle_recovery, migration_apply, deploy or decision. Mints a completed task + completion under the Chief of Staff worker and a dispatcher_action ledger event on the root. kind=deploy additionally requires evidence.deploy_id (a Netlify deploy id) and composes the same integrate-as-note every root gets with coord_record_integration when the root is authorized — one call that does both records. Requires agent:dispatch.

## Path parameters

- `root` string, required

## Request body

- object
  - `root_id` string, required: The cycle root task id (tascan_list_cycles / tascan_create_cycle).
  - `kind` 'hand_review_approve' | 'hand_review_revise' | 'park' | 'bundle_recovery' | 'migration_apply' | 'deploy' | 'decision', required: Which dispatcher action this is.
  - `summary` string, required: Human-readable summary (1-4000 chars) — becomes the recorded completion notes.
  - `evidence` object: Optional evidence object (serializes to at most 8000 chars). For kind=deploy this must include deploy_id: 24 lowercase hex, optionally prefixed deployed: and/or followed by a build-ref hex prefix.

## Response `200`

Success. JSON body: { data: ... } or an error object { error, message }.

## Other responses

- `4XX`: Client error (validation, auth, scope, rate limit).

---

[API](https://skmtc.dev/tascan/apis/tascan-api.md) · [All operations](https://skmtc.dev/tascan/apis/tascan-api/llms.txt) · [OpenAPI document](https://skmtc.dev/tascan/apis/tascan-api/revisions/56fcd2861498?raw)
