Bookmarks Endpoints
Manage user bookmarks for verses. All endpoints require authentication.GET /api/bookmarks
Retrieve all bookmarks for the authenticated user.Authentication
Requires Clerk authentication. Include authentication headers with the request.Response
Returns an array of bookmarked verses sorted by creation date (newest first).Unique bookmark ID
User’s unique identifier
Chapter number (1-18)
Verse number
English translation of the verse
Commentary or summary for the verse
ISO 8601 timestamp when the bookmark was created
Response Example
Error Responses
| Status Code | Description |
|---|---|
| 401 | Unauthorized - authentication required |
| 429 | Rate limit exceeded (30 requests per minute) |
| 500 | Failed to fetch bookmarks |
| 503 | Database not configured |
POST /api/bookmarks
Create a new bookmark for a verse.Authentication
Requires Clerk authentication.Request
Chapter number (1-18)
Verse number (must be valid for the chapter)
English translation of the verse (max 10,000 characters)
Commentary or summary for the verse (max 10,000 characters)
Request Body Example
Response
Error Responses
| Status Code | Description |
|---|---|
| 400 | Missing required fields, invalid chapter/verse, or text too long |
| 401 | Unauthorized |
| 409 | Already bookmarked (duplicate) |
| 429 | Rate limit exceeded |
| 500 | Failed to save bookmark |
| 503 | Database not configured |
DELETE /api/bookmarks
Remove a bookmark for a specific verse.Authentication
Requires Clerk authentication.Query Parameters
Chapter number (1-18)
Verse number
Response
Error Responses
| Status Code | Description |
|---|---|
| 400 | Invalid chapter or verse |
| 401 | Unauthorized |
| 429 | Rate limit exceeded |
| 500 | Failed to remove bookmark |
| 503 | Database not configured |
Rate Limiting
All bookmark endpoints: 30 requests per minute per clientCode Examples
Notes
- Bookmarks are unique per user, chapter, and verse combination
- Attempting to bookmark the same verse twice returns a 409 conflict error
- Bookmarks are stored in Supabase database
- All text fields have a maximum length of 10,000 characters