binder field on a client.
The binder is reached through the me query resolved as a
WorkspaceUser, so every binder operation requires a workspaceToken (see
Authentication). All requests go to:
There is no top-level
binder query. The binder belongs to a client, so you
read it through
me { ... on WorkspaceUser { workspace { clients(filters: { ids: [$clientId] }) { binder { ... } } } } }.
The workspaceToken already identifies the workspace, so you never pass a
workspace ID to read the binder.The Binder type
The top-level binder container for one client.
The binder’s unique identifier.
The client this binder belongs to.
The files filed in the binder. Pass a
SubDocumentsFilter to narrow to
unreviewed, flagged, or files under one parent document. See
List the files in a binder.When the binder was created (ISO 8601 timestamp).
When the binder was last updated (ISO 8601 timestamp).
The missing-item checklist for this binder. Pass a
BinderMissingItemsFilter
to narrow by status. See List missing items.The number of missing items in the
OPEN status. Use this as a quick badge
count without fetching the full missingItems list.Open missing-item and notes counts for badge rendering. See
Read message counts.
Search across bookmarks, annotations, marks, and document contents. See
Search the binder.
The leadsheets tree for a
TAX_PREP or TAX_REVIEW run. Pass the run’s
taskId to read that run’s tree; omit it to read the most recent tree.
Leadsheets are documented separately on
Leadsheets and review; this page
does not re-document them.The SubDocument type
One file in a binder. A subdocument is one logical document extracted from an
uploaded parent (for example one 1099-INT inside a larger uploaded packet).
The subdocument’s unique identifier. This is the value you pass as
documentPath when creating a document message or
signing off on a file.The client this subdocument belongs to.
The ID of the parent document this subdocument was extracted from.
The file name, for example
1099-INT-Acme-Broker.pdf.The pages inside the parent document this subdocument covers, 1-indexed.
The document type the extractor classified this as, for example
1099-INT or
W-2.The issuer or payer named on the document, for example
Acme Broker.The tax year this document covers, for example
2025.The ingestion or review status of this subdocument, for example
ingested or
reviewed.The binder grouping category, when one has been assigned. Nullable: some
subdocuments are uncategorized until a reviewer files them.
The sort order of this subdocument within the binder.
When the subdocument was created (ISO 8601 timestamp).
When the subdocument was last updated (ISO 8601 timestamp).
The parent document this subdocument was extracted from. See
ParentDocument.The path to the
canonical.json file in the per-client git repo. Populated
when a tax-prep run has picked up this subdocument; null until then.The use-case bucket the subdocument lives in on disk, for example
source_docs, prior_year_docs, or current_year_drafts. null when the
subdocument has not yet been migrated into a bucket.The ParentDocument type
The original uploaded document a subdocument was extracted from. Carries the
file URL and per-page render URLs.
The parent document’s unique identifier.
The original uploaded file name.
The MIME type, for example
application/pdf.A signed URL for downloading the original file.
SignedPath is
{ filePath: String!, url: String! }.Per-page render URLs for the parent document: one image URL and one markdown
URL per page, both signed and time-limited.
The BinderMissingItem type
One item on the missing-document checklist the binder produces: a form the run
expected to find but did not, with a severity, a reason, and a status you can
move between OPEN, IGNORED, and RESOLVED.
The missing-item record ID. Pass this to
ignoreBinderMissingItem or
restoreBinderMissingItem.The binder this missing item belongs to.
The missing item, for example
1099-INT or W-2 from Acme.The form type expected, when the checklist is form-specific.
The issuer the run expected to find, when relevant.
The tax year the missing item applies to.
How blocking the missing item is:
CRITICAL, MEDIUM, or LOW.Why the run flagged this as missing, for example
Expected a 1099-INT from Acme Broker but no matching document was found in the binder.The current status:
OPEN (still needs the document), IGNORED (a reviewer
dismissed it via ignoreBinderMissingItem), or
RESOLVED (the document was later found and filed).A grouping category, when one has been assigned.
When the missing-item record was created (ISO 8601 timestamp).
When the missing-item record was last updated (ISO 8601 timestamp).
The BinderMessageCounts type
Open missing-item and notes counts. Use these for quick badge rendering without
fetching the full missingItems list.
The number of missing items in the
OPEN status (same value as
Binder.openMissingItemsCount).The number of open annotation notes on the binder. See
Document messages for the annotation API.
The BinderSearchResults type
The result of Binder.search: four buckets of hits, one per search surface
(bookmarks, annotations, marks, and document contents).
Subdocuments whose file name, issuer, type, or category matched the query. See
BookmarkSearchHit.Binder messages (annotations and notes) whose body or expression matched the
query. See
BinderMessageSearchHit.Binder messages that are marks, whose body or expression matched the query. See
BinderMessageSearchHit.Hits inside document contents, with the matching field names, values, and
bounding boxes. See
BinderContentSearchHit.The BookmarkSearchHit type
The subdocument whose bookmark matched. See
SubDocument.Which subdocument field matched:
FILE_NAME, ISSUER, TYPE, or CATEGORY.A snippet of the matched value, for display.
The BinderMessageSearchHit type
A search hit inside a binder message (an annotation or a mark). The underlying
message is a BinderMessage, the binder’s internal message type used by
search. Annotation and sign-off writes use the DocumentMessage type (see
Document messages); BinderMessage is the read
shape the search surface returns.
The binder message that matched. See
BinderMessage.Which message field matched:
BODY (the message body) or EXPRESSION (an
expression inside the message content).A snippet of the matched text, for display.
true when the hit is a reply inside a thread, false when it is a top-level
message.The BinderMessage type
The binder’s internal message type, returned by Binder.search. It carries the
message’s anchor (subdocument path, page number, coordinates), content, threads,
and tagged users.
The binder message ID.
The binder this message belongs to.
The subdocument path the message is anchored to.
The page number inside the subdocument the message is anchored to, 1-indexed.
The on-page coordinates of the message anchor, when the message is pinned to a
region.
null for messages that are not pinned to a region.The message type label, for example
annotation or mark.The message content as a JSON object.
The user who created the message.
Reply threads on the message.
Users tagged on the message.
Whether the message has been read by the current user.
When the message was deleted, if applicable.
null while the message is live.The user who deleted the message, if applicable.
When the message was created (ISO 8601 timestamp).
When the message was last updated (ISO 8601 timestamp).
The BinderContentSearchHit type
A search hit inside a subdocument’s contents: the matching field names, values,
and the page-level bounding boxes that pin them.
The subdocument whose contents matched. See
SubDocument.A snippet of the matched content, for display.
The pages inside the subdocument that carried matches, with the field-level
matches on each page.
The page number, 1-indexed.
The field-level matches on this page.
The name of the field that matched.
The value of the field that matched.
The bounding box that pins this match on the page. See
BinderContentBbox
below. null when the match is not pinned to a region.Left edge of the box, in page pixels.
Top edge of the box, in page pixels.
Right edge of the box, in page pixels.
Bottom edge of the box, in page pixels.
The page this box is on, 1-indexed.
List the files in a binder
Readbinder.subdocuments to list the files filed in a client’s binder. This
is the most common read against the binder: it backs the binder’s Documents
screen.
Arguments
The client whose binder you want to read. Pass it via
filters.ids on
clients.When
true, return only subdocuments that have not been reviewed yet.When
true, return only subdocuments that carry a flag.Return only subdocuments extracted from this parent document.
List missing items
Readbinder.missingItems to list the missing-document checklist the run
produced. Filter by status to read only the open, ignored, or resolved items.
Arguments
The client whose binder you want to read. Pass it via
filters.ids on
clients.Return only missing items in this status:
OPEN, IGNORED, or RESOLVED.
Omit it to list every missing item regardless of status.Read message counts
Readbinder.messageCounts for the open missing-item count and the open notes
count. This is the cheap query for badge rendering: it does not return the full
missing-items or notes lists.
Arguments
The client whose binder counts you want. Pass it via
filters.ids on
clients.Search the binder
Readbinder.search to search across bookmarks (subdocuments by file name,
issuer, type, or category), annotations, marks, and document contents in one
call. The query is debounced in the web app: pass at least two characters.
Arguments
The client whose binder you want to search. Pass it via
filters.ids on
clients.The search query. The web app debounces the input and requires at least two
characters before firing the query.
Maximum number of hits to return per bucket. Defaults to
20.Ignore a missing item
ignoreBinderMissingItem moves a missing item from OPEN to IGNORED. Use it
when a reviewer dismisses a missing item the run flagged. The mutation takes
the missing-item id and the workspaceId, and returns the updated
BinderMissingItem with its new status.
Input
The ID of the missing item to ignore (the
id from
List missing items).The workspace ID. Unlike the read fields, this mutation takes the workspace ID
explicitly. Use the same workspace ID the
workspaceToken was issued for.Returns: BinderMissingItem!
The ignored BinderMissingItem, with status
set to IGNORED.
Restore a missing item
restoreBinderMissingItem moves a missing item from IGNORED back to OPEN.
Use it when a reviewer wants to re-surface a missing item they previously
ignored.
Input
The ID of the missing item to restore (the
id from
List missing items).The workspace ID. Use the same workspace ID the
workspaceToken was issued
for.Returns: BinderMissingItem!
The restored BinderMissingItem, with status
set to OPEN.