TestingAPIs is still being built. If something breaks, email support@testingapis.com.

Your first requests in Postman

Send a GET and a POST, read what comes back, and save both in a collection.

Postman is a desktop and web app for sending HTTP requests and checking what comes back. You fill in a URL, pick a method, add headers or a body, and press Send. Everything else in this tutorial (collections, variables, tests, automated runs) builds on that one action, so this lesson is about doing it well and reading the result properly.

If you have used curl before, Postman sends exactly the same requests. The REST tutorial's lesson on sending requests with curl and Postman compares the two. This tutorial stays in Postman and goes much further.

Getting set up

Download the desktop app from Postman's website, or use the web version in a browser. Either works for everything here, because all the requests go to a public API rather than to your own machine. Postman asks you to sign in so it can keep your requests in a workspace. Its account rules and plans change from time to time, so check them on Postman's site; nothing in this tutorial needs a paid feature. If you would rather not sign in at all, lesson 7 shows how to run the same collection with Newman, which needs no account.

A GET request

  1. Open a new request tab. It starts as a GET.
  2. Type https://api.testingapis.com/api/Products/1 into the URL bar.
  3. Press Send.

The response appears in the lower half of the window:

Response body
{
  "id": 1,
  "title": "Wireless Noise-Cancelling Headphones",
  "price": 249.99,
  "description": "Over-ear headphones with 30hr battery life and active noise cancellation.",
  "category": "electronics",
  "image": "https://picsum.photos/seed/prod1/400/400",
  "rating": { "rate": 4.3, "count": 127 },
  "inStock": true,
  "createdAt": "2025-06-12T10:30:00Z"
}

Above the body, Postman shows three numbers: the status (200 OK), the time the request took, and the size of the response. Get into the habit of reading them in that order, before the body. A 404 with a friendly-looking JSON body is still a failure, and you want to know about a request that took four seconds even when the data is right.

The Body tab has a Pretty view, which formats and colours JSON, and a Raw view, which shows exactly what the server sent. Use Raw when something looks odd. Pretty can hide problems, such as a number sent as a string or a duplicated key. The Headers tab next to it lists the response headers, which matter for the next part.

Query parameters

Change the URL to https://api.testingapis.com/api/Products?category=electronics&limit=2&page=1. Postman notices the query string and fills in the Params tab, one row per parameter. You can work either way: edit the URL, or edit the table and watch the URL change. The table is easier when values contain spaces or symbols, because Postman encodes them for you.

The response is a list of two products. The interesting part is in the Headers tab:

Response headers
HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
x-total-count: 6
x-total-pages: 3

x-total-count says how many products match the filter in total (six when this was written), and x-total-pages how many pages of two that makes. Many APIs put this kind of information in headers rather than the body, and people testing in a tool that shows only the body never see it.

A POST with a JSON body

  1. Change the method to POST and the URL to https://api.testingapis.com/api/methods/post.
  2. Open the Body tab, choose raw, and pick JSON from the format list next to it.
  3. Paste the body below and press Send.
Request body
{
  "name": "Asha",
  "role": "tester"
}
Response body
{
  "method": "POST",
  "message": "POST request received",
  "path": "/api/methods/post",
  "query": {},
  "contentType": "application/json",
  "bodyLength": 31,
  "bodyTruncated": false,
  "body": "{\"name\":\"Asha\",\"role\":\"tester\"}",
  "timestamp": "2026-10-11T12:09:28Z"
}

This endpoint echoes back what it received, which makes it useful for checking what Postman actually sent. Look at contentType: choosing JSON in the Body tab made Postman add a Content-Type: application/jsonheader without being asked. Open the request's Headers tab and you'll find it among the headers Postman adds automatically, which are hidden by default. Knowing they exist matters. If you choose Text instead of JSON, the same body goes out with a different content type, and many APIs then reject it.

Moving between Postman and curl

Requests often arrive as curl commands, in a bug report or in API docs. Postman can turn one into a request: choose Import and paste the command as text.

Terminal
curl -X POST https://api.testingapis.com/api/methods/post \
  -H "Content-Type: application/json" \
  -d '{"name":"Asha","role":"tester"}'

You get a new request with the method, URL, header and body filled in. It works the other way too: the code icon in the request's side panel shows the current request as curl, or as code in many languages. Copy the curl version into a bug report and anyone can reproduce your request without opening Postman. The cURL command parseron this site explains each part of a command if you're handed one you don't understand.

Saving requests in a collection

An unsaved request disappears when you close its tab. Save it, and Postman asks which collection to put it in. A collection is a folder of requests, and it's the unit everything else works on: variables, shared authorization, tests and automated runs all attach to collections. Create one called TestingAPIs practice, and save both requests in it with names that say what they do, like Get one product rather than GET products/1.

You can also import the finished collection for this tutorial and compare as you go. Download the collection and the environment, choose Import in Postman, and drop both files in. The folder 01 First requests holds the three requests from this lesson.

Habits to start with

  • Read the status, time and size before the body.
  • Check the response headers, not just the body.
  • Switch to the Raw view when a response looks strange.
  • Name saved requests after what they do, so a list of them reads like a list of checks.
  • When you report a bug, paste the request as curl, so it can be reproduced in seconds.

Exercise

In your collection, add a request that lists products with limit=3, sorted by price with the highest first, using only the Params tab (the products API docs list the parameters). Check the order of the prices in the response yourself. Then send /api/Products/9999 and write down the status, the time and the error message.

Practise and go further