You've got Postman installed and you can name every region of the window. Time to make a real API call. This lesson walks you through your first GET request against a public test API — including path parameters, query parameters, and how to save the request so you don't have to retype it tomorrow. The API itself is dead simple: JSONPlaceholder, a free fake REST API that returns realistic data and never charges or fails on you. We'll use it throughout the course.
Sending the request — the four-step rhythm
Every Postman request follows the same rhythm: pick a method, type the URL, click Send, read the response. Today's request is a GET against https://jsonplaceholder.typicode.com/users.
Step 1 of 5
Open a tab
Press Cmd/Ctrl+T or click the + on the tabs row. The method dropdown defaults to GET, which is exactly what we want.
If you got a 200 OK and a list of ten user objects, congratulations — you just made an API call. Now let's read what came back.
Reading the response
The response panel has more information than first-timers notice. Working from left to right along the top:
- Status —
200 OKin a green pill. Green = 2xx success, yellow = 3xx redirect, orange/red = 4xx/5xx error. (You met these in the HTTP Methods, Status Codes, and Headers lesson of the API Testing Masterclass.) - Time — milliseconds the server took to reply.
245 msis normal for a public API; anything north of 1 second is worth a second look. - Size — total bytes (headers + body).
5.6 KBfor ten users is reasonable.
Below that, four tabs: Body, Cookies, Headers, Test Results. Body is the one you'll use 90% of the time. It has its own toggle:
- Pretty — formatted, syntax-highlighted JSON. The default; the view you'll use most.
- Raw — the bytes as they arrived, one long line. Useful when checking exact whitespace or non-printing characters.
- Preview — renders HTML. If an API returns an HTML error page instead of JSON (e.g. behind a load balancer that returned a 502 page), this is where you'll see it.
Click each toggle once to feel the difference. Pretty is your default; the other two are situational.
GET with a path parameter
Most REST APIs let you ask for one specific resource by appending its ID to the URL. Change the URL to https://jsonplaceholder.typicode.com/users/1 and click Send again. You'll now get a single user object instead of an array of ten:
{
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "Sincere@april.biz",
...
}The /1 is a path parameter — part of the URL path that names a specific resource. Try /users/2, /users/10, /users/999. The first two return data; the third returns an empty object (JSONPlaceholder's stand-in for "not found"). On a real API, /users/999 would return 404 Not Found.
GET with query parameters — two ways
Query parameters live after a ? in the URL: ?key=value&otherKey=otherValue. They're how you filter, paginate, and sort. Postman gives you two equivalent ways to set them.
Option 1: type them in the URL.
https://jsonplaceholder.typicode.com/posts?userId=1
Postman auto-detects the ?userId=1 and copies it into the Params tab.
Option 2: use the Params tab. Click Params (just under the URL bar). Type userId into the Key column and 1 into the Value column. Postman builds the URL for you. This is the cleaner approach when you have several parameters or values with special characters that would need URL-encoding.
Try both with https://jsonplaceholder.typicode.com/posts?userId=1 — the response should be all posts authored by user 1 (ten of them). Add a second parameter _limit=3 and re-send; you'll get only three posts back. JSONPlaceholder supports several conventional query keys (_limit, _start, _sort) for testing pagination.
The Headers tab
Click the Headers tab. You'll see a list of headers Postman is sending automatically — User-Agent: PostmanRuntime/..., Accept: */*, Cache-Control, Postman-Token, Host. Most of the time you don't touch these. When you start dealing with auth in Chapter 4 you'll add an Authorization header here.
To add one yourself: click an empty row, type a key (e.g. Accept-Language), tab to the value column, type a value (e.g. en-GB). Postman appends it to the request. Untick the checkbox to disable a header without deleting it.
Saving the request to a collection
A request that exists only in a tab disappears when you close the tab. To keep it around: press Cmd/Ctrl+S (or click Save next to the URL bar). A dialog appears. Two fields matter:
- Request name — give it a verbose, scannable name.
GET All UsersbeatsUntitled Request. The convention isMETHOD <what it does>. - Save to — pick a collection or create one. For now, click + Create Collection, name it
JSONPlaceholder Practice, and save into it.
Your saved request now appears in the Collections sidebar on the left. Click it once to reopen it; you can run the exact same call days later without retyping anything.
A small QA exercise
Spend two minutes feeling out the API:
GET https://jsonplaceholder.typicode.com/users → 10 users
GET https://jsonplaceholder.typicode.com/users/1 → user with id=1
GET https://jsonplaceholder.typicode.com/users/1/posts → all posts authored by user 1
GET https://jsonplaceholder.typicode.com/posts?userId=1&_limit=3 → first 3 posts by user 1
Same Postman tab, four URLs, four different shapes of response. That's the whole point of GET — you ask, the server tells you. Nothing changes on the server.
⚠️ Common mistakes
- Wrong protocol or trailing slash.
http://instead ofhttps://will fail (or get redirected). A stray space after the URL — copy-pasted from chat — produces a 404 with a confusing error. Click the URL bar and check the start and end characters. - Treating an empty
{}as a 404. JSONPlaceholder returns an empty object for missing IDs with status200 OK. On a real API, missing resources should return404. Always check the status code, not just the body. - Confusing query params with body. Query parameters live in the URL (
?userId=1); a request body is a separate thing (covered in the next lesson). GET requests don't have a body — Postman lets you set one, but most servers will ignore it.
🎯 Practice task
Get fluent with GET. 20-25 minutes.
- In your
JSONPlaceholder Practicecollection, save four GET requests with descriptive names:GET All Users→/usersGET User by ID→/users/1GET Posts by User→/posts?userId=1GET Comments on Post→/posts/1/comments
- Run each one. For each response, write down (in a notebook or scratch file) the status code, time, size, and the number of items returned.
- On
GET Posts by User, switch to the Params tab. Add_limit=3as a second param. Re-send. Confirm the response has only three items. - Open the Headers tab on the response (not the request). Identify the
Content-Typeand theCache-Controlheaders. TheContent-Typeshould beapplication/json; charset=utf-8. - Open the Postman Console (
Cmd/Ctrl+Alt+C). Re-send any request. Find the resolved request URL in the console output. Notice it's the exact URL with all params expanded — the most reliable single thing you can look at when debugging. - Stretch: find another free public API (e.g. reqres.in or restful-booker.herokuapp.com). Make a GET request to its
/usersor/bookingendpoint. Read the response shape — is it an array, an object with a wrapper key, or paginated?
You can now read any GET endpoint in Postman. The next lesson covers the four verbs that change state: POST, PUT, PATCH, and DELETE — and the body formats they need.