Skip to content

Changelog

v1.10.0

  • Library list endpoint (GET /api/v1/libraries/) accepts a new search query parameter for a global simple search across name, description, city, address, and postal code. It supports substring matches (useful for partial addresses and postal codes) and ranks name matches above other field matches when full-text search is available. The existing q parameter is unchanged and remains a focused name/description search with full-text ranking. When both parameters are provided, search takes precedence.

v1.9.0

  • Library submit endpoint (POST /api/v1/libraries/): the address field is now conditionally optional. It may be empty only when coordinates (latitude and longitude) are provided, which supports libraries located in places without a classic street address (e.g. inside a park). Coordinates remain mandatory; an empty address with no coordinates is rejected. The address field in library response payloads may now be an empty string.

v1.8.0

  • Favourites: authenticated users can mark (POST /libraries/{slug}/favourite) and unmark (DELETE /libraries/{slug}/favourite) approved libraries as favourites.
  • Favourites list endpoint (GET /api/v1/libraries/favourites) returns the user's favourited libraries with pagination, ordered by when they were favourited.
  • Library detail, list, and latest endpoints now include an is_favourited field indicating whether the authenticated user has favourited the library.

v1.7.0

  • Change email endpoint (PATCH /auth/me/email) allows authenticated users to update their email address with uniqueness validation.
  • Change password endpoint (PUT /auth/me/password) allows authenticated users to change their password with current password verification and Django password policy validation.
  • Delete account endpoint (DELETE /auth/me) allows authenticated users to permanently delete their account with password confirmation.

v1.6.0

  • Library submissions are now enriched with AI-generated name and description when the user leaves those fields blank. The description is also used as image alt text for improved accessibility.

v1.5.0

  • Social login endpoint (POST /auth/social) exchanges native Apple or Google identity tokens for JWT token pairs. Supports automatic account creation, email-based account linking, and Apple first sign-in name capture.

v1.4.0

  • Country list endpoint (GET /api/v1/libraries/countries/) returns all countries with approved libraries and counts, ordered by count descending

v1.3.0

  • Community photo endpoint (POST /api/v1/libraries/{slug}/photo) is now documented
  • Fixed q search parameter description: searches name and description (not address)
  • Fixed image format documentation: JPEG/PNG/WEBP accepted (not just JPEG/PNG)
  • Fixed GET /api/v1/statistics/ path in docs (was missing /api/v1/ prefix)
  • Added POST /libraries/{slug}/photo and GET /statistics/ to rate-limiting documentation

v1.2.0

  • Login endpoint (POST /auth/login) now accepts email address in the username field, matching the web login flow. Email lookup is case-insensitive and the identifier is trimmed before authentication.

v1.1.0

  • Public statistics endpoint (GET /api/v1/statistics/) with totals, top countries, and cumulative growth series
  • Community photo submissions count towards the "libraries with photos" statistic

v1.0.0

Initial release

  • JWT authentication (register, login, refresh, me)
  • Library listing with text search, city/country/postal code filtering, and proximity search
  • Library detail by slug with owner visibility for pending submissions
  • Library submission with photo upload and moderation workflow
  • Issue reporting with reason categories and optional photo
  • Paginated responses with navigation metadata
  • Rate limiting for read, write, and auth endpoints
  • Consistent error response format across all endpoints