Changelog¶
v1.10.0¶
- Library list endpoint (
GET /api/v1/libraries/) accepts a newsearchquery 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 existingqparameter is unchanged and remains a focused name/description search with full-text ranking. When both parameters are provided,searchtakes precedence.
v1.9.0¶
- Library submit endpoint (
POST /api/v1/libraries/): theaddressfield is now conditionally optional. It may be empty only when coordinates (latitudeandlongitude) 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. Theaddressfield 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_favouritedfield 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
qsearch 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}/photoandGET /statistics/to rate-limiting documentation
v1.2.0¶
- Login endpoint (
POST /auth/login) now accepts email address in theusernamefield, 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