Why does this exist?

The problem this tool solves, and why you might need it.

The workflow

When a backend API is already implemented—often with FastAPI or another framework—the frontend developer needs to understand the API to start building.

The backend team shares the openapi.json file. You open it. It’s huge. Hundreds of routes, dozens of schemas, thousands of lines of JSON. You don’t need most of it. You just need the 4–5 endpoints for the feature you’re working on.

The manual process

Before this tool, you had to:

  1. Find a way to dump the OpenAPI JSON into something readable.
  2. Scroll through hundreds of routes and manually pick the ones you care about.
  3. Trace every $ref by hand to figure out which schemas are actually needed.
  4. Delete everything else.
  5. Paste the cleaned-up result into an LLM prompt for frontend code generation.

Every time the API changed, you did it again. It was repetitive, took several minutes per session, and wasted tokens on irrelevant schemas.

The solution

This app is a browser-based tool that does the tedious work for you:

  1. Paste the raw openapi.json — no signup, no upload, nothing leaves your browser.
  2. Select only the routes you need with checkboxes. Search, Select All, Deselect All.
  3. Generate a compact text representation with exactly those routes and only the schemas they reference.
  4. Copy and paste straight into an LLM prompt.

What the output looks like

Instead of sending raw JSON like this:

{
  "openapi": "3.0.3",
  "paths": {
    "/hackathons": {
      "get": { ... },
      "post": { ... }
    },
    "/hackathons/{id}": { ... },
    ...
  },
  "components": {
    "schemas": {
      "HackathonResponse": { ... },
      "HackathonListResponse": { ... },
      "UserResponse": { ... },
      ...
    }
  }
}

You send this:

================================================================================
ENDPOINTS
--------------------------------------------------------------------------------

GET /hackathons
List all hackathons

Parameters:
  page: integer
  per_page: integer | None

Response:
  HackathonListResponse


POST /hackathons
Create a new hackathon

Request Body:
  CreateHackathonRequest

Response:
  HackathonResponse

================================================================================
SCHEMAS
--------------------------------------------------------------------------------

HackathonListResponse
{
  items: list[HackathonResponse]
  total: integer
  page: integer
  per_page: integer
}

HackathonResponse
{
  id: UUID
  title: string
  description: string | None
  starts_at: datetime
  ends_at: datetime
  status: HackathonStatus
  owner: UserResponse
  max_participants: integer | None
  created_at: datetime
}

UserResponse
{
  id: UUID
  email: string
  display_name: string
  avatar_url: string | None
}

Fewer tokens. Cleaner context. The LLM gets exactly what it needs, nothing it doesn’t.

Try it

Head over to the main app, paste your openapi.json, select the routes you need, and generate clean, LLM-ready documentation in seconds.