My Contributions¶
Authenticated users can list their own library submissions, reports, and community photo submissions with moderation status. These endpoints power the mobile contribution center and only ever return records owned by the caller.
All endpoints require a JWT access token and use standard pagination.
List my libraries¶
GET /api/v1/libraries/mine
Return the authenticated user's submitted libraries across all moderation statuses. New pending submissions and proposed edits to approved libraries are listed first, then remaining submissions newest first. A proposed edit uses the existing library ID and slug, returns the proposed values with status: "pending", and does not make the approved public version unavailable.
Auth required: Yes (Bearer token)
Query parameters¶
| Parameter | Type | Default | Description |
|---|---|---|---|
page |
integer | 1 |
Page number (1-indexed) |
page_size |
integer | 20 |
Items per page (1-50) |
Response (200 OK)¶
Each item uses the standard library response fields plus status, rejection_reason, and the private osm_submission_allowed choice recorded for that submission. The OSM field only confirms whether the submitter permitted possible later manual administrator review; it does not indicate that a contribution will occur.
{
"items": [
{
"id": 42,
"slug": "florence-via-rosina-15-corner-books",
"name": "Corner Books",
"description": "A cozy book exchange near the park.",
"photo_url": "/media/libraries/photos/corner-books.jpg",
"thumbnail_url": "/media/libraries/thumbnails/corner-books.jpg",
"lat": 43.7696,
"lng": 11.2558,
"address": "Via Rosina 15",
"city": "Florence",
"country": "IT",
"postal_code": "50123",
"wheelchair_accessible": "yes",
"capacity": 50,
"is_indoor": false,
"is_lit": true,
"website": "",
"contact": "",
"source": "",
"operator": "",
"brand": "",
"created_at": "2025-06-15T14:30:00Z",
"is_favourited": false,
"status": "pending",
"rejection_reason": "",
"osm_submission_allowed": false
}
],
"pagination": {
"page": 1,
"page_size": 20,
"total": 1,
"total_pages": 1,
"has_next": false,
"has_previous": false
}
}
List my reports¶
GET /api/v1/libraries/mine/reports
Return the authenticated user's submitted reports, newest first.
Auth required: Yes (Bearer token)
Query parameters¶
| Parameter | Type | Default | Description |
|---|---|---|---|
page |
integer | 1 |
Page number (1-indexed) |
page_size |
integer | 20 |
Items per page (1-50) |
Response (200 OK)¶
{
"items": [
{
"id": 7,
"library": {
"id": 42,
"slug": "florence-via-rosina-15-corner-books",
"name": "Corner Books",
"city": "Florence",
"country": "IT",
"status": "approved"
},
"reason": "damaged",
"status": "open",
"created_at": "2025-06-15T14:30:00Z"
}
],
"pagination": {
"page": 1,
"page_size": 20,
"total": 1,
"total_pages": 1,
"has_next": false,
"has_previous": false
}
}
List my community photos¶
GET /api/v1/libraries/mine/photos
Return the authenticated user's community photo submissions, newest first.
Auth required: Yes (Bearer token)
Query parameters¶
| Parameter | Type | Default | Description |
|---|---|---|---|
page |
integer | 1 |
Page number (1-indexed) |
page_size |
integer | 20 |
Items per page (1-50) |
Response (200 OK)¶
{
"items": [
{
"id": 12,
"library": {
"id": 42,
"slug": "florence-via-rosina-15-corner-books",
"name": "Corner Books",
"city": "Florence",
"country": "IT",
"status": "approved"
},
"caption": "A sunny day at the library.",
"photo_url": "/media/libraries/user_photos/photo.jpg",
"thumbnail_url": "/media/libraries/user_photos/thumbnails/photo.jpg",
"status": "pending",
"created_at": "2025-06-15T14:30:00Z"
}
],
"pagination": {
"page": 1,
"page_size": 20,
"total": 1,
"total_pages": 1,
"has_next": false,
"has_previous": false
}
}
Errors¶
| Status | Cause |
|---|---|
401 |
Missing or invalid authentication token |
422 |
Invalid pagination parameter |
429 |
Rate limit exceeded (see Rate Limiting) |