Optional. A filter expression that restricts which jobs are returned.
Filter expressions are written against the public Job resource shape. Supported field paths and operators:
job_id = "<id>" (also !=)
configuration:load, configuration:update, configuration:publish — match jobs of the given type using
the has operator (:).
configuration.load.source_id = "<id>"
configuration.publish.destination_id = "<id>"
configuration.publish.data_product_id = "<id>"
configuration.update.data_product_id = "<id>"
configuration.update.workflow_id = "<id>"
status.state = PENDING|RUNNING|STOPPING|DONE (also !=)
status:error — match jobs that finished with an error.
Lifecycle entry times can be filtered with zero-arg functions that return the moment the job
entered the corresponding state. Each function except create_time() is undefined for jobs
that have not entered the state, in which case any comparison evaluates to false. The
right-hand side must be an RFC 3339 timestamp literal.
create_time() — when the job was created (always defined).
start_time() — when the job began executing.
cancel_time() — when a stop was requested.
stop_time() — when the job finished executing.
A bare lifecycle-time function call (no comparator) is a presence predicate that matches jobs
which entered the corresponding state. Combine with NOT to match jobs that did not:
cancel_time() // jobs for which a stop was requested
NOT cancel_time() // jobs that were never cancelled
stop_time() // jobs that have finished executing
Clauses may be combined with AND, OR, and NOT, and grouped with parentheses. Examples:
configuration:load AND status.state = DONE
status.state = RUNNING OR status.state = PENDING
configuration.update.data_product_id = "dp-abc" AND NOT status:error
start_time() < "2026-01-01T00:00:00Z"
stop_time() > "2026-01-01T00:00:00Z" AND status:error
start_time() AND NOT cancel_time()
Note: when paging, the filter value must remain the same on every request.
If both filter and query are set, filter takes precedence and query is ignored.