Importing & exporting
Tiger can import collections from Postman, Insomnia, Bruno, OpenAPI 3 / Swagger 2, WSDL / SOAP, and pasted curl commands. It can also export a collection back to Postman v2.1 or OpenAPI 3.0, so you can share with teammates who use other tools.
Supported formats
| Format | Import | Export | Notes |
|---|---|---|---|
Postman v2.0 / v2.1 .json, environments and globals |
Yes | Yes (v2.1) | Auth, scripts and {{variables}} carry over; see the matrix below |
Insomnia v4 .json / .yaml and v5 .yaml |
Yes | No | Environments, folder auth and scripts carry over |
Bruno folder of .bru files |
Yes | No | Open the folder; each .bru file becomes a request |
OpenAPI 3 / Swagger 2 .json / .yaml |
Yes | Yes (OpenAPI 3.0) | Operations grouped by first tag or path segment |
WSDL / SOAP .wsdl / .xml |
Yes | No | New in 0.4.0 - each binding operation becomes a POST |
| curl command (paste) | Yes | Yes | Export is single-request code generation, not a file |
How to import
All importers share the same entry point. Open the Import dialog from the sidebar (the arrow-into-box icon next to "Collections") or from the welcome screen. Then choose one of the sources below.
Faster still: drop an export file, several files, or a folder anywhere on the Tiger window. Tiger works out which tool each file came from. Drop a Postman collection together with its environment exports and you get one collection with those environments. Drop a Bruno collection folder and it is read as a whole.
The import report
After every import Tiger shows a short report: how many requests, folders and environments
came in, and a list of anything that only partly mapped. Each entry names the request (and
its folder) and says in plain words what to check, for example a file upload whose file lives
on another machine, or a script that calls pm.sendRequest. Nothing is thrown
away: unsupported pieces are kept as they were and flagged.
Switching from Postman, Insomnia or Bruno
On first launch the home screen has an import card per tool, each with a hint on where to find the export. Here is what carries over.
| What you have | Postman | Insomnia | Bruno |
|---|---|---|---|
| Requests, folders, method, URL, query, headers | Yes | Yes | Yes |
| Disabled headers and params | Yes | Yes | Yes |
| JSON, text, XML, form and GraphQL bodies | Yes | Yes | Yes |
| Multipart form-data with files | Yes (check the file paths exist) | Yes | Yes |
| Binary file body | Flagged | Flagged | Not in Bruno |
Path variables such as /users/:id |
Yes, the value is written into the URL | Yes | Yes |
| Collection auth | Yes | Not in Insomnia | Yes (collection.bru) |
| Folder auth, inherited by nested folders | Yes | Yes | Yes (folder.bru) |
| Bearer, Basic, API key, OAuth 2 client credentials | Yes | Yes | Yes |
| Digest, AWS, NTLM, OAuth 1, other OAuth 2 grants | Flagged, set to no auth. A saved OAuth 2 token becomes Bearer | Flagged | Flagged |
| Environments | Yes, with secret and disabled values | Yes, sub environments merged over the base | Yes |
| Nested environment JSON | Not in Postman | Yes, as dotted names like {{api.url}} |
Not in Bruno |
| Collection variables | Yes, added to every imported environment | Not in Insomnia | Yes, added to every imported environment |
| Globals | Yes, as an environment named Globals | Not in Insomnia | Not in Bruno |
| Folder variables | Not in Postman | Flagged | Flagged |
| Collection and folder headers | Not in Postman | Not in Insomnia | Yes, copied into each request |
| Pre-request and test scripts | Yes through the pm.* layer |
Yes (insomnia.*) |
Yes (bru, res, req) |
| Collection and folder scripts | Yes, copied into each request | Yes, copied into each request | Yes, copied into each request |
| Declarative assertions | Not in Postman | Not in Insomnia | Yes, converted to tests where the operator maps |
pm.sendRequest, cookies, require(), CryptoJS, async code |
Flagged, kept | Flagged, kept | Flagged, kept |
| Dynamic variables | Yes: $guid, $timestamp, $isoTimestamp, $randomInt, $randomUUID. Faker ones are flagged |
Yes: {% uuid %}, {% now %}. Other tags are flagged |
Same as Postman |
| gRPC and WebSocket requests | Not in exports | Flagged, skipped and counted | Not supported |
Postman (v2.0 / v2.1)
In Postman, open the ... menu next to the collection, choose Export and keep Collection v2.1. Export environments the same way from Environments, and globals from the globals page. Pick all the files together in Tiger (or drop them on the window). Tiger reads both the v2.0 and v2.1 schema variants.
- Collection auth becomes the Tiger collection auth, folder auth becomes folder auth, and
requests set to "inherit" inherit through nested folders like they do in Postman.
noauthbecomes an explicit "no auth". - Postman has several variable scopes; Tiger has one, the active environment. Collection variables are added to every imported environment (the environment value wins), or become an environment named "<collection> variables" when there is none. Globals become an environment named Globals. The first imported environment is selected for you.
- Collection and folder scripts are copied into each request below them, outermost first, because Tiger runs scripts per request.
- Path variables (
/users/:id) are resolved into the URL. One without a value becomes{{id}}so you can set it in an environment. - Descriptions become request, folder and collection notes. Saved response examples are not imported.
Scripts written for Postman
Tiger runs Postman scripts through a compatibility layer. It covers pm.test,
pm.expect with the common Chai assertions (equal, eql,
a/an, include, property,
lengthOf, above/below, match,
oneOf, empty, not and friends),
pm.response (code, status, json(),
text(), headers, responseTime,
to.have.status, to.have.header, to.be.ok),
pm.environment, pm.variables, pm.collectionVariables,
pm.globals, pm.request (read it, and add or remove headers from a
pre-request script), pm.info, and the legacy tests[...],
responseBody, responseCode and
postman.setEnvironmentVariable. Insomnia's insomnia.* API is the
same layer.
Not supported: pm.sendRequest, pm.cookies, pm.vault,
require() of libraries such as lodash or CryptoJS, asynchronous code, and flow
control (setNextRequest is skipped, the runner goes in order). The import report
lists every request that uses one, and the script is kept so you can adapt it.
Insomnia (v4 and v5)
In Insomnia, open the ... menu of the collection (or Preferences, then Data) and choose Export. The JSON and YAML exports both work, including the newer v5 YAML collection files. Choose Insomnia in Tiger and pick the file.
{{ _.name }}becomes{{name}}. Nested environment JSON is flattened to dotted names, so{{ _.api.url }}becomes{{api.url}}and resolves against the imported environment.- Each sub environment is merged over the base environment. Private environments are imported too.
{% uuid %}and{% now %}become Tiger dynamic variables. Other template tags (response,prompt,base64, ...) are kept as text and flagged.- Folder auth and folder scripts carry over; folder variables are flagged.
Bruno
Nothing to export: choose Bruno and pick the collection folder, the one that
holds bruno.json (or drop it on the window). Tiger walks it recursively.
bruno.jsongives the collection name,folder.brugives folder names.collection.bruandfolder.bruauth become collection and folder auth. Their headers and scripts are copied into each request below them.- Request auth follows the
auth:mode, includinginheritandnone. params:query,params:path, multipart files (@file(...)), scripts,testsanddocscarry over. Theassertblock becomes equivalent tests where the operator maps.- Environments come from
environments/*.bru. Bruno never writes secret values to disk, so the report lists the secret names to fill in.
OpenAPI 3 / Swagger 2
Tiger accepts OpenAPI 3.x and Swagger 2.0 documents in both JSON and YAML. Choose OpenAPI / Swagger, pick the spec file, and click Import.
What Tiger does with the spec:
- Each
path + methodcombination becomes one request. - Requests are grouped into folders by their first
tag. If an operation has no tags, the first segment of the path is used as the folder name. - The operation's
summaryoroperationIdbecomes the request name. - Query and header parameters are populated from the spec; if the parameter carries
an
examplevalue (or a schema-level example), it is used as the default. - For requests that include a
requestBodywith anapplication/jsoncontent type, the body is pre-filled with the example if one exists, or an empty{}object otherwise. - The base URL comes from the first entry in
servers(OpenAPI 3) or fromscheme + host + basePath(Swagger 2). If neither is present, Tiger uses{{baseUrl}}so you can set it in an environment.
After importing an OpenAPI spec, create an environment with a baseUrl
variable pointing at your server. All imported requests will pick it up via
{{baseUrl}} interpolation.
curl (paste)
Copy a curl command from a terminal, browser DevTools, or API docs, then choose Paste a curl command in the import dialog and paste it in. Tiger parses common flags including:
-X/--request- HTTP method-H/--header- request headers (one per flag)-d/--data/--data-raw/--data-binary- request body-u/--user- Basic auth credentials- The bare URL (with or without
--url)
If the body starts with { or [, or the Content-Type
header contains json, Tiger sets the body type to JSON automatically.
Otherwise the body is imported as plain text.
Multipart (-F) flags are recognized and skipped cleanly; their values will
not pollute other fields. Line continuations (\ at end of line) are handled,
so multi-line DevTools curl exports paste without modification.
Curl import creates a single request, not a collection. After importing you can drag it into any open collection folder from the sidebar.
WSDL / SOAP import New in 0.4.0
WSDL import converts a SOAP service description into a set of Tiger requests - one per binding operation - ready to fill in and send. Both SOAP 1.1 and SOAP 1.2 are supported.
How to import a WSDL file
- Open the Import dialog from the sidebar.
- Choose WSDL / SOAP.
- Pick your
.wsdlor.xmlfile. - Click Import. Tiger creates a collection named after the
<service>element (or thedefinitionsroot name as a fallback). Each binding operation appears as a separate request inside it.
What each imported request looks like
For every <operation> inside a <binding>, Tiger
generates a POST request with:
-
URL - the service endpoint extracted from the
<soap:address location>attribute. If no address is found, the URL is set to{{baseUrl}}. - Body (XML) - a SOAP envelope skeleton with the correct namespace for the protocol version and a placeholder element for the operation's input message. Fill in the element's children to complete the call.
-
Headers - set automatically based on the protocol version:
-
SOAP 1.1:
Content-Type: text/xml; charset=utf-8plus aSOAPActionheader whose value is quoted as required by WS-I Basic Profile (e.g."urn:GetWeather"). -
SOAP 1.2:
Content-Type: application/soap+xml; charset=utf-8, with the action folded in as a parameter (; action="urn:GetWeather") per RFC 7230.
-
SOAP 1.1:
Example skeleton for a SOAP 1.1 GetWeather operation:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tns="http://www.webserviceX.NET">
<soap:Body>
<tns:GetWeather>
<!-- fill in fields -->
</tns:GetWeather>
</soap:Body>
</soap:Envelope>
The matching headers generated for this request:
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://www.webserviceX.NET/GetWeather"
Tiger detects whether a binding uses SOAP 1.2 by checking the namespace URI on the
<soap:binding> child element. Namespaces are resolved per-binding,
so a single WSDL that mixes SOAP 1.1 and 1.2 bindings will produce requests with
the correct Content-Type for each.
Deep XSD-to-sample expansion is not performed. The envelope body is a skeleton showing the top-level request element; you fill in the child fields. Complex types, arrays, and optional elements are not pre-populated.
Exporting
Postman v2.1
Right-click any collection in the sidebar and choose Export → Postman v2.1.
Tiger writes a .json file that:
- Recreates the full folder hierarchy as nested Postman item groups
- Converts each Tiger body type - JSON, XML, text, GraphQL, form - to its Postman equivalent
- Embeds the currently active environment's variables as collection-level variables, so the exported file is self-contained
The exported file is valid for direct import back into Tiger, Postman, or any tool that accepts the Postman v2.1 schema.
OpenAPI 3.0
Right-click a collection and choose Export → OpenAPI 3.0.
Tiger produces an openapi.json file where:
- Each request becomes an operation under its URL path (with the base URL or
{{variable}}prefix stripped to leave a clean path) - Query parameters and headers become OpenAPI
parametersobjects withexamplevalues taken from the request - Request bodies are exported with the correct content type:
application/json,application/xml,text/plain, orapplication/x-www-form-urlencoded - The request name becomes the operation
summaryandoperationId(sanitized to a valid identifier) - Free-text documentation added to a request in Tiger becomes the operation
description
OpenAPI export is a useful way to generate a machine-readable contract from a collection you built by hand. Import it into tools like Stoplight, Redocly, or your CI pipeline's schema linter.
curl and fetch (single request)
From any open request, click the Code snippet tab to generate a curl command
or a JavaScript fetch snippet for that single request. Variable references
are interpolated using the active environment before the snippet is rendered.
After importing
An imported collection opens in the sidebar straight away, ready to send. Once imported:
- Open a terminal in the collection folder and run
git init(or use Tiger's built-in Git panel) to start version-controlling it. - Add an environment with the base URL and any secrets the requests need - see Environments.
- Use
{{variable}}references to replace hard-coded hostnames and tokens - see Variables. - Rename, move, and organize requests in the sidebar using drag-and-drop or double-click to rename.