🛠️ Openapi2Insomnia ReleaseOpenApiInsomniaNPM

Converts an OpenAPI 3.0.x specification into an Insomnia v5 collection ready to import and run tests.

Generates one test case (TC) per operation response code — base success TC, per-parameter variants, and error TCs (400, 401, 403, 404) — each with an afterResponse validation script that checks the status code and validates the response body against the schema.


Requirements

  • Node.js >= 20
  • pnpm >= 9 (development only)

Installation

npm install -g openapi2insomnia

Development setup

git clone https://github.com/apiaddicts/openapi2insomnia
cd openapi2insomnia
pnpm install
pnpm build

Usage

Installed from npm

o2i convert -i <path|url> [options]

Local development

node dist/index.js convert -i <path|url> [options]

Flags

FlagRequiredDescription
-i, --input <path|url>yesPath to a local file or an HTTPS URL
-o, --output <path>noOutput file path. If omitted, writes to stdout
-c, --config <path>noPath to an o2i.config.json file

Examples

# Output to stdout
o2i convert -i openapi.yaml
# Output to a file
o2i convert -i openapi.yaml -o collection.yaml
# With config (generates one file per environment)
o2i convert -i openapi.yaml -c o2i.config.json
# From a remote URL
o2i convert -i https://api.example.com/openapi.yaml -o collection.yaml

Config file

Without a config file the tool generates a single collection using the spec's server URL as base_url.

With a config file you can generate one collection per environment, each with its own URL, OAuth2 credentials, and generation options.

{
"minimal_endpoints": false,
"generate_oneOf_anyOf": false,
"examples": {
"correct": {
"string": "goodstring",
"integer": 1,
"number": 1.0,
"boolean": true,
"date": "2020-01-01",
"date-time": "2020-01-01T23:59:59"
},
"wrong": {
"string": "badstring",
"integer": "badstring",
"number": "badstring",
"boolean": "badboolean",
"date": "2020-40-40",
"date-time": "2020-40-40T00:00:00"
}
},
"environments": [
{
"name": "DEV",
"base_url": "https://dev.api.example.com/v1",
"host_server_pattern": "%dev%",
"token_url": "https://dev.keycloak.example.com/token",
"authorization_url": "https://dev.keycloak.example.com/auth",
"client_id": "my-client-dev",
"client_secret": "",
"target_folder": "out",
"microcks_headers": true,
"read_only": false,
"has_scopes": true,
"application_token": true,
"number_of_scopes": 2
}
]
}

Global options

FieldTypeDefaultDescription
minimal_endpointsbooleanfalseGenerate only the base success TC per operation, skipping optional-parameter and wrong-body variants. Error TCs (401, 403, 404) and one 400 are still generated.
generate_oneOf_anyOfbooleanfalseWhen a request body uses oneOf/anyOf, generate a TC set per schema variant instead of using only the first.
examples.correctobjectValues used as valid inputs in success TCs and environment variables.
examples.wrongobjectValues used in 400 TCs to intentionally violate schema constraints.

Environment options

FieldTypeDefaultDescription
namestringEnvironment name in Insomnia and output filename suffix.
base_urlstring''Base URL of the API. Overridden if host_server_pattern finds a match.
host_server_patternstringSQL-LIKE pattern (% = wildcard) matched against the spec's servers[] list to pick the right URL automatically. Case-insensitive.
token_urlstringfrom specOAuth2 token endpoint. Overrides the value from the spec.
authorization_urlstringfrom specOAuth2 authorization endpoint.
client_idstring''OAuth2 client ID.
client_secretstring''OAuth2 client secret.
target_folderstring'.'Directory where the output YAML is written. Created if it does not exist.
microcks_headersbooleanfalseAdd X-Microcks-Response-Name header to every request, using the example name defined in the spec response.
read_onlybooleanfalseGenerate TCs only for GET operations.
has_scopesbooleanfalseDuplicate each 2xx TC for every configured token type (user scopes, application token).
application_tokenbooleanfalseInclude an application_token variant in scope clones. Requires has_scopes: true.
number_of_scopesinteger0Number of user token scopes to generate (user_token_scope_1user_token_scope_N).

Development

pnpm build # compile TypeScript → dist/
pnpm dev # compile in watch mode
pnpm test# run unit tests
pnpm typecheck # type-check without emitting

License

GNU Lesser General Public License v3.0

About

Node.js CLI that converts OpenAPI 3.0.x specs into ready-to-use Insomnia v5 collections

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

