API Documentation

Request/Response Examples

Detailed examples for common CLE Engine API use cases.

Table of Contents


Simple Jurisdiction Query

For jurisdictions with calendar-year or fixed-date reporting that require no attorney-specific data.

Request

curl -X POST https://api.cle-engine.com/v1/compute \
  -H "Content-Type: application/json" \
  -H "X-API-Key: cle_your_api_key_here" \
  -d '{
    "jurisdiction": "AL"
  }'

Response

{
  "due_date": "2026-12-31",
  "cycle_start": "2026-01-01",
  "cycle_end": "2026-12-31",
  "credits_required": null,
  "reporting_group": null,
  "cle_required": true,
  "required_fields": [],
  "missing_fields": [],
  "citations": [
    {
      "source_id": "al_cle_attorney_information",
      "excerpt_id": null,
      "url": "https://www.alabar.org/cle/attorney-information/"
    },
    {
      "source_id": "al_cle_faq",
      "excerpt_id": null,
      "url": "https://www.alabar.org/cle/faq/"
    }
  ],
  "notes": "Annual requirement runs on the calendar year; credits completed by Dec 31."
}

Other Simple Jurisdictions

  • Arizona (AZ): July 1 - June 30, report by September 15
  • Connecticut (CT): Calendar year
  • Hawaii (HI): Calendar year
  • Kentucky (KY): July 1 - June 30
  • Louisiana (LA): Calendar year, report by January 31
  • Missouri (MO): July 1 - June 30, report by July 31
  • Nevada (NV): Calendar year with extension period
  • Oklahoma (OK): Calendar year, report by February 15

Surname-Based Compliance (CA, IL)

California and Illinois assign compliance groups based on the first letter of the attorney's last name.

California Request

curl -X POST https://api.cle-engine.com/v1/compute \
  -H "Content-Type: application/json" \
  -H "X-API-Key: cle_your_api_key_here" \
  -d '{
    "jurisdiction": "CA",
    "last_name": "Garcia"
  }'

California Response

{
  "due_date": "2025-04-01",
  "cycle_start": null,
  "cycle_end": "2025-03-29",
  "credits_required": null,
  "reporting_group": "Group 1",
  "cle_required": true,
  "required_fields": ["last_name"],
  "missing_fields": [],
  "citations": [
    {
      "source_id": "ca_mcle_requirements",
      "url": "https://www.calbar.ca.gov/legal-professionals/maintaining-compliance/mcle/mcle-requirements"
    },
    {
      "source_id": "ca_mcle_compliance_groups",
      "url": "https://www.calbar.ca.gov/legal-professionals/maintaining-compliance/mcle/compliance-groups"
    }
  ],
  "notes": "Compliance group assigned by last name."
}

California Compliance Groups

GroupLast Name LettersCycle EndReport Deadline
1A-GMarch 29, 2025April 1, 2025
2H-MMarch 29, 2027March 30, 2027
3N-ZMarch 29, 2026March 30, 2026

Illinois Request

curl -X POST https://api.cle-engine.com/v1/compute \
  -H "Content-Type: application/json" \
  -H "X-API-Key: cle_your_api_key_here" \
  -d '{
    "jurisdiction": "IL",
    "last_name": "Johnson"
  }'

Illinois Response

{
  "due_date": "2026-06-30",
  "cycle_start": "2024-07-01",
  "cycle_end": "2026-06-30",
  "credits_required": null,
  "reporting_group": "Last name A-M",
  "cle_required": true,
  "required_fields": ["last_name"],
  "missing_fields": [],
  "citations": [...],
  "notes": "Two-year reporting period runs July 1 to June 30 based on last name grouping; compliance due June 30."
}

Birth Date-Based Compliance (NJ, TX, PR)

These jurisdictions use birth month to determine compliance groups or cycles.

New Jersey Request

curl -X POST https://api.cle-engine.com/v1/compute \
  -H "Content-Type: application/json" \
  -H "X-API-Key: cle_your_api_key_here" \
  -d '{
    "jurisdiction": "NJ",
    "birth_date": "1985-03-15"
  }'

New Jersey Response

