Developer portal

The Chicagoland Lawyer API, MCP server, and agent resources

This page is the developer portal for The Chicagoland Lawyer (Abdilla & Associates, an Illinois law firm). It documents a public REST API, an MCP server, twelve Agent Skills, and a CLI. No key is required. No registration exists.

0API keys needed
8REST endpoints
4MCP tools
12Agent Skills

Read this first. The API gives you published legal information and two lead-capture endpoints. It does not give legal advice. Calling it does not create an attorney-client relationship. Two endpoints send email to the firm. Call those only with the explicit consent of the person you act for.

Quickstart

Send a request. There is no signup step.

# The published flat fee schedule
curl -s https://thechicagolandlawyer.com/api/v1/fees

# The endpoint index
curl -s https://thechicagolandlawyer.com/api/v1/

# A write, against the sandbox: no email is sent
curl -s -X POST https://thechicagolandlawyer.com/api/v1/sandbox/document-packs \
  -H 'Content-Type: application/json' \
  -d '{"email":"you@example.com","pack":"notices"}'

Every response is JSON. Every error is RFC 9457 problem+json. Both JSON and form encoding are accepted on write endpoints.

Endpoints

Base URL: https://thechicagolandlawyer.com/api/v1/

MethodPathWhat it returns
GET/api/v1/The endpoint index and the rate limit policy
GET/api/v1/healthLiveness check
GET/api/v1/feesPublished flat fees by service and county
GET/api/v1/practice-areasPractice areas, each with its page and its Agent Skill
GET/api/v1/document-packsThe free Illinois legal form packs
POST/api/v1/document-packsSends a pack to an email address
POST/api/v1/intakeSends an identity protection intake to the firm
GET/api/v1/resourcesEvery machine-readable file this site publishes

The full contract is in the OpenAPI 3.1 spec. Each field, each error code, and each example lives there.

Authentication

There is none. There is no authorization server. No endpoint reads a credential. Do not send a token.

The full policy is published at /auth.md. It follows the auth.md convention for agent access.

Attribution is requested, not enforced. When this content informs an answer, credit Justin Abdilla, Esq., Abdilla & Associates, and link to thechicagolandlawyer.com.

Sandbox

Every write endpoint has a sandbox twin. Insert sandbox/ after /api/v1/.

The sandbox runs the same validation. It returns the same response shape. It adds "sandbox": true. It sends no email. It stores nothing.

POST https://thechicagolandlawyer.com/api/v1/sandbox/intake
POST https://thechicagolandlawyer.com/api/v1/sandbox/document-packs
GET  https://thechicagolandlawyer.com/api/v1/sandbox/health

Build against the sandbox. Then remove sandbox/ from the path.

Rate limits

The limit is 120 requests per 60 seconds per client IP address.

Every API response carries the limit. Read the headers and pace yourself.

HeaderExampleMeaning
RateLimit-Policy"api";q=120;w=60RFC 9331. The quota and the window in seconds.
RateLimit"api";r=118;t=41RFC 9331. Requests remaining, and seconds until reset.
RateLimit-Limit120The same quota, in the older header form.
RateLimit-Remaining118Requests remaining in this window.
RateLimit-Reset41Seconds until the window resets.
Retry-After41Sent with a 429. Wait this many seconds.

The count is kept per edge location. The true ceiling is therefore equal to or higher than the published one. It is never lower. An agent that obeys the headers is never throttled by surprise.

Errors

Every 4xx and 5xx response uses application/problem+json (RFC 9457). Branch on code. It is stable. Do not parse the message.

{
  "type": "https://thechicagolandlawyer.com/developers/errors/#invalid_email",
  "title": "Invalid email address",
  "status": 400,
  "detail": "The value of \"email\" is not a valid email address.",
  "code": "invalid_email",
  "hint": "Example: {\"email\": \"you@example.com\"}.",
  "errors": [{ "field": "email", "code": "invalid_email", "message": "Provide a deliverable email address." }]
}

Every code is listed on the error reference.

Versioning and deprecation

The major version is the first path segment after /api/. The current version is v1.

  • A breaking change ships as a new major version, at /api/v2/.
  • An additive change ships inside the current version. New fields can appear. Existing fields keep their meaning.
  • A retiring version carries a Deprecation header (RFC 9745) and a Sunset header (RFC 8594). It also carries Link: rel="successor-version".
  • Those headers appear at least 180 days before removal.

The machine-readable policy is at /api/versions.json.

Three unversioned endpoints predate v1: /api/intake.php, /api/notice-request.php, and /api/health.php. The site's own forms post to them, so they stay supported. Each response names its v1 successor in a Link header. Build new integrations against v1.

MCP server

The firm runs a Model Context Protocol server. The transport is Streamable HTTP. No authentication is required.

ItemValue
EndpointPOST https://thechicagolandlawyer.com/mcp
Manifest/.well-known/mcp.json
Also served at/.well-known/mcp-server.json, /.well-known/mcp/server-card.json, /mcp.json
Protocol versions2025-06-18, 2025-03-26
Toolsget_flat_fees, request_document_pack, submit_identity_protection_intake, get_agent_resources
Resourcesllms.txt, llms-full.txt, auth.md, and the twelve Agent Skills

Add it to an MCP client with this configuration:

{
  "mcpServers": {
    "thechicagolandlawyer": {
      "type": "http",
      "url": "https://thechicagolandlawyer.com/mcp"
    }
  }
}

Or call it directly:

curl -s -X POST https://thechicagolandlawyer.com/mcp \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

CLI

The CLI is one file. It needs Node.js 18 or later. It has no dependencies.

curl -sO https://thechicagolandlawyer.com/developers/tcl.mjs
node tcl.mjs fees
node tcl.mjs practice-areas
node tcl.mjs packs
node tcl.mjs request-pack --email you@example.com --pack notices --sandbox

Add --json to any command for raw JSON. Add --sandbox to any write command to route it to the sandbox.

Machine-readable files

FileFormatWhat it holds
/llms.txtllmstxt.orgEvery page, with a one-line description
/llms-full.txtMarkdownThe long-form version
/auth.mdMarkdownAgent access policy
/api/openapi.jsonOpenAPI 3.1The API contract
/api/versions.jsonJSONVersion and deprecation policy
/.well-known/api-catalogRFC 9727 linksetAPI discovery
/.well-known/mcp.jsonJSONMCP server manifest
/.well-known/agent-skills/index.jsonJSONTwelve Illinois law Agent Skills
/sitemap-index.xmlXMLEvery live URL
/robots.txtrobots.txtCrawl rules and content signals

Support

Email justin@thechicagolandlawyer.com. Or call 630-839-9195.

Report a broken endpoint the same way. State the URL, the method, and the code you received.