{"openapi":"3.1.0","info":{"title":"Filemark Public API","description":"Versioned public REST API for Filemark. Exchange dedicated M2M client credentials at Filemark's audience-binding token endpoint and request only the domain/action scopes required by the integration. The v1 contract exposes organization-scoped client, entity, tax-year, engagement metadata, document, workpaper, review-summary, and deterministic computation capabilities. Tenant identity always comes from the provisioned API client.","version":"1.1.0"},"servers":[{"url":"/","description":"Current Filemark deployment"}],"paths":{"/api/v1/clients":{"get":{"tags":["public-api-v1","public-api-v1-clients"],"summary":"List clients","description":"List clients using tenant identity from the verified principal only.","operationId":"listClients","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Page size (1-200).","default":50,"title":"Limit"},"description":"Page size (1-200)."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":100000,"minimum":0,"description":"Zero-based row offset (maximum 100,000).","default":0,"title":"Offset"},"description":"Zero-based row offset (maximum 100,000)."}],"responses":{"200":{"description":"One page of the organization's clients.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientListResponse"}}},"headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}}},"400":{"description":"The request was rejected before endpoint validation.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"401":{"description":"Missing, invalid, expired, or unregistered M2M access token.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"OAuth 2.0 Bearer authentication challenge.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"The API client is inactive or the token lacks a required scope.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"Bearer error details when a token lacks scope.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"The requested organization-scoped resource was not found.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"405":{"description":"The HTTP method is not supported for this public resource.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"409":{"description":"The operation conflicts with the resource's current version or lifecycle state.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"422":{"description":"One or more request parameters are invalid.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"429":{"description":"The API client's request budget has been exceeded.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the request budget resets.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Limit":{"description":"Maximum requests in the active window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active window.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"413":{"description":"The request body exceeds the public API size limit.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"An unexpected server error occurred.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"502":{"description":"A required upstream service failed to complete the operation.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"503":{"description":"The dedicated M2M authentication service is temporarily unavailable.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds before retrying authentication.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}}},"security":[{"FilemarkOAuth2":["https://api.filemark.ca/read"]},{"FilemarkOAuth2":["https://api.filemark.ca/clients:read"]}]}},"/api/v1/clients/{client_id}":{"get":{"tags":["public-api-v1","public-api-v1-clients"],"summary":"Get a client","description":"Get one client without revealing cross-organization identifiers.","operationId":"getClient","parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}}],"responses":{"200":{"description":"The requested client.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientResource"}}},"headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}}},"400":{"description":"The request was rejected before endpoint validation.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"401":{"description":"Missing, invalid, expired, or unregistered M2M access token.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"OAuth 2.0 Bearer authentication challenge.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"The API client is inactive or the token lacks a required scope.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"Bearer error details when a token lacks scope.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"The requested organization-scoped resource was not found.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"405":{"description":"The HTTP method is not supported for this public resource.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"409":{"description":"The operation conflicts with the resource's current version or lifecycle state.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"422":{"description":"One or more request parameters are invalid.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"429":{"description":"The API client's request budget has been exceeded.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the request budget resets.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Limit":{"description":"Maximum requests in the active window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active window.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"413":{"description":"The request body exceeds the public API size limit.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"An unexpected server error occurred.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"502":{"description":"A required upstream service failed to complete the operation.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"503":{"description":"The dedicated M2M authentication service is temporarily unavailable.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds before retrying authentication.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}}},"security":[{"FilemarkOAuth2":["https://api.filemark.ca/clients:read"]}]}},"/api/v1/clients/{client_id}/entities":{"get":{"tags":["public-api-v1","public-api-v1-clients"],"summary":"List a client's entities","description":"List entities under an organization-owned client.","operationId":"listClientEntities","parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Client Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Page size (1-200).","default":50,"title":"Limit"},"description":"Page size (1-200)."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":4096},{"type":"null"}],"description":"Opaque cursor returned by the preceding page.","title":"Cursor"},"description":"Opaque cursor returned by the preceding page."}],"responses":{"200":{"description":"One cursor-paginated page of the client's entities.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityListResponse"}}},"headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}}},"400":{"description":"The request was rejected before endpoint validation.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"401":{"description":"Missing, invalid, expired, or unregistered M2M access token.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"OAuth 2.0 Bearer authentication challenge.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"The API client is inactive or the token lacks a required scope.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"Bearer error details when a token lacks scope.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"The requested organization-scoped resource was not found.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"405":{"description":"The HTTP method is not supported for this public resource.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"409":{"description":"The operation conflicts with the resource's current version or lifecycle state.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"422":{"description":"One or more request parameters are invalid.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"429":{"description":"The API client's request budget has been exceeded.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the request budget resets.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Limit":{"description":"Maximum requests in the active window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active window.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"413":{"description":"The request body exceeds the public API size limit.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"An unexpected server error occurred.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"502":{"description":"A required upstream service failed to complete the operation.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"503":{"description":"The dedicated M2M authentication service is temporarily unavailable.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds before retrying authentication.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}}},"security":[{"FilemarkOAuth2":["https://api.filemark.ca/entities:read"]}]}},"/api/v1/entities/{entity_id}":{"get":{"tags":["public-api-v1","public-api-v1-entities"],"summary":"Get an entity","description":"Get one entity without revealing cross-organization identifiers.","operationId":"getEntity","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entity Id"}}],"responses":{"200":{"description":"The requested entity.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityResource"}}},"headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}}},"400":{"description":"The request was rejected before endpoint validation.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"401":{"description":"Missing, invalid, expired, or unregistered M2M access token.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"OAuth 2.0 Bearer authentication challenge.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"The API client is inactive or the token lacks a required scope.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"Bearer error details when a token lacks scope.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"The requested organization-scoped resource was not found.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"405":{"description":"The HTTP method is not supported for this public resource.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"409":{"description":"The operation conflicts with the resource's current version or lifecycle state.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"422":{"description":"One or more request parameters are invalid.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"429":{"description":"The API client's request budget has been exceeded.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the request budget resets.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Limit":{"description":"Maximum requests in the active window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active window.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"413":{"description":"The request body exceeds the public API size limit.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"An unexpected server error occurred.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"502":{"description":"A required upstream service failed to complete the operation.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"503":{"description":"The dedicated M2M authentication service is temporarily unavailable.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds before retrying authentication.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}}},"security":[{"FilemarkOAuth2":["https://api.filemark.ca/entities:read"]}]}},"/api/v1/entities/{entity_id}/tax-years":{"get":{"tags":["public-api-v1","public-api-v1-entities"],"summary":"List an entity's tax years","description":"List tax years under an organization-owned entity.","operationId":"listEntityTaxYears","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entity Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Page size (1-200).","default":50,"title":"Limit"},"description":"Page size (1-200)."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":4096},{"type":"null"}],"description":"Opaque cursor returned by the preceding page.","title":"Cursor"},"description":"Opaque cursor returned by the preceding page."}],"responses":{"200":{"description":"One cursor-paginated page of the entity's tax years.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaxYearListResponse"}}},"headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}}},"400":{"description":"The request was rejected before endpoint validation.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"401":{"description":"Missing, invalid, expired, or unregistered M2M access token.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"OAuth 2.0 Bearer authentication challenge.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"The API client is inactive or the token lacks a required scope.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"Bearer error details when a token lacks scope.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"The requested organization-scoped resource was not found.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"405":{"description":"The HTTP method is not supported for this public resource.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"409":{"description":"The operation conflicts with the resource's current version or lifecycle state.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"422":{"description":"One or more request parameters are invalid.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"429":{"description":"The API client's request budget has been exceeded.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the request budget resets.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Limit":{"description":"Maximum requests in the active window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active window.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"413":{"description":"The request body exceeds the public API size limit.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"An unexpected server error occurred.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"502":{"description":"A required upstream service failed to complete the operation.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"503":{"description":"The dedicated M2M authentication service is temporarily unavailable.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds before retrying authentication.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}}},"security":[{"FilemarkOAuth2":["https://api.filemark.ca/tax-years:read"]}]}},"/api/v1/tax-years/{tax_year_id}":{"get":{"tags":["public-api-v1","public-api-v1-tax-years"],"summary":"Get a tax year","description":"Get one tax year without revealing cross-organization identifiers.","operationId":"getTaxYear","parameters":[{"name":"tax_year_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tax Year Id"}}],"responses":{"200":{"description":"The requested tax-year engagement.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaxYearResource"}}},"headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}}},"400":{"description":"The request was rejected before endpoint validation.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"401":{"description":"Missing, invalid, expired, or unregistered M2M access token.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"OAuth 2.0 Bearer authentication challenge.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"The API client is inactive or the token lacks a required scope.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"Bearer error details when a token lacks scope.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"The requested organization-scoped resource was not found.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"405":{"description":"The HTTP method is not supported for this public resource.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"409":{"description":"The operation conflicts with the resource's current version or lifecycle state.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"422":{"description":"One or more request parameters are invalid.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"429":{"description":"The API client's request budget has been exceeded.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the request budget resets.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Limit":{"description":"Maximum requests in the active window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active window.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"413":{"description":"The request body exceeds the public API size limit.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"An unexpected server error occurred.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"502":{"description":"A required upstream service failed to complete the operation.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"503":{"description":"The dedicated M2M authentication service is temporarily unavailable.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds before retrying authentication.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}}},"security":[{"FilemarkOAuth2":["https://api.filemark.ca/tax-years:read"]}]}},"/api/v1/engagements/{engagement_id}":{"get":{"tags":["public-api-v1","public-api-v1-engagements"],"summary":"Get an engagement","description":"Read one tax-year engagement without its financial/tax payloads.","operationId":"getEngagement","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Engagement Id"}}],"responses":{"200":{"description":"Safe identity, period, status, and lifecycle metadata.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EngagementResource"}}},"headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}}},"400":{"description":"The request was rejected before endpoint validation.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"401":{"description":"Missing, invalid, expired, or unregistered M2M access token.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"OAuth 2.0 Bearer authentication challenge.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"The API client is inactive or the token lacks a required scope.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"Bearer error details when a token lacks scope.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"The requested organization-scoped resource was not found.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"405":{"description":"The HTTP method is not supported for this public resource.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"409":{"description":"The operation conflicts with the resource's current version or lifecycle state.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"422":{"description":"One or more request parameters are invalid.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"429":{"description":"The API client's request budget has been exceeded.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the request budget resets.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Limit":{"description":"Maximum requests in the active window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active window.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"413":{"description":"The request body exceeds the public API size limit.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"An unexpected server error occurred.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"502":{"description":"A required upstream service failed to complete the operation.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"503":{"description":"The dedicated M2M authentication service is temporarily unavailable.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds before retrying authentication.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}}},"security":[{"FilemarkOAuth2":["https://api.filemark.ca/engagements:read"]}]}},"/api/v1/engagements/{engagement_id}/documents":{"get":{"tags":["public-api-v1","public-api-v1-engagements"],"summary":"List engagement documents","description":"List metadata only; storage paths and file contents are never returned.","operationId":"listEngagementDocuments","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Engagement Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Page size (1-200).","default":50,"title":"Limit"},"description":"Page size (1-200)."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":100000,"minimum":0,"description":"Zero-based row offset (maximum 100,000).","default":0,"title":"Offset"},"description":"Zero-based row offset (maximum 100,000)."}],"responses":{"200":{"description":"One page of safe document-registry metadata.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentListResponse"}}},"headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}}},"400":{"description":"The request was rejected before endpoint validation.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"401":{"description":"Missing, invalid, expired, or unregistered M2M access token.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"OAuth 2.0 Bearer authentication challenge.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"The API client is inactive or the token lacks a required scope.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"Bearer error details when a token lacks scope.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"The requested organization-scoped resource was not found.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"405":{"description":"The HTTP method is not supported for this public resource.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"409":{"description":"The operation conflicts with the resource's current version or lifecycle state.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"422":{"description":"One or more request parameters are invalid.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"429":{"description":"The API client's request budget has been exceeded.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the request budget resets.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Limit":{"description":"Maximum requests in the active window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active window.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"413":{"description":"The request body exceeds the public API size limit.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"An unexpected server error occurred.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"502":{"description":"A required upstream service failed to complete the operation.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"503":{"description":"The dedicated M2M authentication service is temporarily unavailable.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds before retrying authentication.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}}},"security":[{"FilemarkOAuth2":["https://api.filemark.ca/documents:read"]}]}},"/api/v1/engagements/{engagement_id}/workpapers":{"get":{"tags":["public-api-v1","public-api-v1-engagements"],"summary":"List engagement workpapers","description":"List promoted metadata only; JSONB content and account IDs stay private.","operationId":"listEngagementWorkpapers","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Engagement Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Page size (1-200).","default":50,"title":"Limit"},"description":"Page size (1-200)."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":100000,"minimum":0,"description":"Zero-based row offset (maximum 100,000).","default":0,"title":"Offset"},"description":"Zero-based row offset (maximum 100,000)."}],"responses":{"200":{"description":"One page of workpaper metadata without payloads.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkpaperListResponse"}}},"headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}}},"400":{"description":"The request was rejected before endpoint validation.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"401":{"description":"Missing, invalid, expired, or unregistered M2M access token.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"OAuth 2.0 Bearer authentication challenge.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"The API client is inactive or the token lacks a required scope.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"Bearer error details when a token lacks scope.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"The requested organization-scoped resource was not found.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"405":{"description":"The HTTP method is not supported for this public resource.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"409":{"description":"The operation conflicts with the resource's current version or lifecycle state.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"422":{"description":"One or more request parameters are invalid.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"429":{"description":"The API client's request budget has been exceeded.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the request budget resets.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Limit":{"description":"Maximum requests in the active window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active window.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"413":{"description":"The request body exceeds the public API size limit.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"An unexpected server error occurred.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"502":{"description":"A required upstream service failed to complete the operation.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"503":{"description":"The dedicated M2M authentication service is temporarily unavailable.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds before retrying authentication.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}}},"security":[{"FilemarkOAuth2":["https://api.filemark.ca/workpapers:read"]}]}},"/api/v1/engagements/{engagement_id}/review-summary":{"get":{"tags":["public-api-v1","public-api-v1-engagements"],"summary":"Get engagement review summary","description":"Expose safe review counts without inventing a persisted readiness pass.","operationId":"getEngagementReviewSummary","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Engagement Id"}}],"responses":{"200":{"description":"Persisted review indicators, explicitly not an authoritative filing-readiness verdict.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EngagementReviewSummary"}}},"headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}}},"400":{"description":"The request was rejected before endpoint validation.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"401":{"description":"Missing, invalid, expired, or unregistered M2M access token.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"OAuth 2.0 Bearer authentication challenge.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"The API client is inactive or the token lacks a required scope.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"Bearer error details when a token lacks scope.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"The requested organization-scoped resource was not found.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"405":{"description":"The HTTP method is not supported for this public resource.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"409":{"description":"The operation conflicts with the resource's current version or lifecycle state.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"422":{"description":"One or more request parameters are invalid.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"429":{"description":"The API client's request budget has been exceeded.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the request budget resets.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Limit":{"description":"Maximum requests in the active window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active window.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"413":{"description":"The request body exceeds the public API size limit.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"An unexpected server error occurred.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"502":{"description":"A required upstream service failed to complete the operation.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"503":{"description":"The dedicated M2M authentication service is temporarily unavailable.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds before retrying authentication.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}}},"security":[{"FilemarkOAuth2":["https://api.filemark.ca/review:read"]}]}},"/api/v1/computations":{"get":{"tags":["public-api-v1","public-api-v1-computations"],"summary":"List computation targets","operationId":"listComputations","responses":{"200":{"description":"Successful Response","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputationCatalogResponse"}}}},"400":{"description":"The request was rejected before endpoint validation.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"401":{"description":"Missing, invalid, expired, or unregistered M2M access token.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"OAuth 2.0 Bearer authentication challenge.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"The API client is inactive or the token lacks a required scope.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"Bearer error details when a token lacks scope.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"The requested organization-scoped resource was not found.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"405":{"description":"The HTTP method is not supported for this public resource.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"409":{"description":"The operation conflicts with the resource's current version or lifecycle state.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"422":{"description":"One or more request parameters are invalid.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"429":{"description":"The API client's request budget has been exceeded.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the request budget resets.","schema":{"type":"integer","minimum":0.0}},"X-RateLimit-Limit":{"description":"Maximum requests in the active window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active window.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"413":{"description":"The request body exceeds the public API size limit.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"An unexpected server error occurred.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"502":{"description":"A required upstream service failed to complete the operation.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"503":{"description":"The dedicated M2M authentication service is temporarily unavailable.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds before retrying authentication.","schema":{"type":"integer","minimum":0.0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}}},"security":[{"FilemarkOAuth2":["https://api.filemark.ca/tax:compute"]}]}},"/api/v1/computations/batch":{"post":{"tags":["public-api-v1","public-api-v1-computations"],"summary":"Compute tax schedules","operationId":"computeTaxSchedules","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchComputationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputationResultResponse"}}}},"400":{"description":"The request was rejected before endpoint validation.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"401":{"description":"Missing, invalid, expired, or unregistered M2M access token.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"OAuth 2.0 Bearer authentication challenge.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"The API client is inactive or the token lacks a required scope.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"Bearer error details when a token lacks scope.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"The requested organization-scoped resource was not found.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"405":{"description":"The HTTP method is not supported for this public resource.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"409":{"description":"The operation conflicts with the resource's current version or lifecycle state.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"422":{"description":"One or more request parameters are invalid.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"429":{"description":"The API client's request budget has been exceeded.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the request budget resets.","schema":{"type":"integer","minimum":0.0}},"X-RateLimit-Limit":{"description":"Maximum requests in the active window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active window.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"413":{"description":"The request body exceeds the public API size limit.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"An unexpected server error occurred.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"502":{"description":"A required upstream service failed to complete the operation.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"503":{"description":"The dedicated M2M authentication service is temporarily unavailable.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds before retrying authentication.","schema":{"type":"integer","minimum":0.0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}}},"security":[{"FilemarkOAuth2":["https://api.filemark.ca/tax:compute"]}]}},"/api/v1/computations/rollovers/{target}":{"post":{"tags":["public-api-v1","public-api-v1-computations"],"summary":"Compute a rollover or reorganization","operationId":"computeRollover","parameters":[{"name":"target","in":"path","required":true,"schema":{"type":"string","title":"Target"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RolloverComputationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputationResultResponse"}}},"headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}}},"400":{"description":"The request was rejected before endpoint validation.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"401":{"description":"Missing, invalid, expired, or unregistered M2M access token.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"OAuth 2.0 Bearer authentication challenge.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"403":{"description":"The API client is inactive or the token lacks a required scope.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"Bearer error details when a token lacks scope.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"404":{"description":"The requested organization-scoped resource was not found.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"405":{"description":"The HTTP method is not supported for this public resource.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"409":{"description":"The operation conflicts with the resource's current version or lifecycle state.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"422":{"description":"One or more request parameters are invalid.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"429":{"description":"The API client's request budget has been exceeded.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the request budget resets.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Limit":{"description":"Maximum requests in the active window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the active window.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"413":{"description":"The request body exceeds the public API size limit.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"500":{"description":"An unexpected server error occurred.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"502":{"description":"A required upstream service failed to complete the operation.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}},"503":{"description":"The dedicated M2M authentication service is temporarily unavailable.","headers":{"X-Request-Id":{"description":"Opaque request identifier for support and log correlation.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds before retrying authentication.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiErrorResponse"}}}}},"security":[{"FilemarkOAuth2":["https://api.filemark.ca/tax:compute"]}]}}},"components":{"schemas":{"AccountReviewStatusSummary":{"properties":{"followUp":{"type":"integer","minimum":0.0,"title":"Followup"},"analyzed":{"type":"integer","minimum":0.0,"title":"Analyzed"},"firstReview":{"type":"integer","minimum":0.0,"title":"Firstreview"},"secondReview":{"type":"integer","minimum":0.0,"title":"Secondreview"}},"type":"object","required":["followUp","analyzed","firstReview","secondReview"],"title":"AccountReviewStatusSummary"},"ActiveReviewMarkSummary":{"properties":{"total":{"type":"integer","minimum":0.0,"title":"Total"},"questions":{"type":"integer","minimum":0.0,"title":"Questions"},"corrections":{"type":"integer","minimum":0.0,"title":"Corrections"},"firstReview":{"type":"integer","minimum":0.0,"title":"Firstreview"},"partnerReview":{"type":"integer","minimum":0.0,"title":"Partnerreview"}},"type":"object","required":["total","questions","corrections","firstReview","partnerReview"],"title":"ActiveReviewMarkSummary"},"BatchComputationRequest":{"properties":{"compute":{"items":{"type":"string"},"type":"array","maxItems":100,"minItems":1,"title":"Compute","description":"Schedule/result keys to compute; dependencies run automatically.","examples":[["schedule1","schedule2","part_i_tax"]]},"inputs":{"additionalProperties":true,"type":"object","title":"Inputs","description":"Canonical batch-engine inputs. The supported keys depend on the requested schedule targets."},"payloadContract":{"$ref":"#/components/schemas/ComputationPayloadContractSelector","description":"Optional exact strict target contract. Omit this property to use the published legacy computation boundary; null is not valid."}},"additionalProperties":false,"type":"object","required":["compute"],"title":"BatchComputationRequest","description":"A bounded set of schedule targets plus their canonical engine inputs."},"ClientListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ClientResource"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/Pagination"}},"type":"object","required":["data","pagination"],"title":"ClientListResponse","description":"One organization-scoped page of public client resources."},"ClientResource":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"Stable UUID of the client.","examples":["3f1a5b2c-9d4e-4f8a-b1c2-0a1b2c3d4e5f"]},"name":{"type":"string","title":"Name","description":"Client display name.","examples":["Acme Holdings Inc."]},"createdAt":{"type":"string","format":"date-time","title":"Createdat","description":"ISO-8601 creation timestamp (UTC)."},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat","description":"ISO-8601 last-modified timestamp (UTC)."}},"type":"object","required":["id","name","createdAt","updatedAt"],"title":"ClientResource","description":"A client (the practitioner's end customer) in the caller's organization."},"ComputationCatalog":{"properties":{"batchTargets":{"items":{"type":"string"},"type":"array","title":"Batchtargets"},"batchDependencies":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object","title":"Batchdependencies"},"rolloverTargets":{"items":{"type":"string"},"type":"array","title":"Rollovertargets"}},"type":"object","required":["batchTargets","batchDependencies","rolloverTargets"],"title":"ComputationCatalog"},"ComputationCatalogResponse":{"properties":{"data":{"$ref":"#/components/schemas/ComputationCatalog"}},"type":"object","required":["data"],"title":"ComputationCatalogResponse"},"ComputationPayloadContractSelector":{"properties":{"boundaryProfileId":{"type":"string","maxLength":128,"minLength":1,"pattern":"^[a-z][a-z0-9_.-]*$","title":"Boundaryprofileid","description":"Exact strict computation boundary profile identifier."},"payloadSchemaVersion":{"type":"string","maxLength":64,"pattern":"^[0-9]+\\.[0-9]+\\.[0-9]+$","title":"Payloadschemaversion","description":"Exact semantic version of the target payload schema pair."}},"additionalProperties":false,"type":"object","required":["boundaryProfileId","payloadSchemaVersion"],"title":"ComputationPayloadContractSelector","description":"Exact opt-in target contract; neither component has a default."},"ComputationResultResponse":{"properties":{"data":{"additionalProperties":true,"type":"object","title":"Data"},"computeVersion":{"type":"string","title":"Computeversion"},"engineSchemaVersion":{"type":"string","title":"Engineschemaversion"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"}},"type":"object","required":["data","computeVersion","engineSchemaVersion","timestamp"],"title":"ComputationResultResponse","description":"Versioned computation output shared by REST and MCP."},"CursorPagination":{"properties":{"limit":{"type":"integer","title":"Limit","description":"Page size actually applied (1-200)."},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nextcursor","description":"Opaque cursor for the next page; null on the final page."},"hasMore":{"type":"boolean","title":"Hasmore","description":"True when another page is available."}},"type":"object","required":["limit","hasMore"],"title":"CursorPagination","description":"Opaque keyset pagination for new v1 collection endpoints."},"DocumentListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/DocumentResource"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/PageMetadata"}},"type":"object","required":["data","pagination"],"title":"DocumentListResponse"},"DocumentResource":{"properties":{"id":{"type":"string","maxLength":256,"minLength":1,"title":"Id"},"fileName":{"type":"string","maxLength":512,"minLength":1,"title":"Filename"},"kind":{"type":"string","enum":["gl","fs","workpaper","supporting","tb-current","tb-prior","tb-classification","gifi-export"],"title":"Kind"},"source":{"type":"string","enum":["onboarding","manual","unknown"],"title":"Source"},"uploadedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Uploadedat"}},"type":"object","required":["id","fileName","kind","source"],"title":"DocumentResource","description":"Document registry metadata; never a storage locator or file payload."},"EngagementLifecycle":{"properties":{"filedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Filedat"},"revisionNumber":{"type":"integer","minimum":1.0,"title":"Revisionnumber"},"parentEngagementId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parentengagementid"},"amendedByEngagementId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Amendedbyengagementid"}},"type":"object","required":["revisionNumber"],"title":"EngagementLifecycle","description":"Non-sensitive return lifecycle metadata."},"EngagementParty":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"legalName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Legalname"}},"type":"object","required":["id","name"],"title":"EngagementParty","description":"Safe identity fields for an engagement's client or entity."},"EngagementResource":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"client":{"$ref":"#/components/schemas/EngagementParty"},"entity":{"$ref":"#/components/schemas/EngagementParty"},"yearEnd":{"type":"string","format":"date","title":"Yearend"},"periodStart":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Periodstart"},"status":{"type":"string","enum":["in_progress","review","complete"],"title":"Status"},"source":{"type":"string","enum":["prepared","imported"],"title":"Source"},"engagementType":{"anyOf":[{"type":"string","enum":["compilation","review","audit","tax_only"]},{"type":"null"}],"title":"Engagementtype"},"priorYearEngagementId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Prioryearengagementid"},"isLocked":{"type":"boolean","title":"Islocked"},"lifecycle":{"$ref":"#/components/schemas/EngagementLifecycle"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat"}},"type":"object","required":["id","client","entity","yearEnd","status","source","isLocked","lifecycle","createdAt","updatedAt"],"title":"EngagementResource","description":"One tax-year engagement, without financial or tax-return payloads."},"EngagementReviewSummary":{"properties":{"engagementId":{"type":"string","format":"uuid","title":"Engagementid"},"engagementStatus":{"type":"string","enum":["in_progress","review","complete"],"title":"Engagementstatus"},"lifecycleStatus":{"type":"string","enum":["open","signed","filed"],"title":"Lifecyclestatus"},"signoffs":{"$ref":"#/components/schemas/SignoffSummary"},"workpapers":{"$ref":"#/components/schemas/WorkpaperReviewSummary"},"accountReviewStatuses":{"$ref":"#/components/schemas/AccountReviewStatusSummary"},"activeReviewMarks":{"$ref":"#/components/schemas/ActiveReviewMarkSummary"},"acknowledgedWarningCount":{"type":"integer","minimum":0.0,"title":"Acknowledgedwarningcount"},"readiness":{"$ref":"#/components/schemas/ReadinessAvailability"}},"type":"object","required":["engagementId","engagementStatus","lifecycleStatus","signoffs","workpapers","accountReviewStatuses","activeReviewMarks","acknowledgedWarningCount","readiness"],"title":"EngagementReviewSummary","description":"Persisted review indicators, explicitly not a readiness verdict."},"EntityListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/EntityResource"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/CursorPagination"}},"type":"object","required":["data","pagination"],"title":"EntityListResponse","description":"One cursor-paginated page of a client's entities."},"EntityResource":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"Stable UUID of the entity."},"clientId":{"type":"string","format":"uuid","title":"Clientid","description":"UUID of the entity's parent client."},"name":{"type":"string","title":"Name","description":"Entity display name."},"legalName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Legalname","description":"Registered legal name, when known."},"corporationNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Corporationnumber","description":"Corporate registry number, when known."},"businessNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Businessnumber","description":"Canadian business number, when known."},"naicsCode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Naicscode","description":"NAICS industry code, when assigned."},"dissolvedAt":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Dissolvedat","description":"Entity dissolution date, when applicable."},"incorporationJurisdiction":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Incorporationjurisdiction","description":"Corporate-law jurisdiction the corporation is incorporated or continued under: 'CA' (federal CBCA) or a two-letter province/territory code. Changes only by continuance (ITA s.250(5.1)), never by fiscal period. This is NOT the provincial jurisdiction the corporation is taxed in — that is the per-tax-year permanent-establishment set (ITR Reg. 400(2)/402(3)) reported on Schedule 5. Null when not recorded, which is also the correct state for a corporation incorporated outside Canada."},"incorporationDate":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Incorporationdate","description":"Date the current incorporationJurisdiction took effect — original incorporation, or the most recent continuance into that jurisdiction. Null when not recorded."}},"type":"object","required":["id","clientId","name"],"title":"EntityResource","description":"A legal entity belonging to a client in the caller's organization."},"PageMetadata":{"properties":{"limit":{"type":"integer","maximum":200.0,"minimum":1.0,"title":"Limit","description":"Page size actually applied."},"offset":{"type":"integer","maximum":100000.0,"minimum":0.0,"title":"Offset","description":"Zero-based row offset actually applied."},"total":{"type":"integer","minimum":0.0,"title":"Total","description":"Total matching resources."},"hasMore":{"type":"boolean","title":"Hasmore","description":"True when another page is available."}},"type":"object","required":["limit","offset","total","hasMore"],"title":"PageMetadata","description":"Bounded offset-pagination metadata."},"Pagination":{"properties":{"limit":{"type":"integer","title":"Limit","description":"Page size actually applied (1-200)."},"offset":{"type":"integer","title":"Offset","description":"Zero-based row offset (max 100,000)."},"total":{"type":"integer","title":"Total","description":"Total matching resources in the organization."},"hasMore":{"type":"boolean","title":"Hasmore","description":"True when more rows exist past this page."}},"type":"object","required":["limit","offset","total","hasMore"],"title":"Pagination","description":"Offset pagination retained for the original client-list contract."},"PublicApiError":{"properties":{"code":{"type":"string","title":"Code","examples":["unauthorized"]},"message":{"type":"string","title":"Message","examples":["Invalid token"]},"details":{"anyOf":[{"items":{"$ref":"#/components/schemas/PublicApiValidationIssue"},"type":"array"},{"type":"null"}],"title":"Details"}},"type":"object","required":["code","message"],"title":"PublicApiError","description":"Machine-readable public error."},"PublicApiErrorResponse":{"properties":{"requestId":{"type":"string","title":"Requestid","description":"Opaque request identifier for support and log correlation.","examples":["2f711c6917484e93b3c45a034a405c91"]},"error":{"$ref":"#/components/schemas/PublicApiError"}},"type":"object","required":["requestId","error"],"title":"PublicApiErrorResponse","description":"Envelope returned by every public REST error response."},"PublicApiValidationIssue":{"properties":{"location":{"type":"string","title":"Location","examples":["query.limit"]},"message":{"type":"string","title":"Message","examples":["Input should be less than or equal to 200"]},"code":{"type":"string","title":"Code","examples":["less_than_equal"]}},"type":"object","required":["location","message","code"],"title":"PublicApiValidationIssue","description":"One invalid request field, without echoing the submitted value."},"ReadinessAvailability":{"properties":{"evaluated":{"type":"boolean","const":false,"title":"Evaluated","default":false},"ready":{"type":"null","title":"Ready"}},"type":"object","title":"ReadinessAvailability","description":"Readiness state when no authoritative result is persisted.\n\nPersisted review counters must never be promoted to a filing-readiness\ndecision; that gate requires fresh schedule computation."},"RolloverComputationRequest":{"properties":{"inputs":{"additionalProperties":true,"type":"object","title":"Inputs"},"payloadContract":{"$ref":"#/components/schemas/ComputationPayloadContractSelector","description":"Optional exact strict target contract. Omit this property to use the published legacy computation boundary; null is not valid."}},"additionalProperties":false,"type":"object","title":"RolloverComputationRequest","description":"Inputs for one rollover, reorganization, or screening engine."},"SignoffSummary":{"properties":{"preparerSigned":{"type":"boolean","title":"Preparersigned"},"reviewerSigned":{"type":"boolean","title":"Reviewersigned"},"reviewerStatus":{"type":"string","enum":["pending","signed","skipped"],"title":"Reviewerstatus"},"partnerSigned":{"type":"boolean","title":"Partnersigned"}},"type":"object","required":["preparerSigned","reviewerSigned","reviewerStatus","partnerSigned"],"title":"SignoffSummary"},"TaxYearListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/TaxYearResource"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/CursorPagination"}},"type":"object","required":["data","pagination"],"title":"TaxYearListResponse","description":"One cursor-paginated page of an entity's tax years."},"TaxYearResource":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"Stable UUID of the tax-year engagement."},"entityId":{"type":"string","format":"uuid","title":"Entityid","description":"UUID of the parent entity."},"clientId":{"type":"string","format":"uuid","title":"Clientid","description":"UUID of the parent client."},"yearEnd":{"type":"string","format":"date","title":"Yearend","description":"Fiscal year-end date."},"periodStart":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Periodstart","description":"Fiscal period start date; null only for legacy records."},"status":{"type":"string","enum":["in_progress","review","complete"],"title":"Status","description":"Current engagement workflow status."},"source":{"type":"string","enum":["prepared","imported"],"title":"Source","description":"Prepared binder or imported prior-year reference."},"engagementType":{"anyOf":[{"type":"string","enum":["compilation","review","audit","tax_only"]},{"type":"null"}],"title":"Engagementtype","description":"Engagement service type, when assigned."},"priorYearTaxYearId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Prioryeartaxyearid","description":"Linked prior tax year used for comparatives, when present."},"createdAt":{"type":"string","format":"date-time","title":"Createdat","description":"ISO-8601 creation timestamp (UTC)."},"lastModifiedAt":{"type":"string","format":"date-time","title":"Lastmodifiedat","description":"ISO-8601 last-modified timestamp (UTC)."}},"type":"object","required":["id","entityId","clientId","yearEnd","status","source","createdAt","lastModifiedAt"],"title":"TaxYearResource","description":"A tax-year engagement belonging to an entity and client."},"WorkpaperListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/WorkpaperResource"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/PageMetadata"}},"type":"object","required":["data","pagination"],"title":"WorkpaperListResponse"},"WorkpaperResource":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"templateId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Templateid"},"kind":{"type":"string","title":"Kind"},"origin":{"type":"string","title":"Origin"},"status":{"type":"string","title":"Status"},"parseStatus":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parsestatus"},"tieOutMode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tieoutmode"},"tieOutStatus":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tieoutstatus"},"detectedType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detectedtype"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"version":{"type":"integer","minimum":1.0,"title":"Version"},"isReviewed":{"type":"boolean","title":"Isreviewed"},"reviewedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Reviewedat"},"sourceFileName":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Sourcefilename"},"linkedAccountCount":{"type":"integer","minimum":0.0,"title":"Linkedaccountcount"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat"}},"type":"object","required":["id","kind","origin","status","version","isReviewed","linkedAccountCount","createdAt","updatedAt"],"title":"WorkpaperResource","description":"Workpaper metadata with the full JSONB payload deliberately omitted."},"WorkpaperReviewSummary":{"properties":{"total":{"type":"integer","minimum":0.0,"title":"Total"},"reviewed":{"type":"integer","minimum":0.0,"title":"Reviewed"},"tieOutMatched":{"type":"integer","minimum":0.0,"title":"Tieoutmatched"},"tieOutDifference":{"type":"integer","minimum":0.0,"title":"Tieoutdifference"},"tieOutIncomplete":{"type":"integer","minimum":0.0,"title":"Tieoutincomplete"},"tieOutPending":{"type":"integer","minimum":0.0,"title":"Tieoutpending"}},"type":"object","required":["total","reviewed","tieOutMatched","tieOutDifference","tieOutIncomplete","tieOutPending"],"title":"WorkpaperReviewSummary"}},"securitySchemes":{"FilemarkOAuth2":{"type":"oauth2","description":"Filemark audience-bound machine-to-machine access token. Obtain one with the OAuth 2.0 client_credentials grant, the exact resource `https://api.filemark.ca`, and the least-privilege domain/action scopes required by the operation, then send it as a Bearer token. Do not enter a production partner secret in browser-based docs; mint tokens from a trusted server-side environment.","flows":{"clientCredentials":{"tokenUrl":"https://api.filemark.ca/oauth2/token","scopes":{"https://api.filemark.ca/read":"List clients through the legacy v1 compatibility capability.","https://api.filemark.ca/mcp":"Connect to Filemark's MCP transport.","https://api.filemark.ca/clients:read":"Read client records.","https://api.filemark.ca/clients:write":"Create and update client records.","https://api.filemark.ca/entities:read":"Read legal-entity records.","https://api.filemark.ca/entities:write":"Create and update legal-entity records.","https://api.filemark.ca/tax-years:read":"Read taxation-year records.","https://api.filemark.ca/tax-years:write":"Create and update taxation-year records.","https://api.filemark.ca/engagements:read":"Read engagement data and summaries.","https://api.filemark.ca/engagements:write":"Create and update engagement data.","https://api.filemark.ca/documents:read":"Read document metadata and processing results.","https://api.filemark.ca/documents:write":"Upload, process, and manage documents.","https://api.filemark.ca/workpapers:read":"Read workpapers and supporting evidence.","https://api.filemark.ca/workpapers:write":"Create and update workpapers and evidence.","https://api.filemark.ca/tax-data:read":"Read allowlisted saved trial-balance, account, and adjustment projections.","https://api.filemark.ca/tax:compute":"Run tax computations and readiness checks.","https://api.filemark.ca/review:read":"Read review warnings, marks, notes, and history.","https://api.filemark.ca/review:write":"Create and update review decisions and annotations.","https://api.filemark.ca/exports:read":"Read export status and download completed exports.","https://api.filemark.ca/exports:create":"Create return, binder, and handoff exports.","https://api.filemark.ca/portal:read":"Read client-portal requests and responses.","https://api.filemark.ca/portal:write":"Create and update client-portal content.","https://api.filemark.ca/portal:send":"Send portal requests, reminders, and deliveries.","https://api.filemark.ca/integrations:read":"Read connector status and sync previews.","https://api.filemark.ca/integrations:sync":"Run and apply external-system synchronizations.","https://api.filemark.ca/integrations:admin":"Manage connector enrollment and credentials.","https://api.filemark.ca/admin:read":"Read firm administration and API-client state.","https://api.filemark.ca/admin:write":"Manage privileged firm administration settings."}}}}}}}