Skip to content

Filter jobs

Open .md

POST/v1/api/store/{team_slug}/job/filter

v1Operation ID v1_public_job_filter

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.

Permission

Any member of the team. No sales order permission is checked.

Business rules

  • Status types are start (Pending), pre_production and in_progress (In Progress), and end (Completed).
  • A sort key that isn't listed, or a direction other than asc or desc, is a 422.

Path parameters

  • team_slugstringrequired

    Your team slug, shown as Team ID next to your API key in Profile.

    • Example your-team

Request body

application/json, optional.

  • filtersarray of objects

    Conditions, all of which must match. Omit for no filter.

    • At least 1 item
    Fields of each item (3)
    • keystringrequired

      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"
    • operatorstringrequired

      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"
    • valuestring | number | boolean | arrayrequired

      What to compare with: text, a number of days, true or false, or an array of hash ids or options, by kind of key.

  • pageinteger

    The page to read.

    • Default 1
    • Minimum 1
  • sortarray of objects

    Sort keys, applied in order. Without sort the order is not guaranteed.

    Fields of each item (2)
    • directionstringrequired
      • One of: "asc", "desc"
    • keystringrequired
      • 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"

Response

200Successful response.

  • dataarray of objectsrequired
    Fields of each item (40)
    • assigned_usersarray of objects

      People on the job.

      Fields of each item (3)
    • auto_saved_forstring | null

      Set only on autosave copies.

    • customerobject
      Child fields (2)
      • idstring | null

        The customer.

      • namestring | null
    • due_datestring (date-time) | null

      Production due date. ISO 8601 with offset, or null.

    • Kept for older clients; not a count of services.

    • idstring

      The job.

    • impression_countnumber | null
    • inventory_statusstring | null

      The stock status of the job's lines.

    • is_rushboolean
    • item_countnumber | null

      Units on the job.

    • location_countnumber | null
    • mockuparray of objects

      Mockup files.

      Fields of each item (3)
      • idstring

        The file.

      • namestring | null
      • urlstring | null

        Download link with its own access token.

    • Child fields (2)
    • namestring | null
    • need_cust_provide_productboolean | integer | null

      Blanks are provided by the customer.

    • notestring | null
    • order_idstring

      The order.

    • The order number.

    • pdfarray of objects

      PDF links.

      Fields of each item (2)
      • labelstring
      • urlstring (uri)

        A download link that carries its own long-lived access token: don't publish it.

    • positioninteger | null
    • The 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). Read dp every time: it can differ between fields and records.

    • The 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 | null

        Full summary only: the price after the rule, as a decimal string.

      • after_totaldecimal pair

        The decoration price after the rule. A decimal pair: the amount is value ÷ 10^dp ({ "value": 1250, "dp": 2 } is 12.50). Read dp every time: it can differ between fields and records.

      • basestring | null

        Full summary only: the decoration price the rule started from, as a decimal string.

      • base_typestring | null

        Full summary only: service_price.

      • normal_pricestring | null

        Full summary only: the price with no rule (the same as base for a job).

      • original_totaldecimal pair

        The decoration price before the rule. A decimal pair: the amount is value ÷ 10^dp ({ "value": 1250, "dp": 2 } is 12.50). Read dp every time: it can differ between fields and records.

      • pricing_group_idstring | null

        The pricing group.

      • pricing_group_namestring | null

        Full summary only: the group's name now.

      • pricing_group_removedboolean | null

        Full summary only: true when the group was removed since. The job keeps its price.

      • pricing_rule_idstring | null

        The pricing rule.

      • ruleobject | null

        Full 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 | null

        service on a job.

    • pricing_totaldecimal pair

      The job's price, at the stored scale (usually 6 decimal places: { "value": 600000000, "dp": 6 } is 600.00). A decimal pair: the amount is value ÷ 10^dp ({ "value": 1250, "dp": 2 } is 12.50). Read dp every time: it can differ between fields and records.

    • production_filearray of objects

      Production files.

    • qr_code_urlstring | null

      A QR code image for the job.

    • A summary of the job's order.

      Child fields (14)
      • created_bystring | null

        Who created the order.

      • cust_due_datestring (date-time) | null

        Order customer due (in-hand) date. ISO 8601 with offset, or null.

      • due_datestring (date-time) | null

        Order production due date. ISO 8601 with offset, or null.

      • external_typestring | null

        shopify when the order came from Shopify, else null.

      • is_quoteboolean
      • is_rushboolean
      • issue_datestring (date-time) | null

        Order issue date. ISO 8601 with offset, or null.

      • namestring | null

        Order name.

      • object_typestring | null

        sales_order or quote.

      • ship_due_datestring (date-time) | null

        Order ship-by date. ISO 8601 with offset, or null.

      • shopify_deleted_externally_atstring (date-time) | null

        When it was deleted in Shopify. ISO 8601 with offset, or null.

      • start_datestring (date-time) | null

        Order production start. ISO 8601 with offset, or null.

      • status_idstring | null

        The order status.

    • scoped_idstring

      The job number as shown, with its JOB- prefix. Change a job number takes only the digits.

    • start_datestring (date-time) | null

      Production start. ISO 8601 with offset, or null.

    • statusobject

      A status: label, kind and place in the list.

      Child fields (9)
      • colorstring | null

        Hex color.

      • idstring

        The status.

      • labelstring
      • Only on the statuses of a task preset (role pipeline): the task preset. Absent on other statuses.

      • positioninteger

        Its place in the team's list: sort by it to find the next status.

      • rolestring

        Which list it belongs to: job for job statuses, pipeline for the statuses of a task preset.

        • One of: "order", "quote", "job", "purchase_order", "shipment", "customer_message", "pipeline"
      • trashedboolean

        The status was deleted.

      • typestring

        The kind of status: start (Pending), pre_production and in_progress (In Progress), end (Completed).

        • One of: "start", "pre_production", "in_progress", "end"
    • status_completion_datestring (date-time) | null

      When it reached a Completed status. ISO 8601 with offset, or null.

    • status_idstring

      The job's current status: its production stage. Look it up in List job statuses, or read status.

    • status_last_change_datestring (date-time) | null

      When the status last changed. ISO 8601 with offset, or null.

    • Quantity that still needs ordering, with 8 decimal places ("12.00000000"). A decimal string, such as "0.00000000"; parse it as a decimal.

    • unique_keystring | null

      The job's unique key.

    • versioninteger
  • statusintegerrequired
  • successbooleanrequired
  • Child fields (6)
    • countintegerrequired
    • currentPageintegerrequired
    • perPageintegerrequired
    • totalintegerrequired
    • totalPagesintegerrequired

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, with unauthorized or user_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_failed lists what to fix in error.fields; other codes name a business rule, explained in error.message. A few checks answer with only {"message": "..."}. An operation that calls another service (a payment provider, a carrier, an accounting app) can answer connect_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; or filters is an empty array.
    Fix
    Check each filter against the table. Leave filters out to read everything.

Notes

  • Status ids come from List job statuses; task preset ids from List task presets.