Skip to main content
POST/api/public/v1/bookmarks/imports

bookmarks.import

Read a browser bookmark export (Netscape bookmark HTML from Chrome, Edge, Firefox …, at most 10 MB) and store its http(s) links as an import (at most 5000). javascript:, data:, file: and other schemes, and addresses with a user name or password, are rejected with a reason; the same file twice is one import.

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

Parameters

NameTypeRequiredDescription
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.
namebodystringYesShown in the library, e.g. "Team links October" (min length 1, max length 120)
htmlbodystringYesThe whole bookmark export file as text (bookmarks.html) (min length 1, max length 10485760)
file_namebodystringNoThe original file name, for people reading the library (max length 200)

Examples

curl -X POST "https://browlix.com/api/public/v1/bookmarks/imports" \
  -H "Authorization: Bearer $BROWLIX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"command_id":"<uuid>","name":"<name>","html":"<html>"}'

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.setobjectYes
data.set.idstring (uuid)Yes
data.set.namestringYes
data.set.source_namestringNo
data.set.linksintegerYes(min -9007199254740991, max 9007199254740991)
data.set.foldersintegerYes(min -9007199254740991, max 9007199254740991)
data.set.rejected_countintegerYes(min -9007199254740991, max 9007199254740991)
data.set.rejectedarray<object>NoUp to 50 examples (title and scheme only)
data.set.rejected[].reason"unsafe_scheme" | "invalid_url" | "credentials" | "too_long" | "too_deep" | "over_limit"Yes
data.set.rejected[].titlestringYes
data.set.rejected[].schemestringYes
data.set.duplicates_in_fileintegerYes(min -9007199254740991, max 9007199254740991)
data.set.sha256stringYes
data.set.created_atstringYes
data.set.pendingintegerYesProfiles that still wait for (or are applying) this import (min -9007199254740991, max 9007199254740991)
data.set.appliedintegerYes(min -9007199254740991, max 9007199254740991)
data.createdbooleanYesfalse: this exact list was already imported
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
CONFLICT409No
OUTCOME_UNKNOWN202Yes
DEPENDENCY_UNAVAILABLE503Yes
UNKNOWN500No

Every error code and when to retry

All operations