Skip to main content
POST
Call videos.plan_edit

Authorizations

Authorization
string
header
required

An API key minted at Settings › API & MCP. Send it as Authorization: Bearer <key>. A key carries its holder's own permissions, resolved on every call — revoking a membership closes the key's reach immediately. Keep it in an environment variable (GOOSY_API_KEY), never in a committed file.

Headers

x-request-id
string

Your own id for this request, echoed back and recorded on the audit trail. 1–128 characters from A–Z a–z 0–9 . _ : -, starting with a letter or digit; anything else is replaced by a generated id.

Maximum string length: 128
Idempotency-Key
string

Your key for this write: send the same key when you retry and the first result comes back instead of a second action. Keys are honoured for at least 24 hours. 1–200 visible ASCII characters. Replaces the idempotency_key body field, which still works until 2026-12-31.

Maximum string length: 200

Body

application/json
kind
enum<string>

What it acts on: "video" for one video, "short" for one short, "filmed_clip" for a short cut from footage the person filmed. Leave it out for a video.

Available options:
video,
short,
filmed_clip
video_id
string<uuid>

Only with kind "video". The video's id, as given in this conversation.

Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
direction
string

With kind "video": What to change, in the person's own words. Leave it out for Goosy's first edit. With kind "short": What to change, in the person's own words. Leave it out for Goosy's first edit. With kind "filmed_clip": What they asked you to change, in their own words.

Required string length: 1 - 2000
scene_id
string

Only with kind "video". ONE scene, when the person asked about one scene rather than the whole video.

Minimum string length: 1
confirmation_id
string<uuid>

With kind "video": Only when a first call answered confirmation_required: send that id back, unchanged, to run the recorded request. On your own member key the first call already runs, and there is no id. With kind "short": Omit to propose: the first call says what would happen, returns a confirmation_id and changes nothing. To go ahead, send the same arguments again with that confirmation_id, on a member's own API key; a service account's key can propose but never confirm. With kind "filmed_clip": Omit to propose: the first call says what would happen, returns a confirmation_id and changes nothing. To go ahead, send the same arguments again with that confirmation_id, on a member's own API key; a service account's key can propose but never confirm.

Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
idempotency_key
string

Deprecated on REST: send the Idempotency-Key header instead. Still accepted until 2026-12-31; if both are sent they must match.

Required string length: 1 - 200
short_id
string

With kind "short": The short's id, as the board or a read projection gave it. With kind "filmed_clip": The short they filmed, as given in this conversation.

Minimum string length: 1
beat_id
string

Only with kind "short". ONE beat's id, when the person asked about one beat rather than the whole short.

Minimum string length: 1
workspace
string

Which workspace to run in — its slug. Omit to use your default. With more than one reachable workspace and no default, the call is refused and the choices are listed.

Minimum string length: 1

Response

The call was admitted and dispatched. ok says whether the tool succeeded — a refusal the tool itself produced is still a 200, exactly as it is a successful JSON-RPC result over MCP.

The tool ran and answered.

ok
boolean
required
workspace
string
required

The slug of the workspace this call ran in.

working_in
object
required

Which workspace this call ran in, and how that was decided. Present on every workspace-scoped result.

video_id
string
log
object
titles
object[]
seconds
integer
clock
string
honest_time
string
step
enum<string>
Available options:
idea,
writing,
storyboarded,
needs_filming,
edited,
ready,
scheduled,
live
open_at

Where the person watches it.

state

edited — the edit is made and its log is below; in_flight — it is still running: nothing failed, do not send it again, follow job_id with jobs.read; confirmation_required — a key with no member behind it asked first: nothing ran and nothing was charged.

Available options:
confirmation_required,
edited,
in_flight
job_id
string

The job's handle. Read its status with jobs.read (REST: POST /api/v1/tools/jobs.read) until it says succeeded or failed.

confirmation_id

Present only while confirmation is required.

Pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
expires_in_seconds

How long that confirmation stays usable.

Required range: x > 0
request_summary

Present only while confirmation is required — what will run, in one sentence, for a person to approve.

short_id
string
loops
boolean
sound
Available options:
none,
bed,
platform
short_name
string
job_line
string
edited
boolean
captions
string | null
beats
integer
note
string