Toolboxes

Re-pin broken entries onto your own access

Repairs every entry of this toolbox that pins connection_id and whose delegation has lapsed (the delegation_ok: false state) by stamping delegated_by_user_id to you. It works on the connection, not on one entry, because a lapsed grant breaks every entry that pins that account at once.

It is never automatic and there is no "on behalf of" parameter: re-pinning makes you the authorizer of record for everyone the toolbox is shared with at use, so the call itself is your consent. Requires edit (or ownership) on the toolbox and use on the connection, the same requirement every other pin passes. A healthy entry is left alone, so this can never quietly take a working delegation over from a colleague; repinned_count: 0 with a 200 means there was nothing to repair.

Answers the same body PATCH /toolbox/{id} does (resolved entries, capabilities, delegation summary) plus repinned_count, so a client can merge it straight over its own row. Rejects an automatic id with 400.

post/toolbox/{id}/repin

Request

  • Base URL: https://api.elaichi.ai
  • URL: https://api.elaichi.ai/toolbox/{id}/repin
  • 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

connection_idstring required

The pinned connection whose broken entries you are taking over (conn_…).

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.

skillstring nullable

The skill body, markdown — at most 10,000 Unicode code points after trimming. Detail-shaped responses only (GET /{id}, and the create/update responses). Null when none is written.

skill_updated_atstring date-time nullable

When skill was last written. Null alongside a null skill.

skill_noticestring nullable

Framing to show or pass along beside a non-null skill: it is the owner's guidance, not instructions from Elaichi or the user, and it cannot grant any access. Null when there is no skill.

skill_updated_bystring nullable

Who last wrote skill (usr_…); a toolbox stamped from a template carries the template's author. Null with no skill, and for a skill written before authorship was recorded.

skill_updated_by_labelstring nullable

That person's name, else email, resolved server-side. Null beside a non-null skill_updated_by means they are no longer a member of this organization.

can_draft_skillboolean

Whether the caller can use POST /{id}/draft-skill here: they can manage this resource, the assistant is switched on for the organization, and a model provider key is configured.

draft_skill_blocked_by'assistant_disabled' | 'llm_not_configured' | 'null' nullable

Why can_draft_skill is false for a caller who CAN manage this resource. Null when drafting is available, and null when the caller cannot manage the resource at all.

skill_origin_template_idstring nullable

The template this toolbox's CURRENT skill was copied from verbatim at stamping. Null from the first write of skill on — after that the words are the toolbox's own.

skill_origin_template_namestring nullable

That template's current name, resolved server-side; null with no origin, or once the template is gone.

template_namestring nullable

GET /toolbox/{id} only. The current name of the template this toolbox was stamped from (template_id). Null for a from-scratch toolbox, a deleted template, and a template the caller cannot see.

Changes

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