🛠️ Openapi2Insomnia ReleaseOpenApiInsomniaNPM

Converts an OpenAPI 3.0.x specification into an Insomnia v5 collection ready to import and run tests.

Generates one test case (TC) per operation response code — base success TC, per-parameter variants, and error TCs (400, 401, 403, 404) — each with an afterResponse validation script that checks the status code and validates the response body against the schema.


Requirements

  • Node.js >= 20
  • pnpm >= 9 (development only)

Installation

npm install -g openapi2insomnia

Development setup

git clone https://github.com/apiaddicts/openapi2insomnia
cd openapi2insomnia
pnpm install
pnpm build

Usage

Installed from npm

o2i convert -i <path|url> [options]

Local development

node dist/index.js convert -i <path|url> [options]

Flags

FlagRequiredDescription
-i, --input <path|url>yesPath to a local file or an HTTPS URL
-o, --output <path>noOutput file path. If omitted, writes to stdout
-c, --config <path>noPath to an o2i.config.json file

Examples

# Output to stdout
o2i convert -i openapi.yaml
# Output to a file
o2i convert -i openapi.yaml -o collection.yaml
# With config (generates one file per environment)
o2i convert -i openapi.yaml -c o2i.config.json
# From a remote URL
o2i convert -i https://api.example.com/openapi.yaml -o collection.yaml

Config file

Without a config file the tool generates a single collection using the spec's server URL as base_url.

With a config file you can generate one collection per environment, each with its own URL, OAuth2 credentials, and generation options.

{
"minimal_endpoints": false,
"generate_oneOf_anyOf": false,
"examples": {
"correct": {
"string": "goodstring",
"integer": 1,
"number": 1.0,
"boolean": true,
"date": "2020-01-01",
"date-time": "2020-01-01T23:59:59"
},
"wrong": {
"string": "badstring",
"integer": "badstring",
"number": "badstring",
"boolean": "badboolean",
"date": "2020-40-40",
"date-time": "2020-40-40T00:00:00"
}
},
"environments": [
{
"name": "DEV",
"base_url": "https://dev.api.example.com/v1",
"host_server_pattern": "%dev%",
"token_url": "https://dev.keycloak.example.com/token",
"authorization_url": "https://dev.keycloak.example.com/auth",
"client_id": "my-client-dev",
"client_secret": "",
"target_folder": "out",
"microcks_headers": true,
"read_only": false,
"has_scopes": true,
"application_token": true,
"number_of_scopes": 2
}
]
}

Global options

FieldTypeDefaultDescription
minimal_endpointsbooleanfalseGenerate only the base success TC per operation, skipping optional-parameter and wrong-body variants. Error TCs (401, 403, 404) and one 400 are still generated.
generate_oneOf_anyOfbooleanfalseWhen a request body uses oneOf/anyOf, generate a TC set per schema variant instead of using only the first.
examples.correctobjectValues used as valid inputs in success TCs and environment variables.
examples.wrongobjectValues used in 400 TCs to intentionally violate schema constraints.

Environment options

FieldTypeDefaultDescription
namestringEnvironment name in Insomnia and output filename suffix.
base_urlstring''Base URL of the API. Overridden if host_server_pattern finds a match.
host_server_patternstringSQL-LIKE pattern (% = wildcard) matched against the spec's servers[] list to pick the right URL automatically. Case-insensitive.
token_urlstringfrom specOAuth2 token endpoint. Overrides the value from the spec.
authorization_urlstringfrom specOAuth2 authorization endpoint.
client_idstring''OAuth2 client ID.
client_secretstring''OAuth2 client secret.
target_folderstring'.'Directory where the output YAML is written. Created if it does not exist.
microcks_headersbooleanfalseAdd X-Microcks-Response-Name header to every request, using the example name defined in the spec response.
read_onlybooleanfalseGenerate TCs only for GET operations.
has_scopesbooleanfalseDuplicate each 2xx TC for every configured token type (user scopes, application token).
application_tokenbooleanfalseInclude an application_token variant in scope clones. Requires has_scopes: true.
number_of_scopesinteger0Number of user token scopes to generate (user_token_scope_1user_token_scope_N).

Development

pnpm build # compile TypeScript → dist/
pnpm dev # compile in watch mode
pnpm test# run unit tests
pnpm typecheck # type-check without emitting

License

GNU Lesser General Public License v3.0

About

Node.js CLI that converts OpenAPI 3.0.x specs into ready-to-use Insomnia v5 collections

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

