Gov APIhcourt.gov.au ↗
Access High Court of Australia judgments (1998–present), CLR volumes 1–100 (1903–1959), and Full Court cases via 6 structured endpoints.
What is the Gov API?
The hcourt.gov.au API exposes 6 endpoints covering the High Court of Australia's published judgments from 1998 to the present, digitised Commonwealth Law Reports volumes 1–100 (1903–1959), and the Full Court case registers. The search_judgments endpoint lets you filter by year, justice surname, keywords, or case number and returns neutral citations, bench composition, and judgment slugs. get_judgment retrieves the full record for a single case including catchwords and downloadable judgment files.
curl -X GET 'https://api.parse.bot/scraper/9297a2c2-15ee-4213-9904-2c2be8f290ec/search_judgments?keywords=Minister' \ -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 hcourt-gov-au-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.
"""Walkthrough: High Court of Australia SDK — bounded, re-runnable."""
from parse_apis.hcourt_gov_au_api import (
HighCourt, CaseStatus, InputNotFound,
)
client = HighCourt()
# Browse recent decided cases, capped at 5 items total.
for case_summary in client.case_summaries.list(
status=CaseStatus.DECIDED, limit=5,
):
print(case_summary.title, case_summary.case_number)
# Drill into the first decided case via the summary→detail navigation.
first_case_summary = client.case_summaries.list(
status=CaseStatus.DECIDED, limit=1,
).first()
if first_case_summary is not None:
case = first_case_summary.details()
print(case.title, case.catchwords)
for doc in case.documents or []:
print(" ", doc.date, doc.description)
# Search judgments by keyword and fetch full detail for the first hit.
hit = client.judgment_summaries.search(keywords="Minister", limit=1).first()
if hit is not None:
judgment = hit.details()
print(judgment.title, judgment.citation, judgment.date)
for f in judgment.files:
print(" ", f.label, f.size)
# Point lookup by slug discovered from the earlier search.
if hit is not None:
try:
same = client.judgments.get(slug=hit.slug)
print(same.title, same.before)
except InputNotFound:
print("Judgment not found")
# Search the digitised Commonwealth Law Reports (volumes 1-100, 1903-1959).
clr_hit = client.clr_case_summaries.search(volume=1, limit=1).first()
if clr_hit is not None:
clr_case = clr_hit.details()
print(clr_case.title, clr_case.clr_citation, clr_case.date)
for f in clr_case.files:
print(" ", f.label, f.size)
print("exercised: case_summaries.list / details / judgment_summaries.search / details / judgments.get / clr_case_summaries.search / details")
Searches the High Court's published judgments from 1998 to the present and returns one page of judgment summaries (title, neutral citation, bench, judgment date, case number, and the slug used by get_judgment). Results are ordered newest first by the site. Optional filters narrow by party-name keywords, exact case number, a single justice's surname, and judgment year; all filters combine. Paging is caller-controlled: page is a 1-based page number (omitted = first page) and items_per_page must be one of 12, 25, 50 or 100 (omitted = 25); total is the site's count for the filtered set and has_more tells whether a further page exists. A valid search with no matches returns an empty judgments array with total 0. The bench (before) is not published for some older judgments and is null there.
| Param | Type | Description |
|---|---|---|
| page | integer | 1-based page number within the filtered result set. |
| year | string | 4-digit judgment year, e.g. 2024. Omitted = all years from 1998 onward. |
| justice | string | Surname of one justice who sat on the judgment, letters only with no spaces or hyphens (e.g. Gageler, Gordon, BeechJones). Omitted = all justices. An unknown surname yields an empty result. |
| keywords | string | Free-text keywords matched against case name / party names (e.g. Minister). |
| case_number | string | Exact High Court case number as shown on the site, e.g. S68/2026. Omitted = no case-number filter. |
| items_per_page | integer | Results per page; the site accepts only 12, 25, 50 or 100. |
{
"type": "object",
"fields": {
"page": "integer: the 1-based page returned",
"total": "integer: site-reported number of judgments matching the filters",
"has_more": "boolean: whether a further page exists",
"judgments": "array of judgment summaries, each with slug (key for get_judgment), title, citation (neutral citation, e.g. [2026] HCA 38), before (bench as published, null when not published), date (ISO YYYY-MM-DD judgment date), case_number, url",
"items_per_page": "integer: page size applied"
},
"sample": {
"data": {
"page": 1,
"total": 232,
"has_more": true,
"judgments": [
{
"url": "https://www.hcourt.gov.au/cases-and-judgments/judgments/judgments-1998-current/morton-v-minister-immigration-and-citizenship",
"date": "2026-10-14",
"slug": "morton-v-minister-immigration-and-citizenship",
"title": "Morton v Minister for Immigration and Citizenship",
"before": "Gageler CJ, Jagot, Beech-Jones JJ",
"citation": "[2026] HCA 38",
"case_number": "S68/2026"
},
{
"url": "https://www.hcourt.gov.au/cases-and-judgments/judgments/judgments-1998-current/minister-immigration-and-multicultural-affairs-v-mzapc",
"date": "2025-03-05",
"slug": "minister-immigration-and-multicultural-affairs-v-mzapc",
"title": "Minister for Immigration and Multicultural Affairs v MZAPC",
"before": null,
"citation": "[2025] HCA 5",
"case_number": "P21/2024"
}
],
"items_per_page": 25
},
"status": "success"
}
}About the Gov API
Judgments (1998–present)
The search_judgments endpoint queries the High Court's published judgments index. Filters include year (4-digit, 1998 onward), justice (surname only, no spaces or hyphens), keywords (matched against party names), and case_number (exact format, e.g. S68/2026). Results come back newest-first, with each entry carrying a slug, title, neutral citation, before (bench), and judgment_date. Page size is fixed to 12, 25, 50, or 100 via items_per_page. Pass the slug to get_judgment to retrieve catchwords (one string per published paragraph), case_number, files (label, URL, file name, human-readable size), and the date in ISO format.
Full Court Case Registers
list_cases covers both the Current Cases and Decided Cases registers for matters referred to the Full Court since February 2011. The status parameter selects the register (current or decided); you can also filter by initial letter (letter), free-text keywords, or sort_order. Each row returns title, case_number, status, and a slug. Calling get_case with that slug returns the full case file: a chronological documents array (date, description, size, URL), catchwords, lower_court_citation, lower_court_url, case_summary_files, and a recording_url for hearing AV where available.
Commonwealth Law Reports (1903–1959)
search_clr indexes the 3,702 reported cases in CLR volumes 1–100. Filter by year (1903–1959), volume (1–100), or keywords. Each result carries a clr_citation formatted as (year) volume CLR page, plus volume and first_page integers used as keys. get_clr_case returns the full record: date, before, catchwords, files, clr_citation, and the neutral citation where one exists. Bench and catchwords are sourced from the published case page.
The Gov API is a managed, monitored endpoint for hcourt.gov.au — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when hcourt.gov.au 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 hcourt.gov.au 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?+
- Building a citation lookup tool that resolves a High Court neutral citation to its full judgment record and downloadable PDF.
- Tracking which justices appear most frequently in judgments filtered by year using the
justiceparameter in search_judgments. - Assembling a dataset of all Full Court decided cases with their lower-court citations for appellate research.
- Archiving the chronological documents list for current Full Court cases to monitor filing activity via get_case.
- Searching the digitised CLR archive by volume and keyword to locate early 20th-century constitutional decisions.
- Extracting catchwords from get_judgment responses to build a taxonomy of High Court subject matter over time.
- Linking hearing AV recordings to case records using the recording_url field returned by get_case.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does the High Court of Australia provide an official developer API?+
What does get_judgment return beyond the basic citation?+
Does the API cover judgments before 1998?+
How does pagination work across the endpoints?+
page parameter. The response includes a total count and a has_more boolean so you can iterate until has_more is false. Accepted page sizes differ slightly: search_judgments and search_clr accept 12, 25, 50, or 100; list_cases accepts 12, 24, 50, or 100. Passing any other value may cause the site to fall back to a default.