monitor.match event, verifies the signature, and creates a source-linked intake record. It does not decide whether a filing is material, resolve a counterparty, or clear a compliance issue. The filing remains the review source.
Prerequisites
You need Python 3.9+, Flask, a public HTTPS receiver, and the signing secret for an already configured delivery endpoint. Configure the endpoint and a narrow monitor in the signed-in SEC API dashboard, then store the secret asSECAPI_WEBHOOK_SIGNING_SECRET. An API key is only
needed to read a configured monitor’s matches.
1. Verify the raw delivery
Createreceiver.py:
pip install flask, then expose this receiver at the configured HTTPS destination. A valid production event prints one source-linked record for each delivered match. A valid webhook.test is acknowledged but ignored; it proves the receiver can verify delivery, not that the monitor query will produce a filing.
2. Make the review record durable
Use the event id as an idempotency key before enqueueing work. Retain eventrequestId, monitor name, issuer identity, form, filing date, and htmlUrl. The event is a notification envelope, not the filing itself, so give the reviewer the source URL and keep an LLM summary separate from the decision.
For a configured monitor, an API key can run its saved query and retrieve matches:
Limits and failure posture
401 invalid_signature usually means the handler signed parsed JSON instead of raw bytes, used the wrong secret, or received a stale timestamp. Treat duplicate delivery as normal: persist the event id before scheduling the review. A text match or model classification is a lead, not a legal conclusion; require the appropriate reviewer to read the linked source.
Next links
Replaceprint with one transactional write that stores the event ID, source
reference, and pending-review status. A dashboard test proves receiver handling,
not that a monitor query found a filing. See webhook delivery audit.
