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.
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/
| Method | Path | What it returns |
|---|---|---|
| GET | /api/v1/ | The endpoint index and the rate limit policy |
| GET | /api/v1/health | Liveness check |
| GET | /api/v1/fees | Published flat fees by service and county |
| GET | /api/v1/practice-areas | Practice areas, each with its page and its Agent Skill |
| GET | /api/v1/document-packs | The free Illinois legal form packs |
| POST | /api/v1/document-packs | Sends a pack to an email address |
| POST | /api/v1/intake | Sends an identity protection intake to the firm |
| GET | /api/v1/resources | Every 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.
| Header | Example | Meaning |
|---|---|---|
RateLimit-Policy | "api";q=120;w=60 | RFC 9331. The quota and the window in seconds. |
RateLimit | "api";r=118;t=41 | RFC 9331. Requests remaining, and seconds until reset. |
RateLimit-Limit | 120 | The same quota, in the older header form. |
RateLimit-Remaining | 118 | Requests remaining in this window. |
RateLimit-Reset | 41 | Seconds until the window resets. |
Retry-After | 41 | Sent 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
Deprecationheader (RFC 9745) and aSunsetheader (RFC 8594). It also carriesLink: 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.
| Item | Value |
|---|---|
| Endpoint | POST 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 versions | 2025-06-18, 2025-03-26 |
| Tools | get_flat_fees, request_document_pack, submit_identity_protection_intake, get_agent_resources |
| Resources | llms.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
| File | Format | What it holds |
|---|---|---|
| /llms.txt | llmstxt.org | Every page, with a one-line description |
| /llms-full.txt | Markdown | The long-form version |
| /auth.md | Markdown | Agent access policy |
| /api/openapi.json | OpenAPI 3.1 | The API contract |
| /api/versions.json | JSON | Version and deprecation policy |
| /.well-known/api-catalog | RFC 9727 linkset | API discovery |
| /.well-known/mcp.json | JSON | MCP server manifest |
| /.well-known/agent-skills/index.json | JSON | Twelve Illinois law Agent Skills |
| /sitemap-index.xml | XML | Every live URL |
| /robots.txt | robots.txt | Crawl 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.