{
  "due_date": "2026-12-31",
  "cycle_start": "2025-01-01",
  "cycle_end": "2026-12-31",
  "credits_required": null,
  "reporting_group": "Group 1",
  "cle_required": true,
  "required_fields": ["birth_date"],
  "missing_fields": [],
  "citations": [
    {
      "source_id": "nj_cle_faq",
      "url": "https://www.njcourts.gov/attorneys/cle/faq"
    }
  ],
  "notes": "Compliance period ends Dec 31 of the assigned even/odd year; certification is tied to annual registration."
}

New Jersey Groups

GroupBirth MonthsCompliance Years
Group 1January - JuneEven years (2026, 2028...)
Group 2July - DecemberOdd years (2025, 2027...)

Texas Request

Texas requires both birth date and admission date for newly licensed attorneys.

curl -X POST https://api.cle-engine.com/v1/compute \
  -H "Content-Type: application/json" \
  -H "X-API-Key: cle_your_api_key_here" \
  -d '{
    "jurisdiction": "TX",
    "birth_date": "1990-08-22",
    "admission_date": "2022-11-01"
  }'

Puerto Rico Request

Puerto Rico uses a triennial (3-year) cycle based on birth month.

curl -X POST https://api.cle-engine.com/v1/compute \
  -H "Content-Type: application/json" \
  -H "X-API-Key: cle_your_api_key_here" \
  -d '{
    "jurisdiction": "PR",
    "birth_date": "1988-05-10",
    "admission_date": "2018-06-15"
  }'

Admission Date-Based Compliance (CO, FL, WA)

These jurisdictions calculate cycles based on when the attorney was admitted to the bar.

Colorado Request

curl -X POST https://api.cle-engine.com/v1/compute \
  -H "Content-Type: application/json" \
  -H "X-API-Key: cle_your_api_key_here" \
  -d '{
    "jurisdiction": "CO",
    "admission_date": "2021-05-15"
  }'

Colorado Response

{
  "due_date": "2025-01-31",
  "cycle_start": "2021-05-15",
  "cycle_end": "2024-12-31",
  "credits_required": null,
  "reporting_group": null,
  "cle_required": true,
  "required_fields": ["admission_date"],
  "missing_fields": [],
  "citations": [...],
  "notes": "First compliance period ends Dec 31 of the third full calendar year after admission."
}

Florida Request

curl -X POST https://api.cle-engine.com/v1/compute \
  -H "Content-Type: application/json" \
  -H "X-API-Key: cle_your_api_key_here" \
  -d '{
    "jurisdiction": "FL",
    "admission_date": "2019-10-01"
  }'

Florida Response

{
  "due_date": "2026-12-31",
  "cycle_start": "2024-01-01",
  "cycle_end": "2026-12-31",
  "credits_required": null,
  "reporting_group": "Group 2",
  "cle_required": true,
  "required_fields": ["admission_date"],
  "missing_fields": [],
  "citations": [...],
  "notes": "Three-year compliance cycle; 33 credits required including 5 ethics, 5 technology, 3 mental health/substance abuse."
}

Washington Request

curl -X POST https://api.cle-engine.com/v1/compute \
  -H "Content-Type: application/json" \
  -H "X-API-Key: cle_your_api_key_here" \
  -d '{
    "jurisdiction": "WA",
    "admission_date": "1995-06-20"
  }'

Reporting Category-Based Compliance (MN, PA)

These states assign attorneys to numbered compliance groups.

Minnesota Request

curl -X POST https://api.cle-engine.com/v1/compute \
  -H "Content-Type: application/json" \
  -H "X-API-Key: cle_your_api_key_here" \
  -d '{
    "jurisdiction": "MN",
    "reporting_category": "2"
  }'

Minnesota Response

{
  "due_date": "2025-08-31",
  "cycle_start": "2022-07-01",
  "cycle_end": "2025-06-30",
  "credits_required": null,
  "reporting_group": "Category 2",
  "cle_required": true,
  "required_fields": ["reporting_category"],
  "missing_fields": [],
  "citations": [...],
  "notes": "Reporting deadline is August 31 following the end of the reporting period."
}

Pennsylvania Request

