Start here. This is the direct spoken answer to practice first.
Why this question matters
A full-stack feature often succeeds or fails at the contract boundary. The UI needs enough data to render cleanly, while the API needs controlled inputs and stable behavior.
I would start from the user workflow and define explicit request and response DTOs for that workflow. The request includes only fields the user is allowed to set, not internal entity fields. The response includes the data the page needs after the action, such as id, display values, status, permissions, and timestamps. I would document validation errors and normal failure cases so the UI can handle them predictably.