List quotes
- Permissions
customers:read,quotes:read- Pagination
- Cursor, up to 100 per page
- Also available as
fieldtask_list_quotes
Returns the quotes in your organization, oldest first by default, one page at a time.
You can list every quote, or narrow the list to one customer, one status, or both. Each quote in the list has its totals but not its line items, terms or customer note; read one quote with Get a quote for those. Lists show current data, so a quote created or changed while you page through may or may not appear.
Reading quotes never changes them. There's no endpoint to send, accept, decline or convert a quote.
Permissions
| Permission | Dependency in the permission map |
|---|---|
customers:read | No dependencies |
quotes:read | Depends on customers:read |
The location summary is only included when the connection also has customer_locations:read.
Quotes must be available for your organization: FieldTask makes Quotes available organization by organization, your organization must not have switched Quotes off, and its currency must use no more than two decimal places. Otherwise the response is 404 resource_not_found.
Request
Responses
- 200
- 400
- 401
- 403
- 404
- 405
- 429
- 503
OK
Response Headers
Responses must not be cached.
Server-generated request correlation ID.
Bad Request
Response Headers
Responses must not be cached.
Server-generated request correlation ID.
Unauthorized
Response Headers
Responses must not be cached.
Server-generated request correlation ID.
Forbidden
Response Headers
Responses must not be cached.
Server-generated request correlation ID.
Not Found
Response Headers
Responses must not be cached.
Server-generated request correlation ID.
Method Not Allowed
Response Headers
Responses must not be cached.
Server-generated request correlation ID.
Too Many Requests
Response Headers
Responses must not be cached.
Seconds before retry; present on 429 and an in-progress operation.
Server-generated request correlation ID.
Service Unavailable
Response Headers
Responses must not be cached.
Server-generated request correlation ID.
Filtering
All filters are optional and can be combined:
| Parameter | Returns |
|---|---|
customer_id | Only quotes for this customer. The ID must be a customer in your organization; otherwise the response is 404 resource_not_found. |
status | Only quotes with this status: draft, sent, accepted, declined, expired or archived. |
Send each parameter at most once. Any other parameter, including a date filter, is rejected with 400 invalid_query.
Pagination
page_sizesets the number of quotes per page, from 1 to 100. The default is 25.orderingiscreated_at(oldest first, the default) or-created_at(newest first).- When
page.has_moreistrue, requestpage.next_page_urlwith the sameAuthorizationheader. It keeps your page size, ordering and filters. It'snullon the last page. - If you build URLs yourself, pass
page.next_cursorascursorand keep every other parameter unchanged. Cursors expire within 24 hours and only work with the query and connection that produced them.
To change a filter or the ordering, start again without a cursor. See Pagination.
Quote fields
| Field | Meaning |
|---|---|
quote_number | The number FieldTask assigned, such as QT-1037. |
title | The quote's title. An empty string when it has none. |
status | draft, sent, accepted, declined, expired or archived. unknown means a status this API version doesn't recognize; handle it rather than failing. |
customer | The customer's ID, name and email, or null when the quote has no customer or the customer has been removed. |
location | The location's ID, name and address, or null. Needs customer_locations:read. |
issue_date | The quote date, with no time zone, or null. |
expiry_at | When the quote stops being valid, in UTC, or null. |
selected_revision | Which version of the quote the amounts come from. See below. |
subtotal, discount_amount, tax_amount, total | Amounts as decimal strings in currency. See Totals, taxes and discounts. |
discount_type, discount_value, tax_rate | The discount and tax settings behind those amounts. |
Amount fields and selected_revision are null for a quote that has no revision yet, which can happen for a quote still being started in FieldTask.
Which version the values come from
A quote can have several revisions: when someone edits a quote that was already sent, FieldTask creates a new draft revision while the customer keeps seeing the sent one. selected_revision tells you which revision the amounts, dates and summaries describe:
- If the customer accepted a revision, it's that accepted revision.
- Otherwise it's the current revision. For a sent quote that someone is editing, that's a
draftrevision, not the version the customer has.
Check selected_revision.state before treating the values as the offer the customer received. sent_at and accepted_at are in UTC.
Values from a sent or accepted revision are frozen as they were when it was sent or accepted: later changes to the customer's name or to catalog prices don't change them. The customer and location summaries of a frozen revision are shown only while that customer or location still exists in your organization; otherwise they're null. Draft revisions show their saved values.
Errors
| Status | code | Meaning | What to do |
|---|---|---|---|
| 400 | invalid_query | The query string has an unknown or repeated parameter, or status, ordering or page_size has a value that isn't allowed. | Send only customer_id, status, ordering, page_size and cursor, each once. |
| 400 | invalid_cursor | The cursor is malformed, was changed, or belongs to a different query, connection or page size. | Use next_page_url or the cursor exactly as returned, with the same query. To change the query, start again without a cursor. |
| 401 | invalid_token | The bearer token is missing, malformed, expired, revoked or issued for a different resource (for example an MCP sign-in). | Send a current REST API token or REST OAuth access token as Authorization: Bearer …. |
| 403 | api_access_not_enabled | FieldTask hasn't enabled API access for this organization, or has disabled it. | An owner or admin requests access in Settings → API connections. |
| 403 | insufficient_scope | The connection lacks a permission this request needs. error.code is missing_permission. | Add the permission named in error.message to the connection. |
| 404 | resource_not_found | Quotes aren't available for your organization or in this environment, customer_id isn't a customer in your organization, or the URL is wrong. | Check the customer ID, that Quotes is available and switched on for your organization, and that the path has no trailing slash. |
| 405 | method_not_allowed | This path doesn't accept the HTTP method, or the create isn't enabled in this environment. The Allow header lists the methods that are. | Use a method listed in Allow. |
| 429 | rate_limit_exceeded | Too many requests in the current minute, or too many concurrent requests, for the organization or connection. | Wait for Retry-After seconds, then retry. |
| 429 | daily_quota_exceeded | The organization or connection has used its daily allowance for this kind of request. Allowances reset at 00:00 UTC. | Wait for Retry-After seconds, or check remaining allowance in Settings → API connections. |
| 503 | temporarily_unavailable | The service couldn't complete the request. | Retry with exponential backoff. Retry creates with the same key and body. |