🛠️ Openapi2Insomnia ReleaseOpenApiInsomniaNPM

Converts an OpenAPI 3.0.x specification into an Insomnia v5 collection ready to import and run tests.

Generates one test case (TC) per operation response code — base success TC, per-parameter variants, and error TCs (400, 401, 403, 404) — each with an afterResponse validation script that checks the status code and validates the response body against the schema.


Requirements

  • Node.js >= 20
  • pnpm >= 9 (development only)

Installation

npm install -g openapi2insomnia

Development setup

git clone https://github.com/apiaddicts/openapi2insomnia
cd openapi2insomnia
pnpm install
pnpm build

Usage

Installed from npm

o2i convert -i <path|url> [options]

Local development

node dist/index.js convert -i <path|url> [options]

Flags

FlagRequiredDescription
-i, --input <path|url>yesPath to a local file or an HTTPS URL
-o, --output <path>noOutput file path. If omitted, writes to stdout
-c, --config <path>noPath to an o2i.config.json file

Examples

# Output to stdout
o2i convert -i openapi.yaml
# Output to a file
o2i convert -i openapi.yaml -o collection.yaml
# With config (generates one file per environment)
o2i convert -i openapi.yaml -c o2i.config.json
# From a remote URL
o2i convert -i https://api.example.com/openapi.yaml -o collection.yaml

Config file

Without a config file the tool generates a single collection using the spec's server URL as base_url.

With a config file you can generate one collection per environment, each with its own URL, OAuth2 credentials, and generation options.

{
"minimal_endpoints": false,
"generate_oneOf_anyOf": false,
"examples": {
"correct": {
"string": "goodstring",
"integer": 1,
"number": 1.0,
"boolean": true,
"date": "2020-01-01",
"date-time": "2020-01-01T23:59:59"
},
"wrong": {
"string": "badstring",
"integer": "badstring",
"number": "badstring",
"boolean": "badboolean",
"date": "2020-40-40",
"date-time": "2020-40-40T00:00:00"
}
},
"environments": [
{
"name": "DEV",
"base_url": "https://dev.api.example.com/v1",
"host_server_pattern": "%dev%",
"token_url": "https://dev.keycloak.example.com/token",
"authorization_url": "https://dev.keycloak.example.com/auth",
"client_id": "my-client-dev",
"client_secret": "",
"target_folder": "out",
"microcks_headers": true,
"read_only": false,
"has_scopes": true,
"application_token": true,
"number_of_scopes": 2
}
]
}

Global options

FieldTypeDefaultDescription
minimal_endpointsbooleanfalseGenerate only the base success TC per operation, skipping optional-parameter and wrong-body variants. Error TCs (401, 403, 404) and one 400 are still generated.
generate_oneOf_anyOfbooleanfalseWhen a request body uses oneOf/anyOf, generate a TC set per schema variant instead of using only the first.
examples.correctobjectValues used as valid inputs in success TCs and environment variables.
examples.wrongobjectValues used in 400 TCs to intentionally violate schema constraints.

Environment options

FieldTypeDefaultDescription
namestringEnvironment name in Insomnia and output filename suffix.
base_urlstring''Base URL of the API. Overridden if host_server_pattern finds a match.
host_server_patternstringSQL-LIKE pattern (% = wildcard) matched against the spec's servers[] list to pick the right URL automatically. Case-insensitive.
token_urlstringfrom specOAuth2 token endpoint. Overrides the value from the spec.
authorization_urlstringfrom specOAuth2 authorization endpoint.
client_idstring''OAuth2 client ID.
client_secretstring''OAuth2 client secret.
target_folderstring'.'Directory where the output YAML is written. Created if it does not exist.
microcks_headersbooleanfalseAdd X-Microcks-Response-Name header to every request, using the example name defined in the spec response.
read_onlybooleanfalseGenerate TCs only for GET operations.
has_scopesbooleanfalseDuplicate each 2xx TC for every configured token type (user scopes, application token).
application_tokenbooleanfalseInclude an application_token variant in scope clones. Requires has_scopes: true.
number_of_scopesinteger0Number of user token scopes to generate (user_token_scope_1user_token_scope_N).

Development

pnpm build # compile TypeScript → dist/
pnpm dev # compile in watch mode
pnpm test# run unit tests
pnpm typecheck # type-check without emitting

License

GNU Lesser General Public License v3.0

About

Node.js CLI that converts OpenAPI 3.0.x specs into ready-to-use Insomnia v5 collections

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

