Developer API

Programmatic access to docket search, retrieval, documents, and AI-powered analysis.

API v1.1 is now the current version. v1 is deprecated and will stop working on February 1, 2027. The main change: your login token now goes in an Authorization header instead of the URL. Migration guide →

Introduction

The Docket Alarm API gives you one REST API to hundreds of US courts, including PACER. Use it to search for cases, retrieve docket metadata, and download the PDF court filings behind each docket. Every court returns the same response schema, so your application can work with data from hundreds of courts through a single integration.

What the API does

The API supports legal automation, research, and alerting workflows. It covers over a billion tagged court dockets and OCRed PDF documents, and the text inside those documents is searchable, including with boolean (terms and connectors) queries.

Motion analysis (motion type, outcome, and importance) is also available through the analyze field on Get Docket. Contact questions@docketalarm.com about adding it or other value-added metadata to your license.

Docket Alarm also connects to the USPTO (PTAB/TTAB, TSDR, PAIR), so you can automate IP portfolio analysis and other prosecution and litigation workflows. See the full list of available jurisdictions.

In the API, each docket entry is one item in the docket_report list returned by Get Docket: the date is date, the filing number is number, the summary is contents, and the PDF is link, which you download with Get Document. The summary can contain HTML formatting.

Questions about the API, or need a feature that isn't documented here? Email support@docketalarm.com.

Authentication

Docket Alarm uses token-based authentication. First call the login/ endpoint with your account username and password to obtain a login token. The token is valid for 90 minutes. Send it on every other request in the Authorization HTTP header, as Authorization: Bearer <login_token>. Reuse a single token across many calls rather than logging in for each one.

You need a Docket Alarm account to use the API, and API access is an add-on to your subscription. To add it, contact our sales team and tell us what you're building.

Base URL https://www.docketalarm.com/api/v1.1/
Changed in v1.1: the token must be sent in the Authorization header. A login_token sent as a request parameter is refused. By then it has already been sent, and URLs end up in server and proxy logs, browser history, and referer headers, so never put the token in a URL; if you have, treat that token as exposed until it expires. Using v1? See Migrating from v1.
POST /api/v1.1/login/

Parameters

Parameter Type Description
usernamerequired string Your Docket Alarm account username (usually your email address).
passwordrequired string Your Docket Alarm account password.

Example Request

# Exchange your credentials for a 90-minute login token POST https://www.docketalarm.com/api/v1.1/login/ username=you@example.com&password=••••••

Example Response

{ "success": true, "login_token": "a1b2c3d4e5f67890abcdef1234567890" }

Using the token

# Every other call: put the token in the Authorization header GET https://www.docketalarm.com/api/v1.1/search/?q=apple+v.+samsung Authorization: Bearer a1b2c3d4e5f67890abcdef1234567890
Tip: A login token stays valid for 90 minutes, so reuse it across many requests rather than calling login/ every time, and request a fresh one once it expires. Never embed your password in client-side code.

Quickstart

This complete Python 3 example logs in, runs a search, and reads the stored copy of the first matching docket. It uses only the requests library (pip install requests). It reads the docket with cached=true, so there are no court fees.

# Docket Alarm API v1.1 quickstart import requests BASE = "https://www.docketalarm.com/api/v1.1/" def check(response): data = response.json() if not data.get("success"): raise RuntimeError(data.get("error")) return data # 1. Log in once. The token is good for 90 minutes, so reuse it. login = check(requests.post(BASE + "login/", data={ "username": "you@example.com", "password": "YOUR_PASSWORD", })) headers = {"Authorization": "Bearer " + login["login_token"]} # 2. Search Docket Alarm: trademark dockets where 3M is a party, newest first. results = check(requests.get(BASE + "search/", headers=headers, params={ "q": "is:docket party:(3M) type:trademark", "o": "-date_filed", "limit": 10, "client_matter": "quickstart", })) print(results["count"], "matching dockets") # 3. Read Docket Alarm's stored copy of the first result (cached=true: no court fees). first = results["search_results"][0] docket = check(requests.get(BASE + "getdocket/", headers=headers, params={ "court": first["court"], "docket": first["docket"], "cached": "true", "client_matter": "quickstart", })) print(docket["info"]["title"]) for entry in docket["docket_report"][:5]: print(entry["date"], entry["contents"][:80])

The same calls with curl

# Log in and copy login_token from the response curl -s -X POST https://www.docketalarm.com/api/v1.1/login/ \ -d username=you@example.com -d password=YOUR_PASSWORD # Search, sending the token in the Authorization header curl -s -G https://www.docketalarm.com/api/v1.1/search/ \ -H "Authorization: Bearer YOUR_TOKEN" \ --data-urlencode "q=is:docket party:(3M) type:trademark" \ -d limit=10 -d client_matter=quickstart

Testing

The test parameter needs no value: ?test on its own is enough. It changes what only some endpoints do:

  • searchpacer/ returns sample results instead of searching PACER, so there are no PACER fees.
  • track/ sends a test push notification with fake data and does not create or change a tracker (see Push Notifications).
  • search/ runs a real search with a fixed sample query and ignores q.
  • Every other endpoint, including getdocket/, works and is billed as usual.

To keep costs down while you build, read dockets with cached=true, which returns Docket Alarm's stored copy instead of pulling from the court.

API access has to be enabled on your account, and your email address confirmed, before login/ returns a token. To get access, contact our sales team.

Rate Limits and Retries

The API enforces rate limits to keep the service fast and reliable for everyone. As a best practice, keep your request rate within the per-minute limits below. If you go over, requests may be throttled, so slow down and retry.

Endpoint Best-practice limit Window
Search 60 requests per minute
Get Docket 200 requests per minute
Get Document 300 requests per minute

Retrying failed requests

Some calls make Docket Alarm contact the court for fresh information, and those connections can fail because of court maintenance, heavy load on the court's servers, or a CAPTCHA. Build in retries with exponential backoff (wait a little longer after each failed attempt) and keep your request rate to these endpoints modest. The calls that contact the court are:

  • searchpacer/
  • getdocket/ with cached=false (or with cached left out)
  • Document downloads that are not already in Docket Alarm

Requests that read Docket Alarm's own copy, such as search/ and getdocket/ with cached=true, do not contact the court.

What Counts as a Call

A call is a single request to one of the API endpoints. Your usage is measured in calls, so it helps to know what counts as one.

Endpoint What counts as one call
search/ One call per request against Docket Alarm's own database.
getdocket/ One call per docket you retrieve.
searchpacer/ One call per direct-to-court search. PACER fees are $0.10 for each page of results.
getdocument/ One call per PDF you pull. Each document opened from a docket entry's link is its own call, and for federal cases it may carry PACER fees depending on the document.
track/ One call per request. The alerts and push notifications that follow are not calls.
login/ Authentication only. Not a call.

Paging: each page is its own call

Each page of results counts as its own API call. search/ returns at most 50 results per request, so each time you advance the offset to fetch the next batch, that is a separate call: ten pages of results is ten calls, not one. The same applies to searchpacer/, which returns 50 results per page and advances with the page parameter (each page may carry its own PACER fee).

Recommended: Use offset/limit to page through your results -- set offset to the number of results you've already seen and limit to how many you want next.

Example workflow

A typical sequence to find cases where Uber was a defendant, then pull dockets and filings:

  1. 1
    Not a call

    login/ once to get a login_token (good for 90 minutes), then send it as Authorization: Bearer <login_token> on every call below.

  2. 2
    Call #1

    search/ with q=party:(name:uber type:defendant) is:docket, offset=0, limit=50 -- returns the first 50 results plus a total count.

  3. 3
    Call #2

    search/ again with offset=50 for results 51 to 100, a separate call purely because it is the next page. Repeat for each page.

  4. 4
    Call #3

    getdocket/ for a case from your results, passing its court and docket. cached=true returns Docket Alarm's stored copy; cached=false (or omitting it) pulls a fresh copy from the court and may trigger PACER fees. The response lists docket entries, each with a link to its PDF.

  5. 5
    Call #4

    getdocument/ to download a PDF using the link from a docket entry.

  6. 6
    Optional

    track/ to start tracking the case, so Docket Alarm checks it on a schedule and tells you when something new is filed. Each track/ request counts as a call. The alerts Docket Alarm sends you afterward do not.

  7. 7
    Not a call

    Receive a push notification at your server whenever a tracked case gets a new entry, instead of polling getdocket/.

Already know the court and want PACER's live results instead of Docket Alarm's index? Use searchpacer/ in place of step 2. See Search PACER.

Changelog

Changes to the Docket Alarm API, newest first.

  • October 2026 1,000-alert limit. Each user can have up to 1,000 enabled alerts in total, including alerts created on the website. Past that, track/ will not enable new alerts. See Track a Case.
  • July 2026 Login token moves to the Authorization header. In v1.1, send Authorization: Bearer <login_token> on every call. A login_token sent as a request parameter is refused. Every other parameter is unchanged.
  • July 2026 RSS feed per docket entry. getdocket/ accepts format=rss_entries, an RSS 2.0 feed with one item per docket entry. Use it with cached so polling the feed does not contact the court.
  • June 2026 AI keys move to headers. For Ask a Docket, send your key in X-OpenAI-Key or X-Anthropic-Key. Keys sent as URL parameters are rejected in v1.1. If you have ever sent a key in a URL, rotate it.
  • February 1, 2027 v1 stops working. Requests to /api/v1/ will return HTTP 410 Gone with an error pointing to v1.1 and these docs.

Moving from v1 to v1.1

