What we can change without warning
These are additive, and your integration should tolerate them:- New fields on existing responses. Parse the fields you need and ignore the rest. Do not assert on an exact object shape.
- New endpoints.
- New optional request parameters.
- New error codes, within the existing
typevalues. Branch ontypefirst, then handle the specific codes you care about, and treat anything unrecognised as a generic failure of that type. - Wording of
message. It is written for a human reading a log. Never parse it.
What counts as breaking
These will not happen insidev1:
- Removing or renaming a field, endpoint, or error
type. - Changing a field’s type, including the units of a monetary amount.
- Making an optional request parameter required.
- Tightening validation so a request that used to succeed now fails.
/v2, and /v1 keeps working.
Deprecation
If an endpoint is going away, in this order:- It gets marked deprecated in this documentation and in the OpenAPI description.
- Responses start carrying a
Deprecationheader and aSunsetheader with the removal date. - We email the account owner for any key that has called it in the previous 30 days.
- At the earliest, it is removed six months after step 2.
Pinning a client
The OpenAPI description at api.setaside.money/v1/openapi.json is generated from the routes themselves, so it cannot drift from what is actually running. If you generate a client from it, regenerate periodically to pick up new endpoints. Nothing you already use will move. Money is always an integer number of cents, and it will stay that way insidev1. That is the
field type most likely to trip up a client and the one least likely to change.