New · Scheduled flows with Slack + email alerting

The API clientflow runnerwebhook inbox
your team

should have had years ago.

Save requests, capture webhooks, and chain them into flows — one collaborative workspace where every change is versioned and every run is replayable. Built for teams who'd rather ship than configure.

  • 14-day free trial
  • Nothing to install
  • No credit card to start

Stands on open standards

  • OpenAPI 3import + export
  • OAuth 2.0 + PKCEtokens encrypted at rest
  • AWS SigV4native request signing
  • WebSocketslive agent dispatch
  • Postman · Insomnia · Brunoone-click import
  • GraphQLfirst-class body editor
  • JUnit / HTMLCI-ready reports
  • Markdownfirst-class docs
  • Cron schedulesSlack · Discord · webhook · email
  • OpenAPI 3import + export
  • OAuth 2.0 + PKCEtokens encrypted at rest
  • AWS SigV4native request signing
  • WebSocketslive agent dispatch
  • Postman · Insomnia · Brunoone-click import
  • GraphQLfirst-class body editor
  • JUnit / HTMLCI-ready reports
  • Markdownfirst-class docs
  • Cron schedulesSlack · Discord · webhook · email

Features

Three pillars. One workspace.

Save and version requests. Capture and forward webhooks. Chain it all into flows — the full lifecycle of an API call in one tab.

GET {{HOST}}/v1/charges
200 112ms
Saved · v23 · just now

Requests, versioned on every save

Build collections, save once, share with your team. Every save is a snapshot with author + timestamp — diff, restore, or replay any past revision.

POST /i/wh_8f3a…
checkout.session.completed
charge.succeeded
customer.created
↳ Forwarded to api.example.com 200

Webhooks, captured + forwarded

Mint a unique inbound URL in one click. Inspect every payload, transform with a tiny JS function, fan out to 3 destinations.

POSTcustomers
POSTcharges
JSassert
5/5 pass 1.4s Last run · CI · main@a1b2c

Flows, chained visually

Pipe responses step to step, extract values, branch on status, assert on results. Run from the UI, on a cron schedule, or in CI.

  GET /v1/charges
-   "limit": 10
+   "limit": 50
+   "expand[]": "customer"
v23 by chris · restore any revision

History that never expires

Audit who changed what, six months ago, on the request that just broke. Restore writes a new revision — nothing is ever destroyed.

Production3 variables
HOSTapi.stripe.com
API_KEY••••••••••••••

Environments + secrets

Workspace-scoped vars with {{var}} substitution. Secrets encrypted at rest with per-workspace keys.

OAuth 2.0auto-refresh
BearereyJhbGciOi•••••
Token valid · refreshes in 59m

Auth that just works

OAuth 2.0 with auto-refresh, AWS SigV4, HTTP Digest, Basic, Bearer — configured per request, cached per user.

CT JD MK +4 7 members
@chris can you double-check the auth header here?

Shared workspaces

Collections, environments, and history your whole team can see. Threaded comments with @mentions.

*/5 * * * *passing
SlackDiscordEmail
Next run in 2m · alert on failure

Scheduled runs

Cron-driven flow runs with Slack, Discord, webhook + email alerting on failure. Your smoke tests, on autopilot.

$ apistash-agent run
connected · workspace ready
→ GET localhost:8080/health 200

Local agent

A tiny binary dispatches requests from your own network — hit internal APIs without firewall holes.

Postman Insomnia Bruno OpenAPI
42 requests · 6 folders imported

Imports

Postman v2.1, Insomnia v4, Bruno folders, and OpenAPI 3 — folder structure and auth carry over.

See it in action

A glimpse of the product.

Three views from inside the app — not stock photography, not vapor.

Webhooks

Capture every payload. Forward where it counts.

Mint a unique inbound URL in one click. Inspect headers, body, and timing for every event. Transform with a tiny JS function and fan out to up to 3 destinations in parallel.

  • Unlimited inbound endpoints
  • Full headers + body inspection
  • Forward to up to 3 URLs in parallel
