v1.0 — Beta

API Reference

Everything you need to file documents with any US court programmatically.

Authentication

All API requests require a Bearer token in the Authorization header. Get your API key from the dashboard after signing up.

bash
curl https://api.courtfile.dev/v1/filings \
  -H "Authorization: Bearer cf_live_sk_1234567890abcdef" \
  -H "Content-Type: application/json"

API keys start with cf_live_ for production and cf_test_ for sandbox mode.

Endpoints

POST/v1/filingsSubmit a new filing
GET/v1/filings/{id}Get filing details
GET/v1/filings/{id}/statusGet filing status
GET/v1/courtsList supported courts

Create a Filing

Submit a document to a court. CourtFile handles formatting, fee calculation, and submission.

Request body

ParameterTypeRequiredDescription
courtstringYesCourt identifier (e.g., ca-superior-los-angeles)
case_numberstringYesCase number at the court
document_typestringYesmotion, complaint, answer, brief, petition, etc.
document_urlstringYesURL to the PDF document (must be accessible)
filer_namestringYesName of the filing attorney or party
filer_bar_numberstringNoState bar number of the filer
service_contactsstring[]NoEmail addresses for service of process
metadataobjectNoCourt-specific metadata fields
webhook_urlstringNoURL to receive status update webhooks

JavaScript

javascript
const response = await fetch('https://api.courtfile.dev/v1/filings', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer cf_live_sk_...',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    court: 'ca-superior-los-angeles',
    case_number: '24STCV01234',
    document_type: 'motion',
    document_url: 'https://your-storage.com/motion.pdf',
    filer_name: 'Jane Smith, Esq.',
    filer_bar_number: '123456',
    service_contacts: ['opposing@lawfirm.com'],
    webhook_url: 'https://your-app.com/webhooks/courtfile'
  })
});

const filing = await response.json();
console.log(filing.filing_id); // "fil_7x9k2m3n"
console.log(filing.status);    // "submitted"

Python

python
import requests

response = requests.post(
    'https://api.courtfile.dev/v1/filings',
    headers={
        'Authorization': 'Bearer cf_live_sk_...',
        'Content-Type': 'application/json'
    },
    json={
        'court': 'ca-superior-los-angeles',
        'case_number': '24STCV01234',
        'document_type': 'motion',
        'document_url': 'https://your-storage.com/motion.pdf',
        'filer_name': 'Jane Smith, Esq.',
        'service_contacts': ['opposing@lawfirm.com']
    }
)

filing = response.json()
print(filing['filing_id'])  # "fil_7x9k2m3n"

cURL

bash
curl -X POST https://api.courtfile.dev/v1/filings \
  -H "Authorization: Bearer cf_live_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
    "court": "ca-superior-los-angeles",
    "case_number": "24STCV01234",
    "document_type": "motion",
    "document_url": "https://your-storage.com/motion.pdf",
    "filer_name": "Jane Smith, Esq.",
    "service_contacts": ["opposing@lawfirm.com"]
  }'

Response

json
{
  "filing_id": "fil_7x9k2m3n",
  "status": "submitted",
  "court": "ca-superior-los-angeles",
  "case_number": "24STCV01234",
  "document_type": "motion",
  "confirmation_number": "2024-LA-0098234",
  "timestamp": "2024-11-15T14:23:01Z",
  "estimated_processing": "same_day",
  "fee": {
    "filing_fee": 61.00,
    "service_fee": 2.50,
    "total": 63.50,
    "currency": "usd"
  }
}

Get Filing Status

bash
curl https://api.courtfile.dev/v1/filings/fil_7x9k2m3n/status \
  -H "Authorization: Bearer cf_live_sk_..."
json
{
  "filing_id": "fil_7x9k2m3n",
  "status": "confirmed",
  "confirmation_number": "2024-LA-0098234",
  "filed_at": "2024-11-15T14:23:01Z",
  "confirmed_at": "2024-11-15T14:24:12Z",
  "court_response": "Filing accepted and docketed.",
  "document_stamp_url": "https://api.courtfile.dev/v1/filings/fil_7x9k2m3n/stamp.pdf"
}

Status values: pendingsubmittedconfirmed or rejected

Webhook Events

Set a webhook_url on your filing to receive real-time status updates via POST.

filing.submittedFiling received and queued for submission to the court
filing.confirmedCourt accepted the filing and returned a confirmation number
filing.rejectedCourt rejected the filing (includes rejection reason)
filing.fee_chargedFiling fee successfully collected
json
{
  "event": "filing.confirmed",
  "filing_id": "fil_7x9k2m3n",
  "timestamp": "2024-11-15T14:24:12Z",
  "data": {
    "status": "confirmed",
    "confirmation_number": "2024-LA-0098234",
    "court_response": "Filing accepted and docketed."
  }
}

Supported Courts

We support 3,000+ US courts. Here are some of the most commonly used.

California

  • Superior Court — Los Angeles
  • Superior Court — San Francisco
  • Superior Court — San Diego
  • Superior Court — Orange County

Texas

  • District Court — Harris County
  • District Court — Dallas County
  • District Court — Travis County
  • District Court — Bexar County

New York

  • Supreme Court — Manhattan
  • Supreme Court — Brooklyn
  • Supreme Court — Queens
  • Civil Court — New York City

Florida

  • Circuit Court — Miami-Dade
  • Circuit Court — Broward
  • Circuit Court — Palm Beach
  • Circuit Court — Hillsborough

Illinois

  • Circuit Court — Cook County
  • Circuit Court — DuPage County

Federal

  • USDC — Central District of CA
  • USDC — Southern District of NY
  • USDC — Northern District of TX
  • USDC — District of Delaware

Ready to start filing?

Get your API key and start sending test filings in 5 minutes.

Get API Key