Skip to main content
POST
Create estimate

Creating an estimate

Estimates (quotes) share their structure with invoices, but never post accounting transactions. The lifecycle status of an estimate (open, accepted, rejected) is managed through the Set estimate status endpoint. To turn an accepted estimate into an invoice, use Convert estimate to invoice. The position structure is identical to invoices — see Create invoice for the full reference, including external references. Estimates may also be issued in a foreign currency by providing originalCurrency (and optionally exchangeRate; when omitted, the organisation’s stored rate is used). When converted to an invoice the FX details and external references are carried over.

Example

Retrying safely with idempotency keys

If a request fails or times out, provide a unique Idempotency-Key header (for example a UUID) to retry it without creating a duplicate estimate:
A retry with the same key and payload returns the response of the original request instead of creating the estimate again. Keys are scoped to your organisation, API key and endpoint, and are retained for 24 hours. See Create invoice for the full behaviour, including the 409 Conflict errors returned when a key is reused with a different payload or while a request is still being processed.

Authorizations

x-api-token
string
header
required

API token for authentication. Obtain from your Infinity account settings.

Headers

Idempotency-Key
string

A unique key that makes this request idempotent, for example a UUID. If a request fails or times out, it can safely be retried with the same key without creating a duplicate: a retry with the same key and payload returns the status and response of the original request, including the resource it created.

Keys are scoped to your organisation and API key, and are retained for 24 hours. Reusing a key with a different payload returns 409 Conflict. While a request is still being processed, other requests with the same key also return 409 Conflict.

Required string length: 1 - 200

Body

application/json

The estimate payload.

Request body for creating an estimate.

openingDate
string<date>
required

The opening date (issue date) of the document in YYYY-MM-DD format. For invoices, this is also the date used for the posted accounting transactions.

positions
(ProductPosition · object | DiscountPosition · object | TextPosition · object | SubtotalPosition · object)[]
required

The ordered list of positions on the document. At least one position is required, and discount positions must specify exactly one of percentage or amount.

A standard billable line item with a quantity, single amount, and contra account. Most invoice and estimate positions are of this type.

isDraft
boolean
required

When true the estimate is saved as a draft.

template
string

The id of the invoice template to render the document with. When omitted while creating an invoice or estimate, the organisation's first template is used.

recipient
string

The id of the contact this document is addressed to. Required unless customRecipientText is provided.

customRecipientText
string

An ad-hoc recipient text used when no contact is associated with the document.

Maximum string length: 2000
externalReference
string

An optional reference for this document in an external system.

Maximum string length: 128
title
string

Optional document title displayed on the rendered output.

Maximum string length: 128
payableInDays
integer

Payment terms for this document in days from the opening date. Defaults to 30 on create.

Required range: 0 <= x <= 365
introductoryText
string

Text rendered above the positions.

Maximum string length: 2000
closingText
string

Text rendered below the positions.

Maximum string length: 2000
amountMode
enum<string>

Whether position amounts are entered gross (including VAT) or net (excluding VAT).

Available options:
gross,
net
language
enum<string>

The language used to render the document.

Available options:
de,
en,
fr,
it
columns
enum<string>[]

The columns to render in the positions table. If not provided the template default is used.

A column that can be shown on the rendered invoice or estimate.

Available options:
quantity,
unit,
articleNumber,
name,
date,
vatDebt,
vatRate,
singleAmount,
totalAmount,
discountRate,
positionNumber,
customTextColumn1,
customTextColumn2,
customTextColumn3
originalCurrency
string

For foreign-currency documents: the 3-character ISO 4217 currency code the document is denominated in. Must be a currency code that is enabled in the organisation. When set without exchangeRate, the organisation's stored exchange rate for that currency is used.

Required string length: 3
exchangeRate
number

For foreign-currency documents: the conversion rate from the original currency to the primary accounting currency, expressed as 1 originalCurrency = X primaryCurrency. Optional when originalCurrency is set; if omitted, defaults to the organisation's stored exchange rate for that currency. Cannot be set without originalCurrency.

Response

The estimate was created successfully.

estimate
Estimate · object

The full representation of an estimate (quote).