● livePostman-style, no install·GPLv3

Requests that pass values along.

A lightweight Postman alternative that runs in a browser tab. Group requests into collections, send them, read the response. Then chain them: log in, keep the access_token, and every later request that says Bearer {{token}} uses it.

Demo password: demo1234. Click ‘Load the example’, then ‘Run all’: it logs in to the built-in demo API and creates, reads and deletes a note.

The X factor

Chaining, not copy-paste.

Real API work is a sequence: create something, keep its id, use it in the next call. APIForge makes that sequence a collection you can run.

{}

Variables everywhere

{{variables}} in the URL, headers and body, variables inside variables, and {{$uuid}} or {{$timestamp}} for fresh values. Undefined ones are flagged with the request that sets them.

⇣

Extract rules

Save data.items[0].id from the JSON body, a header or the status code into a variable. Or click any value in the response tree to make the rule.

▶

Collection runner

Run the whole collection or one folder in sidebar order, optionally stopping at the first failure, with each step's status, time and extracted values.

Preview

What it looks like

The runner going through the example collection, a request with its response tree, and the variables panel with values pulled from earlier responses.

Collection runner
Collection runner listing each request with status, time and extracted values
Request and response
A GET request with the JSON response shown as a tree
Variables
Variables panel with values extracted from responses
Under the hood

Key concepts & stack

React 19TypeScriptViteReact RouteraxiosFastAPIPydantic 2SQLAlchemy 2httpxPostgreSQLpytestVitest

Server-side send

Browsers enforce CORS, so the page posts the finished request to /api/send and the server makes the call with httpx.

SSRF guard per hop

Every hop must resolve to public addresses. Redirects are followed by hand so each new host is checked, and Authorization and Cookie are dropped when the host changes.

One variable engine

Variables are filled in by TypeScript in the browser, so the URL preview, send, runner and cURL export all give the same result.

Autosave without losing keystrokes

Each edit bumps a revision number; a debounced flush saves dirty requests and only clears the ones that didn't change during the save.

Postman import

Postman v2.1 collections import with their {{variable}} syntax unchanged. Nested folders are flattened to one level; scripts and collection auth are listed as not carried over.

Built-in demo API

/demo has login and a notes resource, so the example collection works with nothing else running.

Run it

Run your own

Locally, ALLOW_PRIVATE_TARGETS=true lets you test APIs on localhost.

API

  1. 1
    Install, then set APP_PASSWORD in .env:
    cd backend && uv sync
    cp .env.example .env
  2. 2
    Start it on port 8000:
    uv run uvicorn app.main:app --reload

App

  1. 1
    Install and start Vite:
    cd frontend && npm install
    npm run dev
  2. 2
    Open it, load the example and run it:
    http://localhost:5173