Webhooks
If your organization has webhooks configured, you’ll receive HTTP POST notifications when case state changes.
Delivery & Security
Section titled “Delivery & Security”- Requests are JSON (
Content-Type: application/json). A2xxresponse marks the delivery successful. - Authentication — configurable per subscription: HMAC signature (
hmac_sha256), bearer token, basic auth, or OAuth2 client credentials. Withhmac_sha256, every request carriesX-Webhook-Signature: sha256=<hex>— the HMAC-SHA256 of the raw request body, keyed with your shared secret; verify it before trusting the payload. The other methods send the correspondingAuthorizationheader. - Retries — failed deliveries are retried up to 10 times with exponential backoff (capped at 1 hour). Retryable: connection errors, timeouts, HTTP 5xx, 408, and 429. Any other 4xx is permanent and not retried. Requests time out after 10 seconds; redirects are not followed.
Common payload envelope
Section titled “Common payload envelope”Every event carries event (the event name), timestamp (ISO 8601), and a case object with id, status (the event-name suffix), case_type (policy_limit_search | policy_existence_search | unknown), and issue_key. Exceptions: issue_key is absent on case.received (not yet assigned at submission) and may also be absent on a case.files_updated fired before the case is assigned its issue key; case.additional_policies_found uses a reduced case object (below).
Events
Section titled “Events”case.received— Case queued for processing.case.files_updated— A file was added to the case after submission. Thecaseobject includesfile:{"file_id": "<uuid>", "label": "<category label>"}. Fires when the file is stored on our side; it may not yet be visible to researchers at that instant.case.in_progress— Research has begun.case.action_required— Additional information or documents needed. Payload includesinteraction_idandmessage(the triggering comment body, capped at 8 KB UTF-8 — truncated content ends with…). Respond viaPOST /api/v1/partner/cases/{case_ref}/respond/with theinteraction_id.case.additional_policies_found— Researchers located additional policies available for purchase. Payload has a reducedcaseobject (id+issue_keyonly) plus top-leveloffer_idandadditional_policies— one entry per offered policy withupgrade_id,type,researcher_note,price_usd, andstatus(created= newly offered,selected= already accepted). Policy values (carrier, limits) are never included pre-acceptance. Accept viaPOST /api/v1/partner/cases/{case_ref}/offers/accept/.case.results_ready— Results available. Payload includes a presigned download URL (results_url, valid ~12 hours from delivery) and the object filename (file_name). Re-fires when results are regenerated (e.g., after an additional-policy acceptance).case.closed— Case has been closed. Payload includes a top-levelreasonfield:results_deliveredmeans the search was completed and the results were delivered (e.g. on full payment, or a close where results were already delivered). For any other close,reasonis a human-readable closing note written by our staff — free text (truncated to 32,768 characters, ending with…if cut), falling back to the literalcancelledwhen no note is available. Do not parsereasonas an enum. Note: thecase.closedwebhook (withreason: results_delivered) is the authoritative close signal and may precede the read API reportingclosed.GET /api/v1/partner/cases/{ref}/only reportsclosedonce the case reaches its terminal internal state; during an intermediate post-payment stage it still reportsresults_ready. Treat the webhook as authoritative — do not expect the read API to immediately reflectclosedafter receiving this event.
Contact Red Folder Research to configure webhook subscriptions.