apistash.dev · webhooks · stripe-events
POST https://apistash.dev/i/wh_8f3ac1d2 200
Inbox3 events
checkout.session.completed just now
charge.succeeded 2m ago
customer.created 14m ago
BodyHeadersForwarded
{
  "id": "evt_3PaX9k…",
  "type": "checkout.session.completed",
  "data": {
    "object": {
      "customer": "cus_NJxQ…",
      "amount_total": 2199
    }
  }
}
Flows

Chain requests, scripts, and delays.

Build a flow visually. Pipe responses from step to step, extract values with a JSON path, branch on status, assert on the result. Run from the UI, on a schedule, or from CI.

  • Request, script, and delay steps
  • Per-step extract + expect
  • Cookies inherit across steps automatically
apistash.dev · flows · onboard-customer
Onboard customer ▶ Run
  1. 1 POST Create customer customer.id
  2. 2 POST Create charge charge.id
  3. 3 Wait 2s
  4. 4 GET Webhook captured? expect 200
  5. 5 JS Assert payload shape pass
Versioned history

Every save is a snapshot you can diff.

Audit who changed what, when, and why. Restore in one click — restoring writes a new revision so nothing is destroyed.

  • Author + timestamp on every revision
  • Side-by-side diff view
  • Restore writes a new revision
apistash.dev · history · v23 ↔ v22
47 revisions
v23 chris · just now
v22 alex · 3h ago
v21 jamie · yesterday
v20 chris · 2d ago
Diff · v23 vs v22
  GET /v1/charges
  query:
-   "limit": 10
+   "limit": 50
+   "expand[]": "customer"
  headers:
    Authorization: Bearer {{API_KEY}}

Automate it

Your collections, in CI.

The CLI runs the exact same code path as the web runner. Point it at a request, a flow, or a whole collection — it dispatches every step, runs your assertions, and exits non-zero on failure.

  • JUnit + HTML reports for any CI
  • Environments resolved the same way as the UI
  • One binary, zero config files
Set up your pipeline →

Why we built it

Your API client shouldn't be a graveyard.

Most teams use a desktop app that holds requests hostage in one engineer's profile. Every change overwrites the last. Environments live in a chat thread. You email curl snippets like it's 2014.

Lost work

A teammate "fixes" your saved request and the last working version is gone. Without history there's no rollback.

Drifted environments

Your {{HOST}} works locally, theirs doesn't. The env file is on someone's laptop. Nobody knows whose.

Stuck in CI

Your API client has no CLI, so the integration tests you set up in the UI never run again after Monday.

The API Stash answer

One workspace. Shared collections. Every save versioned. One CLI that runs the same collection in CI.

Who it's for

One workspace, every workflow.

From the first curl at 2am to the regression suite that gates your deploy.

Solo developers

Skip the install. Open a tab, fire a request, share a link. Your collections follow you between machines because they live in your workspace, not your laptop.

  • Works from any browser
  • Capture a webhook in 10 seconds
  • Free 14-day trial

Platform + DevRel

Maintain a canonical collection that mirrors your public API. Import OpenAPI to stay in sync. Hand customers a single link instead of a 70MB export.

  • OpenAPI import + drift detection
  • Public docs export
  • CLI for CI regression

How we stack up

API Stash vs the usual suspects.

Honest comparison — pick the right tool for your team.

Postman Bruno Insomnia
Versioned history (every save)YesPaid planGit onlySync only
Browser-nativeYesWeb (paid)DesktopDesktop
Shared workspaces + commentsBuilt inWorkspaces (paid)NoSync only
Inbound webhook capture + forwardBuilt inMock serversNoNo
Multi-step flows (chain requests)Visual + scriptedTest scriptsRunnerTest suites
Scheduled runs + alertingSlack · Discord · webhook · emailPaid monitorsNoNo
Import Postman / Insomnia / BrunoAll threeOwn formatPostmanPostman
Local agent for internal APIsYesAgentLocalLocal
CLI for CIYesNewmanCLIInso
Try before you buy14-day full trialLimited free tierFree (OSS)Limited free tier
Install requiredNoneDesktop / WebDesktopDesktop

