CourtScan.io

An independent ELG research tool

CourtScan / public tools

Public data. Clear limits.

Read-only JSON for court-policy research and source monitoring. No account or authentication is needed.

Download the OpenAPI 3.0.3 specification

Public GET endpoints
PathContent
/data/court-rules.jsonDataset metadata, attribution, records and monitoring fields
/data/source-status.jsonPer-source checks, errors, pending and skipped counts
/data/source-changelog.jsonAppend-only text-change events and unified diffs
/data/practice-guides.jsonSource-linked informational guides

Availability and freshness

The bundled initial dataset is explicitly an offline research snapshot. The monitor is prepared for 06:17 UTC daily checks, but activation and actual runs must be verified from the source-status endpoint. PENDING and an empty changelog do not mean unchanged law. No workflow activation is claimed by this documentation.

Responses use JSON. Check HTTP status and schema before use; hosting errors may be HTML, including 404, 429 or 5xx. There is no JSON error envelope or authenticated write API. On failed retrieval, malformed data, mismatched publication IDs, future timestamps or checks older than 48 hours, disable new filing language. Existing research packets are historical snapshots.

Use Cache-Control: no-cache on requests to revalidate; public data responses are configured max-age=0, must-revalidate. Use conditional ETag or Last-Modified requests if supplied by the host, and honor 304 and Retry-After. Download once per visit or daily batch, cache locally, and back off on 429/5xx. There is no guaranteed quota or service-level agreement; do not poll per record.

Read the fields correctly

datasetDate and generatedAt describe the collection publication. issuedDate, effectiveDate and historical lastChecked retain their distinct meanings. sourceMonitoring.checkedAt is an automated text-check time. Matching monitorRunId/runId across the three monitor documents identifies a consistent publication; it does not prove legal correctness.

BASELINED is a first text observation. UNCHANGED means equal normalized extracted text. ERROR means retrieval or extraction failed, even when an older hash exists. CHANGED requires human source review. reviewRequired=true permanently blocks automated eligibility restoration: unchanged subsequent checks do not clear it. verificationLabel=REVIEW_REQUIRED and actionProfile.generationEligible=false accompany a text change. primaryReview remains historical. No scrape rewrites legal summaries, legal status or interpretation.

Every record must also have eligible primary review, applicable in-force status, complete truthful user confirmations and recent successful source checks before the workbench can create editorial filing language. No API label establishes a mandatory filing or an absence of obligations. Unsupported/scanned PDFs have no OCR; page navigation may cause conservative change alerts.

Examples

curl --fail --header 'Cache-Control: no-cache' https://courtscan.io/data/court-rules.json
curl --fail https://courtscan.io/data/source-status.json
const response = await fetch('/data/court-rules.json', {cache: 'no-cache'});
if (!response.ok) throw new Error('Dataset unavailable');
const data = await response.json();
if (!Array.isArray(data.records)) throw new Error('Unexpected schema');
// Read status and changelog, compare run IDs and freshness before drafting.
// offlineFallback === true always means research only.

Attribution

Adapted from SafeLegalAI Legal AI Regulation Documents and SafeLegalAI US Court AI Orders, CC BY 4.0. Retain attribution, source links, license and a description of your changes. CourtScan selected US records, normalized fields, added primary-source summaries, explicit uncertainty and monitoring annotations. Original source documents retain their own rights and terms. No publisher or court endorsement is implied.

Integrations: available and planned

Calendar file export is available now: user-chosen dates, no deadline calculation, OAuth or live sync. Clio and MyCase are future integration ideas only, not live connections or partnership claims.

Stripe is an isolated future server-only adapter, disabled without explicit configuration and a durable idempotency store. No checkout endpoint, charges or entitlements are enabled. The existing undeployed LemonSqueezy server remains separate. A future server must inject the official Stripe client, fixed server price and allowed return URLs, verify raw-body webhook signatures through the SDK, and transactionally deduplicate verified events. Browser success callbacks never grant access.

Future configuration names only: STRIPE_ENABLED, STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, STRIPE_PRICE_ID, STRIPE_RETURN_URLS. Keep secrets server-side. Identity binding, purchase validation, event ordering, refunds, authorization, rate limits and durable storage still require implementation and independent review before activation.

Source text and rights

Public text snapshots and unified diffs are limited to selected federal court and government sources. Other sources are checked by normalized-text hashes; their document text is not redistributed. A null diff does not mean unchanged. Follow the original source link.