— MIT Licensed — 357+ tests passing

Convert curl & Postman to OpenAPI 3.2

Extensible production-grade conversion framework. Paste a curl command or import a Postman collection, get a valid, well-structured OpenAPI 3.2 document with smart schema inference and path template detection.

$npm install @powerduck/x-to-openapi
curl CommandsPostman CollectionsOpenAPI 3.2 OutputSchema InferenceExtensible Adapters
Quick Start

Convert in seconds

import { curlToOpenApi } from "@powerduck/x-to-openapi";

// Full ConvertOptions — all fields shown
const result = await curlToOpenApi(`curl -X POST https://api.example.com/v1/users \
  -H "Content-Type: application/json" \
  -d '{"name": "John", "email": "john@example.com"}'`, {
  openapiVersion: "3.2.0",              // Output OpenAPI version
  title: "User API",                   // Document title
  version: "1.0.0",                    // Document version
  description: "User management API",    // Document description
  inferPathParameters: true,              // Detect /users/123 → /users/{userId}
  pathParameterMinSamples: 2,               // Min samples before inferring params
  inferSecurity: true,                    // Infer auth from headers/cookies
  includeCommonHeaders: false,             // Include User-Agent, Accept, etc.
  includeCookies: false,                   // Include cookies (default: false, live session risk)
  includeExamples: true,                   // Include request/response examples
  useServerBasePath: true,                // Collapse common origin into servers[0]
  validate: true,                         // Validate output against OpenAPI 3.2
  strict: false,                         // Strict mode: fail on warnings
});

// ConvertResult: { document, requests, diagnostics, ok, documentValid }
console.log(`OK: ${result.ok}, Valid: ${result.documentValid}, Requests: ${result.requests.length}`);
console.log(JSON.stringify(result.document, null, 2));
Features

Smart, accurate conversion

Built for developers who need reliable OpenAPI generation from existing API artifacts.

02

Postman Collection Import

Convert Postman v2.0/v2.1 collections via PostmanAdapter. Preserves folders, requests, headers, bodies, and test scripts as x-postman-scripts.

03

Schema Inference

Automatically infer JSON Schemas from request/response bodies via jsonSchema() and mergeSchemas(). Merge multiple examples into unified schemas.

04

Extensible Adapter Framework

XToOpenApi class with register(adapter) and convert(format, input, options). Write your own adapter for any source format.

05

Path Template Detection

buildPathTemplates() and looksLikeIdentifier() automatically detect path parameters from URLs. Convert /users/123 to /users/{userId}.

06

Output Validation

Every generated document is validated against OpenAPI 3.2 via validateOpenApi32(). Get detailed diagnostics for any issues via DiagnosticBag.

Adapters

Two built-in adapters

Production-grade adapters for the most common API artifact formats.

curl

CurlAdapter

Convert curl commands to OpenAPI operations. Supports all common curl flags including -X, -H, -d, --data, --data-binary, --form, -u, --user, and more.

  • Single and multi-line commands
  • splitCurlCommands() for batch scripts
  • Header and body parsing
  • Authentication detection
  • Query parameter extraction
postman

PostmanAdapter

Convert Postman Collection v2.0/v2.1 to OpenAPI 3.2. Maps folders to tags, requests to operations, and preserves examples and test scripts.

  • Collection v2.0 and v2.1 support
  • Folder-to-tag mapping
  • Request/response examples
  • Variable resolution
  • Test scripts preserved as x-postman-scripts
API Reference

Core API

functioncurlToOpenApi(input, options?)Zero-config: curl text or array of commands to OpenAPI 3.2
ParameterTypeDescription
inputrequiredstring | string[]curl command(s), single or multi-line
options.titlestringAPI title default: "Converted API"
options.versionstringAPI version default: "1.0.0"
options.serversstring[]Server URLs
Returns
ConvertResult { document: OpenApi32Document; operations: number; diagnostics: Diagnostic[] }
functionpostmanToOpenApi(input, options?)Zero-config: Postman Collection to OpenAPI 3.2

Accepts Postman Collection v2.0/v2.1 as parsed object or JSON string. Test scripts preserved as x-postman-scripts for compatibility with @powerduck/openapi-request.

classXToOpenApiMain conversion orchestrator for multi-source and custom adapter workflows
MethodDescription
constructor(options?)Create with optional title, version, servers
register(adapter)Register a source adapter
convert(format, input, options?)Convert input using the adapter matching format
functionsplitCurlCommands(input)Split a shell script into individual curl command strings
Returns
string[] — Array of individual curl command strings
functionbuildOpenApi32(builder)Build a final OpenAPI 3.2 document from a builder state

Used internally by adapters. Assembles paths, schemas, tags, and servers into a valid OpenAPI 3.2 document.

functionvalidateOpenApi32(doc)Validate an OpenAPI 3.2 document

Alias: validateOpenApiDocument(). Returns validation result with errors and warnings.

functionjsonSchema(value)Infer a JSON Schema from a sample value

Infers type, properties, items, and required fields from a sample JSON value. Use mergeSchemas() to combine multiple inferred schemas.

classAdapterRegistryRegistry for managing source adapters
MethodDescription
register(adapter)Register an adapter
unregister(format)Remove an adapter by format
get(format)Get an adapter by format
list()List all registered adapters
classConversionErrorError thrown when conversion fails

Extends Error with format, cause, and diagnostics properties for structured error handling.

classDiagnosticBagCollects warnings and errors during conversion

Methods: addError(), addWarning(), toArray(), hasErrors(). Returned in ConvertResult.

2
Built-in Adapters
3.2
OpenAPI Version
100%
TypeScript
MIT
License