Job ticket 941010 · smb · contract press · no subscription
Postman Free already has the client, the specs and the mock server. The endpoint nobody wrote down is the bottleneck.
Free is US$0 a month: API client and core tools, specs and mock servers, NativeGit, the collection runner and ManualFlows, with 50 AI credits a month and AI overages marked unavailable. Solo is US$9 a month billed annually. The contract a colleague implements from is a document, and no tier includes it.
Postman is a trademark of Postman, Inc. This is an independent, unaffiliated comparison built on Postman's own published pricing page, linked below and re-read every thirty days. This page sends no API request of any kind.
The contract press — rendered in this browser
Sample data is illustrative, not a claim about Postman. Every Postman figure on this page comes from the linked pricing page, read 2026-09-28.
The prompt pack
Two prompts, each mapped one-to-one onto a Postman feature you are currently rationed on. Run them from this page with a free key, or copy them into any free chat model — the text is identical either way, and it is printed in full at the bottom of this section so it survives this site.
Loading the pack from tools.json… If this fails, the full prompt text is still readable below.
One-time unlocks only, never a subscription. If a price ever appears here it was read from Stripe in that request, not typed by hand. An unlock is client-side gating, not secure payment verification: it is stored in this browser and cannot prove payment to anyone else.
What Postman's own pricing page says
Read from postman.com/pricing — Free, Solo, Team, Enterprise on 2026-09-28. Fields we could not read are marked unconfirmed rather than filled in with a plausible number.
| The job | Postman's own pricing page (read 2026-09-28) | What it costs | This page + a free-tier model |
|---|---|---|---|
| The client, specs, mock servers | Free: all included | US$0 | Not ours: we send nothing and store nothing |
| AI credits | 50 a month; overages unavailable | US$0 → US$9 on Solo | Two prompts, unlimited runs, no credit meter |
| The written contract | Not a plan feature | Not sold | The document, with every gap named |
| The test cases | Not a plan feature | Not sold at any tier | A sheet whose boundaries sit on your numbers |
What this replaces, and what it does not
A displacement claim you cannot substantiate is a lie with good typography. This is the whole scope, including the parts where Postman wins.
A contract a colleague can build from
Path, auth, request, response, every status code with its cause, the pagination rule, the rate limit and one worked example — internally consistent throughout.
Gaps named, not filled
Anything the description does not settle prints as [NEEDS DECISION: the question]. No field, default, limit or timeout is invented to make the document look finished.
A case sheet that bites
Happy path, the boundaries on your printed numbers, one case per error status, and the regression traps that catch a field quietly changing meaning.
Not a client, a runner or a mock server
No request is sent, no collection is stored, no mock is deployed, no documentation is published, no test is executed. This page makes no API calls at all.
No comparison of anyone's generator
The page does not claim this contract is better than one written by Postman, by a code generator or by a colleague. It writes a document; you judge it.
Not the API itself
The press describes an endpoint that already exists. Designing the API's shape, versioning strategy or deprecation policy is architecture work this page does not do.
The prompts, in full, as text
Copy these into any model. They are the product; the page around them is convenience. Each block is the exact system prompt the interactive runner sends, plus the user-message template.
Prompt 01 — 1. Contract writer · postman-contract-writer v1.0.0 · best ally: Groq Cloud — free tier · gemini-2.5-flash-lite
Replaces: The endpoint contract a colleague can build from: path, parameters, request shape, response shape, every status code with its cause, the pagination and rate-limit rules, and a worked example — the part of API work no Postman plan sells.
Why this model: A contract is a long document with a schema per object and no room for improvisation; a free long-context model holds the whole endpoint description and its examples in view while writing, at a latency that survives the revision loop. Fallback ally: OpenRouter — :free model variants.
System prompt (2643 chars):
You are the contract desk of an API team. The engineer describes an endpoint — what it does, what it accepts, what it returns, the errors it has produced in production — and you return a complete written contract: the path and method, the parameters, the request shape, the response shape, every status code with its cause, the pagination rule, the rate limit, and one worked example. You are writing for a colleague who has never spoken to you and will implement on Monday. You never invent a field, a default, a limit or an error code. If the description does not settle something, you print [NEEDS DECISION: the question] and keep going.
Return ONLY one JSON object. No markdown fences, no commentary, no preamble.
{
"title": string (max 8 words),
"blocks": [
{ "type": "h2" | "p" | "ul" | "callout" | "todo", "text": string, "items": [ string ] (only when type is "ul" or "todo") }
]
}
Hard rules:
1. Return blocks in this order: an h2 'Endpoint' with a method and path and one sentence of purpose, an h2 'Authentication' with what is required and what happens when it is missing, an h2 'Request' listing every field with its type, whether it is required, and its constraint, an h2 'Response' doing the same for the success body, an h2 'Errors' with one sub-line per status code, its cause and what the caller should do, an h2 'Pagination and limits' with the exact rule and the exact number, an h2 'Example' with a real request and a real response body, and a todo of the decisions still open.
2. Every field the contract names must come from the description. A field that would need a new database column is marked [NEEDS DECISION: what has to be added], never assumed to exist.
3. Every status code you list must have a cause a caller could act on. '500 Internal Server Error' alone is a failure; write which condition produces it and what the caller should do instead.
4. Never invent a default, a maximum, a timeout, a rate limit or a retention period. If the description gives none, print '[NEEDS DECISION: the rate limit]' in the limits block and carry on.
5. The example must be internally consistent with the schema above it: same field names, same types, same nesting, and values that would be plausible for the stated business.
6. The request and response blocks must say which fields are optional and what happens when an optional field is absent — 'omitted' and 'null' are different behaviours and the contract must say which applies.
7. No emoji, no marketing language, no 'simply' and no 'just'. A contract is read by someone implementing on a deadline.
8. Write every string in the language of the description.
User message template:
Variables:
{{endpoint}}— The endpoint, in whatever detail you have (max 2500 chars) sample data shipped with the tool{{rules}}— House rules the contract must follow (max 700 chars) sample data shipped with the tool
Output schema (the answer must match this exactly):
Decoding: temperature 0.4 · max 2800 output tokens · responseMimeType application/json · budget ~600 in / ~1,200 out for a full contract · cost per run: 1 request against the Gemini free tier; the relay floor needs no key at all.
Prompt 02 — 2. Case writer · postman-case-writer v1.0.0 · best ally: Groq Cloud — free tier · openai/gpt-oss-20b
Replaces: The tests that catch a breaking change: the case sheet a colleague can turn into assertions, including the error paths, the pagination boundary and the field the docs call optional but clients already depend on.
Why this model: Turning a contract into a bounded set of cases needs arithmetic on its limits and its fields at once; a mid-size free instruct model at low temperature keeps the boundary values exactly on the contract's numbers. Fallback ally: Google Gemini API — Free usage tier.
System prompt (2189 chars):
You are the case desk of an API team. You are given a finished contract and you return a test sheet: for each case, the setup, the call, the expected status, the expected body field that matters, and the one failure it would catch. You are writing cases that fail loudly when the API changes, not a coverage trophy. Every case must be checkable from the contract alone, and every expected value must be one the contract actually states.
Return ONLY one JSON object. No markdown fences, no commentary, no preamble.
{
"title": string (max 8 words),
"blocks": [
{ "type": "h2" | "p" | "ul" | "callout" | "todo", "text": string, "items": [ string ] (only when type is "ul" or "todo") }
]
}
Hard rules:
1. Return blocks in this order: an h2 'Happy path' with a ul of at most four cases, an h2 'Boundaries' with a ul of cases that sit exactly on a printed limit — the last page before the limit, the limit itself, one past it, an absent optional field, an empty list — an h2 'Errors' with a ul of one case per status code, naming the condition that produces it, an h2 'Regression traps' with a ul of the cases that catch a silent breaking change, and a todo of anything the contract leaves untestable.
2. Every expected status and every expected value must come from the contract. Never invent a status code, a field or a limit that the contract does not state; where it is silent, the case goes in the todo as untestable.
3. The boundary cases must use the contract's exact numbers: if it says 100 per page, the cases are 99, 100 and the cursor that would follow, not 'a lot'.
4. Each case must name the failure it catches in one clause. A case with no catchable failure is padding and must be cut.
5. The regression traps must include at least one field the contract calls optional, because optional fields are where clients and contracts quietly disagree.
6. Never claim a case would pass, only that it would fail on the stated condition. You have not run anything and the contract must never imply otherwise.
7. No emoji, no exclamation marks, and no test framework syntax — this is a sheet a person writes assertions from.
8. Write every string in the language of the contract.
User message template:
Variables:
{{contract}}— The finished contract (max 3500 chars) sample data shipped with the tool{{history}}— What broke last time, and what you fear this time (max 900 chars) sample data shipped with the tool
Output schema (the answer must match this exactly):
Decoding: temperature 0.4 · max 2000 output tokens · responseMimeType application/json · budget ~800 in / ~800 out for a full case sheet · cost per run: 1 request against Groq's published free base; the relay floor needs no key at all.
Questions worth asking before you cancel
Postman is free for individuals — what does this replace?
The writing, not the tool. The free plan already includes the client, specs, mock servers and the runner. What no plan includes is the endpoint contract and the test cases — the documents that decide whether an integration takes a day or a fortnight.
Is the generated contract actually correct?
It is correct about what you told it and honest about what you did not. Every unsettled limit comes back as [NEEDS DECISION: …] rather than a plausible number, because a contract with an invented rate limit is worse than one with a visible hole. Review it the way you would review a colleague's first draft.
Can it generate the OpenAPI file or the code?
No. This page produces prose contracts and test sheets, not machine-readable schemas, client libraries or SDKs — Postman's plans list SDK generation explicitly, and this page does not compete with them.
Where do the prices come from?
Postman's own pricing page, read 2026-09-28, in the annual view. The monthly-billing rates sit behind a toggle and did not print in our capture, so no monthly figure is quoted anywhere on this page.
Does it work without an API key?
Yes — and here that matters twice over, because this tool never needs a key for its own endpoint. Copy the printed prompt into any free chat model, paste the JSON back, and the contract renders here as the same document.
Send this to someone still paying for it
Nothing is loaded from X or LinkedIn until you click, and no share is counted, logged or reported back to us — the buttons are plain links to each network's own share page.