v1 is deprecated. It still works today, with no change in results, call counts, or billing, but it will stop working on February 1, 2027. If any of your requests go to /api/v1/, or put login_token in a URL, you need to move to v1.1. v1.1 has the same endpoints, parameters, and responses. Only two things change: the version in the URL, and where you send your credentials.

  • June 2026: v1.1 AI endpoints released. AI keys move to headers.
  • July 2026: v1.1 released. The login token moves to the Authorization header.
  • February 1, 2027: v1 deprecation date. v1 requests stop working and return an error.

What changes

Whatv1 (deprecated)v1.1 (current)
Base URL /api/v1/ /api/v1.1/
Login token login_token query parameter or form field Authorization: Bearer <login_token> header. A login_token request parameter is refused.
AI keys (Ask a Docket and the other AI endpoints) openai_key / anthropic_key query parameters X-OpenAI-Key / X-Anthropic-Key headers. Keys in the URL are rejected.
Everything else Unchanged: parameters, responses, rate limits, what counts as a call, and PACER fees.

After February 1, 2027

Requests to v1 will fail with HTTP 410 Gone and a JSON body like:

{ "success": false, "error": "API v1 was retired on February 1, 2027. Use /api/v1.1/ and send your token in the Authorization header. See https://www.docketalarm.com/api-docs" }

Need help moving, or more time? Email support@docketalarm.com.

Search PACER

v1.1
GET /api/v1.1/searchpacer/

Run a live search directly against PACER (federal courts) using PACER's own party and case-locator fields. This searches PACER in real time rather than the Docket Alarm index. A request that sends only client_matter (with your token in the Authorization header) returns the list of available parameter options. Results are paginated with page (see page_max in the response).

Reach for Search PACER when you need brand-new federal filings sooner than they reach Docket Alarm, which indexes newly filed federal cases within 24 hours of filing at most.

What to expect. Because Search PACER queries the federal courts live, it returns dockets only (not documents), reflects PACER exactly, and is slower than searching Docket Alarm (roughly 30 to 60 seconds per search). It also carries PACER fees: $0.10 for each page of results. Depending on your arrangement, PACER fees may or may not be passed on to you at cost.

Headers

HeaderTypeDescription
Authorizationrequired string Bearer <login_token>, using the token from login/. In v1.1 a login_token sent as a request parameter is refused.

Parameters

Parameter Type Description
client_matterrequired string Your client/matter code for billing and tracking (may be blank).
party_nameoptional string A company name, or an individual's last name.
first_name / last_nameoptional string First and last name when searching for an individual. Cannot be combined with party_name.
middle_nameoptional string Middle name when searching for an individual. Cannot be combined with party_name.
nature_of_suitoptional string[] One or more Nature of Suit (NOS) codes to filter by, such as 830 (the code alone, not 830 Patent). Get the valid codes, the keys of nature_of_suits, from Discovering valid options below.
case_typeoptional string Restrict to a case type: Appellate, Bankruptcy, Civil, Criminal, or Multi-District Litigation. Leave blank to search all case types.
date_filed_start / date_filed_endoptional date Filter to cases filed on or after the start date and on or before the end date (YYYY-MM-DD).
date_terminated_start / date_terminated_endoptional date Filter to cases terminated on or after the start date and on or before the end date.
court_regionoptional string Limit to cases filed in one region. Get the valid values from court_regions in Discovering valid options below.
docket_numoptional string Limit to cases with this docket number. Use it when you know the docket number but not the court.
mdl_idoptional string Find a Multi-District Litigation by its MDL ID number. Requires case_type set to Multi-District Litigation.
pageoptional integer Page number (1-based) for paginating results. Run the search once (page 1) before requesting a later page.
ssn_tidoptional string The nine-digit Social Security number or federal tax ID of a party to the case. case_type must be Bankruptcy.
ssn4optional string The last four digits of a party's Social Security number. case_type must be Bankruptcy, and party_name must also be set.

Example Request

GET https://www.docketalarm.com/api/v1.1/searchpacer/?client_matter=&party_name=Apple+Inc.&case_type=Civil Authorization: Bearer YOUR_TOKEN

Example Response

{ "success": true, "page_max": 3, "search_results": [ { "title": "Apple Inc. v. Samsung Electronics Co. Ltd.", "court": "California Northern District Court", "docket": "5:11-cv-01846", "date_filed": "04/15/2011", "link": "https://www.docketalarm.com/cases/California_Northern_District_Court/5--11-cv-01846/Apple_Inc._v._Samsung_Electronics_Co._Ltd./", "nature_of_suit": "830", "party_name": "Apple Inc.", "party_role": "Plaintiff" } ] }

Return Values

A successful response contains the following top-level fields.

Field Type Description
success boolean true when the request succeeded. On failure it is false and an error field describes the problem.
page_max integer Up to 50 results are returned per search. When more than 50 cases match, this is the number of pages of data available; retrieve the rest with the page parameter.
Known issue: when there are thousands of results, page_max may be under-reported on page 1. Rely on it from page 2 onward.
search_results array The matching federal cases for this page. See search_results item below.

search_results item

Field Type Description
title string Case title.
court string PACER court the case is in.
docket string Docket number / case identifier.
date_filed string Date the case was filed.
link string URL to the docket on Docket Alarm.
nature_of_suitoptional string Nature of Suit (NOS) code. Bankruptcy cases do not have one.
date_terminatedoptional string Date the case was terminated, if it has closed.
party_nameoptional string Full party name. Returned when you searched by party_name.
party_roleoptional string The party's role in the case, for example Plaintiff or Defendant.

Discovering valid options

Send a request with only the Authorization header and client_matter (no search fields) to retrieve the values this endpoint accepts. The response is a set of reference lists you can use to build a valid search.

Example Request

GET https://www.docketalarm.com/api/v1.1/searchpacer/?client_matter= Authorization: Bearer YOUR_TOKEN

Example Response

{ "success": true, "courts": ["California Northern District Court", "..."], "court_regions": ["..."], "nature_of_suits": {"830": "830 Patent", "...": "..."}, "case_types": ["Appellate", "Bankruptcy", "Civil", "Criminal", "Multi-District Litigation"] }
Field Description
courts The PACER courts this endpoint can search.
court_regions Valid values for the court_region parameter.
nature_of_suits Valid Nature of Suit (NOS) codes for the nature_of_suit parameter.
case_types Valid values for the case_type parameter.

Get Docket

v1.1
GET /api/v1.1/getdocket/

Retrieve a full case: normalized case info, the complete docket_report (every entry, with links to any documents), and the parties and their counsel. Results are normalized across all supported jurisdictions.

Important note on the cached parameter and costs: By default Docket Alarm pulls the docket live from the court, which can incur PACER and per-page charges. Set cached=true to return Docket Alarm's already-stored copy and avoid those charges. We recommend always setting cached=true unless you specifically need the very latest filings, since leaving it false triggers a live pull and can cost money on every call.

Headers

HeaderTypeDescription
Authorizationrequired string Bearer <login_token>, using the token from login/. In v1.1 a login_token sent as a request parameter is refused.

Parameters

Parameter Type Description
client_matterrequired string Your client/matter code for billing and tracking (may be blank).
courtrequired string Court name, exactly as Docket Alarm names it, e.g. California Northern District Court. Use the court value from a search result or push notification.
docketrequired string Docket number / case identifier, e.g. 5:11-cv-01846. Use the docket value from a search result or push notification.
cachedoptional boolean If true, return the cached docket instead of pulling live from the court. Recommended. Default behavior pulls live and may incur costs. Check info.datetime_cached in the response to see how fresh the copy is.
formatoptional string Response format:
  • json (default): the standard JSON docket described below.
  • rss_entries: an RSS 2.0 feed with one item per docket entry, newest first, for feed readers. Each item has the entry text, a link to the filing, its date, and a stable identifier, so a reader can tell new filings from ones it has seen. Parties appear once, at the channel level. Pair it with cached=true, or every poll of the feed contacts the court.
  • rss: the older whole-docket export. Returns the docket, case information, and parties as a few items in a Docket Alarm XML namespace. Meant for machines, not feed readers.
normalizeoptional boolean If true, include normalized party, attorney, firm, and judge names (the *_normalized fields below). Default: false, which may change in future. Normalization is well tested but not perfect.
use_last_filing_dateoptional boolean PACER dockets only. Only with cached off: sending this option together with cached=true, even as false, fails with "Cannot set downloader options for cached dockets." Skip the live pull if there has been no new activity since the last filing date, reducing PACER fees. Docket Alarm can check the latest filing date for free, so a docket with no new filings costs nothing to check. Two trade-offs: if an existing entry is changed (rather than a new one added), the update is missed; and if there are new filings, the docket is pulled normally and PACER fees apply. Useful when you only care about new filings.
pacer_summary_pageoptional boolean Only with cached off, like use_last_filing_date. PACER dockets only. Also pull the PACER Summary page, which adds disposition to info. Costs an extra $0.10, and up to $3.00 if the summary is very large.

Example Request

# Recommended: request the cached copy to avoid live-pull charges GET https://www.docketalarm.com/api/v1.1/getdocket/?client_matter=&court=California+Northern+District+Court&docket=5:11-cv-01846&cached=true Authorization: Bearer YOUR_TOKEN

Example Response

