CLI reference
The requestarium command runs your saved requests and collections from a terminal or a CI job, using the same engine as the app's Send button. This page lists every command and option. To connect an AI agent, see CLI & MCP.
Before you start
You need:
- Node.js 20.10 or later.
- The
requestariumcommand on your PATH. Install it from npm withnpm install -g @requestarium/cli, or run it without installing asnpx @requestarium/cli <command>. To update, runnpm install -g @requestarium/cli@latest. - A Requestarium account.
requestarium loginsigns you in through your browser; on a machine without a browser, such as CI, use a personal API token from Settings → API tokens in the app (see Account & security). Tokens start withtrt_.
Standalone binaries for macOS, Linux, and Windows, which need no Node.js, and a Homebrew formula are planned for a later release.
Check the install:
npm install -g @requestarium/cli
requestarium --version
requestarium --help
Quick start
# 1. Sign in once in your browser; the login is saved for later commands
requestarium login
# 2. Check the connection
requestarium status
# 3. See what you can run
requestarium collections
# 4. Send one request
requestarium run "Get user" --env Staging --var userId=42
# 5. Run a whole collection, stop at the first failure
requestarium run-collection "Users API" --env Staging --bail
Self-hosted servers
The CLI talks to Requestarium cloud (https://api.requestarium.com) unless you point it at another server:
requestarium login --token trt_… --api-url https://requestarium.mycompany.internal
Tokens belong to one server, so create the token in the app on the same server you sign in to. To switch for one command without changing the saved login, set the variable:
REQUESTARIUM_API_URL=https://requestarium.mycompany.internal requestarium run-collection "Users API" --env Staging
Naming things
Every command that takes a collection, folder, request, workspace, or environment accepts either its id or its name:
- Names are matched without regard to case:
"users api"finds Users API. - A request can also be named by its path in the collection:
"Auth/Login"or"Admin/Users/List users". - Quote names that contain spaces.
- If a name matches more than one item, the command stops and lists the ids. Use an id, or add
--collectionto narrow the search.
requestarium collections prints every id in square brackets.
Commands
login
Signs you in and saves the login, so later commands don't need it.
requestarium login [--api-url URL] [--workspace NAME] [--environment NAME] [--profile NAME]
requestarium login --token trt_… [--api-url URL] …
Without --token, login opens the Requestarium web app in your browser. Approve Connect Requestarium CLI there, and the CLI receives a personal API token named "Requestarium CLI on <your computer>". It shows up in Settings → API tokens, where you can revoke it. The CLI waits up to five minutes and prints the link in case the browser doesn't open.
| Option | Meaning |
|---|---|
--token | Save this API token instead of signing in through the browser. A token piped to standard input works too. |
--api-url | The API to use. Default https://api.requestarium.com; set a URL for a self-hosted server. |
--app-url | The web app to sign in at, when it isn't the API's address with api. replaced by app.. |
--no-open | Print the sign-in link instead of opening a browser, for example over SSH. Open it on any device where you're signed in to Requestarium. |
--paste | Ask for a token to paste instead of opening the browser. |
--workspace | Workspace to use by default. Without it, every workspace you can see is searched. |
--environment | Environment to use by default. |
--profile | Save the login under this name instead of the default one (see profiles). |
A token is checked against the API before it is saved. To keep it out of your shell history, pipe it in:
pbpaste | requestarium login
The login is saved to ~/.config/requestarium/config.json (%APPDATA%\requestarium\config.json on Windows), readable only by you.
logout
requestarium logout [--profile NAME] [--all]
Deletes the saved login of the current profile, or of every profile with --all. If REQUESTARIUM_TOKEN is set in your shell, it still applies. To also revoke the token, delete it in Settings → API tokens.
profiles
Keeps several logins side by side, for example one per account or per server.
requestarium login --profile work # save a second login named "work"
requestarium profiles # list saved logins; * marks the one in use
requestarium profiles use work # use "work" from now on
requestarium run-collection "Users API" --profile default # or pick one for a single command
Every command takes --profile NAME. REQUESTARIUM_PROFILE does the same for a shell or CI job. Without either, the CLI uses the profile chosen with profiles use, else default. A login saved by an older CLI is the default profile.
status
requestarium status
Shows the CLI version, API URL, which token is in use (only its first characters), your workspaces, how many collections you have, and the environments in each workspace. It exits with code 1 if the API can't be reached or rejects the token. doctor is the same command.
collections
requestarium collections [COLLECTION] [--workspace NAME]
Prints collections as a tree of folders and requests, with the method, URL, and id of each request. Name a collection to print only that one. ls is the same command.
Workspace: Main [workspace 6f1c…]
📁 Users API [collection 2b9e…]
📂 Auth [folder 81d0…]
POST Login {{baseUrl}}/login [request 4c7a…]
GET Get user {{baseUrl}}/users/{{userId}} [request 9e12…]
run
Sends one saved request.
requestarium run REQUEST [--collection NAME] [run options] [--quiet]
| Option | Meaning |
|---|---|
--collection | Look for the request only in this collection. Use it when names repeat. |
--quiet | Print the summary and tests, but not the response body. |
It also takes every run option.
Output:
✓ GET https://staging.example.com/users/42 → 200 OK in 84 ms · tests 2/2 passed · environment: Staging
✓ status is 200
✓ has an email
{"id":42,"email":"[email protected]"}
run-collection
Runs every request in a collection, or in one folder of it, in tree order: each folder's subfolders first, then its requests.
requestarium run-collection COLLECTION [--folder NAME] [--iterations N | --data FILE] [--delay MS] [--bail]
[--save-run] [--jira-on-failure PROJ] [run options]
| Option | Meaning |
|---|---|
--folder | Run only this folder, including its subfolders. |
--iterations N | Run the whole set N times, 1 to 100. Default 1. |
--data FILE | Run the whole set once per row of a CSV or JSON file, with the row's values as variables (see Data-driven runs). |
--delay MS | Wait this many milliseconds between requests, up to 60000. Default 0. |
--bail | Stop at the first request that fails or errors. |
--quiet | List only the requests that failed or errored, then the summary. |
--save-run | Save the run to the collection's run history (see Run history). |
--jira-on-failure PROJ | When the run fails, file a Jira issue in project PROJ or comment on the open one (see Jira on failure). Implies --save-run. |
--jira-issue-type NAME | Issue type for --jira-on-failure. Default Bug, else the project's first type. |
It also takes every run option. run-folder is the same command.
Values that a script sets with pm.environment.set(...) are passed to the requests after it in the same iteration, so a login request can hand its token to the rest. Each iteration starts fresh. These values are not saved to the environment.
✓ Users API/Auth/Login POST https://staging.example.com/login 200 · 112 ms
✓ logged in
✗ Users API/Get user GET https://staging.example.com/users/42 500 · 40 ms
✗ status is 200 — Expected 500 to equal 200.
✗ Users API: 1/2 requests passed, 1 failed, 0 errors · tests 1/2 passed · 160 ms · environment: Staging
Run options
run and run-collection share these options.
| Option | Meaning |
|---|---|
--env NAME | Environment to use. none runs without one. --environment also works. |
--var key=value | A variable value for this run only. Repeat it for several variables. |
--env-file FILE | Read variables from a dotenv file (KEY=value lines, # comments, quoted values). Repeat it for several files; later files win. Values are masked in reports. |
--env-var NAME | Take the variable NAME from the process environment, for example a CI secret. --env-var token=CI_TOKEN reads CI_TOKEN into the variable token. The run stops if the variable is not set. Values are masked in reports. |
--json | Print the full result as JSON instead of the summary (see JSON output). |
--out FILE | Also write the JSON report to FILE, while the terminal shows the summary. |
--junit FILE | Also write a JUnit XML report to FILE, for CI test views. |
--html FILE | Also write a self-contained HTML report to FILE: totals, then each request with its tests, headers, and response. Failed requests start expanded. |
--timeout MS | Timeout for every request, in place of the one the request, its folders, or the collection set. |
--aws-secret NAME | Fetch a secret from AWS Secrets Manager and use it as {{variables}} (see Secret managers). Repeat it for several secrets. Add --aws-region and --aws-profile when needed. |
--azure-vault URL | Use every secret of an Azure Key Vault, such as https://my-vault.vault.azure.net, as {{variables}}. |
--gcp-secret NAME | Use a Google Cloud Secret Manager secret as {{variables}}; NAME@5 pins version 5. Repeat it for several. Add --gcp-project ID; --gcp-project alone uses every secret of the project. |
--retries N | Send a request again, up to N times (0 to 10), when it can't be sent or gets 502, 503, or 504. Waits 1 second, then twice as long each time. Other responses, including 500, are not retried. |
--cookie-jar FILE | Load cookies from FILE and save the ones responses set back to it, so the next command continues the same session (see Cookies). |
--no-cookies | Don't store or send cookies. A Cookie header that the request sets itself is still sent. |
--verbose | Also print each request's method, URL and headers, the response status and headers, and script console output. run-collection also prints each response body, cut at 4,000 characters. Secrets are masked as in reports. |
--no-color | Print without colors. Colors are on in a terminal and off when output is piped or NO_COLOR is set; FORCE_COLOR=1 keeps them in CI logs that show colors, such as GitHub Actions. |
--no-github | Don't write the GitHub Actions job summary and annotations. |
--insecure | Don't verify TLS certificates, for every request. Use only against test systems. |
--proxy URL | Send requests through this HTTP proxy, for example http://user:pass@proxy:3128. |
--ca-cert FILE | Also trust the certificate authorities in this PEM file, for example your company's or a test CA. |
--cert FILE, --key FILE | Client certificate and private key (PEM) for mutual TLS. Add --key-passphrase if the key is encrypted. |
Where variables come from on the command line, later ones winning: --env-file, then --env-var, then --var.
runs
Shows saved runs (see Run history), newest first.
requestarium runs [COLLECTION] [--workspace NAME] [--limit N] [--json]
✗ 2026-11-01 10:01:04 Users API 48/50 passed ci main@d187326 env Staging https://github.com/acme/api/actions/runs/7
✓ 2026-10-31 18:22:40 Users API 50/50 passed cli feature/login@91ac2e0 env Staging
--limit is 1 to 100, default 20.
import
Creates a collection from a file made by another tool, or adds requests to one you have.
requestarium import FILE [--format auto|postman|openapi|requestarium|curl] [--name NAME] [--workspace NAME] [--dry-run]
requestarium import FILE --into COLLECTION [--folder PATH]
requestarium import --curl "curl https://api.example.com/users -H 'Accept: application/json'" --into "Users API"
| Format | What comes over |
|---|---|
| Postman Collection v2.0 / v2.1 | Folders, requests, headers, query parameters, raw / form / GraphQL bodies, bearer, basic, and API key auth, collection and folder variables, and pre-request and test scripts (pm.* scripts run as they are). |
| OpenAPI 3.x and Swagger 2.0, JSON or YAML | One request per operation, in a folder per tag. The server URL becomes the {{baseUrl}} collection variable, path parameters become {{name}}, bodies are filled from examples or the schema, and the security scheme becomes collection auth with {{bearerToken}}, {{apiKey}}, or {{username}}/{{password}}. |
| Requestarium JSON | Everything an export contains, including collection and folder settings. |
| A curl command | One request: method, URL and query, headers, body (-d, --data-raw, --data-urlencode, --json, -F), -u basic auth, and an Authorization: Bearer header as bearer auth. Paste it from your browser's Copy as cURL. |
The format is detected from the content. FILE can be - to read standard input. A new collection keeps the file's name, with (2) added when the name is taken; --name picks another. --folder puts everything under a folder: a folder's name or id, or a path such as Imported/Petstore from the collection root. Folders on that path that don't exist yet are created, so the same command can run again and lands in the same place. It works with --into and for a new collection. --dry-run shows what would be created, folders included. Anything that can't be carried over, such as file uploads or OAuth 2.0 settings, is listed after the import.
export
Writes a collection, or one folder of it, to standard output or a file.
requestarium export COLLECTION [--folder NAME] [--format requestarium|openapi3|swagger2] [--yaml] [--out FILE]
requestarium (the default) can be imported again, by the CLI or the app, with every setting. openapi3 and swagger2 describe the HTTP and GraphQL requests for other tools. --yaml, or an --out name ending in .yaml, writes YAML. Environment values are never exported.
publish-confluence
Publishes a collection's documentation to Confluence, the same page that Publish to Confluence on the collection's Overview uses. Run it in CI after a merge and the page stays in step with the collection.
requestarium publish-confluence COLLECTION [--folder NAME] [--space KEY] [--title TITLE] [--parent-page ID] [--no-bodies]
[--workspace NAME] [--dry-run] [--json]
| Option | Meaning |
|---|---|
--space KEY | Confluence space, by key, id, or name. Needed the first time; later publishes keep the page's space. A different space starts a new page there. |
--folder NAME | Publish only this folder (name, path such as Admin/Users, or id) as its own page. It is a separate page from the collection's. |
--title TITLE | Page title. Default: the current page's title, else the collection name ("Collection / Folder" for a folder). |
--parent-page ID | Put a new page under this page. |
--no-bodies | Leave request bodies out of the page. |
--dry-run | Show what would be published, and where, without publishing. |
The page lists every request in tree order with its folder path, method, URL, docs, and headers. Credential-looking header values are masked unless they are a {{variable}}. Publishing again adds a new version of the same page. A collection can have up to 500 requests on its page.
It needs the Confluence integration (Pro, Team, or Enterprise plan) connected by an organization admin in Settings → Integrations. The page is written as the connected Atlassian account.
requestarium publish-confluence "Users API" --space DOCS
# Published "Users API" in space DOCS: 12 requests, version 1.
# https://acme.atlassian.net/wiki/spaces/DOCS/pages/900
sync
Compares, pulls and pushes collections that are linked to a Git repository or a bucket (Git sync in the app).
requestarium sync status "Users API" # what a pull and a push would change
requestarium sync pull "Users API" # apply the repository's changes to the collection
requestarium sync push "Users API" --message "Add search endpoint"
requestarium sync push --all --check # CI: exit 1 when something was not pushed
COLLECTIONor--all(every linked collection of the workspace; unlinked ones are skipped).- A conflict (changed both in the collection and in the repository) fails the command with exit code 1, lists the
conflicting objects and changes nothing. --strategy ours keeps the collection's version of every conflict, --strategy theirs takes the repository's.
--checkchanges nothing:push --checkfails when there are changes that were not pushed,pull --checkwhen
there are changes that were not pulled, status --check on either.
--jsonprints one report with every collection'sstate,incoming,outgoing,conflictsandresult.- A push pulls incoming changes first, so the commit and the collection hold the same merged result.
Linking a collection, the sync history and restoring a version are done in the app.
snippet
Prints code that sends a saved request.
requestarium snippet REQUEST [--lang curl] [--collection NAME] [--env NAME] [--var key=value] [--raw] [--show-secrets]
Languages: curl, httpie, powershell, fetch, axios, python, go, java, kotlin, csharp, php, ruby. The request is built the way run sends it, with variables, inherited auth, and pre-request scripts, but nothing is sent. Secret values are shown as •••••• unless you add --show-secrets. --raw keeps the {{variables}} as saved.
env
Lists and edits environments.
requestarium env # environments and their variable names, * = secret
requestarium env show Staging [--show-secrets]
requestarium env set Staging baseUrl https://staging.example.com
requestarium env set Staging apiKey - --secret # "-" reads the value from standard input
requestarium env unset Staging apiKey
requestarium env create Staging [--group NAME] [--default] [--var key=value …] [--secret-var KEY]
env set keeps a secret variable secret when you change its value; --no-secret turns that off. Reading a value from standard input keeps it out of your shell history. Every command takes --workspace and --json.
cookies
Shows and clears the cookies saved in a cookie jar file (see Cookies).
requestarium cookies --cookie-jar cookies.json # domain, path, name, expiry; values masked
requestarium cookies list --domain api.example.com --show-secrets --cookie-jar cookies.json
requestarium cookies clear --cookie-jar cookies.json # every cookie
requestarium cookies clear --domain api.example.com [--name sid] --cookie-jar cookies.json
--domain also matches subdomains. Both commands take --json. REQUESTARIUM_COOKIE_JAR can stand in for --cookie-jar.
completion
Prints a tab-completion script for your shell.
requestarium completion bash >> ~/.bashrc
requestarium completion zsh > "${fpath[1]}/_requestarium"
requestarium completion fish > ~/.config/fish/completions/requestarium.fish
Open a new shell afterwards.
update
Checks the npm registry for a newer CLI and prints how to install it: npm install -g @requestarium/cli@latest, or brew upgrade requestarium for the standalone binary. --json prints current, latest, updateAvailable and command.
requestarium update
The CLI also checks by itself, at most once a day, and prints a one-line notice on stderr after a command when a newer version is out. It does this only at a terminal: never in CI (when CI is set), when output is piped, for --json, or for mcp and completion. Set REQUESTARIUM_NO_UPDATE_CHECK=1 to turn it off. The check sends no data about you, your account or your collections; it only reads registry.npmjs.org/@requestarium/cli/latest. The last answer is kept in update-check.json next to the saved login.
Data-driven runs
--data FILE runs the collection once per row of the file. Each row's values are variables for that pass, so {{userId}} in a URL or pm.environment.get("userId") in a script reads the current row.
CSV: the first line holds the column names. Values can be quoted, and quoted values can hold commas, quotes (""), and line breaks.
userId,expectedStatus
1,200
2,200
999,404
JSON: an array of objects. Numbers and booleans become text; nested values become JSON text.
[{ "userId": 1, "expectedStatus": 200 }, { "userId": 999, "expectedStatus": 404 }]
requestarium run-collection "Users API" --env Staging --data users.csv
A file can have up to 10,000 rows. Row values win over the environment, and --var wins over row values. Reports number each pass as an iteration. --data replaces --iterations, so pass only one of them.
Run history
--save-run sends the run's results to Requestarium, so you and your team can see how a collection did over time, wherever it ran. requestarium runs lists them.
requestarium run-collection "Users API" --env Staging --save-run
Each saved run records:
- The collection (and folder), environment, counts of passed, failed, and errored requests and tests, duration, and the CLI version.
- Where it ran:
ciorcli. In GitHub Actions, GitLab CI, CircleCI, Jenkins, Azure Pipelines, and Bitbucket Pipelines it also records the branch, the commit, and a link to the CI job. Elsewhere it takes the branch and commit from the git checkout in the current directory, if there is one. - Per-request results: status, timing, and test results. Response bodies are kept only for requests that didn't pass, cut to 2,000 characters. Request headers aren't sent, and secret values are masked as in every report.
Saving needs the same permission as sending requests. If the run can't be saved, the CLI says why on standard error and still exits with the run's own result.
Jira on failure
--jira-on-failure PROJ reports a failed run to Jira, so a broken API in CI becomes a tracked issue without anyone copying logs:
requestarium run-collection "Users API" --env Staging --jira-on-failure OPS
When the run fails (a request fails, errors, or has a failed test), the CLI saves the run (it implies --save-run) and then:
- If an earlier saved run of the same collection (and folder) on the same branch is linked to a Jira issue that is not done yet, it adds a comment to that issue with the new failures and links this run to it. A collection that keeps failing while someone fixes it does not open a new issue every time.
- Otherwise it files a new issue in project
OPS: a summary like "Users API: 2 of 10 requests failed", the environment, branch, commit and CI job, and the failed requests in a code block. The issue links back to the run in Requestarium, and the run shows the issue.
The issue type is Bug when the project has one, else the project's first type; --jira-issue-type Task picks another. A run that passes does nothing.
It needs the Jira integration (Pro, Team, or Enterprise plan) connected by an organization admin in Settings → Integrations, and an API token with write access to collections. The issue is created as the connected Jira account; the description names who ran it. Jira problems (plan, connection, unknown project) are printed on standard error and never change the exit code.
Secret managers
Requests can use secrets kept in AWS Secrets Manager, Azure Key Vault, or Google Cloud Secret Manager as ordinary {{variables}}. The CLI fetches them when a run starts, from your machine, with your own cloud sign-in. Requestarium never sees or stores your cloud credentials or the secret values, and the values are masked in reports, like secret environment variables.
Turn it on by adding these variables to an environment in the app (or with requestarium env set), so each environment can point at its own secrets:
| Variable | Meaning |
|---|---|
RQ_AWS_SECRET_NAME | Secret name or ARN. Separate several with commas. |
RQ_AWS_REGION | Region, such as eu-central-1. Defaults to the region in the ARN, then AWS_REGION or AWS_DEFAULT_REGION. |
RQ_AWS_PROFILE | AWS CLI profile to sign in with. Optional. |
RQ_AZURE_VAULT_URL | Vault URL, such as https://my-vault.vault.azure.net. Separate several with commas. |
RQ_GCP_PROJECT | Google Cloud project id. Defaults to GOOGLE_CLOUD_PROJECT, then the project of your credentials file. |
RQ_GCP_SECRET_NAME | Secret names, separated by commas; name@5 pins a version, otherwise the latest is used. Leave it out to use every secret of the project. |
Or pass them for one run: --aws-secret NAME, --aws-region, --aws-profile, --azure-vault URL, --gcp-secret NAME, and --gcp-project ID. Thunder Client's TC_AWS_SECRET_NAME, TC_AWS_REGION, and TC_AZURE_VAULT_URL work too, so environments brought over from Thunder Client keep working.
Which variables you get. An AWS secret that holds JSON key/value pairs, the usual kind, gives one variable per key: {"dbUser":"app","dbPassword":"…"} gives {{dbUser}} and {{dbPassword}}. A plain-text secret is one variable named after the secret. In Azure, every enabled secret of the vault becomes a variable named after it; Azure names can't contain _, so db-password is also available as {{db_password}}. In Google Cloud, each secret is a variable named after it, and a JSON secret gives one variable per key, as in AWS.
Signing in.
- AWS: keys in
AWS_ACCESS_KEY_IDandAWS_SECRET_ACCESS_KEY(andAWS_SESSION_TOKEN) are used when set, as in most CI jobs. Otherwise the CLI asks the AWS CLI v2 for your current credentials, soaws sso login, profiles, and roles all work. The identity needssecretsmanager:GetSecretValueon the secret, andkms:Decryptif it uses a customer-managed key. - Google Cloud: a token in
GOOGLE_OAUTH_ACCESS_TOKEN, or a service account key or user credentials file inGOOGLE_APPLICATION_CREDENTIALS, is used when set. Otherwise the CLI asksgcloudfor a token, sogcloud auth loginworks, and so does workload identity federation set up bygoogle-github-actions/auth. The identity needs the Secret Manager Secret Accessor role; using every secret of a project also needs permission to list them, such as Secret Manager Viewer. - Azure: a service principal in
AZURE_TENANT_ID,AZURE_CLIENT_ID, andAZURE_CLIENT_SECRETis used when set. Otherwise the CLI uses youraz loginsession. The identity needs the Key Vault Secrets User role, or Get and List secret permissions in the vault's access policy.
In GitHub Actions, sign in with aws-actions/configure-aws-credentials, azure/login, or google-github-actions/auth before the run step; no secret values have to be copied into GitHub.
Values from a secret manager win over the environment's own values. A data file row, values set by scripts, and --var win over them. Secrets are fetched once per run; the MCP server keeps them for five minutes.
Cookies
Requests handle cookies the way a browser does. When a response sets a cookie (Set-Cookie), the CLI keeps it and sends it with the later requests that match it. That way, a login request followed by requests that need the session works with no extra steps.
- Scope. By default the cookie jar lasts for one command: every request of a
run-collectionshares it. Add--cookie-jar FILEto load cookies from a file and save new ones to it, so the next command continues the session. The file holds session tokens, so it is written readable only by you (mode 600). Keep it out of Git. - Matching. Cookies follow the browser rules (RFC 6265): domain and subdomains, path,
Secure(sent only over https and to localhost),Max-AgeandExpires,__Host-and__Secure-prefixes. A response withMax-Age=0deletes the cookie. - Redirects. A cookie that a redirect sets (a login that answers
302withSet-Cookie) is kept and sent to the next hop.Authorizationis not passed on to another origin. - Your own Cookie header. A
Cookieheader that the request sets is sent too. When it and the jar have a cookie with the same name, the request's value wins. - Reports. Cookie values are masked:
CookieandSet-Cookieheaders show••••••. - Turn off.
--no-cookiesdoesn't store or send cookies.
In scripts, these work like in Postman:
pm.cookies.get('sid'); // the value of a cookie sent to this request's URL
pm.cookies.has('sid');
pm.cookies.toObject(); // { sid: '…', theme: 'dark' }
pm.response.cookies.get('sid'); // cookies this response set
const jar = pm.cookies.jar();
jar.set('https://api.example.com', 'lang', 'uk');
jar.get('https://api.example.com', 'lang');
jar.getAll('https://api.example.com');
jar.unset('https://api.example.com', 'lang');
jar.clear('https://api.example.com');
Jar methods work right away and return their result. They also take an optional Postman-style (error, result) callback. The Thunder Client-style pm.getCookies(url), pm.setCookie(url, name, value) and pm.clearCookies(url, name) work too; they return a Promise, but the change applies immediately.
How a run works
A run does what the app does when you click Send:
- Variables resolve in this order, later ones winning: collection variables, folder variables (outer to inner), the environment, secret managers, a
--datarow, values set by scripts earlier in the run, then the command line (--env-file,--env-var,--var). Dynamic variables such as{{$guid}},{{$timestamp}}, and{{$randomEmail}}work too. - Auth and timeout are inherited from the nearest folder or the collection when the request is set to inherit.
- Pre-request scripts run: the collection's, then each folder's, then the request's.
- If any
{{variable}}is still unresolved, the request is not sent and is reported as an error, unless the request's "resolve variables before send" option is off. - The request is sent from your machine, so
localhost, docker-compose, and VPN hosts work. - Test scripts run in the same order. Each
pm.test(...)is reported as passed or failed.
See Scripts for the pm API and Environments for variables.
A request passes when all of its tests pass. A request with no tests passes when the status code is below 400. It is an error when it couldn't be sent (bad URL, unresolved variable, host unreachable, timeout, script error).
Settings
Environment variables override the saved login, so one machine can use different settings per shell or CI job.
| Variable | Meaning | Default |
|---|---|---|
REQUESTARIUM_TOKEN | API token (trt_…). | Saved login |
REQUESTARIUM_PROFILE | Saved login to use, like --profile. | profiles use, else default |
REQUESTARIUM_APP_URL | Web app for browser sign-in, like --app-url. | The API's app. address |
REQUESTARIUM_API_URL | API URL. | Saved login, else https://api.requestarium.com |
REQUESTARIUM_WORKSPACE | Default workspace name or id. | All workspaces |
REQUESTARIUM_ENVIRONMENT | Default environment name or id; none for no environment. | The workspace's default environment |
REQUESTARIUM_ORGANIZATION_ID | Organization id, only if it can't be read from the token. | From the token |
REQUESTARIUM_TIMEOUT_MS | Timeout when the request, its folders, and its collection set none. | 30000 |
REQUESTARIUM_SCRIPTS | off skips pre-request and test scripts. | On |
REQUESTARIUM_COOKIE_JAR | Cookie jar file, like --cookie-jar; also used by requestarium mcp. | Cookies last one command |
REQUESTARIUM_MCP_TOKEN | Bearer token for requestarium mcp --http, at least 16 characters. | A random token printed at start |
REQUESTARIUM_NO_UPDATE_CHECK | 1 turns off the daily check for a newer CLI (see update). | Check at a terminal, not in CI |
REQUESTARIUM_CONFIG | Path of the saved-login file. | ~/.config/requestarium/config.json |
REQUESTARIUM_INSECURE | 1 is the same as --insecure. | Verify certificates |
REQUESTARIUM_PROXY | Same as --proxy. | HTTPS_PROXY / HTTP_PROXY |
REQUESTARIUM_CA_CERT | Same as --ca-cert. | Built-in CAs only |
REQUESTARIUM_CLIENT_CERT, REQUESTARIUM_CLIENT_KEY, REQUESTARIUM_CLIENT_KEY_PASSPHRASE | Same as --cert, --key, --key-passphrase. | No client certificate |
HTTPS_PROXY, HTTP_PROXY, NO_PROXY | Standard proxy settings, used when no proxy is given. | No proxy |
Proxy and TLS settings apply to the requests the CLI sends for you, not to its own calls to the Requestarium API. A request whose Validate TLS certificates setting is off skips the check for that request only.
Which environment a run uses: --env, else REQUESTARIUM_ENVIRONMENT or the one saved by login, else the workspace's default environment, else none.
Exit codes
| Code | When |
|---|---|
0 | Every request passed. Also status when the setup works. |
1 | A request failed, errored, or had a failed test; the API could not be reached or rejected the token; or a name, option, or command was wrong. For sync: open conflicts, a failed --check, or a collection that could not be synced. |
Use in CI
Create a dedicated API token for CI, store it as a secret, and pass it as REQUESTARIUM_TOKEN. No login step is needed.
GitHub Actions
name: API tests
on: [push, pull_request]
jobs:
api-tests:
runs-on: ubuntu-latest
permissions:
contents: read
checks: write # for the test report step
steps:
- uses: actions/setup-node@v4
with:
node-version: 22
# Install the requestarium command here (see "Before you start").
- name: Smoke tests
env:
REQUESTARIUM_TOKEN: ${{ secrets.REQUESTARIUM_TOKEN }}
API_KEY: ${{ secrets.STAGING_API_KEY }}
run: |
requestarium run-collection "Users API" --env Staging --env-var API_KEY \
--junit results.xml --html report.html --out report.json --save-run
- uses: dorny/test-reporter@v1
if: always()
with:
name: API tests
path: results.xml
reporter: java-junit
- uses: actions/upload-artifact@v4
if: always()
with:
name: api-report
path: |
results.xml
report.html
report.json
Inside GitHub Actions the CLI also writes a table of results to the job summary and marks each failed request with an error annotation. Add --no-github to turn that off.
GitLab CI
api-tests:
image: node:22
script:
# Install the requestarium command here.
- requestarium run-collection "Users API" --env Staging --junit results.xml --out report.json
artifacts:
when: always
paths: [results.xml, report.json]
reports:
junit: results.xml
Set REQUESTARIUM_TOKEN as a masked CI/CD variable in the project settings. GitLab then shows the JUnit results on the merge request.
Bitbucket Pipelines
The Requestarium pipe runs a collection without installing anything, puts the JUnit results on the pipeline's Tests tab, and saves the run with a link back to the pipeline:
pipelines:
default:
- step:
name: API tests
script:
- pipe: docker://ghcr.io/nicktaporuk/requestarium-bitbucket-pipe:0.6.0
variables:
REQUESTARIUM_TOKEN: $REQUESTARIUM_TOKEN
COLLECTION: "Users API"
ENVIRONMENT: "Staging"
ENV_VARS: "API_KEY" # used as {{API_KEY}}, masked in reports
API_KEY: $STAGING_API_KEY
JIRA_PROJECT: "OPS" # optional: file a Jira issue when it fails
Set REQUESTARIUM_TOKEN as a secured repository variable. The pipe also takes FOLDER, WORKSPACE, JIRA_ISSUE_TYPE, SAVE_RUN (default true), BAIL, ITERATIONS, DATA_FILE, TIMEOUT_MS, RETRIES, JUNIT_FILE (default test-results/requestarium.xml), HTML_REPORT, JSON_REPORT, API_URL, and EXTRA_ARGS for any other run-collection option. The step fails when the run fails.
JUnit report
--junit FILE writes one test suite per request run and one test case per pm.test. A request without tests gets one case that checks the status code is below 400, and a request that couldn't be sent is reported as an error. Jenkins, GitLab, Azure DevOps, CircleCI, and GitHub test-report actions all read this format.
JSON output
run --json prints one request result. run-collection --json prints a report with a results list of request results. --out FILE writes the same JSON to a file.
Every JSON report starts with these fields:
| Field | Meaning |
|---|---|
schemaVersion | Version of this format, now 1. It changes only when a field is removed or changes meaning; new fields can be added at any time. |
kind | request for run, collection for run-collection. |
generatedAt | When the report was written, as an ISO 8601 time. |
Request result:
| Field | Meaning |
|---|---|
requestId, name, path | Which request ran; path is Collection/Folder/Request. |
status | passed, failed, or error. |
method, url | What was sent, with secrets masked (secret environment values and --env-file / --env-var values). |
requestHeaders | Headers sent; Authorization, Cookie, and API key values are masked. |
statusCode, statusText, durationMs | The response status and how long it took. statusCode is 0 when nothing was received. |
response | headers, body, sizeBytes, and truncated (bodies over 10 MB are cut). |
tests | One { name, passed, detail } per pm.test. |
console | Script console.log output. |
missingVariables | {{variables}} that had no value. |
variablesSet | Variables the scripts set, passed to later requests in a run. |
warnings | Things the CLI could not apply, such as an unsupported auth type. |
attempts | How many times the request was sent, when --retries sent it more than once. |
error | { code, message } when the request errored, for example unreachable, timeout, unresolved_variables, pre_request_script_failed. |
Collection report:
| Field | Meaning |
|---|---|
target | Collection, or Collection/Folder. |
environment | Environment name, or none. |
iterations, total, passed, failed, errors | Counts across all iterations. |
tests | { passed, failed } across all requests. |
durationMs | Wall time of the run. |
stoppedEarly | true when --bail stopped the run, or it was cancelled. |
results | Request results, each with an iteration number (the data row with --data). |
savedRun | { id } of the saved run, with --save-run. saveRunError says why it couldn't be saved. |
Example: list the failed requests with jq:
requestarium run-collection "Users API" --json | jq -r '.results[] | select(.status != "passed") | "\(.path): \(.error.message // .statusCode)"'
Security
- The saved login file holds your token. It is created readable only by you; don't commit it.
- Request reports and snippets mask secret environment values, values from secret managers,
--env-fileand--env-varvalues, and credential headers, but response bodies are printed as received. Be careful when you share CI logs. - Scripts are JavaScript and run on your machine with your permissions. Run only collections you trust, or set
REQUESTARIUM_SCRIPTS=off. - Revoke a token any time in Settings → API tokens; the CLI then stops working until you sign in again.
Troubleshooting
| Message | What to do |
|---|---|
Requestarium is not signed in | Run requestarium login, or set REQUESTARIUM_TOKEN. |
The browser doesn't open on login | Open the printed link yourself, or use --no-open. On a server, use --token. |
No profile "…" | Check requestarium profiles, or create it with requestarium login --profile …. |
the run was not saved: … | The run itself finished; check the message. Saving needs permission to send requests in that workspace. |
The Requestarium API rejected the token | The token was revoked or expired. Create a new one and sign in again. |
Can't reach the Requestarium API at … | Check --api-url / REQUESTARIUM_API_URL and your network. |
No collection "…" or No request "…" | Check the name with requestarium collections, or use the id. |
"…" matches 2 requests | Add --collection, use the Folder/Request path, or use the id. |
Missing variables: {{…}} | Add the variable to the environment, pick another --env, or pass --var name=value. |
| A self-signed certificate error | Pass --ca-cert with your CA's PEM file, or --insecure against test systems only. |
Could not get AWS credentials | Run aws sso login, set AWS_PROFILE or RQ_AWS_PROFILE, or set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY. |
AWS Secrets Manager refused "…" | Check the secret name and region, and that your identity may read it. |
Could not get an Azure Key Vault token | Run az login, or set the AZURE_TENANT_ID, AZURE_CLIENT_ID, and AZURE_CLIENT_SECRET of a service principal. |
Azure Key Vault … answered 403 | Give your identity the Key Vault Secrets User role on the vault. |
Could not get a Google Cloud token | Run gcloud auth login, or set GOOGLE_APPLICATION_CREDENTIALS to a service account key file. |
Google Cloud Secret Manager refused … (403) | Give your identity the Secret Manager Secret Accessor role, or name the secrets in RQ_GCP_SECRET_NAME instead of listing them all. |
--env-var NAME: NAME is not set | The CI secret or shell variable is missing. Check its name and that the job passes it in env. |
Limits
- Plan limits apply the same way as in the app. The Free plan has up to 3 collections, up to 30 requests in each collection, and up to 3 environments, and keeps 7 days of run history. When a limit is reached, the command stops with a message naming the limit. Sending requests and running collections, in the CLI, in CI or through MCP, is never limited.
- HTTP and GraphQL requests only. Run gRPC, WebSocket, Kafka, MQTT, RabbitMQ, and NATS requests in the app.
- Binary bodies and file uploads are not sent.
- Digest, NTLM, and AWS auth are not applied yet; the run reports a warning. Use
--certand--keyfor mutual TLS. importdoesn't bring over file uploads, OAuth 2.0 and other auth types besides bearer, basic, and API key, or Postman environments (create them withrequestarium env create).