---
title: "Change one screenshot, or several: words, screen, style or design"
method: PATCH
path: "/pages/{id}"
tags: ["Pages"]
---

# Change one screenshot, or several: words, screen, style or design

`PATCH /pages/{id}`

## Request

- Base URL: `https://pagefully.com/api/v1`
- URL: `https://pagefully.com/api/v1/pages/{id}`
- Auth: HTTP bearer

What editing a screenshot on the Pages screen changes. Send one change as the body itself, or several screenshots of the page under `changes` (ten at most, each screenshot once, made in order). `screen` is the position of one of the app's screens (GET /v1/apps/{id}/screens), and each screen appears once on a page. Each screenshot is drawn again and checked again, and the page's approval is withdrawn. The answer says, in `changes`, what each screenshot took and what it did not, with the reason: a headline cannot be set on a screenshot that still shows the developer's own words (`own_words`), and a style has nothing to change on a design that is theirs (`design`). What a screenshot does not take is not kept. When nothing in the call took, the answer is 422 with code `words_kept`, `kept_whole` or `style_not_ours`, and the page is as it was. `"return": "changed"` answers with only the screenshots that changed. A change by hand is never counted against a plan.

## Path parameters

- `id` string, uuid, required

## Request body

- object
  - `slot_id` string, uuid: The screenshot, by id.
  - `position` integer: The screenshot, by its place on the page.
  - `headline` string
  - `subline` string
  - `screen` integer: The position of the app screen to show.
  - `style` 'clean' | 'bold' | 'soft' | 'night' | 'lift' | 'closeup', nullable: Its own style, or null for the page's. Applies to a screenshot in Pagefully's own design.
  - `highlight` string: The words of the headline to mark, on a design that marks some.
  - `design` 'ours' | 'theirs': ours: draw this screen in Pagefully's own design, where a headline and a style both apply. theirs: keep the developer's own design and change only its words. Kept for that screen on every page of the app.
  - `changes` union[]: Several screenshots of the page in one call, in place of the single form. Ten at most, each screenshot once.
    - union
      - object
        - `slot_id` string, uuid, required: The screenshot, by id.
        - `position` integer: The screenshot, by its place on the page.
        - `headline` string
        - `subline` string
        - `screen` integer: The position of the app screen to show.
        - `style` 'clean' | 'bold' | 'soft' | 'night' | 'lift' | 'closeup', nullable: Its own style, or null for the page's. Applies to a screenshot in Pagefully's own design.
        - `highlight` string: The words of the headline to mark, on a design that marks some.
        - `design` 'ours' | 'theirs': ours: draw this screen in Pagefully's own design, where a headline and a style both apply. theirs: keep the developer's own design and change only its words. Kept for that screen on every page of the app.
      - object
        - `slot_id` string, uuid: The screenshot, by id.
        - `position` integer, required: The screenshot, by its place on the page.
        - `headline` string
        - `subline` string
        - `screen` integer: The position of the app screen to show.
        - `style` 'clean' | 'bold' | 'soft' | 'night' | 'lift' | 'closeup', nullable: Its own style, or null for the page's. Applies to a screenshot in Pagefully's own design.
        - `highlight` string: The words of the headline to mark, on a design that marks some.
        - `design` 'ours' | 'theirs': ours: draw this screen in Pagefully's own design, where a headline and a style both apply. theirs: keep the developer's own design and change only its words. Kept for that screen on every page of the app.
  - `return` 'page' | 'changed': page: the whole page, which is what is returned when this is left out. changed: only the screenshots this call changed.

## Response `200`

What changed, and the page after it (or, with `"return": "changed"`, only the screenshots that changed, marked `partial`).

