---
title: "Update Estimate"
method: PUT
path: "/{estimates-type}/{document-id}.json"
tags: ["Estimates"]
---

# Update Estimate

`PUT /{estimates-type}/{document-id}.json`

Updates a quote, proforma or fees_note.

## Path parameters

- `estimates-type` 'quotes' | 'proformas' | 'fees_notes', required
- `document-id` integer, required

## Query parameters

- `api_key` string, required

## Request body

- EstimateCreateRequest
  - `quote` object, required
    - `date` string — dd/mm/yyyy
    - `due_date` string — dd/mm/yyyy
    - `reference` string
    - `observations` string — No enforced character limit (text column).
    - `retention` string
    - `tax_exemption` string
    - `sequence_id` string
    - `manual_sequence_number` string — 255-character limit is the database column default, not an explicit business rule.
    - `client` DocumentClientRequest, required — Client Details. To identify an existing client, send `id`, `code`, or `name` — not all three are required. Resolution priority: if `id` is sent and matches a client on the account, that client is used and `name`/`code` are ignored. Without `id`, if `code` matches an existing client, that client is used and `name` is not needed. Without an `id`/`code` match, `name` is used to find or create the client. Creating a brand-new client (no `id`/`code` match) still requires `name`; `code` is always optional and is never generated automatically by InvoiceXpress.
      - `id` integer — Internal client ID. Preferred way to identify an existing client — see schema description.
      - `name` string
      - `code` string — Maximum length is the database default, not a business rule.
      - `email` string
      - `address` string — No enforced character limit.
      - `city` string — Maximum length is the database default, not a business rule.
      - `postal_code` string — Maximum length is the database default, not a business rule.
      - `fiscal_id` string — Maximum length is the database default, not a business rule.
      - `country` string — Maximum length is the database default, not a business rule.
      - `website` string
      - `phone` string
      - `fax` string
      - `observations` string — No enforced character limit.
    - `items` EstimatesItemRequest[], required
      - `name` string, required — Maximum 60 characters. V3 rejects a longer name with HTTP 422; V2 accepts the request and silently truncates the stored value to 60 characters.
      - `description` string, required — Maximum 200 characters and 20 lines. V3 rejects a longer description with HTTP 422; V2 accepts the request and silently truncates the stored value to 200 characters.
      - `unit_price` number, required
      - `quantity` number, required
      - `unit` string — One of a fixed set of supported unit values.
      - `discount` number
      - `tax` EstimatesTaxRequest
        - `name` string — Defaults to 255 characters at the database level.
    - `mb_reference` '0' | '1'
    - `auto_add_related_document` string
    - `tax_exemption_reason` string — Validated at 210 characters by the document model, below the 255-character database column limit.

## Response `200`

SUCCESS 

#### Possible values for field atcud:

* ABCD1234-1 (or similar) - Unique document identifier to the Tax Authority, when the sequence is registered.
* N/D - The document's sequence is relevant for ATCUD but is not registered in the Tax Authority.
* N/A - The document's sequence is not relevant for ATCUD and is not registered in the Tax Authority.

- EstimateGetResponse
  - `quote` object
    - `id` integer
    - `status` string
    - `archived` boolean
    - `type` string
    - `sequence_number` string
    - `inverted_sequence_number` string
    - `atcud` string
    - `date` string
    - `due_date` string
    - `reference` string, nullable
    - `observations` string, nullable — No enforced character limit (text column).
    - `retention` string, nullable
    - `permalink` string
    - `saft_hash` string — Server-generated. No enforced character limit (text column).
    - `sum` number
    - `discount` number
    - `before_taxes` number
    - `taxes` number
    - `total` number
    - `currency` string
    - `sequence_id` integer, nullable
    - `tax_exemption` string
    - `client` InvoiceClient
      - `id` integer
      - `name` string
      - `code` string
      - `country` string
      - `email` string
    - `items` InvoiceItem[]
      - `name` string
      - `description` string, nullable
      - `unit_price` string
      - `quantity` string
      - `unit` string
      - `discount` number
      - `tax` object
        - `id` integer
        - `name` string
        - `value` number
      - `subtotal` number
      - `tax_amount` number
      - `discount_amount` number
      - `total` number

## Other responses

- `401` — ACCESS DENIED
- `404` — NOT FOUND
- `422` — UNPROCESSABLE ENTITY

---

[API](https://skmtc.dev/invoicexpress/apis/invoicexpress-api.md) · [All operations](https://skmtc.dev/invoicexpress/apis/invoicexpress-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/invoicexpress/invoicexpress-api/revisions/5b82d4eb0d9f/schema)
