CaseVine API
Federal litigation screening in one API call. Submit a company or person and get every U.S. federal case they're a party to — normalized, deduplicated, and cached.
Quickstart
Screen a company against every U.S. federal case in one call. Send just a name — nothing else is required:
curl -X POST https://www.casevine.ai/api/v1/parties/search \
-H "Authorization: Bearer cv_test_YOUR_SANDBOX_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "Quiznos"}'That's the whole happy path. The response includes an entity_confidence score and the list of cases.
Two-step workflow
Start simple, then enrich only if you need to. Most searches resolve cleanly on the first call:
- Send the name. POST
{"name": "Quiznos"}and read the response. - Check
entity_confidence.If it's high and thecaseslook right, you're done. - Enrich and retry only when confidence is low or the results look wrong — add one or more enrichment fields (a website, ticker, state, EIN, …) to pin the search to the exact legal entity, then call again.
https://www.casevine.ai/api/v1. Authenticate with your API key as a Bearer token (see Authentication).Getting started
CaseVine screens names against the PACER Case Locator and returns clean, structured JSON. Flat pricing, no PACER fee passthrough, and $0.00 on no-result searches.
1. Get an API key. Create a free account to get a sandbox key instantly, then add a card for a production key. Go to billing →
2. Base URL.
https://www.casevine.ai/api/v1
3. Authenticate with your key as a Bearer token, then make your first call:
curl -X POST https://www.casevine.ai/api/v1/parties/search \
-H "Authorization: Bearer cv_test_YOUR_SANDBOX_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "Acme Robotics", "entity_type": "business"}'Prefer Postman? Import our collection to try every live endpoint with example requests pre-filled — just set the api_key variable to your key.
Authentication
All requests require your API key in the Authorization header as a Bearer token:
Authorization: Bearer cv_test_YOUR_SANDBOX_KEY
There are two kinds of keys:
| Key | Prefix | Routes to | Notes |
|---|---|---|---|
| Sandbox | cv_test_ | PACER QA test data | Free, capped at 10 searches. Always visible in your dashboard. |
| Live | cv_live_ | Production PACER (billable) | Shown once at creation, then stored hashed. Rotate from the API Keys page. |
Party search
POST/api/v1/parties/search
Returns every federal case in which the given party appears. Results are cached for 30 days, so repeat queries return instantly.
Request headers
| Header | Value |
|---|---|
Authorization | Bearer <your_key> |
Content-Type | application/json |
Request body
| Field | Type | Description | |
|---|---|---|---|
name | string | required | Company or individual name to screen. |
entity_type | string | optional | "business" (default) or "individual". "business" excludes individual/person party records and personal (pr) filings; "individual" keeps them. |
ein_or_tax_id | string | optional | Highest-confidence entity signal. |
website | string | optional | e.g. "apple.com". |
ticker_symbol | string | optional | Public companies, e.g. "AAPL". |
linkedin_url | string | optional | Company LinkedIn URL. |
lei_number | string | optional | Legal Entity Identifier. |
state_of_incorporation | string | optional | 2-letter US state, e.g. "DE". |
registration_number | string | optional | State registration number. |
phone_number | string | optional | Business phone. |
street_address | string | optional | Business street address. |
jurisdiction | string | optional | Narrow to a case type: cv (civil), cr (criminal), bk (bankruptcy), ap (appellate). |
case_year | string | optional | Narrow to a filing year, e.g. "2022". |
entity_type: individual to screen sole proprietors, executives, or personal guarantors — this keeps person party records and all case types (including pr) in the results.jurisdiction and case_year filters are the way to narrow a common name— they're applied by PACER, so a "too broad" search becomes tractable. See Entity resolution.Confidence by fields provided
| Fields provided | Confidence |
|---|---|
| EIN / Tax ID | Highest |
| Website or ticker | Very high |
| Name + state | High |
| Name only | Lower |
Response fields
| Field | Type | Description |
|---|---|---|
query | string | The normalized name that was searched. |
result_count | number | Number of cases returned. |
entity_resolved | boolean | True if a high-confidence legal entity was identified for the query. |
canonical_name | string | null | The resolved legal entity name, if any. |
entity_confidence | number | null | Match confidence, 0–1. |
entity_id | string | null | Stable entity identifier, if resolved. |
cases | array | Case objects (see below). |
Each object in cases contains:
| Field | Type | Description |
|---|---|---|
case_id | string | PACER case id. |
case_number | string | Full case number, e.g. 1:21-cv-04567. |
case_title | string | Case caption. |
court_id | string | PACER court id, e.g. nysd. |
date_filed | string | null | ISO date. |
date_terminated | string | null | ISO date, or null if open. |
case_type | string | null | cv, cr, bk, … |
nature_of_suit | string | null | PACER nature-of-suit label. |
party_role | string | Role in the case, e.g. Defendant. |
status | string | active or closed. |
Example request & response
curl -X POST https://www.casevine.ai/api/v1/parties/search \
-H "Authorization: Bearer cv_test_YOUR_SANDBOX_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "Acme Robotics", "entity_type": "business"}'{
"query": "ACME ROBOTICS",
"result_count": 3,
"entity_resolved": true,
"canonical_name": "Acme Robotics, Inc.",
"entity_confidence": 0.97,
"entity_id": "zeph_9f2a1c",
"cases": [
{
"case_id": "7712345",
"case_number": "1:21-cv-04567",
"case_title": "Acme Robotics, Inc. v. Globex Corp.",
"court_id": "nysd",
"date_filed": "2021-05-14",
"date_terminated": null,
"case_type": "cv",
"nature_of_suit": "830 Patent",
"party_role": "Defendant",
"status": "active"
}
]
}Enrichment fields
Every field below is optional. Send them alongside name to disambiguate a common name and pin the search to a specific legal entity (they drive entity resolution). The stronger the identifier, the higher the resulting entity_confidence.
| Field | Type | Description |
|---|---|---|
entity_type | string | "business" (default) or "individual". Steers entity resolution to a corporate vs. individual lookup. "business" also excludes individual/person party records and personal (pr) filings from results; "individual" keeps them. Defaults to business — pass "individual" to screen sole proprietors, executives, or personal guarantors. |
ein_or_tax_id | string | Employer Identification Number / tax ID. The highest-confidence entity signal. |
website | string | Company website or domain, e.g. "apple.com". |
ticker_symbol | string | Stock ticker for public companies, e.g. "AAPL". |
linkedin_url | string | The company's LinkedIn page URL. |
lei_number | string | Legal Entity Identifier (ISO 17442), a 20-character global entity code. |
state_of_incorporation | string | 2-letter US state where the entity is incorporated, e.g. "DE". |
registration_number | string | State business-registration / filing number. |
phone_number | string | Business phone number. |
street_address | string | Business street address. |
jurisdiction and case_year are not enrichment fields — they are PACER-side filters for narrowing a broad result set. See the Party search request body.Entity resolution
Common names are ambiguous — "Enron Corp" alone matches thousands of records across dozens of related entities. Before searching PACER, CaseVine resolves your input to a single canonical legal entity using the disambiguation fields you provide.
How it works. When you include signals like an EIN, website, ticker, or state of incorporation, we resolve them to a canonical entity and return an entity_confidence score (0–1):
- Confidence ≥ 0.80 → we set
entity_resolved: trueand return the matchedcanonical_name,entity_confidence, andentity_id. - Confidence < 0.80 or no match →
entity_resolved: false(any lower-confidence guess is still returned incanonical_nameso you can decide).
The search itself always runs against the name you submit, so recall is never reduced — resolution annotatesresults with the identified legal entity rather than replacing your query. (Court party names often differ from a company's registered legal name, so we don't substitute one for the other.)
Best practice: pass the strongest identifier you have (EIN, website, ticker, or state) — it raises confidence and pins the result to the right legal entity.
Case Alerts
Case Alerts notify you of new federal litigation involving an entity you watch. Add a company or person as a watched entity and CaseVine re-screens it nightly against production PACER — any newly filed case triggers an alert by email and (if configured) a webhook. This is the ongoing counterpart to a one-off party search: instead of asking "what exists today?" you ask "tell me the moment something new appears."
409. Not to be confused with system monitoring — the status page and health checks that report API uptime.Add a watched entity
POST /api/monitor/add — records the entity, captures a baseline of its current cases, and starts watching. The optional webhook_url receives new-case payloads.
curl -X POST https://casevine.ai/api/monitor/add \
-H "Authorization: Bearer cv_live_..." \
-H "Content-Type: application/json" \
-d '{
"name": "Acme Corporation",
"type": "business",
"webhook_url": "https://example.com/hooks/casevine"
}'Response:
{
"monitored": true,
"entity": {
"id": "ent_8c31f0",
"name": "Acme Corporation",
"type": "business",
"baseline_case_count": 12,
"date_added": "2026-07-02T00:00:00Z"
}
}List & remove
GET /api/monitor/list returns your watched entities, your limit (null on Pro — unlimited), and how many are active. POST /api/monitor/remove with an id or name stops alerts for an entity while preserving its alert history.
New-case alert payload
When the nightly re-screen finds cases not present in the entity's last snapshot, CaseVine POSTs this to your webhook_url (and sends the same summary by email):
{
"entity": "Acme Corporation",
"new_cases": [
{
"case_id": "cv_9f2a1c",
"case_number": "1:26-cv-04821",
"case_title": "Doe v. Acme Corporation",
"court_id": "nysd",
"date_filed": "2026-07-01"
}
]
}Rate limits & quotas
| Plan | Quota | Data |
|---|---|---|
Sandbox (cv_test_) | 10 searches total | PACER QA test data |
Pro (cv_live_) | Metered, $200/mo minimum | Production PACER |
When you exceed your quota the API returns 429. Handle it by backing off and retrying later, or upgrade for a higher limit.
Caching saves you money. Every result is cached for 30 days, so repeat queries return instantly — you are never billed twice for the same search, and no-result searches are always free.
Errors
Every error returns a JSON body with an error message and a request_id (also in the x-request-id header) to quote in support requests. Server-side failures additionally include a code.
| Status | Meaning | What to do |
|---|---|---|
400 | Bad request, or search too broad | Fix the body, or narrow with disambiguation fields. |
401 | Missing or invalid API key | Check the Authorization header. |
403 | Access not permitted (e.g. Terms of Service not yet accepted) | Sign in to your dashboard to resolve, then retry. |
409 | Conflict — e.g. Case Alerts cap reached, or entity already watched | Remove an entity, or upgrade to Pro for unlimited Case Alerts. |
429 | Quota exceeded | Back off and retry, or upgrade. |
500 | Internal error | Retry; if it persists, contact us with the request_id. |
502 | Upstream court data source unavailable | Transient — retry shortly. |
Example error
{
"error": "Search too broad.",
"message": "\"Enron Corp\" matches 2341 records across 44 PACER pages. Narrow it with the 'jurisdiction' (cv/cr/bk/ap) and/or 'case_year' filters, or provide a more specific name.",
"total_pages": 44,
"total_elements": 2341,
"entity_resolved": false,
"request_id": "9f2a1c7e-4b3d-4a1e-9c2f-1d8e5a6b7c3d"
}Case types
The case_type on each returned case is one of the PACER federal case-type codes below. You can also pass cv, cr, bk, or ap as the jurisdiction filter to narrow a search.
| Code | Meaning |
|---|---|
cv | Civil |
bk | Bankruptcy |
cr | Criminal |
ap | Appellate |
mc | Miscellaneous |
pr | Personal / pro-se filing — excluded from results by default (individual matters, not business litigation). |
md | Multidistrict litigation (MDL) |
Party roles
The party_role on each case describes how the searched party appears in it. Raw PACER role codes are normalized to these values:
| Role | Meaning |
|---|---|
plaintiff | Party bringing a civil action. |
defendant | Party defending a civil or criminal action. |
debtor | The filing party in a bankruptcy case. |
creditor | A party owed money in a bankruptcy case. |
interested party | A non-primary party with a stake in the case. |
unknown | Role could not be determined from the PACER record. |
Status values
Each case's status is derived from its PACER termination date:
| Status | Meaning |
|---|---|
active | The case is open — no termination or closed date on record. |
closed | The case has a termination / effective-closed date (terminated, discharged, or dismissed). |
Sandbox mode
Every account starts with a sandbox key (cv_test_…) — free, no credit card. Use it to build and test your integration end-to-end.
- Sandbox keys route to PACER's QA environment (realistic test data, not billed).
- Capped at 10 searches; the response shape is identical to production.
- Your sandbox key is always visible in the dashboard and can be rotated anytime.
When you're ready, add a card on the billing page to get a production cv_live_ key that searches live federal records.
Code examples
curl -X POST https://www.casevine.ai/api/v1/parties/search \
-H "Authorization: Bearer cv_test_YOUR_SANDBOX_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "Acme Robotics", "entity_type": "business"}'Changelog
| Date | Change |
|---|---|
| Jul 2, 2026 | Base URL is now https://www.casevine.ai/api/v1. Added a Quickstart, an Enrichment fields reference, and Case type / Party role / Status reference tables. |
| Jul 2, 2026 | Renamed the entity-watching feature to Case Alerts (formerly "Monitoring"); "monitoring" now refers only to API/system health. Added a dedicated Case Alerts guide. |
| Jul 1, 2026 | Entity resolution fields added to party search; /api/v1 base path with a /api/health endpoint; categorized error codes with request IDs. |
| v1.0 | Initial release — party search over PACER with 30-day caching. |