🛠️ Openapi2Insomnia ReleaseOpenApiInsomniaNPM

Converts an OpenAPI 3.0.x specification into an Insomnia v5 collection ready to import and run tests.

Generates one test case (TC) per operation response code — base success TC, per-parameter variants, and error TCs (400, 401, 403, 404) — each with an afterResponse validation script that checks the status code and validates the response body against the schema.


Requirements

  • Node.js >= 20
  • pnpm >= 9 (development only)

Installation

npm install -g openapi2insomnia

Development setup

git clone https://github.com/apiaddicts/openapi2insomnia
cd openapi2insomnia
pnpm install
pnpm build

Usage

Installed from npm

o2i convert -i <path|url> [options]

Local development

node dist/index.js convert -i <path|url> [options]

Flags

FlagRequiredDescription
-i, --input <path|url>yesPath to a local file or an HTTPS URL
-o, --output <path>noOutput file path. If omitted, writes to stdout
-c, --config <path>noPath to an o2i.config.json file

Examples

# Output to stdout
o2i convert -i openapi.yaml
# Output to a file
o2i convert -i openapi.yaml -o collection.yaml
# With config (generates one file per environment)
o2i convert -i openapi.yaml -c o2i.config.json
# From a remote URL
o2i convert -i https://api.example.com/openapi.yaml -o collection.yaml

Config file

Without a config file the tool generates a single collection using the spec's server URL as base_url.

With a config file you can generate one collection per environment, each with its own URL, OAuth2 credentials, and generation options.

{
"minimal_endpoints": false,
"generate_oneOf_anyOf": false,
"examples": {
"correct": {
"string": "goodstring",
"integer": 1,
"number": 1.0,
"boolean": true,
"date": "2020-01-01",
"date-time": "2020-01-01T23:59:59"
},
"wrong": {
"string": "badstring",
"integer": "badstring",
"number": "badstring",
"boolean": "badboolean",
"date": "2020-40-40",
"date-time": "2020-40-40T00:00:00"
}
},
"environments": [
{
"name": "DEV",
"base_url": "https://dev.api.example.com/v1",
"host_server_pattern": "%dev%",
"token_url": "https://dev.keycloak.example.com/token",
"authorization_url": "https://dev.keycloak.example.com/auth",
"client_id": "my-client-dev",
"client_secret": "",
"target_folder": "out",
"microcks_headers": true,
"read_only": false,
"has_scopes": true,
"application_token": true,
"number_of_scopes": 2
}
]
}

Global options

FieldTypeDefaultDescription
minimal_endpointsbooleanfalseGenerate only the base success TC per operation, skipping optional-parameter and wrong-body variants. Error TCs (401, 403, 404) and one 400 are still generated.
generate_oneOf_anyOfbooleanfalseWhen a request body uses oneOf/anyOf, generate a TC set per schema variant instead of using only the first.
examples.correctobjectValues used as valid inputs in success TCs and environment variables.
examples.wrongobjectValues used in 400 TCs to intentionally violate schema constraints.

Environment options

FieldTypeDefaultDescription
namestringEnvironment name in Insomnia and output filename suffix.
base_urlstring''Base URL of the API. Overridden if host_server_pattern finds a match.
host_server_patternstringSQL-LIKE pattern (% = wildcard) matched against the spec's servers[] list to pick the right URL automatically. Case-insensitive.
token_urlstringfrom specOAuth2 token endpoint. Overrides the value from the spec.
authorization_urlstringfrom specOAuth2 authorization endpoint.
client_idstring''OAuth2 client ID.
client_secretstring''OAuth2 client secret.
target_folderstring'.'Directory where the output YAML is written. Created if it does not exist.
microcks_headersbooleanfalseAdd X-Microcks-Response-Name header to every request, using the example name defined in the spec response.
read_onlybooleanfalseGenerate TCs only for GET operations.
has_scopesbooleanfalseDuplicate each 2xx TC for every configured token type (user scopes, application token).
application_tokenbooleanfalseInclude an application_token variant in scope clones. Requires has_scopes: true.
number_of_scopesinteger0Number of user token scopes to generate (user_token_scope_1user_token_scope_N).

Development

pnpm build # compile TypeScript → dist/
pnpm dev # compile in watch mode
pnpm test# run unit tests
pnpm typecheck # type-check without emitting

License

GNU Lesser General Public License v3.0

About

Node.js CLI that converts OpenAPI 3.0.x specs into ready-to-use Insomnia v5 collections

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

