---
title: "Publishes a draft estimate."
method: POST
path: "/api/v1/jobs/{id}/finalize"
tags: ["Jobs"]
---

# Publishes a draft estimate.

`POST /api/v1/jobs/{id}/finalize`

## Request

- Base URL: `https://app.flexonthejob.com`
- URL: `https://app.flexonthejob.com/api/v1/jobs/{id}/finalize`
- Auth: HTTP bearer

Requires `ManageJobs` and an `Idempotency-Key` header. Same rules as the
"Publish Estimate" button on the job page: only a `Draft` can be published, it
needs at least one charge (labor, material or custom) and every material line must
have a unit price. The job lands on `Estimated`, on `Scheduled` when a
scheduled date was already set while drafting, or on `AwaitingOptionSelection`
for a multi-option estimate; a history entry records the change. No body is required.
To create and publish in one call use `publishImmediately` on `POST /api/v1/jobs`.

## Path parameters

- `id` integer, required

## Response `200`

Job id and confirmation message (e.g. `Estimate published successfully! You can now send it to the customer.`).

- ApiOperationResponse: Body of a successful workflow-style write that has no richer resource to return (assign, start, complete, void…). Id is the affected resource's id; Warning carries a non-fatal note from the service (e.g. an email that could not be sent).
  - `id` integer: Id of the resource the operation acted on (e.g. the job id).
  - `message` string, nullable: Human-readable confirmation from the service (e.g. "Job started."). May be null.
  - `warning` string, nullable: Non-fatal problem encountered while completing the operation (e.g. a notification email that could not be sent). Null when there was none.

## Other responses

- `400`: Missing `Idempotency-Key`.
- `401`: Unauthorized
- `403`: Forbidden
- `404`: No such job in this organization.
- `409`: The job is not a draft, it has no charges / an unpriced material line, or the key's creator is unknown on this server.
- `429`: Too Many Requests
- `500`: The change could not be saved; nothing was changed. Retry with the same `Idempotency-Key`.

---

[API](https://skmtc.dev/flexonthejob/apis/flex-api.md) · [All operations](https://skmtc.dev/flexonthejob/apis/flex-api/llms.txt) · [OpenAPI document](https://skmtc.dev/flexonthejob/apis/flex-api/revisions/19c8f4d27acf?raw)
