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.Pagination cursor. Pass the
nextCursor value from a previous response to fetch the next page.Number of items to return per page. Accepted range: 1–100.
Filter to bookmarks that belong to this group UUID.
Filter to bookmarks that have this tag UUID applied.
Full-text search query. Searches across title, description, and URL.
When
true, returns only favorited bookmarks.When
true, returns only archived bookmarks.When
true, returns only bookmarks that have never been marked as read (i.e., readAt is null).Filter by bookmark type. One of:
link, note, code, image.Filter by the source that created the bookmark. One of:
web, extension, api, import, slack.Field to sort by. One of:
createdAt, title, url.Sort direction. One of:
asc, desc.POST /api/v1/bookmarks
Create a new bookmark. If you omittitle 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.
The URL to bookmark. Required for
link and image types.Title override. If omitted, Bkmark fetches it from the URL’s
<title> tag.Short description or note. Auto-populated from the page’s meta description if omitted.
Bookmark type. One of:
link, note, code, image.Array of tag names to apply. Tags that don’t exist are created automatically.
Array of group UUIDs to add this bookmark to.
The originating surface. One of:
web, extension, api, import, slack. Defaults to api for programmatic requests.Set to
true to bypass duplicate URL detection and create a second bookmark for the same URL.201 Created with the newly created bookmark object.
GET /api/v1/bookmarks/:id
Retrieve a single bookmark by its UUID.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.The UUID of the bookmark to update.
New title for the bookmark.
New description.
Set to
true to favorite the bookmark, false to unfavorite it.Set to
true to archive the bookmark, false to unarchive it.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.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.
The UUID of the bookmark to delete.
Set to
true to permanently delete the bookmark instead of moving it to trash. This action is irreversible.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.The UUID of the bookmark.
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.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.The UUID of the bookmark.
Complete list of group UUIDs the bookmark should belong to after this call. Replaces the existing group assignments entirely.
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.Array of bookmark UUIDs to act on. Maximum 500 items.
The operation to perform. See the table below for available actions and their extra fields.
Required when
action is tag. Tag names to add to all selected bookmarks.Required when
action is move. Group UUIDs to move all selected bookmarks into.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.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.Source format. One of:
json (Bkmark export), html (browser bookmark export), pocket, raindrop.The raw file contents as a string (JSON string or HTML string depending on
format).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.The UUID of the trashed bookmark to restore.
200 OK with the restored bookmark object.
DELETE /api/v1/bookmarks/:id/permanent
Permanently delete a specific bookmark. UnlikeDELETE /bookmarks/:id, this endpoint always performs a hard delete regardless of query parameters. The bookmark is unrecoverable after this call.
The UUID of the bookmark to permanently delete.
204 No Content on success.