API Challenge Solutions
Use this API challenge walkthrough index to find step-by-step REST API challenge solutions for every major topic in the API Challenges app. Each page focuses on a single outcome and shows the exact request method, endpoint, headers, payload constraints, and expected status code. If you are learning API testing, this gives you a practical way to understand why requests pass, why they fail, and how to debug quickly.
Treat this page as your API testing roadmap. Start with session setup and challenge tracking, then progress through GET, POST, PUT, DELETE, HEAD, OPTIONS, QUERY, and PATCH behavior. Continue into content negotiation (Accept and Content-Type), then move into authentication, authorization, method override scenarios, and status-code edge cases. Following this order builds durable test design skills and helps you avoid random trial-and-error testing.
These API test walkthroughs are designed for real hands-on execution in tools like Postman, Insomnia, Bruno, or cURL. Send the request yourself first, compare the response to the expected result, then use the solution details to close gaps in your approach.
If your goal is API automation, each solution also provides clear assertion targets you can translate into maintainable automated checks.
Getting Started
First Real Challenge
GET Challenges
GET Filter Challenges
- GET /todos (200) ?filter
- GET /todos (200) ?filter id greater than
- GET /todos (200) ?filter id less than
- GET /todos (200) ?filter id single result
- GET /todos (200) ?filter description regex
- GET /todos (200) ?filter description wildcard
GET Sorted Challenges
- GET /todos (200) ?_sortBy ascending
- GET /todos (200) ?_sortBy descending
- GET /todos (200) ?_sortBy multiple
- GET /todos (200) ?filter&_sortBy
GET Pagination Challenges
- GET /todos (200) ?_limit
- GET /todos (200) ?_limit&_offset
- GET /todos (400) ?_limit too high
- GET /todos (200) ?_sortBy&_limit&_offset
- GET /todos (200) ?filter&_limit&_offset
HEAD Challenges
Creation Challenges with POST
- POST /todos (201)
- POST /todos (422) doneStatus
- POST /todos (422) title too long
- POST /todos (422) description too long
- POST /todos (201) max out content
- POST /todos (413) content too long
- POST /todos (422) extra
Creation Challenges with PUT
Update Challenges with POST
Update Challenges with PUT
- PUT /todos/{id} full (200)
- PUT /todos/{id} partial (200)
- PUT /todos body id (200)
- PUT /todos/{id} no body id (200)
- PUT /todos/{id} no title (422)
- PUT /todos no id (422)
- PUT /todos/{id} not found (404)
- PUT /todos/{id} no amend id (422)
DELETE Challenges
QUERY Challenges
PATCH Challenges
- PATCH /todos/{id} (200) partial
- PATCH /todos/{id} (200) merge-patch
- PATCH /todos/{id} (200) json-patch
OPTIONS Challenges
Accept Challenges
- GET /todos (200) XML
- GET /todos (200) JSON
- GET /todos (200) ANY
- GET /todos (200) XML pref
- GET /todos (200) no accept
- GET /todos (406)
- GET /todos/{id} (200) text/calendar
Content-Type Challenges
Content-Disposition Challenges
- GET /todos/export (200) CSV download
- GET /todos/export (200) HTML download
- GET /todos/export (200) tab-delimited download
Fancy a Break? Restore your session
- GET /challenger/guid (200)
- POST /challenger (existing X-CHALLENGER)
- GET /challenger/guid (existing X-CHALLENGER)
- PUT /challenger/guid RESTORE
- PUT /challenger/guid (409) mismatch
- PUT /challenger/guid CREATE
- GET /challenger/database/guid (200)
- PUT /challenger/database/guid (Update)
Mix Accept and Content-Type Challenges
Status Code Challenges
- DELETE /heartbeat (405)
- PATCH /heartbeat (500)
- TRACE /heartbeat (501)
- GET /heartbeat (204)
- GET /heartbeat (431) X-CHALLENGER too long
HTTP Method Override Challenges
Authentication Challenges
Authorization Challenges
- GET /secret/note (403)
- GET /secret/note (401)
- GET /secret/note (200)
- POST /secret/note (200)
- POST /secret/note (401)
- POST /secret/note (403)
- GET /secret/note (Bearer)
- POST /secret/note (Bearer)