🛠️ Openapi2Insomnia ReleaseOpenApiInsomniaNPM

Converts an OpenAPI 3.0.x specification into an Insomnia v5 collection ready to import and run tests.

Generates one test case (TC) per operation response code — base success TC, per-parameter variants, and error TCs (400, 401, 403, 404) — each with an afterResponse validation script that checks the status code and validates the response body against the schema.


Requirements

  • Node.js >= 20
  • pnpm >= 9 (development only)

Installation

npm install -g openapi2insomnia

Development setup

git clone https://github.com/apiaddicts/openapi2insomnia
cd openapi2insomnia
pnpm install
pnpm build

Usage

Installed from npm

o2i convert -i <path|url> [options]

Local development

node dist/index.js convert -i <path|url> [options]

Flags

FlagRequiredDescription
-i, --input <path|url>yesPath to a local file or an HTTPS URL
-o, --output <path>noOutput file path. If omitted, writes to stdout
-c, --config <path>noPath to an o2i.config.json file

Examples

# Output to stdout
o2i convert -i openapi.yaml
# Output to a file
o2i convert -i openapi.yaml -o collection.yaml
# With config (generates one file per environment)
o2i convert -i openapi.yaml -c o2i.config.json
# From a remote URL
o2i convert -i https://api.example.com/openapi.yaml -o collection.yaml

Config file

Without a config file the tool generates a single collection using the spec's server URL as base_url.

With a config file you can generate one collection per environment, each with its own URL, OAuth2 credentials, and generation options.

{
"minimal_endpoints": false,
"generate_oneOf_anyOf": false,
"examples": {
"correct": {
"string": "goodstring",
"integer": 1,
"number": 1.0,
"boolean": true,
"date": "2020-01-01",
"date-time": "2020-01-01T23:59:59"
},
"wrong": {
"string": "badstring",
"integer": "badstring",
"number": "badstring",
"boolean": "badboolean",
"date": "2020-40-40",
"date-time": "2020-40-40T00:00:00"
}
},
"environments": [
{
"name": "DEV",
"base_url": "https://dev.api.example.com/v1",
"host_server_pattern": "%dev%",
"token_url": "https://dev.keycloak.example.com/token",
"authorization_url": "https://dev.keycloak.example.com/auth",
"client_id": "my-client-dev",
"client_secret": "",
"target_folder": "out",
"microcks_headers": true,
"read_only": false,
"has_scopes": true,
"application_token": true,
"number_of_scopes": 2
}
]
}

Global options

FieldTypeDefaultDescription
minimal_endpointsbooleanfalseGenerate only the base success TC per operation, skipping optional-parameter and wrong-body variants. Error TCs (401, 403, 404) and one 400 are still generated.
generate_oneOf_anyOfbooleanfalseWhen a request body uses oneOf/anyOf, generate a TC set per schema variant instead of using only the first.
examples.correctobjectValues used as valid inputs in success TCs and environment variables.
examples.wrongobjectValues used in 400 TCs to intentionally violate schema constraints.

Environment options

FieldTypeDefaultDescription
namestringEnvironment name in Insomnia and output filename suffix.
base_urlstring''Base URL of the API. Overridden if host_server_pattern finds a match.
host_server_patternstringSQL-LIKE pattern (% = wildcard) matched against the spec's servers[] list to pick the right URL automatically. Case-insensitive.
token_urlstringfrom specOAuth2 token endpoint. Overrides the value from the spec.
authorization_urlstringfrom specOAuth2 authorization endpoint.
client_idstring''OAuth2 client ID.
client_secretstring''OAuth2 client secret.
target_folderstring'.'Directory where the output YAML is written. Created if it does not exist.
microcks_headersbooleanfalseAdd X-Microcks-Response-Name header to every request, using the example name defined in the spec response.
read_onlybooleanfalseGenerate TCs only for GET operations.
has_scopesbooleanfalseDuplicate each 2xx TC for every configured token type (user scopes, application token).
application_tokenbooleanfalseInclude an application_token variant in scope clones. Requires has_scopes: true.
number_of_scopesinteger0Number of user token scopes to generate (user_token_scope_1user_token_scope_N).

Development

pnpm build # compile TypeScript → dist/
pnpm dev # compile in watch mode
pnpm test# run unit tests
pnpm typecheck # type-check without emitting

License

GNU Lesser General Public License v3.0

About

Node.js CLI that converts OpenAPI 3.0.x specs into ready-to-use Insomnia v5 collections

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

