API
Lint a rules file over HTTP. Same rules, limits and results as the lint page. No key, no account; the text is not stored or logged (Privacy).
To lint before each commit or after each Claude Code edit, see Hooks.
Request
POST /api/lint with Content-Type: application/json.
| Field | Required | Value |
|---|---|---|
content |
Yes | The rules file text, at most 100,000 characters. |
format |
No | One of Auto, Markdown, ClaudeMd, AgentsMd, CursorMdc, CursorRules, CopilotInstructions, GeminiMd, WindsurfRules. Case-insensitive. Default Auto. |
disable |
No | Lint rule IDs to skip, for example ["R004", "R013"]. Their findings are not produced or scored. |
POST /api/lint HTTP/1.1
Host: aibysitting.net
Content-Type: application/json
{
"content": "# Rules\n- Always use tabs.\n- Never use tabs.\n- Use tabs because the linter expects them.",
"format": "ClaudeMd",
"disable": ["R004"]
}
Response
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Cache-Control: no-store
{
"rulesetVersion": 4,
"detectedFormat": "ClaudeMd",
"score": 89,
"grade": "B",
"disabled": ["R004"],
"findings": [
{
"rule": "R003",
"line": 3,
"severity": "Error",
"message": "Contradicts line 2: \"use tabs\" is both required and forbidden.",
"fixHint": "Keep one instruction and delete the other."
},
{
"rule": "R001",
"line": 4,
"severity": "Info",
"message": "Rationale prose: \"because\"",
"fixHint": "Remove the explanation. State the instruction only."
}
],
"suppressed": []
}
findings and suppressed are ordered by line, then rule. suppressed lists findings matched by an aibysitter-disable comment; they are not scored. rulesetVersion is listed on the changelog.
Errors
Errors are problem details (application/problem+json). Field errors are under errors, keyed by field name.
| Status | When |
|---|---|
| 400 | Invalid JSON; content missing, blank, or too long; unknown format; an ID in disable that is not a lint rule |
| 413 | Request body over 512 KB |
| 415 | Content type is not JSON |
| 422 | Linting stopped at the 1-second pattern limit |
| 429 | More than 20 lint requests in 60 seconds from one IP address, counting lint page submissions without JavaScript and API calls together |
Browsers on other sites cannot call the API: it sends no CORS headers.