Skip to main content
The Bookmarks API is the core of Bkmark. You can store any URL as a bookmark, attach tags and groups, mark items as favorites or archived, and manage an entire bookmark library programmatically. All endpoints require a valid Bearer token in the Authorization header — see the Authentication guide to obtain one.
All endpoints are relative to the base URL https://api.bkmark.it/api/v1. Pagination uses cursor-based navigation: pass the nextCursor value from one response as the cursor parameter in your next request. When nextCursor is null, you have reached the last page.

GET /api/v1/bookmarks

List bookmarks for the authenticated user. Results are paginated and can be filtered by group, tag, type, source, and read/favorite/archive status.
string
Pagination cursor. Pass the nextCursor value from a previous response to fetch the next page.
number
default:"20"
Number of items to return per page. Accepted range: 1–100.
string
Filter to bookmarks that belong to this group UUID.
string
Filter to bookmarks that have this tag UUID applied.
Full-text search query. Searches across title, description, and URL.
boolean
When true, returns only favorited bookmarks.
boolean
When true, returns only archived bookmarks.
boolean
When true, returns only bookmarks that have never been marked as read (i.e., readAt is null).
string
Filter by bookmark type. One of: link, note, code, image.
string
Filter by the source that created the bookmark. One of: web, extension, api, import, slack.
string
default:"createdAt"
Field to sort by. One of: createdAt, title, url.
string
default:"desc"
Sort direction. One of: asc, desc.

POST /api/v1/bookmarks

Create a new bookmark. If you omit title or description, Bkmark automatically fetches and parses the URL to populate them. Tags named in tagNames are created on the fly if they don’t already exist.
string
required
The URL to bookmark. Required for link and image types.
string
Title override. If omitted, Bkmark fetches it from the URL’s <title> tag.
string
Short description or note. Auto-populated from the page’s meta description if omitted.
string
default:"link"
Bookmark type. One of: link, note, code, image.
string[]
Array of tag names to apply. Tags that don’t exist are created automatically.
string[]
Array of group UUIDs to add this bookmark to.
string
The originating surface. One of: web, extension, api, import, slack. Defaults to api for programmatic requests.
boolean
Set to true to bypass duplicate URL detection and create a second bookmark for the same URL.
If the URL already exists in the library and force is not set, the API returns 409 Conflict with error code duplicate_url. Use force: true if you intentionally want a duplicate entry.
Returns 201 Created with the newly created bookmark object.

GET /api/v1/bookmarks/:id

Retrieve a single bookmark by its UUID.
string
required
The UUID of the bookmark to retrieve.

PATCH /api/v1/bookmarks/:id

Update a bookmark’s metadata. All body fields are optional — only send what you want to change.
string
required
The UUID of the bookmark to update.
string
New title for the bookmark.
string
New description.
boolean
Set to true to favorite the bookmark, false to unfavorite it.
boolean
Set to true to archive the bookmark, false to unarchive it.
string
ISO 8601 timestamp to mark the bookmark as read (e.g. "2025-04-01T15:00:00.000Z"). Send null to mark it as unread again.
Returns 200 OK with the updated bookmark object.

DELETE /api/v1/bookmarks/:id

Delete a bookmark. By default this is a soft delete — the bookmark moves to trash and can be restored. Add ?permanent=true to bypass trash and delete immediately.
string
required
The UUID of the bookmark to delete.
boolean
Set to true to permanently delete the bookmark instead of moving it to trash. This action is irreversible.
Returns 204 No Content on success.

POST /api/v1/bookmarks/:id/tags

Replace all tags on a bookmark in one call. Any tag names that don’t exist are created automatically. Sending an empty array removes all tags from the bookmark.
string
required
The UUID of the bookmark.
string[]
required
Complete list of tag names the bookmark should have after this call. Replaces the existing tag set entirely.
This is a replace operation, not an append. If the bookmark currently has tags ["dev", "reading"] and you POST ["ai"], the result is only ["ai"]. To add a tag without removing others, first fetch the current tags and include them in your new list.
Returns 200 OK with the updated bookmark object.

POST /api/v1/bookmarks/:id/groups

Replace all group assignments for a bookmark. Sending an empty array removes the bookmark from all groups.
string
required
The UUID of the bookmark.
string[]
required
Complete list of group UUIDs the bookmark should belong to after this call. Replaces the existing group assignments entirely.
Returns 200 OK with the updated bookmark object.

POST /api/v1/bookmarks/bulk

Apply a single action to up to 500 bookmarks in one request. Use this to batch-tag, move, archive, favorite, or delete bookmarks without looping over individual endpoints.
string[]
required
Array of bookmark UUIDs to act on. Maximum 500 items.
string
required
The operation to perform. See the table below for available actions and their extra fields.
string[]
Required when action is tag. Tag names to add to all selected bookmarks.
string[]
Required when action is move. Group UUIDs to move all selected bookmarks into.
delete_permanent and export cannot be undone. Double-check your bookmarkIds array before issuing these actions.

GET /api/v1/bookmarks/export

Export your entire bookmark library as a JSON file. The response body is a JSON array of bookmark objects in the same shape as the list endpoint.
Returns 200 OK with Content-Type: application/json.

POST /api/v1/bookmarks/import

Import bookmarks from a supported format. You can migrate from a browser export, Pocket, Raindrop.io, or a previous Bkmark export.
string
required
Source format. One of: json (Bkmark export), html (browser bookmark export), pocket, raindrop.
string
required
The raw file contents as a string (JSON string or HTML string depending on format).
boolean
When true, bookmarks whose URLs already exist in your library are silently skipped instead of triggering a conflict error.
This endpoint is rate-limited to 5 imports per hour per user to protect system performance during large batch jobs.

GET /api/v1/bookmarks/trash

List soft-deleted bookmarks. Supports the same cursor-based pagination as the main list endpoint.

GET /api/v1/bookmarks/trash-count

Return the number of bookmarks currently in trash. Useful for displaying a badge in your UI.

POST /api/v1/bookmarks/:id/restore

Restore a soft-deleted bookmark from trash back to your active library. The bookmark’s original tags and group assignments are preserved.
string
required
The UUID of the trashed bookmark to restore.
Returns 200 OK with the restored bookmark object.

DELETE /api/v1/bookmarks/:id/permanent

Permanently delete a specific bookmark. Unlike DELETE /bookmarks/:id, this endpoint always performs a hard delete regardless of query parameters. The bookmark is unrecoverable after this call.
string
required
The UUID of the bookmark to permanently delete.
This action is irreversible. The bookmark and all its associations (tags, group memberships) are removed permanently.
Returns 204 No Content on success.