Skip to main content
POST/api/public/v1/bookmarks/imports/{id}/apply

bookmarks.apply

Queue an import on up to 500 profiles; each profile applies it through its browser's own bookmarks at its next start. merge adds links not already in the target folder; replace first empties the target (one bookmarks-bar folder, or the whole bar and other bookmarks). Per profile: queued, conflict (its rev changed since your preview; nothing queued) or not_found.

Capability: bookmark.importCommand (idempotent)MCP tool: bookmarks_apply
View as Markdown

Parameters

NameTypeRequiredDescription
idpathstring (uuid)YesBookmark import id
command_idbodystring (uuid)YesClient-generated UUID for this command. Send the same id (and body) again to get the stored receipt instead of a second change; a different body under the same id is CONFLICT.
modebody"merge" | "replace"Yesmerge: add links not already there; replace: empty the target first
scopebody"folder" | "all"Yesfolder: everything goes into one bookmarks-bar folder (created if missing); all: the bar and other bookmarks as in the file
folderbodystringNoscope=folder: the bookmarks-bar folder name (min length 1, max length 120)
targetsbodyarray<object>Yes(min 1 items, max 500 items)

Examples

curl -X POST "https://browlix.com/api/public/v1/bookmarks/imports/<id>/apply" \
  -H "Authorization: Bearer $BROWLIX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"command_id":"<uuid>","mode":"merge","scope":"folder","targets":[]}'

Response

201 with { data, replayed: false, correlation_id } the first time; 200 with replayed: true when the same command_id and body come again.

FieldTypeAlways presentDescription
dataobjectYes
data.resultsarray<object>Yes
data.results[].profile_idstring (uuid)Yes
data.results[].state"queued" | "conflict" | "not_found"Yes
data.results[].op_idstring (uuid)No
data.results[].revintegerNo(min -9007199254740991, max 9007199254740991)
data.queuedintegerYes(min -9007199254740991, max 9007199254740991)
data.conflictsintegerYes(min -9007199254740991, max 9007199254740991)
data.not_foundintegerYes(min -9007199254740991, max 9007199254740991)
correlation_idstring (uuid)Yes
replayedbooleanNotrue when this command_id was already applied and the stored receipt came back

New fields can appear at any time; ignore the ones you do not know.

Errors

CodeHTTPRetryable
UNAUTHENTICATED401No
FORBIDDEN403No
RATE_LIMITED429Yes
VALIDATION_FAILED422No
NOT_FOUND404No
CONFLICT409No
OUTCOME_UNKNOWN202Yes
DEPENDENCY_UNAVAILABLE503Yes
UNKNOWN500No

Every error code and when to retry

All operations