Comparison reflects vendor docs as of writing. Things change — re-check before you switch.

How it works

Sign in. Build. Chain. Ship.

From the first save to the regression suite running in CI — same workspace, same source of truth.

  1. GET {{HOST}}/v1/charges
    200 112ms
    Saved · v23 · just now
    01

    Save your first request

    Build a request, hit Save, share the URL with your teammates. Every save is a snapshot you can diff, restore, or replay.

  2. POST /i/wh_8f3a…
    checkout.session.completed
    charge.succeeded
    customer.created
    ↳ Forwarded to api.example.com 200
    02

    Capture inbound traffic

    Mint a webhook URL in one click. Point Stripe, GitHub, or your own producer at it. Transform on the fly, forward downstream.

  3. POSTcustomers
    POSTcharges
    JSassert
    5/5 pass 1.4s Last run · CI · main@a1b2c
    03

    Chain it into a flow

    Wire requests, scripts, and delays into a single workflow. Run from the UI — or from CI with apistash run.

Pricing

One plan. Everything included.

Try it free for 14 days, then one flat price per workspace — no per-seat tax, no feature gates. Everything API Stash does, for your whole team.

Questions

Frequently asked.

How much does it cost?

$19/mo per workspace — one flat price, billed per workspace rather than per seat, with every feature included. There are no locked tiers or add-ons. New workspaces start with a 14-day free trial (no credit card to start) so you can evaluate the whole product before you pay.

Where does my data live?

Your workspace data lives in an isolated tenant on our managed backend, deployed to a global edge network for low latency. Secrets — OAuth tokens, environment values marked as secret, MFA seeds, agent credentials — are encrypted at rest with workspace-scoped keys, separate from the data they protect. We never touch your request payloads beyond the round-trip needed to dispatch them.

Can I hit internal APIs that aren't on the public internet?

Yes — the local agent is a small Node binary you run on a developer machine or a build runner. The web app dispatches requests to it over an authenticated WebSocket; the agent calls your private API and returns the response. No firewall holes, no VPN-into-prod.

What are flows?

Flows let you chain multiple API requests into a single workflow. Each step can be a request (with extracted values piped to the next), a JS script, or a delay. Branch on status codes, assert on responses, retry on failure. Session cookies inherit across steps automatically. The same flow runs in the UI, on a cron schedule, and in CI via apistash run.

How do webhooks work?

Create a webhook in one click and we mint you a unique inbound URL. Point any service at it — Stripe, GitHub, your own producer — and we capture every payload with full headers and body in your inbox. Inspect them, optionally transform with a tiny JS function, and forward to up to 3 downstream URLs in parallel.

Does API Stash run in CI?

Yes, via the apistash run CLI. Point it at a request, a flow, or a whole collection plus an environment, and it dispatches every step, runs assertions, and emits a JUnit/HTML report. Exit code is non-zero on assertion failure, so it slots into any CI pipeline.

How is this different from Postman or Bruno?

Postman is closed source and gates collaboration, history, and monitors across several paid tiers. Bruno is great and open-source, but every collection lives in a git repo — there's no live collaboration. API Stash sits in between: web-native, shared by default, with versioning and webhook capture standard, and flows as first-class citizens. And instead of a maze of tiers, there's one flat price per workspace with every feature included.

Do you import existing Postman, Insomnia, or Bruno collections?

Yes — all three, plus OpenAPI 3. Postman v2.1 exports, Insomnia v4 exports, and Bruno folders of .bru files import with folder structure and auth configuration carried over.

How does versioning work?

Every time you hit Save, API Stash writes a revision row with the full snapshot — method, URL, headers, body, scripts — plus author and timestamp. Flows version the same way. You can diff, restore, or run any past revision; restoring writes a new revision so nothing is destroyed.

What's the catch?

We're a small team. Support is by email — Pro workspaces jump the queue. Status page is in your URL bar — if it's up, it works. We move fast and tend to ship enhancements in days, not quarters.

Stop fighting your API client.

Requests, webhooks, and flows in one workspace. Shared. Web-native. Built for teams who'd rather ship than configure. Free for 14 days.