curl -X POST https://api.cle-engine.com/v1/compute \
  -H "Content-Type: application/json" \
  -H "X-API-Key: cle_your_api_key_here" \
  -d '{
    "jurisdiction": "PA",
    "reporting_category": "1"
  }'

Pennsylvania Response

{
  "due_date": "2026-04-30",
  "cycle_start": "2025-05-01",
  "cycle_end": "2026-04-30",
  "credits_required": null,
  "reporting_group": "Group 1",
  "cle_required": true,
  "required_fields": ["reporting_category"],
  "missing_fields": [],
  "citations": [...],
  "notes": "Compliance period is May 1 through April 30; annual deadline is April 30."
}

Pennsylvania Groups

GroupCompliance PeriodAnnual Deadline
1May 1 - April 30April 30
2September 1 - August 31August 31
3January 1 - December 31December 31

Reporting Period End Date (NY, OR)

New York and Oregon assign specific reporting period end dates to each attorney.

New York Request

curl -X POST https://api.cle-engine.com/v1/compute \
  -H "Content-Type: application/json" \
  -H "X-API-Key: cle_your_api_key_here" \
  -d '{
    "jurisdiction": "NY",
    "reporting_period_end": "2026-06-30"
  }'

New York Response

{
  "due_date": "2026-06-30",
  "cycle_start": "2024-07-01",
  "cycle_end": "2026-06-30",
  "credits_required": null,
  "reporting_group": null,
  "cle_required": true,
  "required_fields": ["reporting_period_end"],
  "missing_fields": [],
  "citations": [...],
  "notes": "Biennial reporting cycle; use the reporting period end date provided by the NY attorney registration portal."
}

Oregon Request

curl -X POST https://api.cle-engine.com/v1/compute \
  -H "Content-Type: application/json" \
  -H "X-API-Key: cle_your_api_key_here" \
  -d '{
    "jurisdiction": "OR",
    "reporting_period_end": "2027-04-30"
  }'

Non-Mandatory CLE States (DC, MD, MI, SD)

Some jurisdictions do not require mandatory CLE.

District of Columbia Request

curl -X POST https://api.cle-engine.com/v1/compute \
  -H "Content-Type: application/json" \
  -H "X-API-Key: cle_your_api_key_here" \
  -d '{
    "jurisdiction": "DC"
  }'

District of Columbia Response

{
  "due_date": null,
  "cycle_start": null,
  "cycle_end": null,
  "credits_required": null,
  "reporting_group": null,
  "cle_required": false,
  "required_fields": [],
  "missing_fields": [],
  "citations": [
    {
      "source_id": "dc_cle_requirements",
      "url": "https://www.dcbar.org/for-lawyers/continuing-legal-education/mcle-credit/cle-obligations-for-d-c-bar-members"
    }
  ],
  "notes": "DC Bar does not have mandatory CLE requirements; newly admitted attorneys must complete a mandatory course within 12 months of admission."
}

Other Non-Mandatory States

StateNotes
Maryland (MD)Mandatory CLE postponed
Michigan (MI)No CLE requirements
South Dakota (SD)Non-mandatory CLE state

Handling Missing Fields

When required fields are not provided, the API returns information about what's missing.

Request Without Required Field

curl -X POST https://api.cle-engine.com/v1/compute \
  -H "Content-Type: application/json" \
  -H "X-API-Key: cle_your_api_key_here" \
  -d '{
    "jurisdiction": "TX"
  }'

Response

{
  "due_date": null,
  "cycle_start": null,
  "cycle_end": null,
  "credits_required": null,
  "reporting_group": null,
  "cle_required": true,
  "required_fields": ["birth_date", "admission_date"],
  "missing_fields": ["birth_date", "admission_date"],
  "citations": [...],
  "notes": "Missing required fields for due date calculation: birth_date, admission_date."
}

Best Practice

Always check the missing_fields array in responses. If it's non-empty, provide the missing data and retry.

response = api.compute(jurisdiction="TX")

if response["missing_fields"]:
    print(f"Please provide: {', '.join(response['missing_fields'])}")
else:
    print(f"Due date: {response['due_date']}")