Supported REST operations
Send the access token in the Authorization: Bearer header. The scope column uses short names; send the fully qualified form.
| Method and path | Required scope | Result boundary |
|---|---|---|
GET /api/v1/clients | read or clients:read | Organization clients |
GET /api/v1/clients/{client_id} | clients:read | One client |
GET /api/v1/clients/{client_id}/entities | entities:read | Client's legal entities |
GET /api/v1/entities/{entity_id} | entities:read | One legal entity |
GET /api/v1/entities/{entity_id}/tax-years | tax-years:read | Entity's tax years |
GET /api/v1/tax-years/{tax_year_id} | tax-years:read | One tax year |
GET /api/v1/engagements/{engagement_id} | engagements:read | Safe identity, period, status, and lifecycle metadata |
GET /api/v1/engagements/{engagement_id}/documents | documents:read | Document registry metadata only |
GET /api/v1/engagements/{engagement_id}/workpapers | workpapers:read | Workpaper metadata only |
GET /api/v1/engagements/{engagement_id}/review-summary | review:read | Persisted review indicators, not a filing-readiness verdict |
GET /api/v1/computations | tax:compute | Batch dependency graph and target catalogs |
POST /api/v1/computations/batch | tax:compute | Selected batch targets and dependencies |
POST /api/v1/computations/rollovers/{target} | tax:compute | One rollover, reorganization, or screening result |
An engagement ID is the UUID of the corresponding tax-year engagement. Both unknown IDs and IDs outside your organization return 404.
Pagination
GET /clients, /engagements/{id}/documents, and /engagements/{id}/workpapers use bounded offset pagination. limit defaults to 50 and accepts 1 through 200. offset is zero-based and accepts 0 through 100,000. Follow pagination.hasMore and advance offset by the number of returned rows.
The client-to-entity and entity-to-tax-year collections use opaque keyset cursors. Pass the returned pagination.nextCursor unchanged as the next request's cursor; do not decode it or reuse it under a different parent resource. A null nextCursor marks the final page.
curl --get https://api.filemark.ca/api/v1/clients \
--header "Authorization: Bearer $FILEMARK_ACCESS_TOKEN" \
--data-urlencode "limit=50" \
--data-urlencode "offset=0"
{
"data": [
{
"id": "3f1a5b2c-9d4e-4f8a-b1c2-0a1b2c3d4e5f",
"name": "Acme Holdings Inc.",
"createdAt": "2026-07-14T12:00:00Z",
"updatedAt": "2026-07-14T12:00:00Z"
}
],
"pagination": {
"limit": 50,
"offset": 0,
"total": 1,
"hasMore": false
}
}
Deterministic computation
GET /api/v1/computations is the runtime catalog: the currently public batch targets, their public dependency graph, and the available rollover, reorganization, and screening targets. The catalog is the authority on what is currently available.
Submit one to 100 unique batch target names and an explicit four-digit inputs.taxYear; dependencies run automatically. The default v1 contract accepts a bounded JSON input object rather than per-target JSON Schemas: global request-size, nesting, list, and numeric bounds apply, and a field the outer object accepts is not necessarily supported by a given target — treat 4xx responses and returned warnings or provisional state as authoritative. The computation target reference documents each target's accepted input cells and returned output cells.
Optionally, a batch or rollover request may add the payloadContract selector — an exact boundaryProfileId plus payloadSchemaVersion pair, published per target in the computation target reference — to opt one target into its strict profile. A strict batch request names exactly one direct target; the request is validated against that target's versioned input schema before execution and the result against its output schema after, so a contract mismatch is a 400 instead of a silently divergent result. Omit payloadContract to stay on the default boundary; null is not valid.
curl --request POST https://api.filemark.ca/api/v1/computations/batch \
--header "Authorization: Bearer $FILEMARK_ACCESS_TOKEN" \
--header "Content-Type: application/json" \
--data '{"compute":["schedule3"],"inputs":{"taxYear":2026}}'
Run one catalogued rollover target by path:
curl --request POST https://api.filemark.ca/api/v1/computations/rollovers/section-86 \
--header "Authorization: Bearer $FILEMARK_ACCESS_TOKEN" \
--header "Content-Type: application/json" \
--data '{"inputs":{}}'
Batch and rollover execution responses include data, computeVersion, engineSchemaVersion, and timestamp; the computation-catalog response contains its data catalog only. Computation calls have no engagement_id and never hydrate or persist saved return data — every computation runs only from the inputs you submit, so the API cannot return a client's populated Schedule X.