---
title: "The files and the calls to make one page in App Store Connect from your own machine"
method: POST
path: "/pages/{id}/bundle"
tags: ["Local mode"]
---

# The files and the calls to make one page in App Store Connect from your own machine

`POST /pages/{id}/bundle`

## Request

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

Local mode: the developer's own machine calls App Store Connect with a key that is never sent to Pagefully. This answers with one approved page as a bundle: its name, language, promotional text and deep link, each screenshot file with its size, MD5 and SHA-256 and a signed link, and the ordered list of App Store Connect calls with their exact bodies.

Issuing counts the page as out on the app's plan until it is retired (Free 1, the Pack 10, Pro 70 out at a time), and a new version of a page already issued uses one of the plan's revisions for it. The same version asked for again counts nothing and answers with new links, which last 15 minutes.

With `dry_run` the answer is the same bundle with no links, and nothing is counted. Show it to a person before asking for the real one.

The page must be approved, not already in App Store Connect through Pagefully, and its pre-flight must have no failure.

## Path parameters

- `id` string, uuid, required

## Request body

- object
  - `dry_run` boolean: Count nothing and make no links.
  - `version` string: Issue only this version, the one a person was shown in a dry run. A page changed since answers 409 `changed` and counts nothing.

## Response `200`

The bundle.

- object
  - `bundle` Bundle, required
    - `id` string, uuid, required
    - `version` string, required: A fingerprint of everything Apple would be given. Sent back with POST /v1/pages/{id}/sent.
    - `page_id` string, uuid, required
    - `app_id` string, uuid, required
    - `issued_at` string, nullable, required
    - `dry_run` boolean, required
    - `reissued` boolean, required: This version had been issued before: nothing was counted again.
    - `revision` boolean, required: A version of this page was issued or sent before: this one uses a revision.
    - `app` object, required
      - `app_store_id` string, required: Apple's id for the app.
      - `name` string, required
      - `bundle_id` string, required
    - `page` object, required
      - `name` string, required: The custom product page's name.
      - `locale` string, required
      - `promotional_text` string, nullable, required
      - `deep_link` string, nullable, required
      - `preview_url` string, required: The page in the web app.
    - `localizations` object[], required: The page's own language first, then each further language a person has confirmed.
      - `locale` string, required
      - `primary` boolean, required: The page's own language, made with the page.
      - `promotional_text` string, nullable, required
      - `screenshot_sets` object[], required
        - `display_type` string, required: Apple's `screenshotDisplayType`.
        - `device` string, required: iphone_69, iphone_65 or ipad_13.
        - `screenshots` object[], required
          - `position` integer, required: Its place on the page, from 1.
          - `file_name` string, required: The name to upload it under.
          - `bytes` integer, required
          - `width` integer, required
          - `height` integer, required
          - `md5` string, required: Given to Apple as `sourceFileChecksum` when the upload is committed.
          - `sha256` string, required
          - `url` string, nullable, required: A signed link to the bytes, good for 15 minutes. Null in a dry run.
    - `links_expire_at` string, nullable, required
    - `links_expire_in_minutes` integer, required
    - `calls` object[], required
      - `n` integer, required
      - `step` string, required: find_page, create_page, list_localizations, create_localization, list_screenshot_sets, create_screenshot_set, reserve_screenshot, upload_parts, commit_screenshot, wait_for_screenshot or order_screenshots.
      - `method` string: Missing for upload_parts, which goes to the addresses Apple returned.
      - `path` string: On https://api.appstoreconnect.apple.com. An id Apple has not given yet is in braces, as in {page_id}.
      - `body` object: The exact JSON body.
      - `saves` object: Ids to keep from the answer, and where each is found.
      - `skip_if` string: What to look for first, so nothing is made twice.
      - `file` string: For a screenshot's steps: its file_name in the bundle.
      - `note` string
    - `meter` object, required
      - `plan` string, required
      - `pages_out` integer, required: Pages of the app that are out once this is issued: sent by Pagefully, or issued and not retired.
      - `pages_allowed` integer, required
      - `takes_place` boolean, required: The page was not out: issuing it takes a place.
      - `uses_revision` boolean, required: Issuing this version uses one of the plan's revisions for the page.
      - `counted` boolean, required: This call took a place or counted a version. Never in a dry run.
      - `revisions_used` integer, required: Once this is issued.
      - `revisions_allowed` integer, required
    - `what_happens` string[], required
    - `next` string, required

## Other responses

- `400`: The body is not a JSON object, or `version` is not a version.
- `401`: No token, or one that is not valid or has been revoked.
- `402`: A plan's limit stopped the call. `error.code` is `upgrade_required`, `error.message` states the facts, and `error.upgrade.url` is the app's plan screen.
- `403`: The token's scope does not allow this call. Local mode needs the full scope.
- `404`: Not found on this workspace.
- `409`: `changed`: the page is no longer the version asked for.
- `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. `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)