🛠️ Openapi2Insomnia ReleaseOpenApiInsomniaNPM

Converts an OpenAPI 3.0.x specification into an Insomnia v5 collection ready to import and run tests.

Generates one test case (TC) per operation response code — base success TC, per-parameter variants, and error TCs (400, 401, 403, 404) — each with an afterResponse validation script that checks the status code and validates the response body against the schema.


Requirements

  • Node.js >= 20
  • pnpm >= 9 (development only)

Installation

npm install -g openapi2insomnia

Development setup

git clone https://github.com/apiaddicts/openapi2insomnia
cd openapi2insomnia
pnpm install
pnpm build

Usage

Installed from npm

o2i convert -i <path|url> [options]

Local development

node dist/index.js convert -i <path|url> [options]

Flags

FlagRequiredDescription
-i, --input <path|url>yesPath to a local file or an HTTPS URL
-o, --output <path>noOutput file path. If omitted, writes to stdout
-c, --config <path>noPath to an o2i.config.json file

Examples

# Output to stdout
o2i convert -i openapi.yaml
# Output to a file
o2i convert -i openapi.yaml -o collection.yaml
# With config (generates one file per environment)
o2i convert -i openapi.yaml -c o2i.config.json
# From a remote URL
o2i convert -i https://api.example.com/openapi.yaml -o collection.yaml

Config file

Without a config file the tool generates a single collection using the spec's server URL as base_url.

With a config file you can generate one collection per environment, each with its own URL, OAuth2 credentials, and generation options.

{
"minimal_endpoints": false,
"generate_oneOf_anyOf": false,
"examples": {
"correct": {
"string": "goodstring",
"integer": 1,
"number": 1.0,
"boolean": true,
"date": "2020-01-01",
"date-time": "2020-01-01T23:59:59"
},
"wrong": {
"string": "badstring",
"integer": "badstring",
"number": "badstring",
"boolean": "badboolean",
"date": "2020-40-40",
"date-time": "2020-40-40T00:00:00"
}
},
"environments": [
{
"name": "DEV",
"base_url": "https://dev.api.example.com/v1",
"host_server_pattern": "%dev%",
"token_url": "https://dev.keycloak.example.com/token",
"authorization_url": "https://dev.keycloak.example.com/auth",
"client_id": "my-client-dev",
"client_secret": "",
"target_folder": "out",
"microcks_headers": true,
"read_only": false,
"has_scopes": true,
"application_token": true,
"number_of_scopes": 2
}
]
}

Global options

FieldTypeDefaultDescription
minimal_endpointsbooleanfalseGenerate only the base success TC per operation, skipping optional-parameter and wrong-body variants. Error TCs (401, 403, 404) and one 400 are still generated.
generate_oneOf_anyOfbooleanfalseWhen a request body uses oneOf/anyOf, generate a TC set per schema variant instead of using only the first.
examples.correctobjectValues used as valid inputs in success TCs and environment variables.
examples.wrongobjectValues used in 400 TCs to intentionally violate schema constraints.

Environment options

FieldTypeDefaultDescription
namestringEnvironment name in Insomnia and output filename suffix.
base_urlstring''Base URL of the API. Overridden if host_server_pattern finds a match.
host_server_patternstringSQL-LIKE pattern (% = wildcard) matched against the spec's servers[] list to pick the right URL automatically. Case-insensitive.
token_urlstringfrom specOAuth2 token endpoint. Overrides the value from the spec.
authorization_urlstringfrom specOAuth2 authorization endpoint.
client_idstring''OAuth2 client ID.
client_secretstring''OAuth2 client secret.
target_folderstring'.'Directory where the output YAML is written. Created if it does not exist.
microcks_headersbooleanfalseAdd X-Microcks-Response-Name header to every request, using the example name defined in the spec response.
read_onlybooleanfalseGenerate TCs only for GET operations.
has_scopesbooleanfalseDuplicate each 2xx TC for every configured token type (user scopes, application token).
application_tokenbooleanfalseInclude an application_token variant in scope clones. Requires has_scopes: true.
number_of_scopesinteger0Number of user token scopes to generate (user_token_scope_1user_token_scope_N).

Development

pnpm build # compile TypeScript → dist/
pnpm dev # compile in watch mode
pnpm test# run unit tests
pnpm typecheck # type-check without emitting

License

GNU Lesser General Public License v3.0

About

Node.js CLI that converts OpenAPI 3.0.x specs into ready-to-use Insomnia v5 collections

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

