Start here. This is the direct spoken answer to practice first.
Why this question matters
Where input appears is part of the public contract. It affects resource identity, cache keys, links, logs, browser and proxy behavior, generated clients, validation, and which party is allowed to control a value.
I put stable resource identity and hierarchy in the route, optional filters, sorting, paging, and view controls in the query string, and a create or update representation in the body. For example, GET /orders/42 identifies one order, while GET /orders?status=open&cursor=abc selects a page from the collection. POST /orders carries creation fields in the body. Headers carry protocol metadata such as authorization, conditional validators, correlation, or content negotiation rather than ordinary domain fields.