Justice APIjustice.gov ↗
Search and retrieve official DOJ press releases by keyword, date, and topic. Get full article text, settlement amounts, topics, and organizational components.
What is the Justice API?
This API provides access to U.S. Department of Justice press releases through 2 endpoints, returning structured data including titles, dates, summaries, settlement amounts, geographic locations, and topic tags. The search_press_releases endpoint lets you query across the full DOJ press release archive with keyword and date filters, while get_press_release_detail returns the complete article body, components, and extracted metadata for any individual release.
curl -X GET 'https://api.parse.bot/scraper/b30e408c-381f-406e-9eeb-462df2d5ae1e/search_press_releases?page=0&query=antitrust&sort_by=search_api_relevance&end_date=07%2F07%2F2026&max_pages=1&start_date=07%2F07%2F2025' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace justice-gov-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""
DOJ Press Releases API - Search and drill into press release details.
"""
from parse_apis.doj_press_releases_api import DOJ, PressReleaseSummary, PressRelease, Sort
doj = DOJ()
# Search for antitrust press releases sorted by date
for release in doj.pressreleasesummaries.search(query="antitrust", sort_by=Sort.DATE, limit=5):
print(release.title, release.date, release.settlement_amount)
# Drill into full details
detail = release.details()
print(detail.body[:200], detail.topics, detail.location)
# Fetch a specific press release by URL path
pr = doj.pressreleases.get(url="/opa/pr/antitrust-division-and-us-postal-service-award-first-ever-1m-payment-whistleblower-reporting")
print(pr.title, pr.date_iso, pr.settlement_amount)
Search DOJ press releases by keyword with optional date filtering and pagination. Returns structured results including title, date, summary, settlement amount (if mentioned), entity name, and location. Results are paginated at 12 per page. Paginates via integer page counter. Each result includes a URL path usable with get_press_release_detail for full text.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (0-indexed, 12 results per page) |
| query | string | Search keywords (e.g., 'antitrust', 'civil rights', 'settlement', 'indictment') |
| sort_by | string | Sort order for results. |
| end_date | string | Filter results until this date (format: mm/dd/yyyy). Omitting returns results up to present. |
| max_pages | integer | Maximum number of pages to fetch |
| start_date | string | Filter results from this date (format: mm/dd/yyyy). Omitting returns results from all dates. |
{
"type": "object",
"fields": {
"query": "string — the search query used",
"results": "array of press release summary objects",
"page_start": "integer — starting page number",
"pages_fetched": "integer — number of pages actually fetched",
"total_results": "integer — number of results returned across all fetched pages"
},
"sample": {
"data": {
"query": "antitrust",
"results": [
{
"url": "https://www.justice.gov/opa/pr/antitrust-division-and-us-postal-service-award-first-ever-1m-payment-whistleblower-reporting",
"date": "January 29, 2026",
"title": "Antitrust Division and U.S. Postal Service Make First-Ever Whistleblower Payment: $1M Awarded for Reporting Antitrust Crime",
"summary": "The Antitrust Division today announced its first-ever whistleblower reward...",
"date_iso": "2026-01-29T12:00:00Z",
"location": null,
"entity_name": null,
"settlement_amount": "$1M"
}
],
"page_start": 0,
"pages_fetched": 1,
"total_results": 12
},
"status": "success"
}
}About the Justice API
What the API Returns
The search_press_releases endpoint accepts a query string (e.g., 'antitrust', 'civil rights', 'indictment') along with optional start_date and end_date parameters in mm/dd/yyyy format. Results are paginated at 12 per page using a 0-indexed page parameter, and you can fetch multiple pages in a single call with max_pages. Each result in the results array includes the press release title, publication date, a summary, settlement amount (when mentioned), the entity name, and geographic location. The response also reports total_results and pages_fetched so you can track coverage across large queries.
Full Press Release Detail
The get_press_release_detail endpoint takes a path value from the url field of any search_press_releases result and returns the full article. Response fields include body (complete text of the release), title, date, date_iso (ISO 8601 format), topics (an array of tag strings assigned by DOJ), components (organizational units such as specific divisions or offices), location, and settlement_amount. The settlement_amount field is extracted when a dollar figure is present, making it useful for filtering enforcement actions and civil settlements without parsing the full text.
Coverage and Scope
The source is the official DOJ Office of Public Affairs press release archive at justice.gov/news/press-releases. Coverage spans DOJ announcements across all divisions — Antitrust, Civil Rights, Environment, National Security, and others — as reflected in the components and topics fields. Date filtering in search_press_releases lets you scope queries to specific time windows, and the sort_by parameter controls result ordering.
The Justice API is a managed, monitored endpoint for justice.gov — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when justice.gov changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official justice.gov API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Track DOJ antitrust enforcement actions and settlement amounts over time using
query='antitrust'with date filters - Monitor civil rights enforcement by filtering on
query='civil rights'and extractingtopicsandcomponentsfields - Build a dataset of DOJ settlements by collecting
settlement_amountvalues from search results and detail responses - Alert system for new indictments in a specific region using
locationfield fromget_press_release_detail - Research DOJ activity by organizational division using the
componentsarray returned in press release details - Aggregate press release body text for NLP or topic modeling across a date range using
start_dateandend_date - Identify enforcement trends by querying specific keywords like
'fraud'or'money laundering'and paginating withmax_pages
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does the Department of Justice offer an official developer API for press releases?+
What does the `settlement_amount` field contain and when is it populated?+
settlement_amount field is a string containing a dollar figure when one appears in the press release text. It is null when no monetary amount is identified. This applies to both the search_press_releases summary objects and the get_press_release_detail response, so you can filter for enforcement actions involving financial penalties at the search stage without fetching every full article.How does pagination work in `search_press_releases`?+
page parameter is 0-indexed, so page 0 returns results 1–12. You can fetch multiple consecutive pages in one call by setting max_pages. The response includes pages_fetched and total_results so you can determine how many pages remain for a given query.Does the API return data for DOJ speeches, blog posts, or testimony in addition to press releases?+
Can I filter press releases by DOJ division or component directly in the search endpoint?+
search_press_releases endpoint filters by query, start_date, end_date, and sort_by — there is no dedicated component filter parameter. Division-level filtering requires querying by keyword and then inspecting the components array in either the search results or the full detail response. You can fork the API on Parse and revise it to add a component-specific filter parameter.