Adding a field is safe by convention and unsafe in practice, because a client generated from a schema with additionalProperties: false rejects it.
{
"type": "object",
"properties": { "id": {}, "total": {} },
"additionalProperties": false
}
// so the compatibility rules go in the documentation, as
// a contract rather than an assumption:
// clients MUST ignore unknown fields
// clients MUST NOT depend on field ordering
// we MAY add fields and enum values in a minor version
Stating what may change is more useful than promising nothing will, because it tells a client author which assumptions are theirs to fix. Adding an enum value is the case that catches even careful clients — a switch over known values gains an unhandled case — and whether that is your fault depends entirely on whether you said it could happen.