$ cat ~/posts/drop-postman-http-files.md
TOOLS 24 Jun 2026 · ~4 min read · 641 words

Your API requests belong in Git, not Postman's cloud.

A private Postman collection does two jobs badly. Send the quick check to cURL and a .http file, the endpoint tests to Playwright, and let git hold both.

Tim Stacey
Tim Stacey
lead quality engineer · @timjstacey
orders.http
# Open in VS Code (REST Client) or any JetBrains IDE.
@base = https://api.example.com
GET {{base}}/orders
Authorization: Bearer {{TOKEN}}

On many teams every developer keeps a private Postman collection. It stays on their laptop, synced to their own account. The person beside you rebuilt the same login request last week, and you never saw it. The request that hits your own API lives in a vendor’s workspace instead of the repo next to the code it calls.

Postman carries two jobs at once

You reach for Postman to answer two questions that want different homes. The first: what does this response look like while I build a change. The second: does this endpoint still behave under CI. Postman straddles both and does each one worse than a tool aimed at it.

Split them and each one gets a better home. Send the exploratory poke to cURL or a checked-in .http file. Put the endpoint coverage in your test framework.

Send the quick check to cURL or a .http file

cURL answers a one-off in a single line, no app and no login:

poke.sh
curl -s https://api.example.com/orders -H "Authorization: Bearer $TOKEN" | jq

When a request earns a second run, save it as a .http file. The JetBrains HTTP client and the REST Client extension for VS Code read the same plain-text format, so the file works whichever editor a teammate opens. It sits in the repo beside the code it calls, rides the same pull request, and the whole team reads it. Rename an endpoint and the request edit lands in the same diff as the handler change.

Send the tests to Playwright

A saved Postman request that one developer runs by hand guards nothing. It runs nowhere the week that developer takes leave. Move the endpoint coverage into Playwright’s APIRequestContext, which runs your API checks in the same project, runner, and CI job as the browser tests:

orders.spec.ts
test('orders endpoint returns the open orders', async ({ request }) => {
const res = await request.get('/api/orders', {
headers: { Authorization: `Bearer ${token}` },
});
expect(res.status()).toBe(200);
expect(await res.json()).toContainEqual(expect.objectContaining({ status: 'open' }));
});

It fails the build when the endpoint breaks, in front of the whole team, on every pull request. No one opens an app and remembers to click Send.

Version control is the argument

A .http file lives beside the code it calls and travels in the same pull request. The API examples version with the source instead of drifting in a shared workspace.

Postman keeps your collections in its cloud sync. Two teammates edit the same collection and Postman can overwrite one set of changes with the other, no warning; recovering the lost version means digging through history behind a paid tier. A clash in a checked-in .http file shows up as an ordinary git conflict your team already resolves ten times a day.

Postman’s friction reaches past sync. Developers leaving Postman point at the same list: the desktop app wants a login, the install runs near 900MB, and the offline Scratch Pad is gone. The free tier dropped to one user in 2026, so a second teammate forces a paid plan. A wave of account-free clients, Bruno and Hoppscotch and Yaak, points the same direction, toward local, file-based tools. cURL and a .http file get you there with nothing new to install.

Start with your next request

The next time you reach for Postman, ask which job you are doing. Building a change, run cURL or save a .http file in the repo. Guarding the endpoint, write a Playwright test. Either way the request ends up in git, in review, and in front of the team. A private workspace one person syncs to a cloud account holds none of that.

I first shared this on LinkedIn.

$ echo "EOF · thanks for reading"
Tim Stacey
Written by
Tim Stacey
Lead quality engineer. Writes about testing strategy.