Toolboxes

Transfer toolbox ownership

Changes owner_user_id — and nothing else. Every existing grant is left exactly as it was, so nobody who could already reach it loses that reach; the new owner gains only what ownership itself confers (implicit edit, plus delete and transfer). Each entry's own delegator (whoever held use when they pinned it) is untouched by an ownership transfer of the TOOLBOX — that is a separate fact from who owns the pinned connection. Rejects a dynamic id with 400. Allowed for the current owner only — no toolbox:manage fallback.

post/toolbox/{id}/transfer

Request

  • Base URL: https://api.elaichi.ai
  • URL: https://api.elaichi.ai/toolbox/{id}/transfer
  • Auth: HTTP bearer

Path parameters

idstring required

Stored toolbox id (tbx_…).

Headers

X-Organization-Idstring

Target organization (org_…). Required for cookie/session auth on org-scoped routes; optional for API tokens, which carry their organization, and rejected when it names a different one.

Request body

owner_user_idstring required

New owning member (usr_…).

Response

OK

idstring

Toolbox id — a stored row (tbx_…), or a dynamic id (global:{user_id} / connection:{connection_id}).

namestring
descriptionstring nullable
owner_user_idstring

Creator (usr_…). For a dynamic row, the caller.

type'stored' | 'global' | 'connection'

stored = a real, shareable row. global/connection = computed per request, always readonly: true.

readonlyboolean

True for the dynamic global/per-connection toolboxes — never editable, shareable, transferable or deletable.

template_idstring nullable

Provenance only (stamped at creation, never a live link) — null for a from-scratch toolbox and for every dynamic row. May dangle after the template is deleted.

connection_idstring

Present only for type: "connection" dynamic rows.

connector_slugstring

Present only for type: "connection" dynamic rows.

access_levelstring

The caller's access: owner, or a granted view/use/edit level. Always owner for a dynamic row.

entry_countinteger

Omitted for dynamic rows, which have no stored entries of their own.

needs_connection_countinteger

Number of proxy entries with no connection pinned (connection_id is null), which is what a "N need connection" status is built from. Excludes synthetic entries, which pin no connection_id of their own by design. Omitted for dynamic rows (nothing to bind). Broken delegation (delegation_ok: false) only surfaces in the detail, inside entries[].

created_atstring date-time nullable

Null for dynamic rows, which are computed, never stored.

updated_atstring date-time nullable
has_skillboolean

Whether a skill is written. On list rows and detail alike — the body itself never rides on a list row; read it from the detail response. Omitted on a dynamic row, which has no skill of its own.

skill_may_be_staleboolean

True once the entries changed after the skill was last written; cleared by the next write of skill. Never true without a skill. Omitted on a dynamic row.

can_useboolean

Whether the caller may execute this toolbox's tools — based on the caller's ownership or grant level. Present on every list and detail row for both templates and toolboxes.

can_shareboolean

Whether the caller may share this toolbox — owner, edit access, or toolbox:share. No toolbox:manage fallback. Mirrors POST /toolbox/{id}/share's own check.

can_manageboolean

Whether the caller may edit this toolbox's own settings — owner, or edit access. No toolbox:manage fallback. Mirrors PATCH /toolbox/{id}.

can_transferboolean

Whether the caller may transfer or delete this toolbox — ownership, full stop. No toolbox:manage fallback. Mirrors POST /toolbox/{id}/transfer and DELETE /toolbox/{id}.

can_revoke_shareboolean

Whether the caller may grant or revoke access to this toolbox. It matches can_share and is separate from can_manage: an edit grantee whose role omits toolbox:share can edit the toolbox but cannot change who else has access. Mirrors DELETE /toolbox/{id}/share/{aclId}.

access_via'owner' | 'direct' | 'team' | 'org'

How the caller reaches this toolbox, not who else can. owner: they own it. direct: a grant names them personally. team: a grant to a team they belong to (or administer), named in access_via_team. org: an organization-wide grant. When several sources apply, the broadest wins and the access level plays no part: owner, else org, else team, else direct. A caller with edit personally and view org-wide reads org, because this field says how far the toolbox reaches, not what the caller may do with it. It describes only the caller's own access, so a view or use grantee still gets it while the list of other grantees stays hidden. Absent when nothing reaches the caller (for example, the former owner after a transfer of a resource that was never shared); absent never means org.

Changes

No recorded changes to this operation across all 1 revision of this API.