A REST API that lets your platform programmatically post appearance requests, receive bar-verified attorney matches, confirm engagements, and ingest structured outcome reports — no email, no phone, no manual process. All 50 states, 4–8 hour confirmation SLA.
"The missing infrastructure layer for AI legal platforms: a REST API that connects your system to bar-verified appearance attorneys in every U.S. jurisdiction — with structured data in and structured data out."
CourtCounsel.AI — Enterprise API Documentation (2026)A single API call posts the hearing details and initiates attorney matching. You'll receive a webhook notification within 4–8 hours when a bar-verified attorney accepts.
# POST /api/v1/requests — Submit a new appearance request curl https://api.courtcounsel.ai/v1/requests \ -X POST \ -H "Authorization: Bearer cc_live_sk_T4xG9mP2wKj7nQvZ8rLd..." \ -H "Content-Type: application/json" \ -d '{ "hearing": { "court_name": "Los Angeles Superior Court — Stanley Mosk Courthouse", "court_address": "111 N. Hill St, Los Angeles, CA 90012", "department": "Dept. 47", "hearing_date": "2026-06-11", "hearing_time": "09:00", "timezone": "America/Los_Angeles", "hearing_type": "status_conference", "case_number": "23STCV18492", "case_caption": "Hartwell Systems Inc. v. Diaz et al." }, "jurisdiction": { "state": "CA", "court_level": "state_trial", "federal_district": null }, "instructions": "Appear for routine status conference. Request 90-day continuance to allow for expert designation. Motion briefing attached. Do not discuss settlement.", "documents": [ { "type": "motion_brief", "url": "https://your-platform.com/docs/case-23st-motion-brief.pdf", "label": "Joint Motion for Continuance" } ], "contact": { "name": "Atlas Legal AI", "email": "ops@atlaslegal.ai", "phone": "+1-415-555-0173" }, "webhook_url": "https://your-platform.com/webhooks/courtcounsel", "client_reference_id": "case_1849203_hearing_2" }'
{ "id": "req_7Xm2KpL9vNwQjR4t", "status": "matching", "created_at": "2026-05-28T14:32:07Z", "hearing_date": "2026-06-11", "hearing_type": "status_conference", "jurisdiction": "CA — Los Angeles Superior Court", "sla_confirmation_by": "2026-05-28T22:32:07Z", // 8 hours from submission "client_reference_id": "case_1849203_hearing_2", "webhook_url": "https://your-platform.com/webhooks/courtcounsel", "estimated_fee": 275, "currency": "USD" }
Four endpoints cover the complete appearance attorney workflow — from submitting a request to retrieving the outcome report after the hearing.
Creates a new appearance request and immediately triggers the attorney matching process. Returns a request object with a unique id and a sla_confirmation_by timestamp. The API will deliver a request.attorney_matched webhook when an attorney accepts.
| Field | Type | Required | Description |
|---|---|---|---|
| hearing.court_name | string | required | Full name of the court including courthouse building if applicable |
| hearing.hearing_date | string (ISO 8601) | required | Date of the hearing in YYYY-MM-DD format |
| hearing.hearing_type | string (enum) | required | One of: status_conference, motion_hearing, scheduling_conference, arraignment, deposition, small_claims, other |
| jurisdiction.state | string (2-letter) | required | Two-letter state abbreviation (e.g., "CA", "NY", "TX") |
| jurisdiction.court_level | string (enum) | required | One of: state_trial, state_appellate, federal_district, federal_circuit, administrative |
| instructions | string | required | Plain-language instructions for the appearing attorney. What to say, what positions to take, what outcome to request. |
| Field | Type | Required | Description |
|---|---|---|---|
| documents | array | optional | Array of document objects with type, url, and label fields. Accepted types: motion_brief, case_summary, order, exhibit, other |
| webhook_url | string (URL) | optional | Per-request webhook override. If omitted, events are sent to your organization's default webhook endpoints. |
| client_reference_id | string | optional | Your internal ID for this case or hearing. Returned in all responses and webhook payloads for easy reconciliation. |
| rush | boolean | optional | Set to true for hearings within 24 hours. Triggers expedited matching (enterprise accounts only). Rush surcharge applies. |
Returns the full request object including current status, attorney match data (if confirmed), and all metadata. Statuses progress through: matching → attorney_matched → confirmed → appearance_completed → outcome_ready. If you prefer event-driven updates, use webhooks rather than polling this endpoint.
| Field | Type | Description |
|---|---|---|
| id | string | Unique request identifier (req_* prefix) |
| status | string (enum) | Current status: matching, attorney_matched, confirmed, appearance_started, appearance_completed, outcome_ready, cancelled |
| attorney | object | null | Attorney object present once status is attorney_matched or later. Includes: bar_number, state_admissions, federal_admissions, name, firm, phone |
| fee | number | Confirmed fee in USD. Locked once attorney is matched. |
Confirms the attorney match and authorizes the appearance fee. Must be called after the request.attorney_matched webhook is received. The attorney is notified immediately upon confirmation and will receive the full document package. Confirmation must occur at least 2 hours before the hearing start time. Returns the updated request object with status: "confirmed".
| Field | Type | Required | Description |
|---|---|---|---|
| confirm | boolean | required | Must be true. Passing false has no effect; use DELETE to cancel. |
| additional_instructions | string | optional | Any last-minute instructions to append to the original briefing before it is sent to the attorney. |
Returns the structured outcome report filed by the attorney within 2 hours of the hearing's conclusion. The report is available once status reaches outcome_ready. Returns 404 if the hearing has not yet occurred or the attorney has not yet filed the report. You will also receive a request.outcome_ready webhook when the report is available — no polling required.
| Field | Type | Description |
|---|---|---|
| outcome | string (enum) | Classification: continued, dismissed, order_entered, settled, no_action, other |
| judge | string | Name of the judge or judicial officer who presided |
| continuation_date | string | null | Next hearing date if the matter was continued (ISO 8601) |
| attorney_notes | string | Free-text notes from the attorney: what was said, any orders from the bench, demeanor observations |
| documents_filed | array | Array of document objects for any papers filed or received at the hearing |
| attorney.bar_number | string | Attorney's bar number for the appearing jurisdiction |
| checkin_timestamp | string (ISO 8601) | Timestamp when the attorney checked in at the courthouse |
Two production-level examples showing how the API integrates into AI-driven case management workflows at scale.
An AI legal platform monitors case dockets, detects a status conference in 14 days, and routes the appearance request without any human touch — from AI draft to confirmed attorney in 6 hours.
request.attorney_matched. Platform auto-confirms via POST /confirm. Attorney receives briefing packet.request.outcome_ready webhook triggers. Platform calls GET /outcome — continued 90 days, new date written back to case record.A national litigation firm with cases in 32 states uses the API to route all routine status conferences without burdening lead attorneys — saving 4–6 hours of coordination per hearing.
client_reference_id maps to internal matter number.request.outcome_ready event triggers a sync job that writes the structured outcome — judge, result, continuation date, attorney notes — directly into the matter record. Lead attorney reviews the summary, not the hearing.Register one or more HTTPS endpoints to receive signed webhook payloads for every state change in the appearance lifecycle. No polling required.
| Event | Trigger | Key Payload Fields | Typical Response Action |
|---|---|---|---|
| request.attorney_matched | An attorney accepted the engagement and their match is pending your confirmation | request_id, attorney.name, attorney.bar_number, attorney.state_admissions, attorney.federal_admissions, fee, confirm_by |
Auto-confirm via POST /confirm if fee is within threshold; otherwise flag for human review |
| request.attorney_confirmed | Your platform confirmed the attorney match (via API or dashboard) | request_id, attorney, confirmed_at, fee_authorized |
Update case record with confirmed attorney details; no action required |
| request.appearance_started | Attorney checked into the courthouse (geolocation confirmation) | request_id, checkin_timestamp, courthouse_location |
Optional status update to client-facing case timeline |
| request.outcome_ready | Attorney filed the structured outcome report (within 2h of hearing end) | request_id, outcome, continuation_date, judge, outcome_url |
Call GET /outcome to fetch full report; write to case management system |
| request.cancelled | Request was cancelled via API or by the platform | request_id, cancelled_at, reason, cancellation_fee, refund_status |
Update case record; process refund if applicable |
| request.match_failed | No attorney could be matched within the SLA window (rare — <0.4% of requests) | request_id, reason, retry_options |
Escalate to your ops team; contact enterprise support for rush escalation |
All webhook payloads are signed with HMAC-SHA256. Verify the X-CourtCounsel-Signature header against your webhook secret before processing. Replay attacks are blocked: payloads older than 5 minutes are rejected.
SLA is measured from the time of API submission to the time of attorney confirmation — not from hearing date. Submit early for maximum reliability.
Every hearing generates a structured JSON outcome report — no PDF parsing, no manual data entry. Your case management system receives machine-readable results.
continued, dismissed, order_entered, settled, no_action, default_entered, othercontinued, the date to which the matter was continued. Null if not continued or date was not yet set by the court.court_initiated, party_request, stipulation, scheduling_conflict. Null if not applicable.["C.D. Cal", "N.D. Cal", "S.D.N.Y."]. Empty array if no federal admissions.type, label, filed_by, and a url to the uploaded copy.Pricing scales with volume. Enterprise contracts available for 100+ appearances per month with dedicated SLA, custom webhooks, and a dedicated account manager.
https://api.courtcounsel.ai/v1. The API follows REST conventions: POST to create resources, GET to retrieve them. No GraphQL, no SOAP, no custom protocol required. Standard pagination is supported on list endpoints using limit and cursor query parameters.Authorization header as a Bearer token: Authorization: Bearer cc_live_sk_.... API keys are scoped to your organization and can be configured with role-based permissions (read-only vs. read-write). Keys are generated and rotated from your organization's dashboard at https://app.courtcounsel.ai/partners. Enterprise customers can configure IP allowlisting and automated key rotation. We recommend storing your API key as an environment variable — never hardcode it in source code.DELETE /api/v1/requests/{id} with an optional reason in the request body. The cancellation fee schedule is: more than 4 hours before the hearing — no fee charged, full refund issued; within 4 hours — 50% cancellation fee, 50% refund; within 1 hour of hearing — 100% fee, no refund. The API returns a cancellation confirmation object with the applicable fee, refund amount, and refund timeline. Webhook subscribers receive a request.cancelled event in real time so your case management system can update immediately.POST requests for six lifecycle events: request.attorney_matched, request.attorney_confirmed, request.appearance_started, request.outcome_ready, request.cancelled, and request.match_failed. Payloads are signed with HMAC-SHA256 using your webhook secret — verify the X-CourtCounsel-Signature header on every received event. Failed webhook deliveries are retried with exponential backoff for up to 24 hours.GET /api/v1/requests/{id}/outcome includes: outcome classification (continued, dismissed, order entered, etc.); judge name and courtroom; continuation date and continuation type if applicable; attorney bar number, all state admissions, and federal district admissions; a free-text attorney notes field; an array of documents filed or received at the hearing with upload URLs; courthouse check-in and check-out timestamps; and hearing duration in minutes. All fields are structured JSON — your case management system can ingest them directly with no PDF parsing or manual transcription.Talk to our enterprise team. We'll walk you through the API, discuss your volume requirements, and set up your sandbox environment — same day.