Skip to content

Changelog

Changes to the public API, newest first. Anything that would break an existing integration is called out explicitly.

2026-08-03

Releases now report the languages they actually shipped. No endpoint, parameter or response body changed — the languages array has the same shape, and the values in it are now correct.

  • GET /releases/{release_id} no longer lists languages a release does not contain. It previously returned the project’s languages as they are now, so a language added after a release was published appeared in that release’s languages with download URLs that returned 404. It now returns the set captured when the release was published. If you were filtering the array by probing each URL, you can stop.
  • is_base_language is the base language as of publish, not as of now. Changing a project’s base language no longer relabels releases published before the change.
  • /r/latest/ drops languages the newest release does not ship. Previously a language removed from a project kept being served from latest indefinitely, with the previous release’s content, because publishing only overwrote files and never removed them. A hard-coded latest/{language} path for such a language now returns 404 instead of stale strings. Pinned release URLs are unaffected — they were always immutable.

2026-07-27

Documentation and response metadata. No endpoint, parameter or response body changed.

  • The API description moved to OpenAPI 3.1. The reference now documents every response header, lists both environments as selectable servers, and carries realistic examples.
  • 429 responses are now JSON. They previously returned a plain-text Too Many Requests body, which was the only response that did not follow the documented {"error": "..."} shape. Clients matching on the body of a 429 should now expect {"error": "rate limit exceeded"}; clients branching on the status code — as recommended — are unaffected.
  • These developer docs were published at docs.localeo.app.

Known limitations

  • List responses carry no pagination metadata. GET /releases returns items with no total or page count, and because drafts are filtered out after a page is read, a short page does not reliably indicate the end of the collection. Pagination documents the reliable approach in the meantime. A fix is planned.