Skip to content

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

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.

Verdict sends this request to your endpoint. The curl below replays it against your own server.

Request
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"
}
}'

200: Any 2xx acknowledges the delivery.

200 response
HTTP/1.1 200
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.

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.

Open the interactive reference to send this request from the browser. The full document is at /openapi.json.