# List all offers Required scopes: offer:read Endpoint: GET /offers Version: v1 Security: http, oauth2 ## Query parameters: - `sort` (string) Available sorts are offer_number, title, date_of_offer, sum_net, sum_tax, sum_external_costs, sum_gross, created_at, updated_at, computed_fields..You can sort by multiple options by separating them with a comma. To sort in descending order, use - sign in front of the sort, for example: -title. Example: "sort=-created_at,title" - `include` (string) Available includes are external_costs, line_items, discounts. You can include multiple options by separating them with a comma. - `page[size]` (integer) The number of results that will be returned per page. - `page[cursor]` (string) The cursor to start the pagination from. - `filter` (string) Allowed filter fields (with allowed operators): | Field | Type | Operators | |------|------|-----------| | archived | enum: with, only, without | eq | | title | string | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull | | offer_number | string | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull | | date_of_offer | date | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull | | date_of_expiry | date | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull | | sum_net | currency | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull | | sum_tax | currency | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull | | sum_gross | currency | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull | | editor.id | id | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull | | editor.external_id | string | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull | | editor.email | string | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull | | client.id | id | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull | | client.name | string | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull | | client.external_id | string | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull | | client.shortcode | string | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull | | project.id | id | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull | | project.title | string | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull | | project.external_id | string | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull | | project.shortcode | string | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull | | company.id | id | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull | | company.company_name:string | string | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull | | line_items | Relation - title (string) - price (currency) - amount (float) - project.id (id) - project.title (string) - project.external_id (string) - project.shortcode (string) - total_net (currency) - total_net_base (currency) - total_gross (currency) - total_gross_base (currency) - purchase_total (currency) - type (enum) | any, none, count, all | | external_costs | Relation - title (string) - amount (float) - project.id (id) - project.title (string) - project.external_id (string) - project.shortcode (string) - supplier.id (id) - supplier.name (string) - price (currency) - total (currency) | any, none, count, all | Filtering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL. You can check the full syntax at Docs Filtering section. Special values: - me.id — current authenticated user id (usable on fields of type id). Example: id eq me.id - now — current date-time. Example: dueOn lt now - sow/eow — start/end of week. Examples: dueOn gt sow, dueOn lt eow - som/eom — start/end of month. Examples: dueOn gt som, dueOn lt eom - today — special date for today; with eq it expands to the whole day range. Example: dueOn eq today - today±Nd — relative day offset. Examples: today-30d, today+5d. Example: "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")" - `computed_fields[alias]` (string) Dynamic computed relation fields (computed_fields[alias]) Declare ad-hoc aggregates per request using: computed_fields[] = relation.aggregate(args) Syntax: - Count: relation.count() or relation.count() - Sum/Avg/Min/Max: relation.sum() or relation.sum(, ) Where is written using the same Filter DSL and is validated against the relation's allowed fields. Use the prefix computed_fields. when referencing these aliases in filter or sort, e.g., filter=computed_fields.tasks_done gte 1 or sort=-computed_fields.tasks_done. Bare aliases are accepted for backward compatibility but deprecated. Allowed relations for computed_fields (deny-all by default): - line_items (→ lineItems): aggregates: count, sum, avg, min, max; coalesce default: 0 - external_costs (→ internalCosts): aggregates: count, sum, avg, min, max; coalesce default: 0 Example: ?computed_fields[tasks_done]=tasks.count(status%20eq%20%22Completed%22)&filter=computed_fields.tasks_done%20gt%200 Example: "computed_fields[tasks_done]=tasks.count(status%20eq%20%22Completed%22)" ## Response 200 fields (application/json): - `data` (array, required) The list of items - `data.id` (string, required) - `data.offer_number` (string,null, required) - `data.title` (string, required) - `data.status` (string, required) | | |---| | open Offer in draft | | approval_pending Offer was submitted for internal approval | | approval_approved Offer was internally approved | | transformed Customer approved offer | | cancelled Customer declined offer | Enum: "open", "approval_pending", "approval_approved", "transformed", "cancelled" - `data.approvals_needed` (integer,null, required) - `data.is_direct_approved` (boolean,null, required) Offer skipped internal approval process - can also be true if offer is still open, due to reopening - `data.date_of_offer` (string, required) - `data.date_of_expiry` (string, required) - `data.performance_range_start` (string, required) - `data.performance_range_end` (string, required) - `data.locale` (string, required) - `data.currency` (string, required) - `data.address` (string, required) - `data.address_changed` (boolean, required) If true the user manually overwrote the companies address - `data.company` (any, required) - `data.editor` (any, required) - `data.client` (object, required) - `data.client.external_id` (string,null, required) Can be used to add an identifier to the client from an external system, must be unique - `data.client.external_origin` (string,null, required) If originated from external system origin is added - `data.client.name` (string, required) - `data.client.shortcode` (string,null, required) - `data.client.primary_contact` (any, required) - `data.client.origin_space` (any, required) - `data.project` (any, required) - `data.taxation_enabled` (boolean, required) Can be used to indicate reverse charge ie - `data.sum_net` (number, required) - `data.sum_tax` (number, required) - `data.sum_gross` (number, required) - `data.sum_external_costs` (number, required) - `data.line_items` (array, required) - `data.line_items.type` (string, required) Enum: "unit", "category", "page_break" - `data.line_items.indent` (integer, required) - `data.line_items.order` (integer, required) - `data.line_items.is_optional` (boolean, required) - `data.line_items.price` (number, required) - `data.line_items.amount` (number, required) - `data.line_items.total_net_base` (number, required) Excluding all discounts Does not reflect total value over performance range - `data.line_items.total_net` (number, required) Including unit discount (not offer discounts) Does not reflect total value over performance range - `data.line_items.total_gross_base` (number, required) Excluding all discounts Does not reflect total value over performance range - `data.line_items.tax_factor` (number, required) - `data.line_items.total_gross` (number, required) Including unit discount (not offer discounts) Does not reflect total value over performance range - `data.line_items.metric` (object, required) - `data.line_items.metric.title_plural` (string, required) - `data.line_items.exclude_from_discount` (boolean, required) If true, the unit will be excluded from offer-wide discounts - `data.line_items.discount_factor` (number,null, required) - `data.line_items.discount_absolute` (number,null, required) - `data.line_items.discount_bound` (boolean, required) If true, the amount will multiply discount absolute - `data.line_items.purchase_price` (number, required) - `data.line_items.purchase_amount` (number, required) - `data.line_items.purchase_total` (number, required) - `data.line_items.purchase_price_bound` (boolean, required) If true, purchase_amount will be in sync with amount - `data.line_items.description` (string, required) - `data.line_items.payment_partial_type` (string, required) Enum: "once", "monthly", "yearly" - `data.line_items.payment_partial_interval` (integer,null, required) Interval if payment partial type is monthly or yearly | Type | Interval | Description | | ---- | -------- | ----------- | | once | any | Once per offer | | monthly | 1 | Every month in performance range | | monthly | 3 | Every 3 months in performance range | | monthly | 6 | Every 6 monthsin performance range | | yearly | 1 | Every year in performance range | | yearly | 3 | Every 3 years in performance range | | yearly | 6` | Every 6 years in performance range | - `data.external_costs` (array, required) - `data.external_costs.is_credit` (boolean, required) if true this cost is a credit - `data.external_costs.total` (number, required) - `data.external_costs.supplier` (any, required) - `data.external_costs.status` (string,null, required) - `data.external_costs.created_at` (string, required) - `data.external_costs.updated_at` (string,null, required) - `data.deleted_at` (string,null, required) - `data.computed_fields` (object) - `links` (array, required) - `meta` (object, required) - `meta.path` (string,null, required) Base path for paginator generated URLs. - `meta.per_page` (integer, required) Number of items shown per page. - `meta.next_cursor` (string,null, required) - `meta.next_cursor_url` (string,null, required) - `meta.prev_cursor` (string,null, required) - `meta.prev_cursor_url` (string,null, required) ## Response 401 fields (application/json): - `message` (string, required) Error overview.