{ "success": true, "info": { "title": "Apple Inc. v. Samsung Electronics Co. Ltd. et al", "date_filed": "4/15/2011", "judges": ["Lucy H. Koh"], "nature_of_suit": "830 Patent", "date_cached": "11/14/2024" }, "docket_report": [ { "date": "4/15/2011", "number": "1", "contents": "COMPLAINT against Samsung Electronics Co. Ltd.", "link": "https://www.docketalarm.com/cases/.../docs/1.pdf", "exhibits": [ { "exhibit": "1", "link": "https://www.docketalarm.com/cases/.../docs/1/1.pdf" } ] }, { // An entry with no document: no number and no links "date": "4/18/2011", "contents": "CASE DESIGNATED for Electronic Filing." } ], "parties": [ { "name": "Apple Inc.", "type": "Plaintiff", "counsel": [ { "name": "Jane Attorney", "firm": "Example Firm LLP", "email": "jane@example.com", "address": ["425 Market Street", "San Francisco, CA 94105"], "lead": true } ] } ] }

Return Values

A successful response contains the following top-level fields.

Field Type Description
success boolean true when the request succeeded. On failure it is false and an error field describes the problem.
info object Normalized case information (title, judges, dates, and more). See info object below.
docket_report array Every docket entry for the case, in order. See docket_report entry below.
parties array The parties to the case and their counsel. See parties entry below.
related array Related cases, when available. See related entry below.
claims array Claims or charges, when available. Most courts do not provide them. See claims entry below.

info object

Field Type Description
title string Case caption / title.
date_filed string Date the case was filed.
link string URL of the page on Docket Alarm that shows the full docket.
judges string[] Presiding judge(s). judges_normalized holds normalized names when normalize is requested.
judgeDeprecated string A single presiding judge. Kept for backwards compatibility; use judges instead.
magistrate string The magistrate judge on the case. Federal cases only.
nature_of_suit string Nature of Suit (NOS) code. See nature_of_suits in Search PACER for the list.
type / status / cause string Case type, current status, and the cause of action. type and status are not available for federal cases, vary from court to court, and are not normalized. cause is available for federal cases only.
division string The sub-court or division, in courts that have one.
date_terminated string Date the case was terminated, if closed.
demand string The type of demand made by the plaintiff. Federal cases only.
flags string[] Case flags, usually in capitals (for example JURY). Federal cases only.
disposition string How the case was resolved. Available in a number of state courts, and for federal district courts with pacer_summary_page (extra PACER fee).
patents string[] Patent numbers at issue. Available for PTAB cases, and for federal court cases where Docket Alarm has already pulled the complaint (which usually lists every patent in suit).
date_cached / datetime_cached string When Docket Alarm last pulled this docket from the court: date_cached is the date, datetime_cached the full timestamp in ISO 8601 format, in UTC.
cache_unofficial boolean true if Docket Alarm did not get this docket from an official court source.

Bankruptcy fields in info

Bankruptcy cases can include these dates, deadlines, and dispositions. Some, none, or all may be present depending on the stage of the bankruptcy. All are strings except is_asset and is_voluntary, which are booleans.

  • Dates: date_debtor_discharged, date_joint_debtor_discharged, date_341_meeting, date_plan_confirmed, date_discharged, date_converted
  • Deadlines: date_deadline_object_discharge, date_deadline_financial_mgmt_course, date_deadline_filing_claims
  • Dispositions and chapter: disposition_debtor, disposition_joint_debtor, chapter, chapter_previous
  • Flags: is_asset, is_voluntary

docket_report entry

Field Type Description
date string Filing date of the entry.
entry_date string When the entry was entered into PACER. Often the same day as the filing date, but it can be later, occasionally much later.
number string Document / filing number as a string of digits, such as "1", or null when the entry has no numeric number.
contents string The docket entry text. May contain HTML: dangerous tags are removed and only harmless styling tags such as <i> are kept.
link / link_viewer string Link to the document PDF and to the Docket Alarm document viewer, when a document is available. Download the PDF with Get Document.
exhibits array Exhibits attached to the entry, not including the main filing. See exhibits item below.
analyze object Motion / order analysis when available, including the document type, outcome (e.g. granted or denied), and timing. Produced by Docket Alarm's analysis, not by the court. May not be included in every API license; contact questions@docketalarm.com for details. See analyze object below.

exhibits item

Field Type Description
exhibit string The exhibit number or name. Unique among the exhibits for this entry.
link string Link to the exhibit PDF.
link_viewer string Link to the exhibit in the Docket Alarm viewer.

analyze object

Contains parser_types: a list of the motions and orders identified in the entry. Docket Alarm does not claim to capture every motion, and errs on the side of accuracy.

Field Type Description
type string High-level procedural tag: motion, response, reply, order, or pleading.
identifier string The specific motion or order, such as summaryjudgment. Identifiers can have parents (disqualify is the parent of disqualify_counsel) and some are ambiguous. Each one is defined in the data dictionary: JSON, Excel, RSS, with the full motion name, categories, priority, and the matching SALI code.
outcome string[] granted or denied. Often unknown.
days_sequence / days_decision / days_briefing integer Timing, on order entries where related entries can be linked. Sequence: the whole motion-to-order sequence. Decision: last responsive brief to the order. Briefing: first opening brief to last responsive brief.
related array Other docket entries this one relates to, each with index (position in docket_report) and number (filing number).
snippet string Short text highlighting the relevant motion language.
confidence string very_low, low, medium, high, or very_high.

parties entry

Field Type Description
name string Party name. name_normalized holds the normalized form when requested.
type string Party role, e.g. Plaintiff or Defendant.
counsel array Attorneys for the party, when available. See counsel item below.

counsel item

Field Type Description
name / name_normalized string The attorney's name, and its normalized form when normalize is requested.
firm / firm_normalized string The attorney's law firm, and its normalized form when normalize is requested.
email string Email address.
phone string Phone number.
address string[] The attorney's address, one array item per line.
lead boolean true if the attorney is marked as lead attorney. Most courts do not distinguish lead attorneys.
prose boolean true if the party is representing themselves (pro se). Courts do not always set this, but when it is true it can be relied on.

related entry

Field Type Description
type string The relationship, such as Original Case, Related Case, Lead Case, Orange Book, or 2(d) Rejection. Contact support for the full list.
court / docket string Court and docket number of the related case.
title string Title of the related case.
link string Link to the related docket on Docket Alarm.

You can also search on relationships. For example, related:(type:(Original Case) court:(New York)) finds cases appealed from a New York court.

claims entry

Most courts do not provide claims. To see which cases have them, run the search claim:"".

Field Type Description
type string The kind of claim. Currently always charge: a criminal or administrative charge. Other types (such as civil causes of action) may be added.
id string The claim or charge count number (count 1, count 2, and so on), in courts that provide one. Usually an integer, but sent as a string.
description string Description of the claim.
code string The statute or regulation the claim is based on.
disposition string The outcome of the claim, when available.
date string The claim date, when available.

Get Document

v1.1
GET /cases/{court}/{docket}/{case_title}/docs/{document_number}.pdf

Download a document as a PDF. You don't normally build this URL by hand. Each entry in a docket report's docket_report includes a link (and link_viewer) that points at the correct document URL. On success the response body is the binary PDF; on error it is JSON with success: false.

Exhibits have their own URLs, with the exhibit after the document number: .../docs/{document_number}/{exhibit}.pdf. Use the link in each exhibits item.

In these links, spaces in the court name and case title become underscores, and the colon in a docket number becomes --. For example, document 47 in Barbara Grady v. RCM Technologies Inc (5:22-cv-00842, California Central District Court) is at https://www.docketalarm.com/cases/California_Central_District_Court/5--22-cv-00842/Barbara_Grady_v._RCM_Technologies_Inc/docs/47.pdf.

Important note on the cached parameter and costs: Including cached in the request at all -- with any value, including cached=false -- restricts the request to Docket Alarm's already-stored copy and avoids a paid live retrieval from the court. If the document is not yet cached, you get HTTP 412 instead of a charge. To force a live retrieval from the court, omit the cached parameter entirely rather than setting it to false.
Document links have no version in the path. Send your token in the Authorization header. A login_token in the URL also still works for document links, including after v1 is retired.

Headers

HeaderTypeDescription
Authorizationrequired string Bearer <login_token>, using the token from login/. A login_token in the URL also works for document links.

Parameters

Parameter Type Description
client_matteroptional string Your client/matter code for billing and tracking.
cachedoptional boolean If present -- any value, including false -- only return the document if it is already cached (returns 412 if not). Omit this parameter entirely to allow a live retrieval.

Example Request

GET https://www.docketalarm.com/cases/California_Central_District_Court/5--22-cv-00842/Barbara_Grady_v._RCM_Technologies_Inc/docs/47.pdf?cached=true Authorization: Bearer YOUR_TOKEN

Response

# On success: binary PDF (Content-Type: application/pdf) # On error: JSON, e.g. { "success": false, "error": "Document is not in the cache." }

Status Codes

Code Meaning
200Success. The response body is the PDF, not JSON.
302Redirect. Follow the Location header (the document's link format changed). Send your credentials again on the redirected request: many HTTP clients drop the Authorization header when following a redirect.
401A problem with logging in (check the token in your Authorization header), the document is not part of this docket (check the link), or a billing problem with the account (for example, not enough funds or the free weekly view limit reached).
403The document is sealed, is listed on the docket but not yet available (for example, held for review or redaction), or could not be found at the court. Documents held for review can become available days later, so retry later.
412You set cached, but the document is not in Docket Alarm's cache.
500Likely an API bug. Contact support.
502The servers are under heavy load. Retry later.

Ask a Docket

v1.1
GET /api/v1.1/VIDA/ask_docket/

Ask a natural-language question about a case and get an AI-generated answer grounded in the case record. The model can read the docket entries, the underlying documents, or both, and returns an answer formatted however you describe in output_format. Optionally include the supporting source data used to answer.

With target=documents or both, the complaint must already be downloaded to Docket Alarm and OCR'd; otherwise the call fails with "Required document hasn't been downloaded yet". allow_download does not change this.

Headers

HeaderTypeDescription
Authorizationrequired string Bearer <login_token>, using the token from login/. In v1.1 a login_token sent as a request parameter is refused.
X-OpenAI-Key / X-Anthropic-Keyrequired string Your own OpenAI or Anthropic API key. At least one of the two is required. In v1.1 a key sent as a URL parameter is rejected.

Parameters

Parameter Type Description
client_matterrequired string Your client/matter code for billing and tracking (may be blank).
courtrequired string Court name for the case.
docketrequired string Docket number for the case.
questionrequired string The natural-language question to ask about the case.
targetrequired string What the AI should read: docket, documents, or both.
output_formatrequired string A natural-language description of how the answer should be formatted.
cachedoptional boolean Use cached case data. Default: true. Only the exact value False turns it off.
show_relevantoptional boolean If present, with any value (even false), include the docket/document data the answer was based on. Leave it out to skip that data.
openai_model / claude_modeloptional string Override the model used. Defaults: gpt-4.1 for OpenAI and claude-3-5-sonnet-20240620 for Claude.

Example Request

GET https://www.docketalarm.com/api/v1.1/VIDA/ask_docket/?client_matter=&court=New+York+Southern+District+Court&docket=1:23-cv-01234&question=What+is+the+current+status+and+next+hearing%3F&target=both&output_format=a+short+paragraph Authorization: Bearer YOUR_TOKEN X-Anthropic-Key: YOUR_ANTHROPIC_KEY

Example Response

{ "success": true, "question": "What is the current status and next hearing?", "price": 0.12, "from_documents": { "claude_answer": "The case is in discovery; a status conference is set for January 15, 2025 (Dkt. 47)." } }

Return Values

Field Type Description
success boolean true when the request succeeded; otherwise false with an error.
question string The question that was asked, echoed back.
price number The cost of the AI call.
date_cached string When the underlying case data was last cached.
from_dockets / from_documents object The answer. from_dockets is present when target includes the docket, from_documents when it includes documents. Each contains openai_answer and/or claude_answer, plus the supporting source data when show_relevant is sent: relevant_docket_data in from_dockets (the docket information the AI relied on, such as case status, entries, or filing date) and relevant_document_data in from_documents (the document it selected and any others it found relevant). With target=both, if one side fails the response is still success: true and that side is {"error": "..."} with no answer, so check each side for error.

Case Matcher

v1.1
GET /api/v1.1/VIDA/case_matcher/

Find a case when you don't know its exact docket number or court. Send whatever you do know, such as the state, part of the case title, party names, case type, or filing date, and AI matches it to a single case in Docket Alarm. The response includes the matched case and the AI cost of the request.

Headers

HeaderTypeDescription
Authorizationrequired string Bearer <login_token>, using the token from login/. In v1.1 a login_token sent as a request parameter is refused.
X-OpenAI-Key / X-Anthropic-Keyrequired string Your own OpenAI or Anthropic API key. At least one of the two is required. In v1.1 a key sent as a URL parameter is rejected.

Parameters

Parameter Type Description
client_matterrequired string Your client/matter code for billing and tracking (may be blank).
any case detailrequired string At least one parameter describing the case, named however you like, for example state, parties, case_type, or filing_date. Every extra parameter you send is used to find the match.
openai_model / claude_modeloptional string Override the model used. Defaults: gpt-4.1 (OpenAI) and claude-3-5-sonnet-20240620 (Anthropic).

Example Request

# Match a case from the state, filing date, and a party name GET https://www.docketalarm.com/api/v1.1/VIDA/case_matcher/?client_matter=&state=Connecticut&filing_date=March+7,+2024&parties=Anastasia+Amelio Authorization: Bearer YOUR_TOKEN X-Anthropic-Key: YOUR_ANTHROPIC_KEY

Example Response

{ "success": true, "price": 0.01685, "result": { "Case Number": "230203", "Court": "Connecticut State, Supreme Court", "Link": "https://www.docketalarm.com/cases/Connecticut_State_Supreme_Court/230203/..." } }

Return Values

Field Type Description
success boolean true when the request succeeded; otherwise false with an error, for example when no matching case is found.
result object The matched case: Case Number, Court, and Link to the case on Docket Alarm. Pass the court and case number to Get Docket to retrieve it.
price number The AI cost of the request.

Entity Normalizer

v1.1
GET /api/v1.1/VIDA/entity_normalizer/

Turn a company or person name into a ready-to-run Search query that finds that entity's cases without the false positives a plain name search returns. For example, a search for "Apple" also matches Apple Oil and Green Apple; the normalizer reviews sample results with AI and returns a query that excludes them. You can optionally include the entity's corporate group (parents and subsidiaries).

Headers

HeaderTypeDescription
Authorizationrequired string Bearer <login_token>, using the token from login/. In v1.1 a login_token sent as a request parameter is refused.
X-OpenAI-Key / X-Anthropic-Keyrequired string Your own OpenAI or Anthropic API key. At least one of the two is required. In v1.1 a key sent as a URL parameter is rejected.

Parameters

Parameter Type Description
entityrequired string The company or person name to normalize, e.g. Apple.
include_corporate_groupoptional flag If present (any value), the query also covers entities in the same corporate group.
openai_model / claude_modeloptional string Override the model used. Defaults: gpt-4.1 (OpenAI) and claude-3-5-sonnet-20240620 (Anthropic).

Example Request

# Build a clean party query for Apple, including its corporate group GET https://www.docketalarm.com/api/v1.1/VIDA/entity_normalizer/?entity=Apple&include_corporate_group=true Authorization: Bearer YOUR_TOKEN X-Anthropic-Key: YOUR_ANTHROPIC_KEY

Example Response

{ "success": true, "price": 0.08432, "query": "party:(Apple NOT \"APPLE OIL\" NOT \"GREEN APPLE\" NOT \"APPLE REIT SIX, INC.\" ...) is:docket" }

Return Values

Field Type Description
success boolean true when the request succeeded; otherwise false with an error.
query string A Docket Alarm query for the normalized entity. Pass it as q to Search.
price number The AI cost of the request.
Tip: Running the returned query through Search is a separate call. See What Counts as a Call.

Get Cause of Action

v1.1
GET /api/v1.1/VIDA/get_cause_of_action/

List the causes of action in a case. Send the docket number and court, and AI reads the complaint and returns one bullet point per cause of action, explaining it and citing any relevant cases or statutes. Works for federal (PACER) and other courts.

The complaint must already be downloaded to Docket Alarm and OCR'd; otherwise the call fails with "Required document hasn't been downloaded yet".

Headers

HeaderTypeDescription
Authorizationrequired string Bearer <login_token>, using the token from login/. In v1.1 a login_token sent as a request parameter is refused.
X-OpenAI-Key / X-Anthropic-Keyrequired string Your own OpenAI or Anthropic API key. At least one of the two is required. In v1.1 a key sent as a URL parameter is rejected.

Parameters

Parameter Type Description
docketrequired string Docket number, as returned by Search.
courtrequired string Court name, as returned by Search.
cachedoptional boolean Use Docket Alarm's stored copy of the docket. Default: true. Set to exactly False to pull a fresh copy from the court first, which can incur court fees. Other values, including lowercase false, keep the stored copy.
openai_model / claude_modeloptional string Override the model used. Defaults: gpt-4.1 (OpenAI) and claude-3-5-sonnet-20240620 (Anthropic).

Example Request

# Causes of action in a federal patent case GET https://www.docketalarm.com/api/v1.1/VIDA/get_cause_of_action/?docket=2:23-cv-10910&court=California+Central+District+Court Authorization: Bearer YOUR_TOKEN X-Anthropic-Key: YOUR_ANTHROPIC_KEY

Example Response

{ "success": true, "openai_answer": "- Infringement of the '051 Patent under 35 U.S.C. § 271 for Defendants' alleged actions in (...)", "price": 0.08069 }

Return Values

Field Type Description
success boolean true when the request succeeded; otherwise false with an error.
openai_answer / claude_answer string One bullet point per cause of action, explaining it and citing any relevant cases or statutes. openai_answer is returned when you use an OpenAI key, claude_answer when you use an Anthropic key.
price number The AI cost of the request.

Track a Case

v1.1
POST /api/v1.1/track/

Start or stop tracking a case (or a saved search). When tracking is enabled, Docket Alarm checks the case at the frequency you choose and notifies you, by email and/or push notification, whenever it changes. Send a GET to the same endpoint to list the cases you are currently tracking.

Alert limit: each user can have up to 1,000 enabled alerts in total, including alerts created on the website. The limit is per user, not per account. Once a user reaches it, the API will not enable new alerts and returns this error: We initially limit the number of alerts you may have to 1000 alerts. Contact support@docketalarm.com for questions. Users who need more can contact support. Flat-rate users, sub-users of legacy PACER accounts and free trials have a lower limit, 5 alerts by default, with its own error (We initially limit the number of alerts you may have to 5 alerts. We increase this limit on request., or During the free trial, you may create 5 alerts.). Both limits are defaults and can be raised per account.

Headers

HeaderTypeDescription
Authorizationrequired string Bearer <login_token>, using the token from login/. In v1.1 a login_token sent as a request parameter is refused.

Request Body (form-encoded)

Field Type Description
courtoptional string Court name for the case to track. Required unless q is set.
docketoptional string Docket number for the case to track. Required unless q is set.
enablerequired boolean true to start tracking, false to stop.
client_matteroptional string Your client/matter code for billing and tracking (may be blank, up to 50 characters). Required when enable=true.
frequencyoptional string How often to check the case: realtime, continuous, 40x, twice_daily, daily, weekly, or monthly. Required when enable=true. See frequency values below for each schedule.
qoptional string A search query. Use instead of court/docket to track a saved search rather than a single case. When you send q, leave court and docket blank. New results arrive as a search_results push.
testoptional boolean If present, with any value (even false), send a test push notification with fake data to your configured callback URL, without creating or modifying a tracker. Leave it out for a normal call.
test_trackoptional boolean Synchronously send a real test push for an existing case or search tracker.

frequency values

Every frequency except weekly runs on weekdays only (Monday to Friday).

ValueWhen the case is checked
dailyOnce a day at 8AM ET.
twice_dailyTwice a day, at 7AM and 4PM ET.
continuous16 times a day, during and after business hours to catch late filers: roughly 1AM, 3AM, 9AM, 10AM, 11AM, 12PM, 1PM, 2PM, 3PM, 4PM, 5PM, 6PM, 7PM, 8PM, 9PM, and 11PM. A popular choice.
40x40 times a day, roughly every 15 minutes, mostly during trading hours. Turned off on most accounts by default.
weeklyOnce a week, on Mondays.
monthlyOnce a month, on the 1st. The day of the month can't be changed through the API.
realtimeOnly for special ECF alerts that don't need polling. Not available in most cases.
Notifications: Tracked-case updates are delivered by email by default, or as push notifications (webhooks) to a server endpoint you configure on your account. See Push Notifications for the delivery setup.

Example Request

POST https://www.docketalarm.com/api/v1.1/track/ Authorization: Bearer YOUR_TOKEN Content-Type: application/x-www-form-urlencoded court=New+York+Southern+District+Court&docket=1:23-cv-01234&enable=true&client_matter=&frequency=daily

Example Response

{ "success": true }

Some courts can't be checked at continuous or 40x. The tracker is then saved at the first of twice_daily, daily or monthly that the court offers, and the response is still success: true, with the substitution spelled out:

{ "success": true, "frequency": "twice_daily", "frequency_requested": "40x", "message": "This court cannot be alerted at 40x, so twice_daily was used instead." }

If the court offers none of those, the call fails with This court cannot be alerted at 40x and has no lower frequency available.

Listing tracked cases

Send a GET to the same endpoint, with the same Authorization header, to list the cases and searches you are currently tracking.

Parameter Type Description
offsetoptional integer Starting position in your tracker list. Default: 0. Max: 5000.
limitoptional integer Maximum trackers to return. Default: 20. Max: 50.

Example Request

GET https://www.docketalarm.com/api/v1.1/track/?limit=25 Authorization: Bearer YOUR_TOKEN

Example Response

{ "success": true, "dockets": [ { "court": "New York Southern District Court", "docket": "1:23-cv-01234", "title": "Acme Corp. v. Widget Inc.", "link": "https://www.docketalarm.com/cases/...", "enabled": true, "frequency": "daily", "client_matter": "", "datetime_updated": "2026-01-15T09:30:00Z" } ] }

Each tracker returns its court, docket, title, link, enabled state, frequency, client_matter, and datetime_updated (ISO 8601, in UTC). A tracker that has attempted a push also returns _api_push_debug_info.

_api_push_debug_info object

Included on a tracker that has attempted at least one push notification. Use it only for manual debugging: it is not covered by the versioning policy and may be removed without notice, so don't build it into an automated system.

Field Type Description
response_code integer The HTTP status your server returned to the last push.
request_url string The URL the last push was sent to.
request_payload string The payload of the last push, up to its first 16KB.
request_payload_truncated boolean Whether request_payload was cut to its first 16KB.
request_start_time / request_end_time string When the last push started and finished.
will_retry boolean true if Docket Alarm will retry the push.
error_message string Extra detail about the error, when there is one.

Push Notifications

All versions
POST Docket Alarm → your callback URL

Instead of polling, you can have Docket Alarm push updates to you. When a tracked event is detected, Docket Alarm sends an HTTP POST request to a callback URL you configure. This is the delivery mechanism behind Track a Case.

Configuring your endpoint

Set your callback URL yourself under API Webhook on your account page (Membership Details). The field appears once API access is enabled on your account. For good security, use an HTTPS URL with basic-auth credentials, for example https://user:password@example.com/webhook. If you don't see the field, email support@docketalarm.com.

What triggers a notification

push_type Trigger
docketA new docket entry is detected on a case you track.
search_resultsA new result matches a saved search (new lawsuits, or new documents across many cases).
new_caseA new federal case is filed that matches a New PACER Case alert (by nature of suit, and optionally party name). These alerts are set up on the website under New Case Alerts > Federal District and cannot be created through the API.

Payload

Docket Alarm POSTs a JSON body whose fields depend on push_type. A new docket-item notification looks like:

{ "push_type": "docket", "client_matter": "...", "court": "New York Southern District Court", "docket": "1:23-cv-01234", "info": { /* case information */ }, "docket_report": [ /* new entries only */ ], "parties": [ /* case parties */ ] }

Every payload includes push_type and client_matter (the value you set on the tracker). In a docket push, info, docket_report, and parties have the same structure as in Get Docket, but docket_report holds only the new entries.

search_results push (a saved search tracked with q)

Field Type Description
push_type string Always search_results.
client_matter string The value set on the tracker.
q string The query that was run.
link string A relative link to the search results on Docket Alarm.
title string A human-readable description of the search.
search_results array The new results, in the same format as Search results.

new_case push (a New PACER Case alert)

Field Type Description
push_type string Always new_case.
client_matter string The value set on the alert.
party_name string The party name the alert searches for, if one was set.
nature_of_suit string[] The nature of suit codes the alert is limited to. See nature_of_suits in Search PACER for the list.
search_results array The new cases, in the same format as Search PACER results.
// Example new_case push { "push_type": "new_case", "client_matter": "Best Client", "party_name": "Sony", "search_results": [ { "docket": "1:13-cv-22843", "nature_of_suit": "840", "court": "Florida Southern District Court", "date_filed": "8/8/2013", "title": "Effs v. Sony Pictures Home Entertainment Inc. et al" }, { "docket": "2:13-cv-05682", "nature_of_suit": "190", "court": "California Central District Court", "date_filed": "8/6/2013", "title": "Richard Arons v. Sony Music Entertainment Inc et al" } ] }

Responding and retries

Your endpoint must return HTTP 200. If Docket Alarm receives a non-200 response, it retries up to 10 times with exponentially increasing delays, from a minimum of 10 minutes up to a maximum of 4 hours.

Testing and debugging

To simulate a push without changing a tracker, add test=true to a POST to track/ -- Docket Alarm ignores every other parameter and sends a notification with fixed, fake data, so you can check your endpoint is wired up correctly. To test against a real existing tracker instead, use test_track=true along with the court/docket or q identifying it -- Docket Alarm synchronously sends a notification with that tracker's actual current results, without editing the tracker. The track/ GET response also includes an _api_push_debug_info object on each tracker to help troubleshoot delivery (see Track a Case). Use it for manual debugging only: it is not covered by the versioning policy and may be removed without notice.

v1 Endpoint Reference

Deprecated
These v1 endpoints are deprecated and will stop working on February 1, 2027. They still work today, with no change in results or billing. Please use the v1.1 endpoints instead, which send your token in the Authorization header. Each v1 endpoint has a v1.1 version with the same name. To move an existing integration, see Moving from v1 to v1.1.

This is the original v1 reference, kept for existing integrations.

Login

Deprecatedv1
POST /api/v1/login/

Parameters

Parameter Type Description
usernamerequired string Your Docket Alarm account username (usually your email address).
passwordrequired string Your Docket Alarm account password.

Example Request

# Exchange your credentials for a 90-minute login token POST https://www.docketalarm.com/api/v1/login/ username=you@example.com&password=••••••

Example Response

{ "success": true, "login_token": "a1b2c3d4e5f67890abcdef1234567890" }

Search PACER

Deprecatedv1
GET /api/v1/searchpacer/

Run a live search directly against PACER (federal courts) using PACER's own party and case-locator fields. This searches PACER in real time rather than the Docket Alarm index. A request that sends only login_token and client_matter returns the list of available parameter options. Results are paginated with page (see page_max in the response).

Reach for Search PACER when you need brand-new federal filings sooner than they reach Docket Alarm, which indexes newly filed federal cases within 24 hours of filing at most.

What to expect. Because Search PACER queries the federal courts live, it returns dockets only (not documents), reflects PACER exactly, and is slower than searching Docket Alarm (roughly 30 to 60 seconds per search). It also carries PACER fees: $0.10 for each page of results. Depending on your arrangement, PACER fees may or may not be passed on to you at cost.

Parameters

Parameter Type Description
login_tokenrequired string Login token from login/.
client_matterrequired string Your client/matter code for billing and tracking (may be blank).
party_nameoptional string A company name, or an individual's last name.
first_name / last_nameoptional string First and last name when searching for an individual. Cannot be combined with party_name.
middle_nameoptional string Middle name when searching for an individual. Cannot be combined with party_name.
nature_of_suitoptional string[] One or more Nature of Suit (NOS) codes to filter by, such as 830 (the code alone, not 830 Patent). Get the valid codes, the keys of nature_of_suits, from Discovering valid options below.
case_typeoptional string Restrict to a case type: Appellate, Bankruptcy, Civil, Criminal, or Multi-District Litigation. Leave blank to search all case types.
date_filed_start / date_filed_endoptional date Filter to cases filed on or after the start date and on or before the end date (YYYY-MM-DD).
date_terminated_start / date_terminated_endoptional date Filter to cases terminated on or after the start date and on or before the end date.
court_regionoptional string Limit to cases filed in one region. Get the valid values from court_regions in Discovering valid options below.
docket_numoptional string Limit to cases with this docket number. Use it when you know the docket number but not the court.
mdl_idoptional string Find a Multi-District Litigation by its MDL ID number. Requires case_type set to Multi-District Litigation.
pageoptional integer Page number (1-based) for paginating results. Run the search once (page 1) before requesting a later page.
ssn_tidoptional string The nine-digit Social Security number or federal tax ID of a party to the case. case_type must be Bankruptcy.
ssn4optional string The last four digits of a party's Social Security number. case_type must be Bankruptcy, and party_name must also be set.

Example Request

GET https://www.docketalarm.com/api/v1/searchpacer/?login_token=YOUR_TOKEN&client_matter=&party_name=Apple+Inc.&case_type=Civil

Example Response

{ "success": true, "page_max": 3, "search_results": [ { "title": "Apple Inc. v. Samsung Electronics Co. Ltd.", "court": "California Northern District Court", "docket": "5:11-cv-01846", "date_filed": "04/15/2011", "link": "https://www.docketalarm.com/cases/California_Northern_District_Court/5--11-cv-01846/Apple_Inc._v._Samsung_Electronics_Co._Ltd./", "nature_of_suit": "830", "party_name": "Apple Inc.", "party_role": "Plaintiff" } ] }

Return Values

A successful response contains the following top-level fields.

Field Type Description
success boolean true when the request succeeded. On failure it is false and an error field describes the problem.
page_max integer Up to 50 results are returned per search. When more than 50 cases match, this is the number of pages of data available; retrieve the rest with the page parameter.
Known issue: when there are thousands of results, page_max may be under-reported on page 1. Rely on it from page 2 onward.
search_results array The matching federal cases for this page. See search_results item below.

search_results item

Field Type Description
title string Case title.
court string PACER court the case is in.
docket string Docket number / case identifier.
date_filed string Date the case was filed.
link string URL to the docket on Docket Alarm.
nature_of_suitoptional string Nature of Suit (NOS) code. Bankruptcy cases do not have one.
date_terminatedoptional string Date the case was terminated, if it has closed.
party_nameoptional string Full party name. Returned when you searched by party_name.
party_roleoptional string The party's role in the case, for example Plaintiff or Defendant.

Discovering valid options

Send a request with only login_token and client_matter (no search fields) to retrieve the values this endpoint accepts. The response is a set of reference lists you can use to build a valid search.

Example Request

GET https://www.docketalarm.com/api/v1/searchpacer/?login_token=YOUR_TOKEN&client_matter=

Example Response

{ "success": true, "courts": ["California Northern District Court", "..."], "court_regions": ["..."], "nature_of_suits": {"830": "830 Patent", "...": "..."}, "case_types": ["Appellate", "Bankruptcy", "Civil", "Criminal", "Multi-District Litigation"] }
Field Description
courts The PACER courts this endpoint can search.
court_regions Valid values for the court_region parameter.
nature_of_suits Valid Nature of Suit (NOS) codes for the nature_of_suit parameter.
case_types Valid values for the case_type parameter.

Get Docket

Deprecatedv1
GET /api/v1/getdocket/

Retrieve a full case: normalized case info, the complete docket_report (every entry, with links to any documents), and the parties and their counsel. Results are normalized across all supported jurisdictions.

Important note on the cached parameter and costs: By default Docket Alarm pulls the docket live from the court, which can incur PACER and per-page charges. Set cached=true to return Docket Alarm's already-stored copy and avoid those charges. We recommend always setting cached=true unless you specifically need the very latest filings, since leaving it false triggers a live pull and can cost money on every call.

Parameters

Parameter Type Description
login_tokenrequired string Login token from login/.
client_matterrequired string Your client/matter code for billing and tracking (may be blank).
courtrequired string Court name, exactly as Docket Alarm names it, e.g. California Northern District Court. Use the court value from a search result or push notification.
docketrequired string Docket number / case identifier, e.g. 5:11-cv-01846. Use the docket value from a search result or push notification.
cachedoptional boolean If true, return the cached docket instead of pulling live from the court. Recommended. Default behavior pulls live and may incur costs. Check info.datetime_cached in the response to see how fresh the copy is.
formatoptional string Response format:
  • json (default): the standard JSON docket described below.
  • rss_entries: an RSS 2.0 feed with one item per docket entry, newest first, for feed readers. Each item has the entry text, a link to the filing, its date, and a stable identifier, so a reader can tell new filings from ones it has seen. Parties appear once, at the channel level. Pair it with cached=true, or every poll of the feed contacts the court.
  • rss: the older whole-docket export. Returns the docket, case information, and parties as a few items in a Docket Alarm XML namespace. Meant for machines, not feed readers.
normalizeoptional boolean If true, include normalized party, attorney, firm, and judge names (the *_normalized fields below). Default: false, which may change in future. Normalization is well tested but not perfect.
use_last_filing_dateoptional boolean PACER dockets only. Only with cached off: sending this option together with cached=true, even as false, fails with "Cannot set downloader options for cached dockets." Skip the live pull if there has been no new activity since the last filing date, reducing PACER fees. Docket Alarm can check the latest filing date for free, so a docket with no new filings costs nothing to check. Two trade-offs: if an existing entry is changed (rather than a new one added), the update is missed; and if there are new filings, the docket is pulled normally and PACER fees apply. Useful when you only care about new filings.
pacer_summary_pageoptional boolean Only with cached off, like use_last_filing_date. PACER dockets only. Also pull the PACER Summary page, which adds disposition to info. Costs an extra $0.10, and up to $3.00 if the summary is very large.

Example Request

# Recommended: request the cached copy to avoid live-pull charges GET https://www.docketalarm.com/api/v1/getdocket/?login_token=YOUR_TOKEN&client_matter=&court=California+Northern+District+Court&docket=5:11-cv-01846&cached=true

Example Response

{ "success": true, "info": { "title": "Apple Inc. v. Samsung Electronics Co. Ltd. et al", "date_filed": "4/15/2011", "judges": ["Lucy H. Koh"], "nature_of_suit": "830 Patent", "date_cached": "11/14/2024" }, "docket_report": [ { "date": "4/15/2011", "number": "1", "contents": "COMPLAINT against Samsung Electronics Co. Ltd.", "link": "https://www.docketalarm.com/cases/.../docs/1.pdf", "exhibits": [ { "exhibit": "1", "link": "https://www.docketalarm.com/cases/.../docs/1/1.pdf" } ] }, { // An entry with no document: no number and no links "date": "4/18/2011", "contents": "CASE DESIGNATED for Electronic Filing." } ], "parties": [ { "name": "Apple Inc.", "type": "Plaintiff", "counsel": [ { "name": "Jane Attorney", "firm": "Example Firm LLP", "email": "jane@example.com", "address": ["425 Market Street", "San Francisco, CA 94105"], "lead": true } ] } ] }

Return Values

A successful response contains the following top-level fields.

Field Type Description
success boolean true when the request succeeded. On failure it is false and an error field describes the problem.
info object Normalized case information (title, judges, dates, and more). See info object below.
docket_report array Every docket entry for the case, in order. See docket_report entry below.
parties array The parties to the case and their counsel. See parties entry below.
related array Related cases, when available. See related entry below.
claims array Claims or charges, when available. Most courts do not provide them. See claims entry below.

info object

Field Type Description
title string Case caption / title.
date_filed string Date the case was filed.
link string URL of the page on Docket Alarm that shows the full docket.
judges string[] Presiding judge(s). judges_normalized holds normalized names when normalize is requested.
judgeDeprecated string A single presiding judge. Kept for backwards compatibility; use judges instead.
magistrate string The magistrate judge on the case. Federal cases only.
nature_of_suit string Nature of Suit (NOS) code. See nature_of_suits in Search PACER for the list.
type / status / cause string Case type, current status, and the cause of action. type and status are not available for federal cases, vary from court to court, and are not normalized. cause is available for federal cases only.
division string The sub-court or division, in courts that have one.
date_terminated string Date the case was terminated, if closed.
demand string The type of demand made by the plaintiff. Federal cases only.
flags string[] Case flags, usually in capitals (for example JURY). Federal cases only.
disposition string How the case was resolved. Available in a number of state courts, and for federal district courts with pacer_summary_page (extra PACER fee).
patents string[] Patent numbers at issue. Available for PTAB cases, and for federal court cases where Docket Alarm has already pulled the complaint (which usually lists every patent in suit).
date_cached / datetime_cached string When Docket Alarm last pulled this docket from the court: date_cached is the date, datetime_cached the full timestamp in ISO 8601 format, in UTC.
cache_unofficial boolean true if Docket Alarm did not get this docket from an official court source.

Bankruptcy fields in info

Bankruptcy cases can include these dates, deadlines, and dispositions. Some, none, or all may be present depending on the stage of the bankruptcy. All are strings except is_asset and is_voluntary, which are booleans.

  • Dates: date_debtor_discharged, date_joint_debtor_discharged, date_341_meeting, date_plan_confirmed, date_discharged, date_converted
  • Deadlines: date_deadline_object_discharge, date_deadline_financial_mgmt_course, date_deadline_filing_claims
  • Dispositions and chapter: disposition_debtor, disposition_joint_debtor, chapter, chapter_previous
  • Flags: is_asset, is_voluntary

docket_report entry

Field Type Description
date string Filing date of the entry.
entry_date string When the entry was entered into PACER. Often the same day as the filing date, but it can be later, occasionally much later.
number string Document / filing number as a string of digits, such as "1", or null when the entry has no numeric number.
contents string The docket entry text. May contain HTML: dangerous tags are removed and only harmless styling tags such as <i> are kept.
link / link_viewer string Link to the document PDF and to the Docket Alarm document viewer, when a document is available. Download the PDF with Get Document.
exhibits array Exhibits attached to the entry, not including the main filing. See exhibits item below.
analyze object Motion / order analysis when available, including the document type, outcome (e.g. granted or denied), and timing. Produced by Docket Alarm's analysis, not by the court. May not be included in every API license; contact questions@docketalarm.com for details. See analyze object below.

exhibits item

Field Type Description
exhibit string The exhibit number or name. Unique among the exhibits for this entry.
link string Link to the exhibit PDF.
link_viewer string Link to the exhibit in the Docket Alarm viewer.

analyze object

Contains parser_types: a list of the motions and orders identified in the entry. Docket Alarm does not claim to capture every motion, and errs on the side of accuracy.

Field Type Description
type string High-level procedural tag: motion, response, reply, order, or pleading.
identifier string The specific motion or order, such as summaryjudgment. Identifiers can have parents (disqualify is the parent of disqualify_counsel) and some are ambiguous. Each one is defined in the data dictionary: JSON, Excel, RSS, with the full motion name, categories, priority, and the matching SALI code.
outcome string[] granted or denied. Often unknown.
days_sequence / days_decision / days_briefing integer Timing, on order entries where related entries can be linked. Sequence: the whole motion-to-order sequence. Decision: last responsive brief to the order. Briefing: first opening brief to last responsive brief.
related array Other docket entries this one relates to, each with index (position in docket_report) and number (filing number).
snippet string Short text highlighting the relevant motion language.
confidence string very_low, low, medium, high, or very_high.

parties entry

Field Type Description
name string Party name. name_normalized holds the normalized form when requested.
type string Party role, e.g. Plaintiff or Defendant.
counsel array Attorneys for the party, when available. See counsel item below.

counsel item

Field Type Description
name / name_normalized string The attorney's name, and its normalized form when normalize is requested.
firm / firm_normalized string The attorney's law firm, and its normalized form when normalize is requested.
email string Email address.
phone string Phone number.
address string[] The attorney's address, one array item per line.
lead boolean true if the attorney is marked as lead attorney. Most courts do not distinguish lead attorneys.
prose boolean true if the party is representing themselves (pro se). Courts do not always set this, but when it is true it can be relied on.

related entry

Field Type Description
type string The relationship, such as Original Case, Related Case, Lead Case, Orange Book, or 2(d) Rejection. Contact support for the full list.
court / docket string Court and docket number of the related case.
title string Title of the related case.
link string Link to the related docket on Docket Alarm.

You can also search on relationships. For example, related:(type:(Original Case) court:(New York)) finds cases appealed from a New York court.

claims entry

Most courts do not provide claims. To see which cases have them, run the search claim:"".

Field Type Description
type string The kind of claim. Currently always charge: a criminal or administrative charge. Other types (such as civil causes of action) may be added.
id string The claim or charge count number (count 1, count 2, and so on), in courts that provide one. Usually an integer, but sent as a string.
description string Description of the claim.
code string The statute or regulation the claim is based on.
disposition string The outcome of the claim, when available.
date string The claim date, when available.

Get Document

Deprecatedv1
GET /cases/{court}/{docket}/{case_title}/docs/{document_number}.pdf

Download a document as a PDF. You don't normally build this URL by hand. Each entry in a docket report's docket_report includes a link (and link_viewer) that points at the correct document URL. On success the response body is the binary PDF; on error it is JSON with success: false.

Exhibits have their own URLs, with the exhibit after the document number: .../docs/{document_number}/{exhibit}.pdf. Use the link in each exhibits item.

In these links, spaces in the court name and case title become underscores, and the colon in a docket number becomes --. For example, document 47 in Barbara Grady v. RCM Technologies Inc (5:22-cv-00842, California Central District Court) is at https://www.docketalarm.com/cases/California_Central_District_Court/5--22-cv-00842/Barbara_Grady_v._RCM_Technologies_Inc/docs/47.pdf.

Important note on the cached parameter and costs: Including cached in the request at all -- with any value, including cached=false -- restricts the request to Docket Alarm's already-stored copy and avoids a paid live retrieval from the court. If the document is not yet cached, you get HTTP 412 instead of a charge. To force a live retrieval from the court, omit the cached parameter entirely rather than setting it to false.

Parameters

Parameter Type Description
login_tokenrequired string Login token from login/.
client_matteroptional string Your client/matter code for billing and tracking.
cachedoptional boolean If present -- any value, including false -- only return the document if it is already cached (returns 412 if not). Omit this parameter entirely to allow a live retrieval.

Example Request

GET https://www.docketalarm.com/cases/California_Central_District_Court/5--22-cv-00842/Barbara_Grady_v._RCM_Technologies_Inc/docs/47.pdf?login_token=YOUR_TOKEN&cached=true

Response

# On success: binary PDF (Content-Type: application/pdf) # On error: JSON, e.g. { "success": false, "error": "Document is not in the cache." }

Status Codes

Code Meaning
200Success. The response body is the PDF, not JSON.
302Redirect. Follow the Location header (the document's link format changed). Send your credentials again on the redirected request: many HTTP clients drop the Authorization header when following a redirect.
401A problem with logging in (check your login_token), the document is not part of this docket (check the link), or a billing problem with the account (for example, not enough funds or the free weekly view limit reached).
403The document is sealed, is listed on the docket but not yet available (for example, held for review or redaction), or could not be found at the court. Documents held for review can become available days later, so retry later.
412You set cached, but the document is not in Docket Alarm's cache.
500Likely an API bug. Contact support.
502The servers are under heavy load. Retry later.

Ask a Docket

Deprecatedv1
GET /api/v1/VIDA/ask_docket/

Ask a natural-language question about a case and get an AI-generated answer grounded in the case record. The model can read the docket entries, the underlying documents, or both, and returns an answer formatted however you describe in output_format. Optionally include the supporting source data used to answer.

With target=documents or both, the complaint must already be downloaded to Docket Alarm and OCR'd; otherwise the call fails with "Required document hasn't been downloaded yet". allow_download does not change this.

Parameters

Parameter Type Description
login_tokenrequired string Login token from login/.
client_matterrequired string Your client/matter code for billing and tracking (may be blank).
courtrequired string Court name for the case.
docketrequired string Docket number for the case.
questionrequired string The natural-language question to ask about the case.
targetrequired string What the AI should read: docket, documents, or both.
output_formatrequired string A natural-language description of how the answer should be formatted.
cachedoptional boolean Use cached case data. Default: true. Only the exact value False turns it off.
show_relevantoptional boolean If present, with any value (even false), include the docket/document data the answer was based on. Leave it out to skip that data.
openai_model / claude_modeloptional string Override the model used. Defaults: gpt-4.1 for OpenAI and claude-3-5-sonnet-20240620 for Claude.
openai_key / anthropic_keyrequired string Your own API key to run the request against, sent as the openai_key or anthropic_key query parameter. At least one of the two is required.

Example Request

GET https://www.docketalarm.com/api/v1/VIDA/ask_docket/?login_token=YOUR_TOKEN&client_matter=&court=New+York+Southern+District+Court&docket=1:23-cv-01234&question=What+is+the+current+status+and+next+hearing%3F&target=both&output_format=a+short+paragraph&anthropic_key=YOUR_KEY

Example Response

{ "success": true, "question": "What is the current status and next hearing?", "price": 0.12, "from_documents": { "claude_answer": "The case is in discovery; a status conference is set for January 15, 2025 (Dkt. 47)." } }

Return Values

Field Type Description
success boolean true when the request succeeded; otherwise false with an error.
question string The question that was asked, echoed back.
price number The cost of the AI call.
date_cached string When the underlying case data was last cached.
from_dockets / from_documents object The answer. from_dockets is present when target includes the docket, from_documents when it includes documents. Each contains openai_answer and/or claude_answer, plus the supporting source data when show_relevant is sent: relevant_docket_data in from_dockets (the docket information the AI relied on, such as case status, entries, or filing date) and relevant_document_data in from_documents (the document it selected and any others it found relevant). With target=both, if one side fails the response is still success: true and that side is {"error": "..."} with no answer, so check each side for error.

Case Matcher

Deprecatedv1
GET /api/v1/VIDA/case_matcher/

Find a case when you don't know its exact docket number or court. Send whatever you do know, such as the state, part of the case title, party names, case type, or filing date, and AI matches it to a single case in Docket Alarm. The response includes the matched case and the AI cost of the request.

Parameters

Parameter Type Description
login_tokenrequired string Login token from login/.
client_matterrequired string Your client/matter code for billing and tracking (may be blank).
any case detailrequired string At least one parameter describing the case, named however you like, for example state, parties, case_type, or filing_date. Every extra parameter you send is used to find the match.
openai_model / claude_modeloptional string Override the model used. Defaults: gpt-4.1 (OpenAI) and claude-3-5-sonnet-20240620 (Anthropic).
openai_key / anthropic_keyrequired string Your own API key to run the request against. At least one of the two is required.

Example Request

# Match a case from the state, filing date, and a party name GET https://www.docketalarm.com/api/v1/VIDA/case_matcher/?login_token=YOUR_TOKEN&client_matter=&state=Connecticut&filing_date=March+7,+2024&parties=Anastasia+Amelio&anthropic_key=YOUR_KEY

Example Response

{ "success": true, "price": 0.01685, "result": { "Case Number": "230203", "Court": "Connecticut State, Supreme Court", "Link": "https://www.docketalarm.com/cases/Connecticut_State_Supreme_Court/230203/..." } }

Return Values

Field Type Description
success boolean true when the request succeeded; otherwise false with an error, for example when no matching case is found.
result object The matched case: Case Number, Court, and Link to the case on Docket Alarm. Pass the court and case number to Get Docket to retrieve it.
price number The AI cost of the request.

Entity Normalizer

Deprecatedv1
GET /api/v1/VIDA/entity_normalizer/

Turn a company or person name into a ready-to-run Search query that finds that entity's cases without the false positives a plain name search returns. For example, a search for "Apple" also matches Apple Oil and Green Apple; the normalizer reviews sample results with AI and returns a query that excludes them. You can optionally include the entity's corporate group (parents and subsidiaries).

Parameters

Parameter Type Description
login_tokenrequired string Login token from login/.
entityrequired string The company or person name to normalize, e.g. Apple.
include_corporate_groupoptional flag If present (any value), the query also covers entities in the same corporate group.
openai_model / claude_modeloptional string Override the model used. Defaults: gpt-4.1 (OpenAI) and claude-3-5-sonnet-20240620 (Anthropic).
openai_key / anthropic_keyrequired string Your own API key to run the request against. At least one of the two is required.

Example Request

# Build a clean party query for Apple, including its corporate group GET https://www.docketalarm.com/api/v1/VIDA/entity_normalizer/?login_token=YOUR_TOKEN&entity=Apple&include_corporate_group=true&anthropic_key=YOUR_KEY

Example Response

{ "success": true, "price": 0.08432, "query": "party:(Apple NOT \"APPLE OIL\" NOT \"GREEN APPLE\" NOT \"APPLE REIT SIX, INC.\" ...) is:docket" }

Return Values

Field Type Description
success boolean true when the request succeeded; otherwise false with an error.
query string A Docket Alarm query for the normalized entity. Pass it as q to Search.
price number The AI cost of the request.
Tip: Running the returned query through Search is a separate call. See What Counts as a Call.

Get Cause of Action

Deprecatedv1
GET /api/v1/VIDA/get_cause_of_action/

List the causes of action in a case. Send the docket number and court, and AI reads the complaint and returns one bullet point per cause of action, explaining it and citing any relevant cases or statutes. Works for federal (PACER) and other courts.

The complaint must already be downloaded to Docket Alarm and OCR'd; otherwise the call fails with "Required document hasn't been downloaded yet".

Parameters

Parameter Type Description
login_tokenrequired string Login token from login/.
docketrequired string Docket number, as returned by Search.
courtrequired string Court name, as returned by Search.
cachedoptional boolean Use Docket Alarm's stored copy of the docket. Default: true. Set to exactly False to pull a fresh copy from the court first, which can incur court fees. Other values, including lowercase false, keep the stored copy.
openai_model / claude_modeloptional string Override the model used. Defaults: gpt-4.1 (OpenAI) and claude-3-5-sonnet-20240620 (Anthropic).
openai_key / anthropic_keyrequired string Your own API key to run the request against. At least one of the two is required.

Example Request

# Causes of action in a federal patent case GET https://www.docketalarm.com/api/v1/VIDA/get_cause_of_action/?login_token=YOUR_TOKEN&docket=2:23-cv-10910&court=California+Central+District+Court&anthropic_key=YOUR_KEY

Example Response

{ "success": true, "openai_answer": "- Infringement of the '051 Patent under 35 U.S.C. § 271 for Defendants' alleged actions in (...)", "price": 0.08069 }

Return Values

Field Type Description
success boolean true when the request succeeded; otherwise false with an error.
openai_answer / claude_answer string One bullet point per cause of action, explaining it and citing any relevant cases or statutes. openai_answer is returned when you use an OpenAI key, claude_answer when you use an Anthropic key.
price number The AI cost of the request.

Track a Case

Deprecatedv1
POST /api/v1/track/

Start or stop tracking a case (or a saved search). When tracking is enabled, Docket Alarm checks the case at the frequency you choose and notifies you, by email and/or push notification, whenever it changes. Send a GET to the same endpoint to list the cases you are currently tracking.

Alert limit: each user can have up to 1,000 enabled alerts in total, including alerts created on the website. The limit is per user, not per account. Once a user reaches it, the API will not enable new alerts and returns this error: We initially limit the number of alerts you may have to 1000 alerts. Contact support@docketalarm.com for questions. Users who need more can contact support. Flat-rate users, sub-users of legacy PACER accounts and free trials have a lower limit, 5 alerts by default, with its own error (We initially limit the number of alerts you may have to 5 alerts. We increase this limit on request., or During the free trial, you may create 5 alerts.). Both limits are defaults and can be raised per account.

Request Body (form-encoded)

Field Type Description
login_tokenrequired string Login token from login/.
courtoptional string Court name for the case to track. Required unless q is set.
docketoptional string Docket number for the case to track. Required unless q is set.
enablerequired boolean true to start tracking, false to stop.
client_matteroptional string Your client/matter code for billing and tracking (may be blank, up to 50 characters). Required when enable=true.
frequencyoptional string How often to check the case: realtime, continuous, 40x, twice_daily, daily, weekly, or monthly. Required when enable=true. See frequency values below for each schedule.
qoptional string A search query. Use instead of court/docket to track a saved search rather than a single case. When you send q, leave court and docket blank. New results arrive as a search_results push.
testoptional boolean If present, with any value (even false), send a test push notification with fake data to your configured callback URL, without creating or modifying a tracker. Leave it out for a normal call.
test_trackoptional boolean Synchronously send a real test push for an existing case or search tracker.

frequency values

Every frequency except weekly runs on weekdays only (Monday to Friday).

ValueWhen the case is checked
dailyOnce a day at 8AM ET.
twice_dailyTwice a day, at 7AM and 4PM ET.
continuous16 times a day, during and after business hours to catch late filers: roughly 1AM, 3AM, 9AM, 10AM, 11AM, 12PM, 1PM, 2PM, 3PM, 4PM, 5PM, 6PM, 7PM, 8PM, 9PM, and 11PM. A popular choice.
40x40 times a day, roughly every 15 minutes, mostly during trading hours. Turned off on most accounts by default.
weeklyOnce a week, on Mondays.
monthlyOnce a month, on the 1st. The day of the month can't be changed through the API.
realtimeOnly for special ECF alerts that don't need polling. Not available in most cases.
Notifications: Tracked-case updates are delivered by email by default, or as push notifications (webhooks) to a server endpoint you configure on your account. See Push Notifications for the delivery setup.

Example Request

POST https://www.docketalarm.com/api/v1/track/ Content-Type: application/x-www-form-urlencoded login_token=YOUR_TOKEN&court=New+York+Southern+District+Court&docket=1:23-cv-01234&enable=true&client_matter=&frequency=daily

Example Response

{ "success": true }

Some courts can't be checked at continuous or 40x. The tracker is then saved at the first of twice_daily, daily or monthly that the court offers, and the response is still success: true, with the substitution spelled out:

{ "success": true, "frequency": "twice_daily", "frequency_requested": "40x", "message": "This court cannot be alerted at 40x, so twice_daily was used instead." }

If the court offers none of those, the call fails with This court cannot be alerted at 40x and has no lower frequency available.

Listing tracked cases

Send a GET to the same endpoint to list the cases and searches you are currently tracking.

Parameter Type Description
login_tokenrequired string Login token from login/.
offsetoptional integer Starting position in your tracker list. Default: 0. Max: 5000.
limitoptional integer Maximum trackers to return. Default: 20. Max: 50.

Example Request

GET https://www.docketalarm.com/api/v1/track/?login_token=YOUR_TOKEN&limit=25

Example Response

{ "success": true, "dockets": [ { "court": "New York Southern District Court", "docket": "1:23-cv-01234", "title": "Acme Corp. v. Widget Inc.", "link": "https://www.docketalarm.com/cases/...", "enabled": true, "frequency": "daily", "client_matter": "", "datetime_updated": "2026-01-15T09:30:00Z" } ] }

Each tracker returns its court, docket, title, link, enabled state, frequency, client_matter, and datetime_updated (ISO 8601, in UTC). A tracker that has attempted a push also returns _api_push_debug_info.

_api_push_debug_info object

Included on a tracker that has attempted at least one push notification. Use it only for manual debugging: it is not covered by the versioning policy and may be removed without notice, so don't build it into an automated system.

Field Type Description
response_code integer The HTTP status your server returned to the last push.
request_url string The URL the last push was sent to.
request_payload string The payload of the last push, up to its first 16KB.
request_payload_truncated boolean Whether request_payload was cut to its first 16KB.
request_start_time / request_end_time string When the last push started and finished.
will_retry boolean true if Docket Alarm will retry the push.
error_message string Extra detail about the error, when there is one.