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.