🛠️ Openapi2Insomnia ReleaseOpenApiInsomniaNPM

Converts an OpenAPI 3.0.x specification into an Insomnia v5 collection ready to import and run tests.

Generates one test case (TC) per operation response code — base success TC, per-parameter variants, and error TCs (400, 401, 403, 404) — each with an afterResponse validation script that checks the status code and validates the response body against the schema.


Requirements

  • Node.js >= 20
  • pnpm >= 9 (development only)

Installation

npm install -g openapi2insomnia

Development setup

git clone https://github.com/apiaddicts/openapi2insomnia
cd openapi2insomnia
pnpm install
pnpm build

Usage

Installed from npm

o2i convert -i <path|url> [options]

Local development

node dist/index.js convert -i <path|url> [options]

Flags

FlagRequiredDescription
-i, --input <path|url>yesPath to a local file or an HTTPS URL
-o, --output <path>noOutput file path. If omitted, writes to stdout
-c, --config <path>noPath to an o2i.config.json file

Examples

# Output to stdout
o2i convert -i openapi.yaml
# Output to a file
o2i convert -i openapi.yaml -o collection.yaml
# With config (generates one file per environment)
o2i convert -i openapi.yaml -c o2i.config.json
# From a remote URL
o2i convert -i https://api.example.com/openapi.yaml -o collection.yaml

Config file

Without a config file the tool generates a single collection using the spec's server URL as base_url.

With a config file you can generate one collection per environment, each with its own URL, OAuth2 credentials, and generation options.

{
"minimal_endpoints": false,
"generate_oneOf_anyOf": false,
"examples": {
"correct": {
"string": "goodstring",
"integer": 1,
"number": 1.0,
"boolean": true,
"date": "2020-01-01",
"date-time": "2020-01-01T23:59:59"
},
"wrong": {
"string": "badstring",
"integer": "badstring",
"number": "badstring",
"boolean": "badboolean",
"date": "2020-40-40",
"date-time": "2020-40-40T00:00:00"
}
},
"environments": [
{
"name": "DEV",
"base_url": "https://dev.api.example.com/v1",
"host_server_pattern": "%dev%",
"token_url": "https://dev.keycloak.example.com/token",
"authorization_url": "https://dev.keycloak.example.com/auth",
"client_id": "my-client-dev",
"client_secret": "",
"target_folder": "out",
"microcks_headers": true,
"read_only": false,
"has_scopes": true,
"application_token": true,
"number_of_scopes": 2
}
]
}

Global options

FieldTypeDefaultDescription
minimal_endpointsbooleanfalseGenerate only the base success TC per operation, skipping optional-parameter and wrong-body variants. Error TCs (401, 403, 404) and one 400 are still generated.
generate_oneOf_anyOfbooleanfalseWhen a request body uses oneOf/anyOf, generate a TC set per schema variant instead of using only the first.
examples.correctobjectValues used as valid inputs in success TCs and environment variables.
examples.wrongobjectValues used in 400 TCs to intentionally violate schema constraints.

Environment options

FieldTypeDefaultDescription
namestringEnvironment name in Insomnia and output filename suffix.
base_urlstring''Base URL of the API. Overridden if host_server_pattern finds a match.
host_server_patternstringSQL-LIKE pattern (% = wildcard) matched against the spec's servers[] list to pick the right URL automatically. Case-insensitive.
token_urlstringfrom specOAuth2 token endpoint. Overrides the value from the spec.
authorization_urlstringfrom specOAuth2 authorization endpoint.
client_idstring''OAuth2 client ID.
client_secretstring''OAuth2 client secret.
target_folderstring'.'Directory where the output YAML is written. Created if it does not exist.
microcks_headersbooleanfalseAdd X-Microcks-Response-Name header to every request, using the example name defined in the spec response.
read_onlybooleanfalseGenerate TCs only for GET operations.
has_scopesbooleanfalseDuplicate each 2xx TC for every configured token type (user scopes, application token).
application_tokenbooleanfalseInclude an application_token variant in scope clones. Requires has_scopes: true.
number_of_scopesinteger0Number of user token scopes to generate (user_token_scope_1user_token_scope_N).

Development

pnpm build # compile TypeScript → dist/
pnpm dev # compile in watch mode
pnpm test# run unit tests
pnpm typecheck # type-check without emitting

License

GNU Lesser General Public License v3.0

About

Node.js CLI that converts OpenAPI 3.0.x specs into ready-to-use Insomnia v5 collections

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

