Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Convert OpenAPI 3.x or Swagger 2.0 specs (YAML or JSON) into complete, import-ready Postman Collection v2.1 JSON files. Use this skill whenever the user provides or references an OpenAPI spec, Swagger file, openapi.yaml, swagger.json, or uses phrases like "convert my OpenAPI spec",...
.claude/skills/sickn33-postman-openapi-converter/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 125% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 85% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 39% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 20% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 56% | 0% |
Use this skill when you need convert OpenAPI 3.x or Swagger 2.0 specs (YAML or JSON) into complete, import-ready Postman Collection v2.1 JSON files. Use this skill whenever the user provides or references an OpenAPI spec, Swagger file, openapi.yaml, swagger.json, or uses phrases like "convert my OpenAPI spec",...
Converts OpenAPI 3.x or Swagger 2.0 specs into a valid Postman Collection v2.1.
Identify the spec version from the input:
openapi: 3.x.x → OpenAPI 3swagger: "2.0" → Swagger 2If the input is truncated or partial, convert what's available and note missing sections.
| OpenAPI field | Postman mapping | |---|---| | info.title | Collection name | | info.description | Collection description | | servers[0].url | {{base_url}} variable | | paths.<path>.<method> | One request item per operation | | operationId or summary | Request name | | parameters (path/query/header) | URL path variables, query params, headers | | requestBody.content.application/json.schema | Body (raw JSON), generate example from schema | | responses | Saved example responses | | components.securitySchemes | Collection-level auth | | tags | Folder grouping |
| Swagger field | Postman mapping | |---|---| | host + basePath | {{base_url}} | | paths.<path>.<method> | Request item | | parameters | Query/path/header/body params | | consumes / produces | Content-Type / Accept headers | | securityDefinitions | Collection auth | | tags | Folders |
For each request with a requestBody or body parameter, generate a realistic example JSON body from the schema:
"email" format → "user@example.com", "date-time" → "2024-01-15T10:30:00Z")$ref schemas, resolve them inlineMap security schemes to Postman auth:
| OpenAPI scheme | Postman auth type | |---|---| | http: bearer | bearer with {{token}} | | http: basic | basic with {{username}} / {{password}} | | apiKey: header | apikey header with {{api_key}} | | apiKey: query | apikey query param | | oauth2 | oauth2 (note: requires manual token setup) |
Apply auth at collection level if all endpoints share the same scheme. Override at request level for exceptions.
Use the standard v2.1 structure (same schema as postman-collection-generator skill).
Key differences for spec-converted collections:
tags into foldersdescription field on each request from operationId + summary + descriptionresponses are defined in the specjson"response": [ { "name": "200 OK", "status": "OK", "code": 200, "header": [{ "key": "Content-Type", "value": "application/json" }], "body": "{ \"id\": 1, \"name\": \"example\" }", "originalRequest": { <copy of the request> } } ]
Extract all variables into a companion environment:
base_url from servers[0].url or host + basePathtoken, api_key, username, password as empty placeholdersservers[0].variablescollection.json — Full Postman Collection v2.1environment.json — Matching environment file$ref chains: Resolve all $ref pointers inline before mappingallOf / oneOf / anyOf: Use the first/primary schema for body generation; note alternatives in description{param} to :param in URL path AND add to variable array in url objectapplication/json; note others in request descriptionMETHOD /path (e.g., GET /users/{id} → Get User by ID)paths entry produces at least one request:param format in Postman URL$ref resolved — no raw $ref strings in output{{variables}}, never hardcodedOnce the API design output is delivered, ask the user:
"Would you like me to generate API documentation for this design? (yes/no)"
If the user says yes:
You can install it and re-run.
If the user says no:
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 8,211 | 11,736 | +43% | 1 | 1 | 0% | 2,102 | 4,734 | +125% | 0 | 0 | — |
case-02 | fail→pass | 9,197 | 11,301 | +23% | 1 | 1 | 0% | 2,436 | 4,501 | +85% | 0 | 0 | — |
case-03 | fail→pass | 11,664 | 9,491 | -19% | 1 | 1 | 0% | 2,984 | 4,135 | +39% | 0 | 0 | — |
case-04 | pass→pass | 15,886 | 17,735 | +12% | 1 | 1 | 0% | 4,028 | 6,329 | +57% | 0 | 0 | — |
case-05 | pass→pass | 5,918 | 5,305 | -10% | 1 | 1 | 0% | 1,248 | 2,652 | +113% | 0 | 0 | — |
case-06 | pass→fail | 14,148 | 6,758 | -52% | 1 | 1 | 0% | 3,116 | 2,734 | -12% | 0 | 0 | — |
case-07 | pass→pass | 5,849 | 5,000 | -15% | 1 | 1 | 0% | 1,259 | 2,563 | +104% | 0 | 0 | — |
case-08 | pass→pass | 11,212 | 12,117 | +8% | 1 | 1 | 0% | 2,462 | 4,490 | +82% | 0 | 0 | — |
case-09 | fail→pass | 9,373 | 2,984 | -68% | 1 | 1 | 0% | 1,759 | 2,103 | +20% | 0 | 0 | — |
case-10 | fail→pass | 9,847 | 7,641 | -22% | 1 | 1 | 0% | 2,118 | 3,312 | +56% | 0 | 0 | — |
case-11 | fail→pass | 9,600 | 3,029 | -68% | 1 | 1 | 0% | 2,040 | 2,106 | +3% | 0 | 0 | — |
case-12 | pass→pass | 10,127 | 10,538 | +4% | 1 | 1 | 0% | 1,973 | 3,883 | +97% | 0 | 0 | — |
case-13 | pass→pass | 8,625 | 13,702 | +59% | 1 | 1 | 0% | 1,685 | 4,450 | +164% | 0 | 0 | — |
case-14 | pass→pass | 6,790 | 3,508 | -48% | 1 | 1 | 0% | 1,146 | 2,110 | +84% | 0 | 0 | — |
case-15 | pass→pass | 6,188 | 2,718 | -56% | 1 | 1 | 0% | 1,253 | 1,999 | +60% | 0 | 0 | — |
case-16 | pass→pass | 4,549 | 2,848 | -37% | 1 | 1 | 0% | 803 | 2,045 | +155% | 0 | 0 | — |
case-17 | pass→pass | 8,108 | 4,961 | -39% | 1 | 1 | 0% | 1,611 | 2,486 | +54% | 0 | 0 | — |
case-18 | fail→pass | 5,881 | 6,212 | +6% | 1 | 1 | 0% | 1,097 | 2,769 | +152% | 0 | 0 | — |
case-19 | pass→pass | 5,972 | 2,724 | -54% | 1 | 1 | 0% | 1,010 | 2,003 | +98% | 0 | 0 | — |
case-20 | fail→fail | 10,737 | 6,371 | -41% | 1 | 1 | 0% | 1,807 | 2,654 | +47% | 0 | 0 | — |
case-21 | pass→pass | 8,095 | 5,352 | -34% | 1 | 1 | 0% | 1,621 | 2,571 | +59% | 0 | 0 | — |
case-22 | fail→fail | 10,836 | 10,271 | -5% | 1 | 1 | 0% | 2,381 | 3,908 | +64% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +27 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.