Start here. This is the direct spoken answer to practice first.
Overview
A DTO is the API's explicit contract, not a duplicate class created by habit.
A request DTO defines exactly which fields a client may send and where transport validation applies. A response DTO defines the representation the API promises without exposing internal entity shape, lazy relationships, or implementation-only fields. Separate create and update DTOs prevent writable fields from being inferred from a persistence model. The controller maps transport data to an application operation and maps the result back to the response contract.