Reqora — API Testing in VS Code

Bruno/Postman-compatible API testing, right inside VS Code. REST, GraphQL, SOAP, OData, WebSocket with all auth types, environments, credentials, scripts, history, collection runner, load testing — with Git-friendly files.
No separate app. No sync account. Your collections live in your workspace.
Why Reqora?
- Stays in VS Code — activity bar view, request editor, response viewer, WebSocket playground
- Git-friendly — collections are plain
.bru files + collection.json
- Import anything —
.bru, Postman v2.1, OpenAPI / Swagger (JSON + YAML), cURL
- Export anywhere — Postman, cURL, and generated code in 20 languages, each handling the response
- Full auth — Basic, Bearer, Digest, OAuth 1.0 / 2.0, API Key, AWS SigV4, NTLM, Hawk, WSSE, mTLS
- SAP-ready — BAS destinations (
*.dest) with automatic auth, XSUAA service-key import
Quick start
- Install Reqora from the Marketplace
- Open a folder in VS Code
- Activity bar → Reqora →
+ → New Collection
+ → New Request, pick method + URL, press Send ▸ (or Ctrl+Enter)
- Switch environment via status bar
$(symbol-variable) dev
Views
All under activity bar → Reqora:
- Collections — folders + requests on disk, with request counts. Hover a request → ▶ Send. Right-click a collection/folder → Run Collection.
- Environments — click to activate;
{{variables}} work in URL/headers/body/auth. Active env is marked green.
- History — recent status/time, hover → Re-run. Snapshots let any entry run again.
- Credentials — secrets in your OS keychain (never on disk), usable as
{{cred.name}}.
Request editor
Method/URL, Params, Headers, Auth, Body, GraphQL, OData, SOAP, Pre-request, Tests, Docs, Variables + live Response (Body / Headers / Cookies / Tests / Timeline).
- Variables tab — every available
{{name}} with click-to-copy.
- Response tools — Save to file, Copy body, JSONPath eval (
$.store.book[0].title) + copy.
Auth
| Type |
Notes |
| No Auth / Inherit |
Inherit from collection.json |
| Basic / Bearer / Digest |
Digest auto-retries 401 challenge |
| OAuth 1.0 |
HMAC signing |
| OAuth 2.0 |
auth_code / client_credentials / password / implicit + refresh + “Get New Access Token” |
| API Key |
header / query / cookie |
| AWS SigV4 |
accessKey / secret / region / service |
| NTLM |
Type1→Type3 handshake |
| Hawk / WSSE / mTLS |
incl. client cert paths |
Environments, variables & credentials
environments/*.env.json:
{
"name": "dev",
"variables": { "baseUrl": "https://api.example.com", "token": "abc" }
}
Use {{baseUrl}}/users, {{token}}. Dynamic vars {{$guid}}, {{$timestamp}}, {{$randomEmail}}, process.env.*.
Credentials (+ in the Credentials view): token / basic / API key, stored in the OS keychain:
{{cred.github-token}} → secret value
{{cred.db-user.username}} → basic username
- Right-click → Use in Active Request fills the editor's Auth tab automatically.
SAP BAS destinations
Running in Business Application Studio? Use maintained destinations directly — no credentials needed, auth is injected automatically:
- URL:
https://ghd005.dest/sap/opu/ets_entityt, or
- Variable:
{{dest.ghd005}}/sap/opu/ets_entityt
Reqora routes through the workspace proxy exactly like terminal curl, and the Timeline shows Destination: ghd005 (auth injected by the destination service).
XSUAA service keys: Credentials view → Import → pick the .json service key. Client id, client secret (keychain) and token URL are extracted; use {{cred.name.username}}, {{cred.name}}, {{cred.name.tokenUrl}} in OAuth2 client_credentials, or one-click Use in Active Request.
Import / Export
- Import
.bru / Postman v2.1 / OpenAPI 3.x + Swagger 2.0 (JSON/YAML, tags become folders, examples become bodies)
- Export Postman, Copy as cURL
- Copy as Code (right-click request): cURL, JavaScript, TypeScript, Node.js, SAP CAP, Python, Java, Kotlin, C#, Go, Ruby, PHP, Rust, Swift, Dart, C, R, PowerShell, ABAP — every snippet sends the request and handles the response (status check, JSON parse, error branch). The CAP snippet calls through your BTP destination.
Run, load test, WebSocket
- Run Collection (right-click collection/folder): every request in order with scripts, PASS/FAIL per request, summary +
Reqora output channel.
- Run with Load (right-click request): 1–50 virtual users, 10s–5min, live progress + cancel. Reports throughput (rps), min/avg/p50/p95/p99 latency, error breakdown.
- WebSocket Playground (Command Palette →
Reqora: Open WebSocket Playground): connect with subprotocols, send messages (Ctrl+Enter), live ▲/▼ frame log. URL supports {{variables}}.
Scripts
Pre-request + post-response, Bruno-style and Postman-style:
// pre-request
bru.setVar("ts", Date.now().toString());
// tests
bru.test("status 200", () => {
if (res.status !== 200) throw new Error("got " + res.status);
});
pm.test("has id", () => {
pm.expect(pm.response.json()).to.have.property("id");
});
5s sandbox timeout.
OData
- Set URL to service root, e.g.
https://services.odata.org/V4/TripPinServiceRW
- Body mode
odata → entitySet / filter / select / expand / top / skip / count
- Load $metadata lists EntitySets; full explorer:
Open OData $metadata Explorer
Settings
Reqora section in VS Code settings:
reqora.timeout (30000) — request timeout ms
reqora.insecure (false) — skip TLS verification
reqora.followRedirects (true)
reqora.maxRedirects (5)
reqora.historyLimit (100)
reqora.collectionsRoot ("") — subfolder to scan, empty = workspace root
File layout
<workspace>/
my-api/
collection.json
environments/dev.env.json
requests/
get-todos.bru
users/create-user.bru
.bru = Bruno-dialect text, safe for git. Also reads .req.json.
Requirements
- VS Code
^1.85.0
- Open a folder/workspace (needed for collections)
Support
Dev (from source)
npm install
npm run compile
- Press
F5 (Run Extension)
| |