---
title: "Control Fan-out"
method: POST
path: "/coord/fanouts/{id}/control"
tags: ["coord"]
---

# Control Fan-out

`POST /coord/fanouts/{id}/control`

## Request

- Base URL: `https://app.tascan.io/api/v1`
- URL: `https://app.tascan.io/api/v1/coord/fanouts/{id}/control`
- Auth: HTTP bearer

Control a running fan-out (POST /coord/fanouts/:id/control). pause holds every unclaimed seat and stops the orphan pass from re-firing them; resume releases them again; cancel supersedes every unclaimed task and closes once quiescent; close_barrier drops unsettled or named exclude_seats and forces the synth barrier now instead of waiting for more seats; retry_synth (migration 232) mints a new synth revision from the current synth's own stored inputs, correctly ordered, when every one of its failed runs is input_ref_mismatch -- refused otherwise (not_synthesizing, no_synth_task, no_failed_runs, not_input_ref_mismatch). No amend and no answer in phase 1. Every action mints a signed control-child completion FIRST, as the org's own system worker (coord_fanout_control_receipt) — never coord_dispatcher_action, so a control action can never sign into another org's Chief of Staff identity. idempotency_key replays the prior outcome (replayed:true) and applies nothing twice; a replayed resume after a later pause leaves the fan-out paused. Refused fanout_closed once the roll-up has closed. Requires agent:dispatch:code.

## Path parameters

- `id` string, required

## Request body

- object
  - `fanout_id` string, required: Fan-out id (UUID) — the T_F root.
  - `action` 'pause' | 'resume' | 'cancel' | 'close_barrier' | 'retry_synth', required: pause, resume, cancel, close_barrier or retry_synth. No amend, no answer (phase 1).
  - `reason` string: Optional free-text reason (<= 4000 chars), recorded on the control child's completion.
  - `exclude_seats` integer[]: close_barrier only: 1-based seat numbers to drop from the barrier instead of waiting for them to settle.
  - `idempotency_key` string: Optional replay key (<= 200 chars). The same key returns the prior outcome (replayed:true) and applies nothing a second time.

## 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)
