HAR → OpenAPI (2026)
Generate a starting OpenAPI 3.0 spec from a browser HAR capture. Groups requests by path+method, infers schemas from real request/response bodies, detects path parameters. The fastest way to bootstrap a spec for an undocumented API.
openapi: 3.0.3
info:
title: Generated from HAR (api.example.com)
version: 1.0.0
description: Generated by Specway from a HAR capture. Review and edit before publishing.
servers:
- url: https://api.example.com
paths:
/v1/pets:
get:
operationId: getv1pets
parameters:
- name: limit
in: query
schema:
type: string
- name: Authorization
in: header
schema:
type: string
responses:
'200':
description: Response
content:
application/json:
schema:
type: array
items:
type: object
properties:
id:
type: integer
name:
type: string
example:
- id: 1
name: Rex
post:
operationId: postv1pets
parameters:
- name: Content-Type
in: header
schema:
type: string
responses:
'201':
description: Response
content:
application/json:
schema:
type: object
properties:
id:
type: integer
name:
type: string
example:
id: 2
name: Fido
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
example:
name: Fido
When to use this
- Reverse-engineering a third-party API that has no public OpenAPI spec.
- Documenting an internal API where the team never wrote a spec — start with what production actually does.
- Onboarding to a legacy system: capture the requests you make in a day, generate a spec, refine.
How to capture a HAR file
- Open DevTools (F12 / Cmd+Opt+I) and go to the Network tab.
- Make sure recording is on. Optionally check "Preserve log" if you'll navigate across pages.
- Perform the requests you want documented.
- Right-click any request → Save all as HAR.
- Upload the resulting
.harfile here.
What the converter does (and doesn't do)
Does: group requests into operations, detect numeric and UUID path parameters, infer JSON schemas from real request/response bodies, preserve auth headers as header parameters, attach example payloads, set the server URL from the host.
Doesn't: distinguish required vs optional fields (would need more samples), detect auth scheme types (Bearer vs Basic vs custom), handle multipart bodies cleanly, infer descriptions or operation summaries. Treat the output as 60% — the last 40% is human polish.