---
title: "Deploy the latest commit now"
method: POST
path: "/app/{id}/deploy"
tags: ["apps", "deployments"]
---

# Deploy the latest commit now

`POST /app/{id}/deploy`

## Request

- Base URL: `https://api.faable.com`
- URL: `https://api.faable.com/app/{id}/deploy`
- Auth: one of:
  - OAuth 2 (authorization code, authorization URL `https://faable.auth.faable.link/authorize`, token URL `https://faable.auth.faable.link/oauth/token`)
  - HTTP bearer
  - OAuth 2 (client credentials, token URL `https://faable.auth.faable.link/oauth/token`)
  - HTTP bearer
  - HTTP basic
  - API key in query parameter `apikey`

Build and deploy the current head of the deploy branch, without waiting for a push. Same path as a push webhook, including the same-commit dedupe — unless `force=true`, which rebuilds a commit that is already deployed.

## Path parameters

- `id` string, required

## Query parameters

- `force` boolean

## Response `200`

Default Response

- object
  - `status` 'created', required
  - `commit` string, required
  - `branch` string, required
  - `deployment_id` string: The deployment this call created.

## Other responses

- `400`: `branch_missing` — The deploy branch does not exist on the repository. `message` lists the branches that do. `deploy_mode_conflict` — The app deploys from its own workflow, so the platform will not create a deployment for it. `repository_empty` — The repository has no commits on the deploy branch yet. `repository_not_linked` — The app has no linked repository. `validation_error` — The body, query or path failed schema validation. `details.issues` lists each failing field.
- `401`: `github_token_invalid` — The stored GitHub token was rejected; the user must reconnect. `user_token_required` — The endpoint acts on behalf of a person and the credential carries no user (an API key or a service account). `unauthorized` — The request carries no valid credentials. `invalid_token` — The bearer token is missing, malformed or expired.
- `403`: `forbidden` — The credentials are valid but do not allow this operation. `user_suspended` — The account is suspended. Contact support@faable.com.
- `409`: `deploy_refused` — The deploy was refused by quota, plan or an in-flight deployment. `message` says which.
- `412`: `github_identity_missing` — The user has not connected GitHub. Send them through `connect_github`.
- `429`: `too_many_requests` — Rate limit exceeded. Honour the `Retry-After` header.
- `500`: `internal_error` — Unexpected server error. Retry later; the request id is logged.
- `502`: `github_error` — GitHub failed upstream. `message` carries what it said.
- `503`: `database_unavailable` — Faable cannot reach its database right now. Transient: retry after the `Retry-After` header.

---

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