Use a null-marker map when member names vary but every dynamic member must carry one deliberately narrow value: JSON null. This approach rejects false and zero markers while retaining extensibility; use a closed object when dynamic names are not part of the contract.
A troubleshooting-oriented approach to distinguishing omission, null, and unknown members while keeping a stable JSON core closed and routing approved change through a named extension boundary.
Use OpenAPI 3.1.1 to describe the HTTP exchange, and use JSON Schema Draft 2020-12 to express how a JSON payload is evaluated. This guide maps responsibilities, shows where a request-body schema fits, and offers a boundary-based troubleshooting approach.