Quote data model
View field support, webhooks, and list parameters for each integration on the Supported Integrations page.
| Field | Type | Required | Description |
|---|---|---|---|
id | string | No | |
created_at | string (date-time) | No | (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format) |
updated_at | string (date-time) | No | (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format) |
quote_number | string | No | External identifier for this quote (Xero QuoteNumber, QBO DocNumber, NetSuite tranId) |
reference | string | No | customer-side reference / PO number |
title | string | No | short title (Xero Title, max 100) |
summary | string | No | longer summary (Xero Summary, max 3000) |
payment_terms | enum | No | unified payment terms enum, as on accounting_invoice / accounting_bill Values: ON_RECEIPT, NET_7, NET_10, NET_15, NET_20, NET_25, NET_30, NET_45, NET_60, NET_90, OTHER |
customer_message | string | No | customer-visible message |
memo | string | No | internal note, not customer-visible |
contact_id | string | No | (reference to AccountingContact) |
contacts | AccountingTransactionContact[] | No | denormalized parties, reusing the transaction contact shape |
contacts[].id | string | Yes | |
contacts[].is_customer | boolean | No | |
contacts[].is_supplier | boolean | No | |
issued_at | string (date-time) | No | Xero Date, QBO TxnDate (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format) |
expires_at | string (date-time) | No | Xero ExpiryDate, QBO ExpirationDate (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format) |
sent_at | string (date-time) | No | (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format) |
accepted_at | string (date-time) | No | (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format) |
declined_at | string (date-time) | No | (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format) |
status | enum | No | where EXPIRED is derived (expires_at < now), the source status is preserved in raw Values: DRAFT, SENT, ACCEPTED, DECLINED, INVOICED, EXPIRED, VOIDED, DELETED |
currency | string | No | |
currency_rate | number | No | exchange rate to the organization's base currency |
sub_total_amount | number | No | |
tax_amount | number | No | |
discount_amount | number | No | |
total_amount | number | No | |
tax_mode | enum | No | INCLUSIVE / EXCLUSIVE / NONE; maps Xero LineAmountTypes (a boolean cannot represent NoTax) Values: INCLUSIVE, EXCLUSIVE, NONE |
lineitems | AccountingLineitem[] | No | |
lineitems[].id | string | No | |
lineitems[].created_at | string (date-time) | No | (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format) |
lineitems[].updated_at | string (date-time) | No | (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format) |
lineitems[].refunded_at | string (date-time) | No | (ISO-8601 / YYYY-MM-DDTHH:MM:SSZ format) |
lineitems[].total_amount | number | No | unit_quantity * unit_amount + tax_amount |
lineitems[].refund_amount | number | No | |
lineitems[].discount_amount | number | No | |
lineitems[].tax_amount | number | No | |
lineitems[].item_id | string | No | (reference to CommerceItem) |
lineitems[].unit_amount | number | No | |
lineitems[].unit_quantity | number | No | |
lineitems[].item_sku | string | No | |
lineitems[].item_name | string | No | |
lineitems[].item_description | string | No | |
lineitems[].notes | string | No | |
lineitems[].taxrate_id | string | No | |
lineitems[].account_id | string | No | (reference to AccountingAccount) |
lineitems[].category_ids | string[] | No | (reference to AccountingCategory) |
lineitems[].locations | AccountingReference[] | No | |
lineitems[].locations[].id | string | No | |
lineitems[].locations[].name | string | No | |
lineitems[].item_variants | AccountingReference[] | No | |
lineitems[].item_variants[].id | string | No | |
lineitems[].item_variants[].name | string | No | |
lineitems[].fees | AccountingFee[] | No | |
lineitems[].fees[].type | enum | Yes | Unified fee category Values: TAX, DISCOUNT, PROMOTION, SHIPPING, GIFT_WRAP, COD, SURCHARGE, TIP, SERVICE_CHARGE, OTHER |
lineitems[].fees[].original_type | string | No | The provider's original fee label, e.g. "VAT" or a shipping carrier name |
lineitems[].fees[].amount | number | Yes | |
lineitems[].fees[].currency | string | No | ISO 4217 currency code, e.g. USD |
lineitems[].contact_id | string | No | (reference to AccountingContact) |
lineitems[].project_id | string | No | ref -> AccountingProject; the project this line is coded to (reference to TaskProject) |
lineitems[].exchange_rate | number | No | The exchange rate applied to this line, for multi-currency documents |
lineitems[].is_billable | boolean | No | True when the line is rebillable to a customer |
invoice_id | string | No | populated once the quote is converted to an invoice; left null when the source cannot supply it (reference to AccountingInvoice) |
project_id | string | No | points to an AccountingProject (accounting costing project) (reference to TaskProject) |
group_id | string | No | points to a HRIS Group (reference to HrisGroup) |
category_ids | string[] | No | tracking categories / classes (AccountingCategory dimensions) |
url | string | No | public online-quote link where exposed |
organization_id | string | No | |
metadata | AccountingMetadata[] | No | |
metadata[].id | string | No | The ID of the custom field definition (from the metadata/metadata endpoint). |
metadata[].slug | string | No | The integration's API name (key) of an existing custom field. List valid slugs for this object with the metadata/metadata endpoint; unknown slugs are rejected by the integration. |
metadata[].value | object | No | The field's value, typed by format: DATE as ISO-8601 (YYYY-MM-DD, or YYYY-MM-DDTHH:MM:SSZ for date-times); NUMBER, PRICE and CURRENCY as a number; BOOLEAN and YES_NO as true/false; MULTIPLE_SELECT as an array of option values; otherwise a string. |
metadata[].namespace | string | No | |
metadata[].format | enum | No | The data type of the custom field, which determines how value is formatted. Values: TEXT, NUMBER, DATE, BOOLEAN, FILE, TEXTAREA, SINGLE_SELECT, MULTIPLE_SELECT, MEASUREMENT, PRICE, YES_NO, CURRENCY, URL |
metadata[].extra_data | object | No |
Are we missing anything? Let us know
Was this page helpful?