POST <your webhook_url> (scoredEvent)
| Call | POST <your webhook_url> (scoredEvent) |
| Price | bills one score_signal ($0.005) when delivered, never per retry |
| Scope | none (Verdict calls you; verify Verdict-Signature) |
| Operation id | scoredEventWebhook |
What it does
Section titled “What it does”Verdict POSTs this to a watch’s webhook_url for each event whose relevant is at least min_p. Verify Verdict-Signature against the raw body before parsing, dedupe on id, and answer 2xx within 10 seconds; anything else is retried with exponential backoff for 24 hours. Billed once (one score_signal) when delivered, never per attempt.
Example request
Section titled “Example request”Verdict sends this request to your endpoint. The curl below replays it against your own server.
curl -X POST 'https://your-app.example.com/verdict/webhook' \ -H 'Verdict-Signature: t=1794060000,v1=5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e' \ -H 'Content-Type: application/json' \ -d '{ "id": "dlv_01JC3Z4Y8R9K2M5N7P1Q3S5T7V", "type": "event.scored", "created_at": "2026-11-07T15:00:03Z", "watch_id": "wch_01JC3Z4Y8R9K2M5N7P1Q3S5T7V", "event": { "id": "evt_01JC3Z4Y8R9K2M5N7P1Q3S5T7V", "type": "filing", "firm_id": "frm_01JC3Z4Y8R9K2M5N7P1Q3S5T7V", "occurred_at": "2026-11-03T21:15:00Z", "observed_at": "2026-11-04T02:05:00Z", "source": "sec_edgar", "source_url": "https://www.sec.gov/Archives/edgar/data/1601234/000160123426000004/xslFormDX01/primary_doc.xml", "confidence": 0.97, "attributes": { "filing_type": "sec_form_d", "accession_number": "0001601234-26-000004", "title": "Notice of Exempt Offering of Securities" }, "score": { "decision_id": "dec_01JC3Z4Y8R9K2M5N7P1Q3S5T7V", "icp_id": "icp_01JC3Z4Y8R9K2M5N7P1Q3S5T7V", "relevant": 0.78, "act_now": 0.64, "window_days": 21, "answer": "relevant", "reason_code": "event_relevant_and_timely" } }, "score": { "decision_id": "dec_01JC3Z4Y8R9K2M5N7P1Q3S5T7V", "icp_id": "icp_01JC3Z4Y8R9K2M5N7P1Q3S5T7V", "relevant": 0.78, "act_now": 0.64, "window_days": 21, "answer": "relevant", "reason_code": "event_relevant_and_timely" }}'Example response
Section titled “Example response”200: Any 2xx acknowledges the delivery.
HTTP/1.1 200Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
verdict-signature |
header | string | yes | t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>" with the watch's signing secret>. Several v1 values appear while a secret rotation overlaps. Reject the delivery if no v1 matches or t is more than 5 minutes from your clock. |
Request body
Section titled “Request body”Schema ScoredEventDelivery. The scored event.
| Field | Type | Required | Description |
|---|---|---|---|
id |
string | yes | Delivery id; dedupe on it, retries reuse it. |
type |
enum: “event.scored” | yes | Payload type. |
created_at |
string (date-time) | yes | When the delivery was created. |
watch_id |
string | yes | The watch. |
event |
Event | yes | Something that happened to a firm, normalized to one schema; attributes are typed per type (one of filing, registration, officer_change, ownership_change, lei_change, address_change, fund_raise, insider_trade, patent_filing, litigation, news_mention, repo_activity, hiring_aggregate). |
event.id |
string | no | The event id. |
event.firm_id |
string | no | The firm the event happened to. |
event.occurred_at |
string (date-time) | no | When the event happened, per the source. |
event.observed_at |
string (date-time) | no | When Verdict ingested the event. |
event.source |
enum: “sec_edgar”, “gleif”, “companies_house”, “wikidata” | no | The index source. |
event.source_url |
string (uri) | no | Link to the event at the source. |
event.confidence |
number | no | Confidence in the event’s normalization and firm keying. |
event.score |
EventScore | no | The event’s score for the requested ICP, or null when read without icp_id. |
event.score.decision_id |
string | yes | The score_signal decision that produced this score (billed once). |
event.score.icp_id |
string | yes | The ICP profile the event was scored against. |
event.score.relevant |
number | yes | Calibrated probability that the event matters for the ICP’s offer. |
event.score.act_now |
number | yes | Calibrated probability that now is the time to act. |
event.score.window_days |
integer or null | yes | Days left to act on the event, or null when there is no clear window. |
event.score.answer |
enum: “relevant”, “not_relevant” | yes | relevant applied to the threshold. |
event.score.reason_code |
enum: “event_relevant_and_timely”, “event_relevant_but_stale”, “event_type_not_relevant”, “event_routine”, “firm_not_in_icp”, “event_low_confidence”, “event_superseded”, “insufficient_event_data” | yes | Why, as a score_signal reason code. |
event.type |
enum: “filing” | no | Event type filing. |
event.attributes |
object | no | Attributes of a filing event. |
event.attributes.filing_type |
enum: “sec_8k”, “sec_form_d”, “sec_form_4”, “sec_s1”, “sec_13f”, “sec_adv” | yes | The filing sub-type. |
event.attributes.accession_number |
string | no | SEC accession number. |
event.attributes.items |
array of string | no | 8-K item numbers reported, for sec_8k. |
event.attributes.title |
string | no | Filing title or form description. |
event.attributes.form |
string | no | The form type exactly as the source lists it, for example 8-K/A or 13F-HR. |
event.attributes.file_number |
string | no | SEC file number, for example 333-299845. |
score |
EventScore and any | yes | |
score.decision_id |
string | yes | The score_signal decision that produced this score (billed once). |
score.icp_id |
string | yes | The ICP profile the event was scored against. |
score.relevant |
number | yes | Calibrated probability that the event matters for the ICP’s offer. |
score.act_now |
number | yes | Calibrated probability that now is the time to act. |
score.window_days |
integer or null | yes | Days left to act on the event, or null when there is no clear window. |
score.answer |
enum: “relevant”, “not_relevant” | yes | relevant applied to the threshold. |
score.reason_code |
enum: “event_relevant_and_timely”, “event_relevant_but_stale”, “event_type_not_relevant”, “event_routine”, “firm_not_in_icp”, “event_low_confidence”, “event_superseded”, “insufficient_event_data” | yes | Why, as a score_signal reason code. |
Try it
Section titled “Try it”Open the interactive reference to send this request from the browser. The full document is at /openapi.json.