Skip to main content
POST/api/public/v1/extensions/{id}/assignments

extensions.assign

Load an extension in every profile of the workspace, of one group, or one profile. required (default true) blocks a start when no approved version exists or its file cannot be fetched and checked; optional ones are reported and skipped.

Capability: extension.manageCommand (idempotent)MCP tool: extensions_assign
View as Markdown

Parameters

NameTypeRequiredDescription
idpathstring (uuid)YesExtension 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.
target_kindbody"workspace" | "group" | "profile"Yes
target_idbodystring (uuid)NoThe group or profile (omit for workspace)
requiredbodybooleanNoBlock a start when it cannot be loaded (default) instead of skipping it Default: `true`.

Examples

curl -X POST "https://browlix.com/api/public/v1/extensions/<id>/assignments" \
  -H "Authorization: Bearer $BROWLIX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"command_id":"<uuid>","target_kind":"workspace"}'

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.packageobjectYes
data.package.idstring (uuid)Yes
data.package.namestringYes
data.package.source"store" | "upload"Yes
data.package.store_idstringNo
data.package.chrome_idstringYesThe extension ID every machine loads it under
data.package.key_generatedbooleanYesBrowlix created the key of an uploaded extension without one, so its ID stays the same everywhere
data.package.state"approved" | "update_pending" | "unreviewed" | "rejected" | "disabled"Yes
data.package.revisionintegerYes(min -9007199254740991, max 9007199254740991)
data.package.active_versionobjectNoThe version profiles load
data.package.active_version.idstring (uuid)Yes
data.package.active_version.versionstringYes
data.package.active_version.namestringYes
data.package.active_version.manifest_versionintegerYes(min -9007199254740991, max 9007199254740991)
data.package.active_version.sha256stringYesSHA-256 of the stored file; machines check it before loading
data.package.active_version.size_bytesintegerYes(min -9007199254740991, max 9007199254740991)
data.package.active_version.format"crx3" | "zip"Yes
data.package.active_version.signature"verified" | "unsigned"Yesverified: every CRX3 proof checked by the server; unsigned: a plain ZIP
data.package.active_version.store_signedbooleanYesAlso signed by the Chrome Web Store
data.package.active_version.permissionsarray<string>Yes
data.package.active_version.host_permissionsarray<string>YesSites it can read and change (host permissions and content-script matches)
data.package.active_version.optional_permissionsarray<string>Yes
data.package.active_version.licensestringNoLicence found in the package (SPDX id, or custom); absent when the package has no licence file
data.package.active_version.same_version_changedbooleanYesA different file under a version number already in the library
data.package.active_version.state"unreviewed" | "approved" | "rejected"Yes
data.package.active_version.added_permissionsarray<string>NoPermissions beyond the version profiles load now (what an approval must acknowledge)
data.package.active_version.removed_permissionsarray<string>No
data.package.active_version.created_atstring (date-time)Yes
data.package.active_version.reviewed_atstring (date-time)No
data.package.pending_versionobjectNoThe newest version waiting for review
data.package.pending_version.idstring (uuid)Yes
data.package.pending_version.versionstringYes
data.package.pending_version.namestringYes
data.package.pending_version.manifest_versionintegerYes(min -9007199254740991, max 9007199254740991)
data.package.pending_version.sha256stringYesSHA-256 of the stored file; machines check it before loading
data.package.pending_version.size_bytesintegerYes(min -9007199254740991, max 9007199254740991)
data.package.pending_version.format"crx3" | "zip"Yes
data.package.pending_version.signature"verified" | "unsigned"Yesverified: every CRX3 proof checked by the server; unsigned: a plain ZIP
data.package.pending_version.store_signedbooleanYesAlso signed by the Chrome Web Store
data.package.pending_version.permissionsarray<string>Yes
data.package.pending_version.host_permissionsarray<string>YesSites it can read and change (host permissions and content-script matches)
data.package.pending_version.optional_permissionsarray<string>Yes
data.package.pending_version.licensestringNoLicence found in the package (SPDX id, or custom); absent when the package has no licence file
data.package.pending_version.same_version_changedbooleanYesA different file under a version number already in the library
data.package.pending_version.state"unreviewed" | "approved" | "rejected"Yes
data.package.pending_version.added_permissionsarray<string>NoPermissions beyond the version profiles load now (what an approval must acknowledge)
data.package.pending_version.removed_permissionsarray<string>No
data.package.pending_version.created_atstring (date-time)Yes
data.package.pending_version.reviewed_atstring (date-time)No
data.package.versions_countintegerYes(min -9007199254740991, max 9007199254740991)
data.package.assignmentsarray<object>Yes
data.package.assignments[].idstring (uuid)Yes
data.package.assignments[].target_kind"workspace" | "group" | "profile"Yes
data.package.assignments[].group_idstring (uuid)No
data.package.assignments[].profile_idstring (uuid)No
data.package.assignments[].target_namestringNo
data.package.assignments[].hiddenbooleanNoThe group or profile is outside your group scope: it is not named
data.package.assignments[].requiredbooleanYes
data.package.profiles_reachedintegerYesActive profiles at least one assignment reaches (min -9007199254740991, max 9007199254740991)
data.package.created_atstring (date-time)Yes
data.package.updated_atstring (date-time)Yes
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