---
title: "Build the plan"
method: POST
path: "/apps/{id}/plan"
tags: ["Plan"]
---

# Build the plan

`POST /apps/{id}/plan`

## Request

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

A job. Approves the brief and plans from it. Where the app has a plan, it is replaced only with `rebuild: true`, and never once pages have been built from it.

## Path parameters

- `id` string, uuid, required

## Request body

- object
  - `locale` string: A language of the app. The app's own when left out.
  - `rebuild` boolean: Replace the plan the app has, edits included.

## Response `202`

The job was started, or one already doing this was joined. Poll GET /v1/jobs/{job_id}.

- object
  - `job_id` string, uuid, required

## 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.
- `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.
- `404`: Not found on this workspace.
- `409`: `plan_exists`: the app has a plan. Change it with PATCH, or send `rebuild: true`.
- `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)
