Skip to main content
A task is a background job Filed runs for a workspace: binder ingestion, tax prep, tax review, tax advisor, or chat. Mutations like createClient and addClientDocuments return a taskId; you use the tasks API to follow that work to completion. Tasks are reached through the me query as a WorkspaceUser, so authenticate with a workspaceToken (see Authentication). All requests go to:

The Task type

ID!
The task’s unique identifier. This is the value returned as taskId by the mutations that start work.
TaskType!
What kind of work this is: BINDER, TAX_PREP, TAX_REVIEW, TAX_ADVISOR, or CHAT.
TaskStatus!
RUNNING, COMPLETED, or FAILED. Poll this to know when work finishes.
String!
ISO 8601 timestamp of when the task started.
String
ISO 8601 timestamp of when the task finished. null while RUNNING.
String
A human-readable error message when status is FAILED. null otherwise.
[TaskAttribute!]!
Arbitrary name/value metadata pairs describing the task.
[SubTask!]!
The individual stages of the task, each with its own status. Use these for granular progress while a task is RUNNING.
TaskResult!
The typed result of the task, resolved by type. See Task result.
ClientShortDetails
The client this task belongs to (id, name), when applicable.
UserShortDetails
The user who started the task (id, name, email).

Supporting types

SubTaskType!
The stage, for example CONVERT_DOCUMENTS, CLASSIFY_SUBDOCS, EXTRACT_SUBDOCS, or EXPORT_AND_INDEX. The full set of stages depends on the parent task’s type.
DataEntryErrorCode
A machine-readable code when a data-entry stage fails, for example INVALID_CREDENTIALS, CLIENT_NOT_FOUND, or TIMEOUT. null otherwise.

List tasks

Read workspace.tasks to list tasks across the whole workspace. Filter, page, and sort with the arguments below.

Arguments

TaskType
Return only tasks of this type.
TaskStatus
Return only tasks in this status (RUNNING, COMPLETED, FAILED).
ID
Return only tasks started by this user.
Free-text search over task metadata.
SortBy
Sort order, for example { "field": "startedAt", "order": "DESC" }.
Int
Maximum number of tasks to return.
Int
Number of tasks to skip, for pagination.

Check a single task’s status

There is no task(id:) query. To follow one task (for example the taskId returned by createClient or addClientDocuments), list the tasks for its client with client.tasks and read the entry whose id matches. Because a client’s task list is small and typed, this is the reliable way to poll a specific task.
Client.tasks accepts these arguments:
TaskType
Narrow to one task type, for example BINDER to watch document ingestion.
Int
Cap the number of tasks returned (for example 1 for the most recent).
Poll on an interval (for example every few seconds) until status is no longer RUNNING. COMPLETED means the work succeeded; FAILED means it did not, and errorMessage explains why. subTasks show which stage is currently running.

Task result

Every task carries a typed result. TaskResult is a union whose concrete type is determined by the task’s type. Select fields with an inline fragment on the member you expect, and read __typename to know which one you got.
object
The fallback result, including for BINDER and CHAT tasks.
object
Returned for TAX_PREP tasks: a summary plus document/form counts and the individual review items.
object
Returned for TAX_REVIEW tasks: a summary plus issue breakdowns by severity and by form.
object
Returned for TAX_ADVISOR tasks: a summary plus strategy counts. The by* fields are JSON maps.
Because the members share taxYear, returnType, and summary, you can select those on each fragment and branch on __typename: