---
title: "Change a project with a sentence"
method: POST
path: "/marketing/projects/{id}/edits"
tags: ["marketing"]
---

# Change a project with a sentence

`POST /marketing/projects/{id}/edits`

## Request

- Base URL: `https://api.gogoscreen.com/api/v1`
- URL: `https://api.gogoscreen.com/api/v1/marketing/projects/{id}/edits`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer

Describe a change in words — "make the headline shorter", "swap scenes two and three" — applied as an ordinary revision. Read DETERMINISTICALLY against this project's design and document: instant, free, and limited to a fixed vocabulary. `dryRun: true` parses only: it answers the changes, writes nothing, and says `guardsChecked: false` with the guards it did not run. NOTHING IS HALF APPLIED: a sentence not understood whole changes nothing, and 400 `edit_not_understood` carries the reason and the vocabulary that IS understood.

## Path parameters

- `id` string, uuid, required

## Headers

- `Idempotency-Key` string, required

## Request body

- object
  - `dryRun` boolean: Parse and report, write nothing.
  - `expectedRevisionId` string, uuid, required: The resource `id`, from a create answer or the matching list.
  - `request` string, required: The change, in a sentence.

## Response `201`

Change a project with a sentence

- object
  - `changes` object[], required
  - `currentRevisionId` string, nullable, required
  - `guardsChecked` boolean, required: False on a dry run: the limits, the locks and the compare-and-set were NOT run.
  - `note` string, nullable, required
  - `patch` object, nullable, required: The patch the sentence resolved to. Open shape, may gain keys; ≤65536 bytes, ≤16 deep.
  - `revision` object, nullable, required
    - `createdAt` string, date-time, nullable, required
    - `document` object, required: The revision's own document: the scenes, the copy, the music and the timing. Open shape, may gain keys; ≤65536 bytes, ≤16 deep.
    - `id` string, required
    - `locks` object, required: The parts of this revision the customer has locked. Open shape, may gain keys; ≤65536 bytes, ≤16 deep.
    - `number` number, required
    - `parentRevisionId` string, nullable, required
    - `projectId` string, required
    - `restoredFromRevisionId` string, nullable, required
    - `seed` number, required

## Other responses

- `400`: `validation_failed` — That request is not valid. · `idempotency_key_required` — This operation needs an Idempotency-Key header: a string of up to 128 characters, unique to this request, so a retry cannot do the work twice. · `unknown_template` — No such design. The catalogue is at GET /api/v1/catalog/marketing/templates. · `unsupported_format` — That design does not offer that shape. `details.formats` lists what it does. · `unsupported_duration` — That design does not offer that length. `details.durations` lists what it does. · `invalid_revision` — That revision is not valid. `details.errors` says why. · `expected_revision_required` — Name the revision you are changing, so a save cannot land on words you never saw. · `edit_not_understood` — That change was not understood whole, so nothing was changed. `details` says why and what this editor does take.
- `401`: `unauthorized` — Authentication is required.
- `403`: `forbidden_scope` — This credential does not carry the scope this operation needs.
- `404`: `not_found` — No such resource. · `source_not_found` — No such source. · `source_version_not_found` — No such version of that website source.
- `409`: `idempotency_conflict` — That idempotency key was already used with a different request. · `idempotency_in_progress` — That idempotency key is still being processed. · `conflict` — That request conflicts with the current state. · `source_not_ready` — That source is not ready to be used yet. · `source_unreadable` — That source could not be read. · `missing_required_footage` — That design needs footage this recording does not have. `details.reasons` says which. · `revision_conflict` — That revision is no longer the project's current one. · `export_in_flight` — An export of that project is still running. · `gallery_example` — One of that project's exports is published as a gallery example. · `source_version_mismatch` — That version belongs to a different website source. · `source_kind_mismatch` — That project was not made from this kind of source.
- `410`: `source_version_expired` — That version of the website source has been cleaned up. Scan the site again. · `source_expired` — That source is past its retention window. · `source_deleted` — That source has been deleted.
- `413`: `payload_too_large` — That request body is too large.
- `415`: `unsupported_media_type` — That content type is not supported.
- `422`: `campaign_copy_overflow` — Some of those words do not fit the frames they are for. `details.fields` names them. · `campaign_visuals_insufficient` — That design needs more pictures than the source has. `details` says how many and which scenes. · `campaign_logo_aspect_unsupported` — That logo's shape is not one the designs can place.
- `429`: `rate_limited` — Too many requests. Try again shortly.
- `500`: `internal_error` — Something went wrong. Try again.
- `503`: `storage_unavailable` — File storage is temporarily unavailable.

---

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