How to complete the challenge QUERY /api/todos (200)

QUERY is a safe read method that lets you send query content in the request body. For this challenge, use it to request todos where doneStatus=true.

QUERY /api/todos (200)

Issue a QUERY request on the /api/todos end point with form-encoded query content to get only todos which are done. There must exist both done and not done todos to pass this challenge.

  • Use the QUERY method with /api/todos.
  • Add Content-Type: application/x-www-form-urlencoded.
  • Add Accept: application/json if you want a JSON response.
  • Send doneStatus=true in the request body.
  • Make sure your challenger data has at least one todo with "doneStatus": true and at least one with "doneStatus": false.

Basic Instructions

  • Issue a QUERY request to:
    • https://apichallenges.com/api/todos
  • The request should have an X-CHALLENGER header so the challenge is tracked.
  • The request body should be form URL encoded:
doneStatus=true

Try it now

If you need fixture data, create one done todo and one not-done todo first. See the solution.

POST /api/todos to create a done todo fixture
POST /api/todos to create a not-done comparison todo

Issue the QUERY request with the filter in the body:

QUERY /api/todos with doneStatus=true to return only done todos

Example Request

> QUERY /api/todos HTTP/1.1
> Host: apichallenges.com
> User-Agent: rest-client
> X-CHALLENGER: x-challenger-guid
> Content-Type: application/x-www-form-urlencoded
> Accept: application/json
>
> doneStatus=true

Example Response

< HTTP/1.1 200 OK
< Content-Type: application/json
< Accept-Query: application/x-www-form-urlencoded, application/jsonpath, application/vnd.thingifier.query+json
< X-Challenger: x-challenger-guid

Returned body:

{
  "todos": [
    {
      "id": 41,
      "title": "done todo for query",
      "doneStatus": true,
      "description": "created for query challenge"
    }
  ]
}

Lessons Learned

  • QUERY /api/todos is a safe read that sends filter criteria in the request body.
  • Content-Type: application/x-www-form-urlencoded describes the query body, while Accept describes the returned representation.
  • Accept-Query in the response documents which query content types are supported.

Suggested Experiments

  • Send doneStatus=false in the QUERY body and compare with the doneStatus=true result.
  • Repeat the same criteria as GET /api/todos?doneStatus=true and compare URL visibility with body-based criteria.
  • Try the same completed-todo filter as a JSONPath QUERY body with Content-Type: application/jsonpath and $.todos[?(@.doneStatus == true)].
  • Try the same completed-todo filter as a Structured JSON QUERY body with Content-Type: application/vnd.thingifier.query+json and {"filter":{"doneStatus":true}}.
  • Read the method reference for more QUERY body formats, including application/jsonpath and application/vnd.thingifier.query+json.
Experiment with this endpoint