API Documentation

Built for developers. Production-ready in an afternoon.

Real-time HTTPS POST to your endpoint within 1–3 seconds of a qualified submission. JSON payload, HMAC-signed, exponential-backoff retry. Works with every major legal CRM.

Overview

How the webhook works

When a lead clears our 9-point validation pipeline and matches your spec, we issue a signed HTTPS POST to your configured endpoint with the full lead payload. Your endpoint should respond 200 OK within 10 seconds to acknowledge receipt.

If your endpoint fails or times out, we retry with exponential backoff: 5s, 30s, 2m, 10m, 1h. After 5 failures we fall back to email/SMS delivery so no lead is lost.

Authentication

Each request includes an X-Signature header — an HMAC-SHA256 of the raw body, signed with your shared secret. Verify before trusting the payload.

POST → https://your-crm.com/intake
# Request headers
Content-Type: application/json
X-Signature: sha256=a3f8…b1c2
X-Event-Id: evt_01HZQ8K9PMXR7T
X-Timestamp: 1738012345
User-Agent: InjuryLeads-Webhook/1.0
Sample Payload

Example lead JSON

Every field below is delivered for every lead, with extra fields for vertical-specific qualifiers.

POST body — application/json
{
  "lead_id": "ld_01HZQ8K9PMXR7T2YJV",
  "timestamp": "2026-05-27T14:32:08.412Z",
  "vertical": "auto_accident",
  "exclusivity": "exclusive",
  "price": 145.00,
  "currency": "USD",

  "contact": {
    "first_name": "Maria",
    "last_name": "Hernandez",
    "phone": "+13105551042",
    "email": "maria.h@example.com",
    "preferred_contact": "phone"
  },

  "location": {
    "city": "Los Angeles",
    "state": "CA",
    "zip": "90015",
    "ip": "104.221.18.92"
  },

  "case": {
    "incident_date": "2026-05-22",
    "injury_severity": "moderate",
    "at_fault": "other_party",
    "medical_treatment": true,
    "attorney_retained": false,
    "description": "Rear-ended on 110 freeway. ER visit + ongoing PT."
  },

  "consent": {
    "tcpa": true,
    "timestamp": "2026-05-27T14:32:06.001Z",
    "ip": "104.221.18.92",
    "user_agent": "Mozilla/5.0 …",
    "landing_url": "https://lp.injuryleads.io/ca-mva-1"
  },

  "attribution": {
    "source": "google_search",
    "campaign_id": "ca-mva-broad-q2",
    "utm_term": "car accident lawyer near me"
  },

  "quality": {
    "intent_score": 87,
    "phone_verified": true,
    "email_verified": true,
    "duplicate": false
  }
}
CRM Integrations

Pre-built connectors for the CRMs your firm already uses.

Native one-click integrations — no engineering required. For everything else, the standard webhook is one cURL away.

InjuryLeads.io
Litify
Clio Grow
Lead Docket
Filevine
CASEpeer
Captorra
HubSpot
Zapier

Litify

Native Litify connector. Maps to Lead, Matter, and Intake objects. Live in <30 minutes.

Clio Grow

Direct Clio Grow integration. Auto-creates contacts and matter requests.

Lead Docket

Real-time push with full custom-field mapping and source attribution.

Filevine

Webhook → Filevine intake project. Includes custom field templates for PI verticals.

CASEpeer

Native CASEpeer integration with auto-assignment by zip or vertical.

Captorra

Direct API push with full demographic + case data mapping.

HubSpot / Salesforce

For firms running a custom CRM stack. Includes pre-built workflow templates.

Zapier / Make

Drop the webhook into Zapier or Make for unlimited downstream routing.

Verifying Signatures

Drop-in code samples

Verify every webhook by recomputing the HMAC-SHA256 of the raw body using your shared secret and comparing to the X-Signature header. Reject anything that doesn't match.

Test mode

Every account gets a sandbox key. We'll fire fake leads at your endpoint so you can confirm parsing and routing before going live.

Node.js (Express)
const crypto = require('crypto');

app.post('/intake', express.raw({type:'*/*'}), (req, res) => {
  const sig = req.headers['x-signature'];
  const expected = 'sha256=' + crypto
    .createHmac('sha256', process.env.IL_SECRET)
    .update(req.body)
    .digest('hex');

  if (sig !== expected) return res.status(401).end();

  const lead = JSON.parse(req.body.toString());
  // → push to CRM
  res.status(200).end();
});
Webhook Reference

Field schema

FieldTypeDescription
lead_idstringUnique idempotency key. Use this to dedupe in your CRM.
timestampISO 8601When the lead was qualified and shipped.
verticalenumauto_accident, slip_fall, workplace, med_neg, wrongful_death
exclusivityenumshared, semi_exclusive, or exclusive
pricedecimalBilled price for this lead.
contactobjectfirst_name, last_name, phone (E.164), email, preferred_contact
locationobjectcity, state (2-char), zip, ip
caseobjectVertical-specific qualifiers (see sample payload).
consentobjectTCPA flag, timestamp, IP, user agent, landing URL.
attributionobjectSource, campaign ID, UTM data.
qualityobjectIntent score (0–100), validation flags, duplicate status.

Want a sandbox key?

We'll spin up a test endpoint so your dev team can validate integration before the first invoice.