Skip to main content
A client is a taxpayer or return that lives inside a workspace. Every client operation is reached through the me query resolved as a WorkspaceUser, so you must authenticate with a workspaceToken (see Authentication). All requests go to:
There is no top-level clients query. Clients belong to a workspace, so you read them through me { ... on WorkspaceUser { workspace { clients(...) } } }. The workspaceToken already identifies which workspace, so you never pass a workspace ID.

The Client type

ID!
The client’s unique identifier.
String!
The client’s display name.
String!
Your own identifier for the client (for example the ID from your practice management system). Unique within the workspace.
ClientStatus!
active or archived.
ReturnType!
The tax return form: F1040, F1041, F1065, F1120, F1120S, or F990.
Int!
The tax year, for example 2025.
Date!
When the client was created.
[WorkspaceUserShortDetails!]!
The workspace users assigned to this client.
[Task!]!
Background tasks for this client (binder ingestion, tax prep, and so on). See the tasks API. Narrow with the type, status, triggeredBy, and limit arguments.
The Client type exposes more fields (binder, documents, conversations, and others) than are listed here. This page covers the fields needed to create, list, fetch, and add documents to clients.

Create a client

createClient creates a client and, optionally, kicks off binder ingestion for any documents you have already staged (see Uploading documents).

Input: CreateClientInput

String!
required
The client’s display name.
String!
required
Your identifier for the client. Must be unique within the workspace.
ReturnType!
required
One of F1040, F1041, F1065, F1120, F1120S, F990.
Int!
required
The tax year, for example 2025.
[String!]
Optional. Upload IDs from the upload endpoint. If provided, Filed ingests these documents into the new client’s binder and returns a taskId you can track.

Returns: CreateClientResult

Client!
The created client.
ID
The binder ingestion task ID, present only when uploadIds were supplied. null when the client was created without documents.

List clients

Read workspace.clients to list clients. Filter, page, and sort with the arguments below.

Arguments

[ID!]
Return only clients with these IDs. This is how you fetch a single client.
[ClientStatus!]
Return only clients in these statuses (active, archived).
Free-text search over client name and external ID.
[ID!]
Return only clients assigned to these workspace users.
Boolean
When true, return only clients assigned to the authenticated user.
Int
Number of clients to skip, for pagination.
Int
Maximum number of clients to return.
SortBy
Sort order, for example { "field": "createdAt", "order": "DESC" }.

Fetch a single client

There is no client(id:) query. Fetch one client by passing its ID in filters.ids and reading the first element.
An empty clients array means no client with that ID exists in this workspace. Handle it as a not-found result.

Add documents to a client

addClientDocuments attaches already-staged uploads to an existing client and ingests them into the client’s binder. Stage the files first with the upload endpoint.

Input: AddClientDocumentsInput

ID!
required
The client to add documents to.
[String!]!
required
One or more upload IDs from the upload endpoint.

Returns: AddClientDocumentsResult

ID
The binder ingestion task ID. Poll it until status is COMPLETED to know the documents are filed in the binder.

Re-run binder ingestion

retriggerIngestion re-runs binder ingestion for a client using the documents already attached to it, without requiring you to re-upload any files. Use it when a prior ingestion task finished with status: FAILED (or otherwise did not file the documents into the binder) and the original files have not changed. When the files themselves have changed, re-upload them and call addClientDocuments with the new upload IDs instead.

Input: RetriggerIngestionInput

ID!
required
The client whose binder ingestion you want to re-run.

Returns: RetriggerIngestionResult

ID
The new binder ingestion task ID. Nullable: when the client has no documents to ingest, or ingestion could not be started, the field is null. Poll it with the same pattern as addClientDocuments: list the client’s tasks narrowed to type: BINDER and wait for status to leave RUNNING.
retriggerIngestion is the more direct way to retry a failed ingestion, since you do not need to re-stage the original uploads. See the Onboard a client recipe for where it fits in the onboarding flow.

Manage clients

Beyond create, list, and fetch, the API exposes a set of mutations for the rest of the client lifecycle: rename, archive, restore, permanently delete, and assign or unassign workspace users. All of them take a single input argument identified by clientId, return either the updated Client or a Boolean, and require a workspaceToken (see Authentication).

Update a client

updateClient renames a client. Only the name is mutable through this mutation.

Input: UpdateClientInput

ID!
required
The ID of the client to rename.
String!
required
The new display name for the client.

Returns: Client!

The updated Client.

Archive a client

archiveClient sets the client’s status to archived. Archived clients are excluded from default lists but kept on disk and can be restored.

Input: ArchiveClientInput

ID!
required
The ID of the client to archive.

Returns: Client!

The archived Client with status set to archived.

Restore a client

restoreClient sets an archived client’s status back to active.

Input: RestoreClientInput

ID!
required
The ID of the archived client to restore.

Returns: Client!

The restored Client with status set to active.

Delete a client

deleteClient permanently removes a client and its binder. It cannot be undone.
deleteClient is irreversible. The client, its documents, and its binder are permanently removed. Prefer archiveClient when you only need to hide a client from active lists.

Input: DeleteClientInput

ID!
required
The ID of the client to permanently delete.

Returns: Boolean!

true when the client was deleted.

Assign a user to a client

assignUserToClient assigns a workspace user to a client and returns the created ClientAssignee.

Input: AssignUserToClientInput

ID!
required
The ID of the client to assign the user to.
ID!
required
The ID of the workspace user to assign. Use the userId of a WorkspaceUserShortDetails from the workspace’s members, or the id returned by me.

Returns: ClientAssignee!

ID!
The assignment record ID.
ID!
The client the user was assigned to.
WorkspaceUserShortDetails!
The workspace user who was assigned. See WorkspaceUserShortDetails under assignees for the field shape.
WorkspaceUserShortDetails!
The workspace user who performed the assignment (the authenticated caller).
Date!
When the assignment was created.

Unassign a user from a client

unassignUserFromClient removes a workspace user’s assignment from a client.

Input: UnassignUserFromClientInput

ID!
required
The ID of the client to remove the assignment from.
ID!
required
The ID of the workspace user to unassign.

Returns: Boolean!

true when the assignment was removed.