- object
  - `changes` Change[], required
    - `position` integer, required
    - `slot_id` string, uuid, required
    - `changed` string[], required: What was asked for and is now on the picture.
    - `not_changed` object[], required: What was asked for and the picture did not take. It was not kept.
      - `field` string, required
      - `code` 'words_kept' | 'kept_whole' | 'style_not_ours', required
      - `reason` string, required: Why, in a sentence.
      - `do` string, required: The one thing to do about it.
    - `design` 'ours' | 'theirs' | 'kept', nullable, required: How the screenshot is drawn now.
    - `own_words` boolean, nullable, required
  - `page` Page, required
    - `id` string, uuid, required
    - `app_id` string, uuid, required
    - `name` string, required
    - `kind` string, required
    - `message` string, required
    - `state` string, required: rendering (being built), ready, failed, publishing, in_asc (made in App Store Connect, not submitted for review) or rejected.
    - `approved` boolean, required
    - `locale` string, required
    - `error` string, nullable, required
    - `style` 'clean' | 'bold' | 'soft' | 'night' | 'lift' | 'closeup', required: The page's style.
    - `promo_text` string, required
    - `keywords` string[], required
    - `targets` string[], required
    - `reach` string, required: search (it holds a keyword from the keyword field) or ads (reached from ads and links only).
    - `needs_key` boolean, required: The app has no App Store Connect key, so the page cannot be sent yet.
    - `preflight` object, required
      - `blocked` boolean, required: Something fails: the page cannot be approved or sent.
      - `warnings` integer, required
      - `passed` integer, required
      - `checks` Check[], required: What failed or warned.
        - `id` string, required: The rule, by its key: claim_guarantee, competitor, fits.
        - `level` 'warn' | 'fail', required
        - `label` string, required: The rule, by its name.
        - `detail` string, required: What is wrong and what to do.
        - `scope` string, required: slot, promo or page.
        - `slot` integer
        - `overridden` boolean
        - `source` 'rule' | 'measure' | 'judge', required: rule: an exact match. measure: counted from the drawings. judge: the classifier's reading of the whole line.
        - `probability` number: For a judgement: how likely the line breaks the rule, 0 to 1. It warns at 0.5, and a rule that can block fails at 0.85.
        - `text` string, nullable, required: The words the finding is about: the screenshot's headline and subline, or the promotional text. Null for a finding about the page as a whole.
        - `phrase` string, nullable, required: The exact words a rule matched. Null for a judgement, which reads the whole line and gives no span.
        - `rule` object, required
          - `id` string, required
          - `name` string, required
          - `question` string: For a claim: what the classifier is asked of the line.
          - `counts_as` string: For a claim: what counts as breaking the rule.
          - `does_not_count` string: For a claim: what does not.
          - `passes_when` string, nullable, required
        - `said` string, required: All of it in one sentence: where, the words, the rule, and how it was decided.
    - `slots` object[], required
      - `id` string, uuid, required
      - `position` integer, required
      - `headline` string, required
      - `subline` string, required
      - `state` string, required: pending, rendering, ready or failed.
      - `screen` integer, required: Which of the app's screens it shows, by position.
      - `style` string, nullable, required: Its own style, or null where it follows the page's.
      - `highlight` string, required
      - `design` 'ours' | 'theirs' | 'kept', required: ours: the app's screen in Pagefully's own design, where a headline, a subline and a style all apply. theirs: the developer's own designed screenshot with only its words changed, where a style has nothing to change. kept: a poster with no headline of its own, left whole.
      - `own_words` boolean, required: Still shows the developer's own words: new words could not be set on its design, so the picture is as the developer made it and `headline` is not on it.
      - `screenshot` object, nullable, required
        - `url` string, required: The drawing at display size.
        - `width` integer, required
        - `height` integer, required
        - `device` string, required
      - `checks` Check[], required
        - `id` string, required: The rule, by its key: claim_guarantee, competitor, fits.
        - `level` 'warn' | 'fail', required
        - `label` string, required: The rule, by its name.
        - `detail` string, required: What is wrong and what to do.
        - `scope` string, required: slot, promo or page.
        - `slot` integer
        - `overridden` boolean
        - `source` 'rule' | 'measure' | 'judge', required: rule: an exact match. measure: counted from the drawings. judge: the classifier's reading of the whole line.
        - `probability` number: For a judgement: how likely the line breaks the rule, 0 to 1. It warns at 0.5, and a rule that can block fails at 0.85.
        - `text` string, nullable, required: The words the finding is about: the screenshot's headline and subline, or the promotional text. Null for a finding about the page as a whole.
        - `phrase` string, nullable, required: The exact words a rule matched. Null for a judgement, which reads the whole line and gives no span.
        - `rule` object, required
          - `id` string, required
          - `name` string, required
          - `question` string: For a claim: what the classifier is asked of the line.
          - `counts_as` string: For a claim: what counts as breaking the rule.
          - `does_not_count` string: For a claim: what does not.
          - `passes_when` string, nullable, required
        - `said` string, required: All of it in one sentence: where, the words, the rule, and how it was decided.
    - `screens` object[], required: The app's screens a screenshot can show.
      - `position` integer, required
      - `fit` number, nullable, required: How well it suits this page's search, 0 to 1.
      - `on_page` boolean, required
    - `regenerations_left` integer, nullable, required: Rewrites by the model left this month.
    - `job_id` string, uuid, nullable, required: The job building it, if one is.
    - `preview_url` string, required: The page in the web app.

## Other responses

- `400`: The request could not be read: a body that is not a JSON object, or a field missing or of the wrong kind.
- `401`: No token, or one that is not valid or has been revoked.
- `403`: The token's scope does not allow this call.
- `404`: Not found on this workspace.
- `422`: Understood, and refused by the product. The message says why, in a sentence that can be shown as it is.
- `429`: Too many calls: 120 requests a minute for a token, and 20 generation starts an hour. `retry_after` is seconds.

---

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