Parse, test, and grade any OpenAPI or Swagger spec.
A free online OpenAPI and Swagger tool. Paste a spec URL to parse it, send requests without CORS errors, validate responses against the schema, score the API design from 0 to 100, and generate TypeScript types and tests.
Works with raw JSON or YAML links and hosted Swagger UI pages.
No spec handy? Try one:
One tab instead of four tools
Swagger UI shows the docs, Postman sends the request, a linter grades the design, and a generator writes the types. APIForge does all four against the same spec.
Read the docs
Every operation grouped by tag, with parameters and response schemas next to it.
apiforge / swagger-petstoreExamplePOST/petAdd a new pet to the store
Parameters- namestringrequired
- statusstringoptional
Responses- 200Petapplication/json
Replaces: Swagger UI
Send the request
Run it from the browser, or through the proxy when CORS blocks it. Bearer, Basic, and API-key auth are built in.
apiforge / swagger-petstoreExamplePOSThttps://petstore.example/v2/petSendResponse200 OK · 142 ms{ "id": 101, "name": "Biscuit", "status": "available" }Replaces: Postman
Grade the design
Seven rule-based pillars give a 0–100 score. Every issue names the route.
apiforge / swagger-petstoreExample86/100Design scoreFlagged- GET /pet/findByStatusverb in path
- DELETE /pet/{petId}no 404 response
- PUT /petmissing description
Replaces: a linter
Write the types
TypeScript for one endpoint or the whole API, plus tests you can run on the spot.
apiforge / swagger-petstoreExamplepet.tsTypeScriptexport interface Pet { id: number; name: string; status?: "available" | "sold"; tags?: Tag[]; }Replaces: a type generator
See what the score catches
Every route is checked against twelve rules. Fix a group and the score moves.
Example: score rises from 38 to 86 as the four rule groups are fixed
Naming
Verbs in paths, underscores, camelCase, and singular next to plural.
Naming · exampleExample- POST/getUserOrdersVerb in the pathGET/users/{id}/ordersFixed
- GET/user_ordersUnderscores in the pathGET/user-ordersFixed
Score after: 52 (from 38)
HTTP semantics
A GET with a request body, or the verb repeated in the method and the path.
HTTP semantics · exampleExample- GET/searchRequest body on a GETPOST/searchFixed
Score after: 66 (from 52)
Responses and errors
No documented success response, and no error responses.
Responses and errors · exampleExample- DELETE/pets/{id}No error responsesDELETE/pets/{id}+ 404, 409Fixed
Score after: 77 (from 66)
Docs and versions
No summary or description, no version in the path, paths nested too deep, duplicate operations.
Docs and versions · exampleExample- GET/api/petsNo version in the pathGET/v1/petsFixed
Score after: 86 (from 77)
Where the 100 points come from
Seven pillars share the 100 points, and each rule a route breaks takes points off its pillar. The rules are fixed, so the same spec always gets the same score.
How the score worksFrom URL to validated request
No install, no account, no collection to import. The spec is the starting point and everything after it happens in the same tab.
Drop in an OpenAPI or Swagger link. That is the whole setup.
- PasteDrop in an OpenAPI or Swagger link. That is the whole setup.
- ParsePaths, methods, tags, and schemas are read into a browsable list of endpoints.
- RunPick an endpoint, fill in the parameters, and send a real request from the workspace.
- ValidateThe response is checked against the schema the spec promised.
- ScoreTwelve rules grade the design of every route, so weak spots show up early.
- ExportTake the result with you as types, a cURL command, or a Postman collection.
Ship it. We'll judge it.
Drop in a spec and get a roast written about your actual endpoints: a score, a reaction meme, the worst offences, and what to fix first.
Roast my APIOpen your spec in APIForge
Free. No account, no install.
Works with raw JSON or YAML links and hosted Swagger UI pages.
APIForge runs on free-tier AI models. or star it on GitHub.