---
title: "Add an app from the App Store"
method: POST
path: "/apps"
tags: ["Apps"]
---

# Add an app from the App Store

`POST /apps`

## Request

- Base URL: `https://pagefully.com/api/v1`
- URL: `https://pagefully.com/api/v1/apps`
- Auth: HTTP bearer

Adds the app by its public listing. No App Store Connect key is needed to plan and make pages; one is needed to publish, and is connected in the web app. What a preview already wrote for the app comes with it. `job_id` is the job reading the listing, which goes on to write the brief. A workspace holds one app without a key.

## Request body

- union
  - object
    - `app_store_url` string, required: The app's address on the App Store, which ends in id and a number.
    - `app_store_id` string: Apple's id for the app: that number.
  - object
    - `app_store_url` string: The app's address on the App Store, which ends in id and a number.
    - `app_store_id` string, required: Apple's id for the app: that number.

## Response `200`

Already on this workspace.

- object
  - `app` App, required
    - `id` string, uuid, required
    - `name` string, required
    - `app_store_id` string, required
    - `bundle_id` string, required
    - `category` string, nullable, required
    - `icon_url` string, nullable, required
    - `locale` string, required
    - `has_key` boolean, required: Connected through an App Store Connect key. Without one the app can be planned and designed for, and not published.
    - `plan` 'free' | 'pack' | 'pro', required
    - `url` string, required: The app in the web app.
    - `listing` object: On GET /v1/apps/{id}: where the app's facts were read from.
      - `on_public_store` boolean, nullable, required: Whether the public App Store has the app. Null where that is not known.
      - `read_from` 'app_store_connect' | 'public_app_store', required
      - `note` string, nullable, required: One sentence when the app is not on the public store, or the store could not be read: where its facts came from, and why `category` or `icon_url` is empty.
    - `has_brief` boolean
    - `intents` integer
    - `pages` integer
  - `did` string, required
  - `job_id` string, uuid, nullable, required

## Other responses

- `201`: Added.
- `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.
- `409`: `key_required`: the workspace already holds its one app without a key.
- `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)
