/v1. Within /v1 the contract changes only additively:
- new endpoints;
- new optional query parameters;
- new fields in responses;
- new error codes for new situations.
Breaking changes
Anything else is a breaking change: removing or renaming a field or endpoint, changing a field’s type or meaning, adding a value to an existing enum such asstatus, or making a parameter required.
A breaking change gets at least 6 months’ notice on the changelog, with what changes, what you need to do and the earliest date the old behaviour goes away. Where possible it ships as a new major version (/v2) while /v1 keeps working until that date.