Skip to main content
GET
Watch Attestation

Overview

A filable, monthly record that a watch was actually evaluated during a period, the office-data horizon it covered, and the outcome, including the negative outcome. It is the artifact a firm keeps on file to show that a monitoring instruction was in force and was executed. The artifact is computed deterministically from the evaluation receipts recorded at the time, so re-fetching a closed period months later produces the same bytes and the same content_hash. Read-only: calling it never changes anything. Requires the portfolios:manage scope.
What it certifies, and what it does not. This record certifies that evaluation occurred against the stated data horizons. It does not certify that every relevant mark was surfaced, since recall is bounded by office coverage and match strategy. That distinction is written into the statement field of every artifact and printed on the PDF.

Path Parameters

string
required
Watch ID (wat_*).

Query Parameters

string
UTC calendar month as YYYY-MM. Defaults to the previous (most recently closed) month.
'json' | 'pdf'
Response format. Defaults to json. Use pdf for the business record. An explicit format wins over the Accept header.
'true' | 'false'
Set true to get an interim artifact for the current, still-open month. The result carries period.partial: true and its figures can still change. Default false.

The PDF business record

Pass ?format=pdf, or send Accept: application/pdf. The response is a PDF attachment named {watch-name}-{YYYY-MM}-attestation.pdf. The PDF is rendered from the same artifact as the JSON, so the two never disagree. It leads with the summary figures and the attested statement, then the per-office coverage table and any disclosed gaps, then the configuration and integrity hash. The JSON is the copy you verify against; the PDF is the copy you file.

Response

string
Always watch_attestation.
string
Artifact schema version (e.g. 2026-08-01). Bumped on any additive field change.
object
The monitoring instruction the record attests to.
object
object[]
One entry per office in the watch’s scope.
object
'consistent' | 'mismatch'
Cross-check of the recorded alert counts against the stored alert rows for the period. mismatch is disclosed rather than silently reconciled.
string
The plain-language attestation, including the limit of what it certifies.
string
Version of the internal freshness-target table used to decide what counted as a gap.
string
Present (paused or disabled) when the watch is not active at generation time. Pause history within the period is not reconstructable today. Excluded from content_hash.
string
When this copy was produced. Excluded from content_hash.
string
sha256 over the canonical artifact. See Verifying a filed record.
string
Request identifier.

Coverage gaps

A gap is an interval where the office-data coverage the watch had evaluated through fell behind the internal freshness target for that office. Gaps are reconstructed from the receipts, not recorded by hand.
string
When coverage first went stale.
string
When coverage recovered, or the period end if it never did.
'office_lagging' | 'evaluation_failed'
office_lagging means coverage was stale beyond the target. evaluation_failed is reserved for a future version: failed evaluations write no receipt, so they are not reconstructed as gaps today.
boolean
true when coverage caught back up inside the period. false means it was still behind when the period closed. That is a statement about this period only, not a claim that it stayed behind afterwards.
Gap disclosure is permanent. Once a period’s artifact records a gap it records it forever, even after coverage recovers, because it is a fact about what happened. Two shapes worth knowing:
  • A covered office with zero evaluations carries a single gap spanning the whole period.
  • Evaluations recorded before coverage snapshots existed cannot state what horizon they covered, so they are disclosed as incomplete coverage evidence with a null coverage_through, never presented as covered.

Unsupported offices

If a watch is scoped to an office Signa does not ingest, that office appears with status: "unsupported" and no evaluation claims at all. Signa will never render a clean, zero-alert attestation for an office it does not cover, because that would read as “we looked and found nothing” when the truth is “we do not cover this office yet”. If every office in the scope is unsupported, the endpoint returns 422 attestation_unsupported_scope rather than an empty artifact.

Verifying a filed record

content_hash is a sha256 over the canonical, sorted-key artifact, excluding the fields that legitimately differ between two fetches of the same period: generated_at, request_id, content_hash itself, watch_status_at_generation, watch.name, and watch.configuration_changed_since_period. To verify a filed copy, re-fetch the same closed period and compare hashes. A match proves the figures were not altered after issue. This proves integrity, not third-party authenticity. Signed and RFC 3161 timestamped documents are on the roadmap.
Fetch and file the artifact promptly after the month closes, before changing the watch. A filed copy with both configuration_changed_* flags false pins the fingerprint to the period unambiguously.

Retention

Attestations are available for closed months within the last 25 months. Beyond that, the backing evaluation receipts have aged out and the endpoint returns 410 attestation_expired.

Errors

Code Examples