The handler
Parse, reject with a 400 that names the field, then write. Same schema shared with the client when it helps. No `as any` on the way in.
When we add a queue
If the work cannot finish in a request, it goes on a queue with the same schema. Webhooks get a signature check before the schema.
Questions
GraphQL?
Not by default. REST or tRPC-shaped routes until the product has a client zoo that needs a graph.