Get Early Access
Protonosis

Diagnose your API before your users do.

Inconsistent naming, misused status codes, semantic drift, and design smells that rule-based linters miss — found before they reach your consumers.

diagnosis.log — openapi.yaml
$ protonosis scan openapi.yaml
 
Scanning 42 endpoints across 8 resources...
 
Inferred conventions: snake_case fields · 204 on DELETE · cursor pagination
 
WARNING  `DELETE /webhooks/{id}` returns 200; 7 of 8 DELETE endpoints return 204
WARNING  `GET /invoices` — no pagination; 5 of 6 collections use cursor pagination
WARNING  `customer`, `client`, `account_holder` name the same concept across 11 schemas
SUGGESTION  `Order.status` — description mentions "refunded"; enum does not include it
 
─────────────────────────────────────────────
0 errors · 3 warnings · 1 suggestion

The bugs your linter never finds.

GET /users wraps its list in {"{"} "data": [...] {"}"}. GET /orders returns a bare array. Nobody noticed until the SDK broke.

POST /payments documents its error body under 200. Your consumers' retry logic never fires.

Someone renamed a field in a "minor" PR. Three downstream services broke on Friday.

Rule-based linters enforce the rules you write. Protonosis learns the conventions your spec already follows — and flags where it breaks them.

Three steps. One diagnosis.

Upload or paste

Drop your OpenAPI / Swagger spec, or point us at a URL. No install required.

Get a diagnosis

Convention outliers, naming drift, and REST anti-patterns — each with severity, a suggested fix, and a pointer to the exact location in your spec.

Share the report

Send a link to your team or drop it in the PR. The shareable report is built-in.

Deterministic checks infer your conventions; an AI pass catches drift in meaning. No evidence, no finding.

What a real diagnosis looks like.

protonosis-report.txt — acme-billing-api.yaml
Protonosis Diagnostic Report — acme-billing-api.yaml
47 endpoints · 23 schemas · OpenAPI 3.1
CONVENTION OUTLIERS (2)
  • WARNING `DELETE /subscriptions/{id}` returns 200; 7 of 8 DELETE endpoints return 204
    ↳ #/paths/~1subscriptions~1{id}/delete/responses
  • WARNING `GET /invoices` returns `{ items, total }`; every other collection returns `{ data, next_cursor }`
SEMANTIC DRIFT (2)
  • WARNING `customerId` and `customer_id` both used across 6 schemas; 31 of 37 fields are snake_case
  • WARNING `Refund.amount` described as "amount in dollars"; `Charge.amount` described as "amount in cents"
SUGGESTIONS (1)
  • `GET /events` — unbounded array response; consider cursor pagination like other collections

Catch breaking changes before they ship.

Add Protonosis to your CI pipeline. Every PR that touches your API contract is diffed against your base branch and checked against your existing conventions.

Breaking-change detection

Removed fields, changed types, narrowed enums, altered status codes — detected by diffing the PR against your base branch. Flagged before merge, not after the incident.

Semantic drift alerts

New endpoints that break your API's existing conventions are caught automatically.

PR comments, not dashboards

Findings show up where developers already work — inline in the pull request.

protonosis-ci commented on this PR
❌ protonosis: 2 breaking changes in openapi.yaml (vs main)
 
BREAKING `GET /users/{id}` — field `email` removed from response
BREAKING `POST /orders` — `quantity` changed from string to integer
WARNING  `GET /invoices/{id}/lines` (new) returns a bare array; every other collection returns `{ data, next_cursor }`
Set up CI checks → CI integration is on the roadmap — join the waitlist to be first in line.

Built for you. Scales to your team.

For you For your team
Spec diagnosis CI checks on every PR
Learn REST best practices from real findings Block breaking changes before merge
Shareable report links Consistency enforcement across services
Severity-ranked findings with suggested fixes History & drift tracking over time

Get early access.

We're building the tool that catches what linters miss. Sign up to be first in line.

How would you use Protonosis?
No spam. We'll only reach out when something new is ready for you.