The API
The public API is versioned in the path:https://api.engini.io/v1. Everything documented here lives under /v1.
Additive changes ship without notice and your integration must tolerate them:
- New endpoints and new optional request fields
- New fields in responses - deserialize permissively; don’t fail on unknown keys
- New
errorCodevalues - treat an unrecognized code as a generic failure of its HTTP status - New enum members
- New entries in the application and tool catalog
The SDKs
engini-client (the generated REST client) and engini / @engini/sdk (the ergonomic layer) follow semantic versioning, currently in the 0.x range - so a minor bump can carry a breaking change, and a patch never does.
The generated client is regenerated from the OpenAPI spec on every API release, and its version bump is computed from a machine diff of the spec rather than chosen by hand. If the diff says breaking, the version says breaking.
How we handle a breaking change
When something on a surface with real users has to break or be renamed, the default pattern is:- Add the new path and keep the old one working
- Announce the deprecation in the changelog with a date
- Ship SDKs that use the new path
- Remove the old path only after that window
Deprecation signals
- The changelog is the authoritative record - check it before upgrading
- Deprecated tools carry
isDeprecated: truein the catalog;GET /v1/toolsexcludes them unless you passincludeDeprecated=true - Deprecated endpoints keep working through their announced window