🛠️ Openapi2Insomnia ReleaseOpenApiInsomniaNPM

Converts an OpenAPI 3.0.x specification into an Insomnia v5 collection ready to import and run tests.

Generates one test case (TC) per operation response code — base success TC, per-parameter variants, and error TCs (400, 401, 403, 404) — each with an afterResponse validation script that checks the status code and validates the response body against the schema.


Requirements

  • Node.js >= 20
  • pnpm >= 9 (development only)

Installation

npm install -g openapi2insomnia

Development setup

git clone https://github.com/apiaddicts/openapi2insomnia
cd openapi2insomnia
pnpm install
pnpm build

Usage

Installed from npm

o2i convert -i <path|url> [options]

Local development

node dist/index.js convert -i <path|url> [options]

Flags

FlagRequiredDescription
-i, --input <path|url>yesPath to a local file or an HTTPS URL
-o, --output <path>noOutput file path. If omitted, writes to stdout
-c, --config <path>noPath to an o2i.config.json file

Examples

# Output to stdout
o2i convert -i openapi.yaml
# Output to a file
o2i convert -i openapi.yaml -o collection.yaml
# With config (generates one file per environment)
o2i convert -i openapi.yaml -c o2i.config.json
# From a remote URL
o2i convert -i https://api.example.com/openapi.yaml -o collection.yaml

Config file

Without a config file the tool generates a single collection using the spec's server URL as base_url.

With a config file you can generate one collection per environment, each with its own URL, OAuth2 credentials, and generation options.

{
"minimal_endpoints": false,
"generate_oneOf_anyOf": false,
"examples": {
"correct": {
"string": "goodstring",
"integer": 1,
"number": 1.0,
"boolean": true,
"date": "2020-01-01",
"date-time": "2020-01-01T23:59:59"
},
"wrong": {
"string": "badstring",
"integer": "badstring",
"number": "badstring",
"boolean": "badboolean",
"date": "2020-40-40",
"date-time": "2020-40-40T00:00:00"
}
},
"environments": [
{
"name": "DEV",
"base_url": "https://dev.api.example.com/v1",
"host_server_pattern": "%dev%",
"token_url": "https://dev.keycloak.example.com/token",
"authorization_url": "https://dev.keycloak.example.com/auth",
"client_id": "my-client-dev",
"client_secret": "",
"target_folder": "out",
"microcks_headers": true,
"read_only": false,
"has_scopes": true,
"application_token": true,
"number_of_scopes": 2
}
]
}

Global options

FieldTypeDefaultDescription
minimal_endpointsbooleanfalseGenerate only the base success TC per operation, skipping optional-parameter and wrong-body variants. Error TCs (401, 403, 404) and one 400 are still generated.
generate_oneOf_anyOfbooleanfalseWhen a request body uses oneOf/anyOf, generate a TC set per schema variant instead of using only the first.
examples.correctobjectValues used as valid inputs in success TCs and environment variables.
examples.wrongobjectValues used in 400 TCs to intentionally violate schema constraints.

Environment options

FieldTypeDefaultDescription
namestringEnvironment name in Insomnia and output filename suffix.
base_urlstring''Base URL of the API. Overridden if host_server_pattern finds a match.
host_server_patternstringSQL-LIKE pattern (% = wildcard) matched against the spec's servers[] list to pick the right URL automatically. Case-insensitive.
token_urlstringfrom specOAuth2 token endpoint. Overrides the value from the spec.
authorization_urlstringfrom specOAuth2 authorization endpoint.
client_idstring''OAuth2 client ID.
client_secretstring''OAuth2 client secret.
target_folderstring'.'Directory where the output YAML is written. Created if it does not exist.
microcks_headersbooleanfalseAdd X-Microcks-Response-Name header to every request, using the example name defined in the spec response.
read_onlybooleanfalseGenerate TCs only for GET operations.
has_scopesbooleanfalseDuplicate each 2xx TC for every configured token type (user scopes, application token).
application_tokenbooleanfalseInclude an application_token variant in scope clones. Requires has_scopes: true.
number_of_scopesinteger0Number of user token scopes to generate (user_token_scope_1user_token_scope_N).

Development

pnpm build # compile TypeScript → dist/
pnpm dev # compile in watch mode
pnpm test# run unit tests
pnpm typecheck # type-check without emitting

License

GNU Lesser General Public License v3.0

About

Node.js CLI that converts OpenAPI 3.0.x specs into ready-to-use Insomnia v5 collections

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages