Filter jobs
AI agents: read /llms.txt; add .md to any page URL. This page as Markdown: /reference/jobs/v1-job-filter.md. Index of every page and the rules for every call: /llms.txt. Guides and concepts in one file: /llms-full.txt. OpenAPI: /openapi.json.
POST/
Returns one page of your team's jobs that match the filters, in the order you ask for.
Only jobs on sales orders are listed: quotes, drafts and deleted jobs are left out. Each job is the full job (as in Get one job of an order) without services, pipelines and pending_approval; mockup and production_file are included.
Every condition in filters must match (they are joined with AND). Omit filters for no filter; an empty array is a 422. A key that isn't in the table, a missing operator or value, or a value of the wrong kind fails the whole request with 422; the message for filters (or sort) is the bare rule name validation.filter_rule (or validation.filter_sort_rule), with no detail, so check each filter against the table. Send real values: no key here matches empty columns with "null" or "" (for dates, use the ..._is_set keys where the table has them). Hash ids in value are decoded for you. system-current-user stands for the caller only where a key's row says so; elsewhere it is compared as a raw value, so with in it matches nothing and with nin it matches every row that has a value.
key |
Kind | Operators and value |
Meaning |
|---|---|---|---|
status_id |
Hash ids | in or nin, with an array of hash ids. |
The job status (hash ids from List job statuses). |
status_type |
Options | in or nin, with an array of the listed values. |
The kind of status: start (Pending), pre_production or in_progress (In Progress), end (Completed). |
is_rush |
Yes or no | eq or neq, with true or false. |
Rush jobs. |
start_date |
Date | eq, gte or lte, with a whole number of days counted from now (UTC). See below. |
The job's start date. |
due_date |
Date | eq, gte or lte, with a whole number of days counted from now (UTC). See below. |
The job's due date. |
start_date_is_set |
Yes or no | eq or neq, with true or false. |
The job has a start date (eq true) or none (eq false). Use eq only: any neq means "has the date". |
due_date_is_set |
Yes or no | eq or neq, with true or false. |
The job has a due date (eq true) or none (eq false). Use eq only: any neq means "has the date". |
need_cust_provide_product |
Yes or no | eq or neq, with true or false. |
Blanks are provided by the customer. |
job_has_pipelines |
Hash ids | in or nin, with an array of hash ids. |
The job has a task from one of these task presets. With nin it matches jobs that have a task from a preset outside the list, not jobs without those presets. |
has_any_pipelines |
Yes or no | eq or neq, with true or false. |
The job has at least one task. The operator and value aren't read: it always means "has a task". |
status_last_change_date |
Date | eq, gte or lte, with a whole number of days counted from now (UTC). See below. |
When the status last changed. |
status_completion_date |
Date | eq, gte or lte, with a whole number of days counted from now (UTC). See below. |
When the job reached a Completed status. |
total_qty_need_ordering |
Number | eq, neq, gt, gte, lt, lte, with a number. |
The quantity that still needs ordering. |
order_created_by |
Hash ids | in or nin, with an array of hash ids. |
Who created the sales order (user hash ids). system-current-user is not supported here: with in it matches nothing, with nin everything. |
search |
Text search | Any operator (ct reads best). The value must not be empty. |
Job name, job number (JOB-2419, 2419 and #2419 all match), order number, order name, customer PO and customer name. Every one of the first five words must match. |
A date filter's value is a whole number of days, counted from the moment of the request in UTC: eq N matches the whole UTC day N days from today (0 is today, -1 yesterday); gte N matches dates on or after now plus N days; lte N matches dates on or before now minus N days. So "due in the next 7 days" is due_date gte 0 and due_date lte -7, and "overdue" is due_date lte 0. This differs from the v2 filters (Filter invoices, the production control calendar), where lte and gte both count forward.
The response is one page with pagination. The page size is the team's list page size setting (50 unless the team changed it); per_page is not read. Send page (from 1) in the body or the query string for later pages.
Business rules
- Status types are
start(Pending),pre_productionandin_progress(In Progress), andend(Completed). - A sort
keythat isn't listed, or adirectionother thanascordesc, is a 422.
Path parameters
Your team slug, shown as Team ID next to your API key in Profile.
- Example
your-team
- Example
Request body
application/json, optional.
filtersarray of objectsConditions, all of which must match. Omit for no filter.
- At least 1 item
Fields of each item (3)
What to filter on. See the table in the description.
- One of:
"status_id","status_type","is_rush","start_date","due_date","start_date_is_set","due_date_is_set","need_cust_provide_product","job_has_pipelines","has_any_pipelines","status_last_change_date","status_completion_date","total_qty_need_ordering","order_created_by","search"
- One of:
How to compare. Each kind of key accepts only some operators.
- One of:
"eq","neq","gt","gte","lt","lte","in","nin","bt","ct","sw","ew"
- One of:
What to compare with: text, a number of days, true or false, or an array of hash ids or options, by kind of key.
pageintegerThe page to read.
- Default
1 - Minimum 1
- Default
sortarray of objectsSort keys, applied in order. Without
sortthe order is not guaranteed.Fields of each item (2)
- One of:
"asc","desc"
- One of:
- One of:
"id","due_date","order_id","status_id","start_date","impression_count","item_count","scoped_id","is_rush","position","status_last_change_date","status_completion_date","order_due_date","order_ship_due_date","order_cust_due_date","order_issue_date","total_qty_need_ordering","order_ship_due_date_undated_last","created_at_id"
- One of:
Response
200Successful response.
Fields of each item (40)
assigned_usersarray of objectsPeople on the job.
Fields of each item (3)
avatar_urlstring | nullidstringThe user.
namestring
auto_saved_forstring | nullSet only on autosave copies.
customerobjectdue_datestring (date-time) | nullProduction due date. ISO 8601 with offset, or null.
from_legacybooleanhas_servicebooleanKept for older clients; not a count of services.
idstringThe job.
impression_countnumber | nullinventory_statusstring | nullThe stock status of the job's lines.
is_rushbooleanitem_countnumber | nullUnits on the job.
location_countnumber | nullmockuparray of objectsMockup files.
mockup_design_countintegermockup_summaryobjectChild fields (2)
countintegerhas_mockupsboolean
namestring | nullneed_cust_provide_productboolean | integer | nullBlanks are provided by the customer.
notestring | nullorder_customer_po_numberstring | nullorder_idstringThe order.
order_scoped_idstringThe order number.
pdfarray of objectsPDF links.
positioninteger | nullpricing_original_totaldecimal pairThe job's price before pricing rules, at the stored scale. A decimal pair: the amount is
value÷ 10^dp({ "value": 1250, "dp": 2 }is 12.50). Readdpevery time: it can differ between fields and records.- See Money and quantities.
pricing_rule_appliedobject | nullThe pricing rule that set the job's decoration price, or null. These answers usually carry only
type, the two ids and the two totals. List the jobs of a sales order or quote and Get one job of a sales order or quote answer with the full summary (the rule's current name and position, the prices before and after).Child fields (12)
afterstring | nullFull summary only: the price after the rule, as a decimal string.
after_totaldecimal pairThe decoration price after the rule. A decimal pair: the amount is
value÷ 10^dp({ "value": 1250, "dp": 2 }is 12.50). Readdpevery time: it can differ between fields and records.- See Money and quantities.
basestring | nullFull summary only: the decoration price the rule started from, as a decimal string.
base_typestring | nullFull summary only:
service_price.normal_pricestring | nullFull summary only: the price with no rule (the same as
basefor a job).original_totaldecimal pairThe decoration price before the rule. A decimal pair: the amount is
value÷ 10^dp({ "value": 1250, "dp": 2 }is 12.50). Readdpevery time: it can differ between fields and records.- See Money and quantities.
pricing_group_idstring | nullThe pricing group.
pricing_group_namestring | nullFull summary only: the group's name now.
pricing_group_removedboolean | nullFull summary only: true when the group was removed since. The job keeps its price.
pricing_rule_idstring | nullThe pricing rule.
ruleobject | nullFull summary only: the rule as the group holds it now (
id,label,position, where 1 is the first rule checked), or null when it no longer exists.typestring | nullserviceon a job.
pricing_totaldecimal pairThe job's price, at the stored scale (usually 6 decimal places:
{ "value": 600000000, "dp": 6 }is 600.00). A decimal pair: the amount isvalue÷ 10^dp({ "value": 1250, "dp": 2 }is 12.50). Readdpevery time: it can differ between fields and records.- See Money and quantities.
production_filearray of objectsProduction files.
- Same fields as
data[].mockup.
- Same fields as
qr_code_urlstring | nullA QR code image for the job.
sales_orderobjectA summary of the job's order.
Child fields (14)
created_bystring | nullWho created the order.
cust_due_datestring (date-time) | nullOrder customer due (in-hand) date. ISO 8601 with offset, or null.
due_datestring (date-time) | nullOrder production due date. ISO 8601 with offset, or null.
external_typestring | nullshopifywhen the order came from Shopify, else null.is_quotebooleanis_rushbooleanissue_datestring (date-time) | nullOrder issue date. ISO 8601 with offset, or null.
namestring | nullOrder name.
object_typestring | nullsales_orderorquote.ship_due_datestring (date-time) | nullOrder ship-by date. ISO 8601 with offset, or null.
shopify_deleted_externallybooleanshopify_deleted_externally_atstring (date-time) | nullWhen it was deleted in Shopify. ISO 8601 with offset, or null.
start_datestring (date-time) | nullOrder production start. ISO 8601 with offset, or null.
status_idstring | nullThe order status.
scoped_idstringThe job number as shown, with its
JOB-prefix. Change a job number takes only the digits.services_still_validbooleanstart_datestring (date-time) | nullProduction start. ISO 8601 with offset, or null.
statusobjectA status: label, kind and place in the list.
Child fields (9)
colorstring | nullHex color.
customer_labelstringidstringThe status.
labelstringpipeline_idstringOnly on the statuses of a task preset (
rolepipeline): the task preset. Absent on other statuses.positionintegerIts place in the team's list: sort by it to find the next status.
rolestringWhich list it belongs to:
jobfor job statuses,pipelinefor the statuses of a task preset.- One of:
"order","quote","job","purchase_order","shipment","customer_message","pipeline"
- One of:
trashedbooleanThe status was deleted.
typestringThe kind of status:
start(Pending),pre_productionandin_progress(In Progress),end(Completed).- One of:
"start","pre_production","in_progress","end"
- One of:
status_completion_datestring (date-time) | nullWhen it reached a Completed status. ISO 8601 with offset, or null.
status_idstringThe job's current status: its production stage. Look it up in List job statuses, or read
status.status_last_change_datestring (date-time) | nullWhen the status last changed. ISO 8601 with offset, or null.
total_qty_need_orderingstring | nullQuantity that still needs ordering, with 8 decimal places (
"12.00000000"). A decimal string, such as"0.00000000"; parse it as a decimal.unique_keystring | nullThe job's unique key.
versioninteger
paginationobjectChild fields (6)
Links to the neighbouring pages:
previousandnext, each present only when that page exists. An empty list,[], when there is only one page.
Errors
401The API key is missing or wrong (
unauthenticated).403You are not allowed to do this.
api_access_not_in_plan: your team's plan doesn't include API access (Pro and above, with an active subscription or trial), so every request answers this until the team upgrades. When your role lacks the permission the operation needs, the body is only{"message": "Insufficient Permission"}. Other refusals use the error envelope, withunauthorizedoruser_is_not_authorized.404Not found.
page_not_found: the team slug is unknown, you are not a member of the team, or an id in the path is not one of this team's.code: null, with a message that starts "No query results for": there is no record with that id.422The request was refused and changed nothing.
validation_failedlists what to fix inerror.fields; other codes name a business rule, explained inerror.message. A few checks answer with only{"message": "..."}. An operation that calls another service (a payment provider, a carrier, an accounting app) can answerconnect_timeout("Please retry again") when that service does not answer in time: the change may or may not have happened there, so read the record back before you retry.- When
- A filter has an unknown
key, a missing part, or an operator or value its kind doesn't accept; orfiltersis an empty array. - Fix
- Check each filter against the table. Leave
filtersout to read everything.
Notes
- Status ids come from List job statuses; task preset ids from List task presets.
Related
- GETList jobs
/v1/ api/ store/ {team_slug}/ job - POSTList jobs in a date range
/v1/ api/ store/ {team_slug}/ job/ calendar - GETList job statuses
/v1/ api/ store/ {team_slug}/ setting/ status/ job - GETList task presets
/v1/ api/ store/ {team_slug}/ setting/ pipeline
