---
title: "Add one line to an estimate"
method: POST
path: "/estimates/{estimate}/items"
tags: ["Estimates"]
---

# Add one line to an estimate

`POST /estimates/{estimate}/items`

## Request

- Base URL: `https://api.getfacade.ai/api/v1`
- URL: `https://api.getfacade.ai/api/v1/estimates/{estimate}/items`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://api.getfacade.ai/oauth/authorize`, token URL `https://api.getfacade.ai/oauth/token`, scopes: `agent`)

`unit` must be a display code of the estimate's OWN measurement system — read an
existing line rather than guessing. Totals are recomputed server-side.

## Path parameters

- `estimate` string, required

## Request body

- object
  - `data` object
    - `type` 'estimate_item', required
    - `attributes` object, required
      - `section` 'materials' | 'labor', required
      - `name` string, required
      - `quantity` number, required
      - `unit_price` number, required
      - `unit` string
      - `category` string

## Response `201`

A JSON:API document

- object
  - `data` Resource: JSON:API resource. `id` is a top-level field, never inside `attributes`.
    - `type` string, required
    - `id` string, required
    - `attributes` object
    - `relationships` object

## Other responses

- `422`: The request was understood and refused. The message is the API's own text; show it unchanged. `IDEMPOTENCY_KEY_REQUIRED` — a paid call from an agent key with no `Idempotency-Key` header; nothing was queued, send it again with one. `IDEMPOTENCY_KEY_REUSED` — that header value already names a different request; a new order needs a new value.

---

[API](https://skmtc.dev/getfacade/apis/getfacade-agent-api.md) · [All operations](https://skmtc.dev/getfacade/apis/getfacade-agent-api/llms.txt) · [OpenAPI document](https://skmtc.dev/getfacade/apis/getfacade-agent-api/revisions/2b52eda7362c?raw)
