API Collection Converter

Paste request data or select a local file, then choose an output format. Review the extracted methods, URLs and headers before copying or downloading the conversion.

Runs locally in your browser
Parsing and analysis run entirely in your browser. No data is uploaded or sent to an API.

The converter reads copied text or a selected local file. It never calls an API endpoint or imports a collection remotely.

Conversion summary
Requests found
NameMethodURLHeaders
Paste a collection or request to see its local conversion preview.
Output format

Move API requests between common developer formats

Review the generated output before committing it. Authentication values are preserved only in this browser tab and should be replaced with safe variables before sharing.

How to convert a collection here

Five inputs — Postman collections, Insomnia exports, Bruno requests, OpenAPI or Swagger documents and cURL commands — and four outputs: OpenAPI 3.0.3, Postman v2.1, cURL and Fetch JavaScript. All twenty input and output pairs were run against real request data while this page was written.

The conversion is browser JavaScript. With the network panel open, converting a 2.2 MB collection produced no request at all: no collection, URL or credential is uploaded, and no endpoint named in the input is ever called.

  1. Paste the text into the box, or use Choose a local file for a .json, .bru or .txt file. Auto-detect recognises the five usual shapes; the named formats are there for input that is being misread.
  2. Pick OpenAPI 3.0, Postman v2.1, cURL or Fetch JavaScript as the output, then press Convert locally. The summary reports how many requests were found in the source and how many were merged.
  3. Read the request table before the output: name, method, URL and the number of enabled headers for each request, up to the first 100 rows.
  4. Copy output or Download output takes the result away — the download is named kivtools-api-conversion.json, .js or .txt. Clear empties the input together with the previous result.

Conversion rules and limits

What is read from each input

Postman folders flatten into "Folder / Request" names, and values from the collection's own variable list are substituted into URLs, headers and bodies, so a {{baseUrl}} that the file defines arrives as a real address. A placeholder the file never defines is left exactly as written rather than guessed at.

Swagger 2.0 documents are read through host, basePath and schemes: in: body parameters become a request body using the declared consumes media type, and in: formData fields become multipart form data. Bruno files are read for the method block, the URL and the headers block; other blocks in the file are ignored.

cURL flags that are understood

The parser accepts -X/--request, -H/--header, -d/--data/--data-raw/--data-binary/--data-urlencode, -F/--form/--form-string, -u/--user, -A/--user-agent, -b/--cookie, -e/--referer and --url, and joins lines that end in a backslash before parsing starts. -u user:pass becomes an Authorization: Basic header; -A, -b and -e become User-Agent, Cookie and Referer.

Uploads survive the trip: -F "file=@photo.png" switches the method to POST the way curl does, then comes back as a file field in Postman, a -F argument in cURL or a FormData entry in Fetch. A body read from disk stays a file reference — -d @payload.json is re-emitted as --data @payload.json, while --data-raw @payload.json keeps its literal meaning.

Rules the OpenAPI output follows

A path template survives a round trip: /items/{id} converted from one OpenAPI document to another stays /items/{id} instead of arriving as /items/%7Bid%7D. A query string becomes query parameters holding the values that were in the URL, and one path with two methods becomes one path item with two operations.

An OpenAPI document cannot hold two operations for the same path and method, so repeated pairs are merged and the status line reports the number. Requests aimed at different hosts keep their own server entry, with the first host as the server of the document.

What the result is, and what it is not

The generated OpenAPI carries example values rather than schemas: a body becomes an example object and every operation gets a placeholder 200 Successful response. It is an editable starting document, not a validated specification, and it will not invent the response models that were never in the source.

Header and authentication values are copied verbatim, which is why the page asks for them to be replaced with variables before the result is shared. A conversion that fails clears the previous result instead of leaving it on screen, so an old document is never mistaken for the current one. Large inputs stay quick: 5,000 requests in 2.2 MB converted in about 65 ms, and 100 requests in 43 KB in about 10 ms.

Recent tools: