OpenAPI Linter

Lints an OpenAPI 3.x document for structural errors, missing operation IDs, undocumented responses, unresolved $refs and undeclared security.

POST /v1/developer/openapi-lint $0.02 per call

Specification

Endpoint
POST /v1/developer/openapi-lint
Price
$0.02 per call · tier advanced_analysis
Payment
x402 on X Layer (chain 196) · settled in USDG or USDT0 · scheme exact
Data source
Deterministic local computation on caller-supplied input
Timeout
15 seconds
Max request
2 MB
Version
1.0.0

Calling it

The first call returns a 402 with the payment challenge. Retry with a signed authorisation in the X-PAYMENT header — see the payment guide for the exact shape.

curl -i -X POST "https://api.dana-edu.pp.ua/v1/developer/openapi-lint" \
  -H "content-type: application/json" \
  -d '{ ... }'

Response

Real output, captured by running this endpoint at build time — not written by hand. Volatile fields such as timestamps are elided. Captured 2026-07-30.

{
  "valid_structure": true,
  "openapi_version": "3.0.3",
  "operation_count": 1,
  "path_count": 1,
  "finding_count": 6,
  "counts_by_severity": {
    "error": 0,
    "warning": 3,
    "info": 3
  },
  "findings": [
    {
      "severity": "warning",
      "rule": "security-declared",
      "location": "$.security",
      "message": "No security requirement is declared anywhere; consumers cannot tell how to authenticate."
    },
    {
      "severity": "warning",
      "rule": "operation-operationId",
      "location": "paths./items.get",
      "message": "Operation has no operationId; client generators will invent one."
    },
    {
      "severity": "warning",
      "rule": "operation-description",
      "location": "paths./items.get",
      "message": "Operation has neither summary nor description."
    },
    {
      "severity": "info",
      "rule": "info-description",
      "location": "$.info.description",
      "message": "No API description; this is what most documentation renderers show first."
    },
    {
      "severity": "info",
      "rule": "operation-tags",
      "location": "paths./items.get",
      "message": "Operation has no tags, so it will not be grouped in documentation."
    },
    {
      "severity": "info",
      "rule": "operation-error-responses",
      "location": "paths./items.get",
      "message": "Operation documents no 4xx response."
    }
  ],
  "findings_truncated": false
}

Every response is wrapped in the same envelope: data plus warnings, sources, confidence, informational_only and a measured processing_ms. See the envelope reference.

Related endpoints