API changelog for the Mujib REST API
This API changelog lists every change to Mujib’s public REST API (/api/v1) since launch, with its date, newest first. No path and no field name has changed since launch; every change so far concerns errors and the rate-limit headers.
What has changed in the Mujib REST API?
Section titled “What has changed in the Mujib REST API?”2026-11-04
Section titled “2026-11-04”- The key’s budget on every successful response:
X-RateLimit-LimitandX-RateLimit-Remainingon a valid key’s responses now describe that key’s own limit; they could show the per-address limit before.X-RateLimit-Resetnow says how many seconds are left until the key’s minute starts over. - A 429 from the per-address limit now carries the code
RATE_LIMITED, like the key’s own limit, instead ofBAD_REQUEST. - A malformed id in
GET /api/v1/contacts/{id}andGET /api/v1/bookings/{id}now returns a 404 withNOT_FOUND, like an id that does not exist, instead of a 400. - Impossible dates are refused with a 400: a day that does not exist in
fromorto(such as2026-02-31), afromafterto, or an instant insincein the year0000. An impossible date used to fail with a server error, and afromaftertoused to return an empty list. GET /api/v1/bookings/{id}now returns a 404 for historical rows imported from an old register, which the list already left out.
2026-10-25
Section titled “2026-10-25”- A 400 for an invalid parameter now lists only the first 20 problems in
issues, withissueCountgiving the total.
2026-10-19
Section titled “2026-10-19”- The public REST API launched with five requests:
GET /api/v1/me,GET /api/v1/contacts,GET /api/v1/contacts/{id},GET /api/v1/bookingsandGET /api/v1/bookings/{id}. - Read-only API keys starting with
mjb_live_, with two scopes,contacts.readandbookings.read, sent inAuthorization: BearerorX-Api-Key. - 60 requests a minute per key, cursor pagination with
nextCursor, and one error envelope,{ "error": { "code", "message" } }.
Do these changes need anything from my program?
Section titled “Do these changes need anything from my program?”Usually not, unless your program relied on the old behaviour in one of these cases:
- If you treated a 400 from a single-item request as “bad id”, treat a 404 the same way.
- If you told a rate-limit error apart by the code
BAD_REQUEST, build onRATE_LIMITEDor on the HTTP status 429. - If you sent a
fromaftertoand expected an empty list, fix the order: the request is now refused with a 400. - If you track your remaining budget from the headers, they are now your key’s numbers, and
X-RateLimit-Resettells you when the minute starts over.
How do I know the API changed?
Section titled “How do I know the API changed?”Every change is recorded on this page with its date, and the OpenAPI spec carries the date of the latest change in info.version. Compare the date you built against with the current one, and read what lies between them here. Every error code is detailed in API errors and rate limits.
Frequently asked questions
Does this changelog cover dashboard changes?
No. It covers the public REST API only, the requests under /api/v1. The product as a whole has its own changelog in the reference section.
Has the /api/v1 path changed since launch?
No. The same five requests sit at the same paths, with the same fields in their responses.
How do I know the OpenAPI spec matches the latest change?
Its info.version field holds the date of the latest entry in this changelog.