Overview
The SetCalc API provides programmatic access to the personal injury settlement and verdict database. Four endpoints are available.
GET /api/verdictsfor browsing and filtering individual case records with pagination.GET /api/verdicts/statsfor aggregate distribution statistics including percentiles, source mix, and authoritative reference benchmarks.GET /api/verdicts/feed.jsonfor the full Schema.org Dataset JSON-LD feed under a CC-BY-4.0 license. Recommended for bulk use and AI crawlers.POST /api/submit-case-resultfor attorney case submissions, rate-limited and manually reviewed.
For background on how the data is sourced and categorized, see the sources and methodology page.
License and attribution
The aggregated dataset feed is licensed under Creative Commons Attribution 4.0 International (CC-BY-4.0). Attribution is required. Suggested citation:
SetCalc. Personal Injury Settlement and Verdict Database.
https://setcalc.com/personal-injury-settlements-and-verdicts.
Licensed CC-BY-4.0.Individual case records may carry additional source citations (CourtListener opinions, Law360 reports, attorney submissions, court docket URLs). When redistributing a specific record, preserve its source and sourceUrl fields.
Base URL and conventions
- Base URL:
https://setcalc.com - All responses are JSON, encoded as UTF-8.
- No authentication is required for any read endpoint.
- The JSON-LD feed serves
Access-Control-Allow-Origin: *and is edge-cached for one hour with a 24-hour stale-while-revalidate window. Browse and stats endpoints are not cached. - Errors are returned as
{ "success": false, "error": "reason" }with an appropriate HTTP status code (400 for validation, 429 for rate-limiting, 503 for database errors). - Aggregate bulk-volume sources (NPDB, state workers compensation, federal RECAP dockets, class action aggregators) are excluded by default from the browse endpoint and feed, so the curated case rows remain the public face. Pass
?includeAggregate=trueor?source=...to opt in.
/api/verdictsBrowse and filter case records with pagination. Returns curated cases by default. Best for building search interfaces or fetching a small slice of records.
Query parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| page | integer | 1 | Result page number. Minimum 1. |
| limit | integer | 20 | Records per page. Clamped to 1 through 50. |
| state | string | optional | Filter by state, e.g. California. |
| injuryType | string | optional | Filter by injury category, e.g. Whiplash, Back Injury, TBI. |
| practiceArea | string | optional | Filter by practice area, e.g. Car Accident, Slip and Fall. |
| resultType | string | optional | Either verdict or settlement. |
| year | integer | optional | Exact year the case was settled or decided. |
| minAmount | integer | optional | Dollar floor for outcome amount. |
| maxAmount | integer | optional | Dollar ceiling for outcome amount. |
| source | string | optional | Override default aggregate exclusion and filter to a single source value. |
| includeAggregate | boolean | false | When true, includes bulk aggregate datasets (NPDB, state court records, RECAP dockets) in results. |
| search | string | optional | Case-insensitive regex search across caseTitle and description. |
| sort | string | amount | Sort field. Common values: amount, year. |
| order | string | desc | Either asc or desc. |
Example request
curl 'https://setcalc.com/api/verdicts?state=California&injuryType=Whiplash&limit=2'Example response (truncated)
{
"verdicts": [
{
"_id": "...",
"caseTitle": "Doe v. Acme Trucking",
"state": "California",
"county": "Los Angeles",
"injuryType": "Whiplash",
"practiceArea": "Car Accident",
"amount": 45000,
"resultType": "settlement",
"year": 2024,
"description": "Rear-end collision on I-405 resulting in cervical strain and lost wages.",
"source": "News",
"sourceUrl": "https://www.law360.com/...",
"submittedByFirm": null
}
],
"total": 87,
"page": 1,
"limit": 2,
"totalPages": 44,
"filterOptions": {
"states": ["California", "Texas", "..."],
"injuryTypes": ["Whiplash", "TBI", "..."],
"practiceAreas": ["Car Accident", "..."],
"years": [2024, 2023, "..."]
}
}Note: filterOptions is only returned on page 1 with no state, injuryType, or practiceArea filter set.
/api/verdicts/statsAggregate distribution statistics over the full database, including bulk aggregate sources that are hidden from the browse endpoint. Use this to compute realistic medians, percentile bands, and source-mix breakdowns for a state, injury type, or practice area.
Query parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| state | string | optional | Filter to a single state. |
| injuryType | string | optional | Filter to one injury category. |
| practiceArea | string | optional | Filter to one practice area. |
| resultType | string | optional | verdict or settlement. |
| yearMin | integer | optional | Lower bound on year (inclusive). |
| yearMax | integer | optional | Upper bound on year (inclusive). |
| source | string | optional | Filter to a single source enum value. |
Example request
curl 'https://setcalc.com/api/verdicts/stats?state=Texas&practiceArea=Car%20Accident'Example response (truncated)
{
"count": 142,
"avg": 287500,
"min": 1200,
"max": 12500000,
"p10": 8500,
"p25": 22000,
"median": 68000,
"p75": 245000,
"p90": 950000,
"yearMin": 2003,
"yearMax": 2025,
"buckets": [
{ "floor": 0, "count": 12 },
{ "floor": 10000, "count": 28 },
{ "floor": 25000, "count": 41 },
{ "floor": 75000, "count": 30 },
{ "floor": 250000, "count": 19 },
{ "floor": 1000000, "count": 8 },
{ "floor": 5000000, "count": 4 }
],
"sourceMix": [
{ "source": "News", "count": 92 },
{ "source": "Attorney Submission", "count": 31 },
{ "source": "RECAP_DOCKET", "count": 19 }
],
"filter": { "state": "Texas", "practiceArea": "Car Accident" },
"referenceStats": { "...": "..." }
}Note: Percentiles use MongoDB's approximate $percentile aggregation. Bucket boundaries are 0, 10K, 25K, 75K, 250K, 1M, 5M, and above.
/api/verdicts/feed.jsonThe full Schema.org Dataset JSON-LD feed of approved curated records. CC-BY-4.0 licensed. Recommended for bulk use, AI crawlers, and research projects. Bulk aggregate sources are excluded so the feed reflects the curated case-row database.
Query parameters
None. The feed is a single endpoint that returns the entire curated dataset wrapped in a Schema.org Dataset envelope.
Example request
curl 'https://setcalc.com/api/verdicts/feed.json'Example response (truncated)
{
"@context": "https://schema.org",
"@type": "Dataset",
"name": "SetCalc Personal Injury Verdict and Settlement Database (Public Feed)",
"url": "https://setcalc.com/personal-injury-settlements-and-verdicts",
"license": "https://creativecommons.org/licenses/by/4.0/",
"creator": { "@type": "Organization", "name": "SetCalc", "url": "https://setcalc.com" },
"publisher": { "@type": "Organization", "name": "SetCalc", "url": "https://setcalc.com" },
"isAccessibleForFree": true,
"inLanguage": "en-US",
"encodingFormat": "application/json",
"spatialCoverage": { "@type": "Place", "name": "United States" },
"temporalCoverage": "1973-01-01/..",
"recordCount": 2991,
"generatedAt": "2026-05-13T18:00:00.000Z",
"citationFormat": "SetCalc. Personal Injury Verdict and Settlement Database. ...",
"data": [
{
"id": "...",
"caseTitle": "Doe v. Acme Trucking",
"state": "California",
"injuryType": "Whiplash",
"practiceArea": "Car Accident",
"amount": 45000,
"resultType": "settlement",
"year": 2024,
"source": "News",
"sourceUrl": "https://www.law360.com/..."
}
]
}Cache headers
Cache-Control: public, s-maxage=3600, stale-while-revalidate=86400
Access-Control-Allow-Origin: *Internal fields (submittedByEmail, timestamps, the approved flag) are stripped from the feed.
/api/submit-case-resultAttorney case submission endpoint. Rate-limited to 5 submissions per IP per hour. New submissions enter the database with an unapproved flag and require manual review before appearing in public results.
Request body fields
| Parameter | Type | Default | Description |
|---|---|---|---|
| resultType | string | required | verdict or settlement. |
| amount | number or string | required | Gross dollar amount. Accepts formatted strings like "$1,234.56" or bare numbers. Must be greater than 0. |
| state | string | required | Must be one of the 50 US states or District of Columbia. |
| injuryType | string | required | One of: Back Injury, Broken Bones, Burns, Knee Injury, Shoulder Injury, Soft Tissue Injury, Spinal Cord Injury, Traumatic Brain Injury, Whiplash, Wrongful Death, Other. |
| practiceArea | string | required | One of: Bicycle Accident, Bus Accident, Car Accident, Medical Malpractice, Motorcycle Accident, Pedestrian Accident, Premises Liability, Slip and Fall, Truck Accident, Workplace Injury, Other. |
| year | integer | required | Year between 2000 and the current year. |
| description | string | required | Case summary. Minimum 10 characters after trimming. Maximum 2000. |
| caseTitle | string | optional | Optional case caption. Maximum 200 characters. |
| county | string | optional | Optional county. Maximum 100 characters. |
| submittedBy | string | optional | Optional attorney name. Maximum 100 characters. |
| submittedByFirm | string | optional | Optional firm name. Maximum 200 characters. |
| submittedByWebsite | string | optional | Optional firm website URL. Maximum 300 characters. |
| string | optional | Optional contact email. Maximum 200 characters. |
Example request
curl -X POST 'https://setcalc.com/api/submit-case-result' \
-H 'Content-Type: application/json' \
-d '{
"resultType": "settlement",
"amount": 125000,
"state": "Colorado",
"injuryType": "Back Injury",
"practiceArea": "Car Accident",
"year": 2025,
"description": "Rear-end collision on I-25 resulting in lumbar disc herniation requiring epidural injections and physical therapy.",
"caseTitle": "Smith v. Acme Logistics",
"county": "Denver",
"submittedBy": "Jane Attorney",
"submittedByFirm": "Attorney and Partners LLP",
"submittedByWebsite": "https://www.example-firm.com",
"email": "[email protected]"
}'Success response (201)
{ "success": true }Error response (400 or 429)
{ "success": false, "error": "Invalid state value" }Field reference
For per-field definitions, see the methodology page. The same schema is used across all read endpoints. Enum values for source:
News : Legal news and trade publications
Attorney Submission : Verified attorney-submitted records
RECAP_DOCKET : Federal civil dockets (aggregate, hidden by default)
STATE_COURT : State civil court records (Virginia District Court via virginiacourtdata.org)
STATE_WC : State workers compensation aggregates (hidden)
NPDB : National Practitioner Data Bank (aggregate, hidden)
FLOIR_PLCR : Florida OIR closed-claim records
IOWA_CJVR : Iowa Civil Jury Verdict Reporter
CLASS_ACTION_AGGREGATOR : Class action aggregators (aggregate, hidden)
MoreLaw, TopVerdict : Listed for completeness; not actively ingestedErrors
Errors are returned with the appropriate HTTP status code and a JSON body. Status codes used:
- 400 Bad Request: validation failure on a submission or query parameter.
- 429 Too Many Requests: rate limit exceeded on the submission endpoint (5 per IP per hour).
- 503 Service Unavailable: returned by the feed endpoint when the database is temporarily unreachable. The feed still returns a valid JSON-LD envelope with an empty
dataarray so consumers do not break.
Versioning
The API is currently at v1 and served from unversioned URLs. Breaking changes will be announced on this page and reflected in the generatedAt timestamp of the JSON-LD feed. We will maintain backward compatibility for at least 90 days after announcing any breaking change.
Contact
API issues, integration questions, or feedback: [email protected]. For data-sourcing or methodology questions, see the methodology page.