Box
Cloud files. List, search, upload, and organize files and folders, share links, manage collaborators, and read or set metadata.
| Property | Value |
|---|---|
| Slug | box |
| Definition version | 0.1.0 |
| Base URL | https://api.box.com/2.0 |
| Auth schemes | oauth2 |
| Action tools | 36 |
| By class | 11 read, 17 write, 8 destructive |
| Triggers | 2 |
| Provider rate limit | 1000 requests per 1m, per account |
Measured routing accuracy
54 golden cases replayed through the router over the whole index: measured over corpus ea4f12ad2948 (65 toolkits, 2283 tools indexed and 13 declared uncallable), 34 cases written by hand and 20 cases from the paraphrase pass. A case counts as top-1 when its gold tool ranked first and top-8 when it reached the slate at all.
| Measure | Cases | Share |
|---|---|---|
| top-1 | 31/54 | 57.4% |
| top-8 | 52/54 | 96.3% |
2 of the 36 action tools listed above are declared uncallable, so they are indexed nowhere and answer none of these cases. The counts here are scored over the other 34.
The sweep is offline: the reranker is a deterministic identity fake that returns candidates in the order retrieval produced them, so top-1 measures retrieval order rather than a reranked slate. just eval-live measures the same cases through the live reranker.
Authentication
Connect an entity with ConnectionsService.InitiateConnection, naming this toolkit's slug. Credentials stay in the connections vault; callers hold connected-account ids only.
oauth2
| Property | Value |
|---|---|
| Authorization URL | https://account.box.com/api/oauth2/authorize |
| Token URL | https://api.box.com/oauth2/token |
| Default scopes | root_readonly, root_readwrite |
| Refresh tokens | yes, the refresh daemon renews ahead of expiry |
Tools
36 action tools. The catalog-wide slug is box.<tool>, which is what search_tools returns and call_tool takes.
box.get_file
Get one Box file's own details by id: name, size, and when it last changed. Use when the user names a specific file. For its actual content, use download_file. For a file's structured fields instead of these basics, use get_metadata.
Class read (reads only). Scopes root_readonly. Calls GET /files/{{params.file_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
file_id | string | yes | Box file id, e.g. "12345678901". |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
created_at | string (date-time) | |
id | string | |
modified_at | string (date-time) | |
name | string | |
parent | object | |
parent.id | string | |
parent.name | string | |
size | integer |
Also retrieved by: "how big is this", "when was this last touched", "check the details on this item", "what are the basics on this document".
box.download_file
Download the raw content of a Box file by id. Use when the user wants to fetch, save, or read what's inside a file already in Box. For a quick visual preview instead of the full file, use get_thumbnail.
Class read (reads only). Scopes root_readonly. Calls GET /files/{{params.file_id}}/content.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
file_id | string | yes | Box id of the file to download. |
Also retrieved by: "grab a copy of this", "save this to my computer", "fetch the actual bytes", "pull this down locally".
box.get_thumbnail
Get a small preview image for a Box file, when one can be rendered (photos, images, and many document types). Use when the user wants to see what a file looks like without downloading or opening it.
Class read (reads only). Scopes root_readonly. Calls GET /files/{{params.file_id}}/thumbnail.{{params.format}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
file_id | string | yes | Box id of the file to preview. |
format | string, one of png, jpg | yes | Thumbnail image format. |
Also retrieved by: "show me a small preview of this picture", "what does this image look like", "give me a quick look at this photo", "preview this without opening it".
box.upload_file
Create a new file in Box with the given content, inside a folder. Use when the user wants to add, save, or upload a document or note to Box. Content is base64-encoded. Fails if a file with that name already exists there; to add a version on top of one, use upload_new_version.
Class write (writes, no confirmation needed). Scopes root_readwrite. Calls POST /files/content.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
content | string | yes | File content, base64-encoded. |
name | string | yes | File name to create, e.g. "meeting-notes.txt". |
parent_folder_id | string | yes | Box id of the destination folder. Use "0" for the root. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
entries | array of object | |
entries[].id | string | |
entries[].name | string | |
entries[].size | integer |
Also retrieved by: "stash this note in my account", "put this text into a new document", "add a fresh item with this content", "save this write-up online".
box.upload_new_version
Upload new content for a file that already exists in Box, keeping its name and location and adding a new version. Use when the user wants to overwrite, update, or replace what's inside an existing Box file. Content is base64-encoded. Recover an older version with restore_file_version.
Class write (writes, no confirmation needed). Scopes root_readwrite. Calls POST /files/{{params.file_id}}/content.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
content | string | yes | New file content, base64-encoded. |
file_id | string | yes | Box id of the existing file to add a version to. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
entries | array of object | |
entries[].id | string | |
entries[].modified_at | string (date-time) | |
entries[].name | string | |
entries[].size | integer |
Also retrieved by: "overwrite what's inside this", "replace the content in that document", "swap out what's currently there with a fresh copy", "add a new version on top of what's there".
box.rename_file
Rename a Box file, keeping its content and location. Use when the user wants to retitle or relabel a file already in Box. For putting it in a different folder instead, use move_file.
Class write (writes, no confirmation needed). Scopes root_readwrite. Calls PUT /files/{{params.file_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
file_id | string | yes | Box id of the file to rename. |
name | string | yes | New file name, e.g. "Final Budget 2026.xlsx". |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | string | |
name | string |
Also retrieved by: "retitle this document", "give this a better name", "this is labeled wrong, fix the name", "change what this is called".
box.move_file
Move a Box file into a different folder, keeping its name. Use when the user wants to relocate, file away, or reorganize something already in Box. For giving it a new name in place, use rename_file.
Class write (writes, no confirmation needed). Scopes root_readwrite. Calls PUT /files/{{params.file_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
destination_folder_id | string | yes | Box id of the folder to move it into. |
file_id | string | yes | Box id of the file to move. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | string | |
name | string | |
parent | object | |
parent.id | string | |
parent.name | string |
Also retrieved by: "relocate this somewhere else", "put this in a different location", "this is in the wrong place", "file this away properly".
box.copy_file
Duplicate a Box file into a folder, leaving the original in place. Use when the user wants their own copy or a template to build from. Optionally give the copy a new name.
Class write (writes, no confirmation needed). Scopes root_readwrite. Calls POST /files/{{params.file_id}}/copy.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
destination_folder_id | string | yes | Box id of the folder the copy lands in. |
file_id | string | yes | Box id of the file to copy. |
new_name | string | no | Optional new name for the copy. Defaults to the original's name. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | string | |
name | string | |
parent | object | |
parent.id | string | |
parent.name | string |
Also retrieved by: "I want my own version of this", "duplicate this so I can edit it", "make a template from this", "clone this document".
box.delete_file
Move a Box file to the trash. Use when the user wants to remove or get rid of a file in Box. It stays recoverable there until someone empties it; bring it back with restore_trashed_file, or use permanently_delete_file to skip the trash for good.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). Scopes root_readwrite. Calls DELETE /files/{{params.file_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
file_id | string | yes | Box id of the file to trash. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
deleted | boolean |
Also retrieved by: "get rid of this for good", "remove this, I don't need it anymore", "toss this old draft", "trash this item".
box.list_file_versions
List a Box file's past versions: each version id, size, and when it was saved. Use when the user asks about earlier versions or wants to recover something they changed. Bring one back with restore_file_version.
Class read (reads only). Scopes root_readonly. Calls GET /files/{{params.file_id}}/versions.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
file_id | string | yes | Box id of the file to list versions for. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
entries | array of object | |
entries[].created_at | string (date-time) | |
entries[].id | string | |
entries[].modified_at | string (date-time) | |
entries[].size | integer |
Also retrieved by: "show me the version history", "what did this look like before", "who edited this and when", "see the earlier saves of this".
box.restore_file_version
Make an older version of a Box file the current one. Use when the user wants to undo a change or bring back a version they lost. Requires the version id from list_file_versions.
Class write (writes, no confirmation needed). Scopes root_readwrite. Calls POST /files/{{params.file_id}}/versions/current.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
file_id | string | yes | Box id of the file whose version is being restored. |
version_id | string | yes | Version id to promote, from list_file_versions. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | string | |
name | string |
Also retrieved by: "bring back an earlier version", "undo the last change to this", "I need the version from before", "roll this back to how it was".
box.restore_trashed_file
Bring a trashed Box file back to where it was. Use when the user wants to undelete or recover a file they, or someone else, moved to the trash. Optionally give it a new name or folder if the original spot is taken.
Class write (writes, no confirmation needed). Scopes root_readwrite. Calls POST /files/{{params.file_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
destination_folder_id | string | no | Optional folder id to restore into, if the original folder is gone. |
file_id | string | yes | Box id of the trashed file to restore. |
new_name | string | no | Optional new name, needed if the original name is now in use. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | string | |
item_status | string | |
name | string |
Also retrieved by: "undelete this, I made a mistake", "bring this back from the trash", "I need that thing I just removed", "recover the item I trashed earlier".
box.permanently_delete_file
Erase a file from the Box trash for good, skipping the recovery window. Use when the user wants to permanently delete, purge, or empty out a file that is already in the trash. Cannot be undone.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). Scopes root_readwrite. Calls DELETE /files/{{params.file_id}}/trash.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
file_id | string | yes | Box id of the already-trashed file to erase. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
deleted | boolean |
Also retrieved by: "wipe this out for real, don't just trash it", "empty this out of the recycle bin", "purge this item completely", "I want this gone, no recovering it".
box.list_folder_items
List the files and folders directly inside a Box folder. Use for what's in this folder or browsing a known location. For finding something by name or keyword anywhere in the account, use search.
Class read (reads only). Scopes root_readonly. Calls GET /folders/{{params.folder_id}}/items.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
folder_id | string | yes | Box folder id, or "0" for the account's root. |
limit | integer | no | Items to return, max 1000. Defaults to 100. |
offset | integer | no | Items to skip, for paging past the first page. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
entries | array of object | |
entries[].id | string | |
entries[].modified_at | string (date-time) | |
entries[].name | string | |
entries[].size | integer | |
entries[].type | string | |
total_count | integer |
Also retrieved by: "what's in this folder", "browse this directory", "show me what's inside here", "what's stored in this location".
box.get_folder
Get one Box folder's own details by id: name, size, when it last changed, and how many items it holds. Use when the user names a specific folder. For what's inside it, use list_folder_items.
Class read (reads only). Scopes root_readonly. Calls GET /folders/{{params.folder_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
folder_id | string | yes | Box folder id, or "0" for the account's root. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
created_at | string (date-time) | |
id | string | |
item_collection | object | |
item_collection.total_count | integer | |
modified_at | string (date-time) | |
name | string | |
parent | object | |
parent.id | string | |
parent.name | string | |
size | integer |
Also retrieved by: "how many things are in this folder", "check the details on this directory", "when did this folder last change".
box.create_folder
Create a new folder in Box inside a parent folder. Use when the user wants to organize files into a new folder or directory in Box.
Class write (writes, no confirmation needed). Scopes root_readwrite. Calls POST /folders.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
name | string | yes | New folder name, e.g. "Q3 Reports". |
parent_folder_id | string | yes | Box id of the parent folder, or "0" for the account's root. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | string | |
name | string | |
parent | object | |
parent.id | string | |
parent.name | string |
Also retrieved by: "make a new directory for this", "set up a place to keep these organized", "I need somewhere to put all this".
box.rename_folder
Rename a Box folder, keeping its contents and location. Use when the user wants to retitle or relabel a folder already in Box. For putting it inside a different folder instead, use move_folder.
Class write (writes, no confirmation needed). Scopes root_readwrite. Calls PUT /folders/{{params.folder_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
folder_id | string | yes | Box id of the folder to rename. |
name | string | yes | New folder name. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | string | |
name | string |
Also retrieved by: "retitle this directory", "give this folder a better name", "relabel this collection".
box.move_folder
Move a Box folder into a different parent folder, keeping its name and contents. Use when the user wants to relocate or reorganize a folder already in Box. For giving it a new name in place, use rename_folder.
Class write (writes, no confirmation needed). Scopes root_readwrite. Calls PUT /folders/{{params.folder_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
destination_folder_id | string | yes | Box id of the new parent folder to move it into. |
folder_id | string | yes | Box id of the folder to move. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | string | |
name | string | |
parent | object | |
parent.id | string | |
parent.name | string |
Also retrieved by: "relocate this whole directory", "put this folder somewhere else", "reorganize where this lives".
box.copy_folder
Duplicate a Box folder and everything in it into another folder, leaving the original in place. Use when the user wants their own copy of a whole folder structure to build from.
Class write (writes, no confirmation needed). Scopes root_readwrite. Calls POST /folders/{{params.folder_id}}/copy.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
destination_folder_id | string | yes | Box id of the folder the copy lands in. |
folder_id | string | yes | Box id of the folder to copy. |
new_name | string | no | Optional new name for the copy. Defaults to the original's name. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | string | |
name | string | |
parent | object | |
parent.id | string | |
parent.name | string |
Also retrieved by: "I want my own version of this whole directory", "duplicate this folder structure", "clone everything in this collection".
box.delete_folder
Move a Box folder to the trash, along with everything in it. Use when the user wants to remove or get rid of a folder in Box. It stays recoverable there until someone empties it; erase it for good with permanently_delete_folder.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). Scopes root_readwrite. Calls DELETE /folders/{{params.folder_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
folder_id | string | yes | Box id of the folder to trash. |
recursive | boolean | no | Required true to trash a folder that still has items in it. Defaults to false, which only succeeds on an empty folder. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
deleted | boolean |
Also retrieved by: "get rid of this whole directory", "remove this folder and everything in it", "trash this collection".
box.permanently_delete_folder
Erase a folder from the Box trash for good, skipping the recovery window. Use when the user wants to permanently delete, purge, or empty out a folder that is already in the trash. Cannot be undone.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). Scopes root_readwrite. Calls DELETE /folders/{{params.folder_id}}/trash.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
folder_id | string | yes | Box id of the already-trashed folder to erase. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
deleted | boolean |
Also retrieved by: "wipe this directory out for real", "empty this folder out of the recycle bin", "purge this collection completely".
box.search
Search the whole Box account by keyword, across files and folders. Use when the user wants to find or locate something by name or content rather than browse a folder they already know. Optionally scope the search to one folder or one item type.
Class read (reads only). Scopes root_readonly. Calls GET /search.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
folder_id | string | no | Restrict the search to this folder and its contents. Omit to search everywhere. |
query | string | yes | Search text, e.g. "budget proposal" or "quarterly report". |
type | string, one of file, folder | no | Restrict results to files or folders. Omit to search both. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
entries | array of object | |
entries[].id | string | |
entries[].modified_at | string (date-time) | |
entries[].name | string | |
entries[].size | integer | |
entries[].type | string | |
total_count | integer |
Also retrieved by: "find something by keyword", "look up an old document", "dig up anything mentioning the budget", "where did I save that".
box.create_shared_link_file
Create a link to a Box file that people outside Box, or without access, can open. Use when the user wants to share, send, or get a link for a file. Optionally protect it with a password or an expiry date. For a folder instead, use create_shared_link_folder.
Class write (writes, no confirmation needed). Scopes root_readwrite. Calls PUT /files/{{params.file_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
access | string, one of open, company, collaborators | no | Who can use the link. Defaults to company. |
expires_at | string (date-time) | no | Optional time after which the link stops working. |
file_id | string | yes | Box id of the file to link to. |
password | string | no | Optional password required to open the link. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
shared_link | object | |
shared_link.access | string | |
shared_link.download_url | string | |
shared_link.url | string |
Also retrieved by: "give me a link anyone can open", "I want a URL for this I can send someone", "generate a public link to this document".
box.create_shared_link_folder
Create a link to a Box folder that people outside Box, or without access, can open. Use when the user wants to share, send, or get a link for a whole folder. Optionally protect it with a password or an expiry date. For a single file instead, use create_shared_link_file.
Class write (writes, no confirmation needed). Scopes root_readwrite. Calls PUT /folders/{{params.folder_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
access | string, one of open, company, collaborators | no | Who can use the link. Defaults to company. |
expires_at | string (date-time) | no | Optional time after which the link stops working. |
folder_id | string | yes | Box id of the folder to link to. |
password | string | no | Optional password required to open the link. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
shared_link | object | |
shared_link.access | string | |
shared_link.url | string |
Also retrieved by: "give me a link to this whole directory", "I want a URL for this folder I can send someone", "generate a public link to this collection".
box.get_shared_item
Open a Box shared link to see the file or folder it points to, without needing to already have access. Use when the user has a Box link someone sent them and wants to know what it is before opening it in Box.
Class read (reads only). Scopes root_readonly. Calls GET /shared_items.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
shared_link_url | string | yes | The full Box shared link URL, e.g. "https://app.box.com/s/abc123". |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | string | |
name | string | |
size | integer | |
type | string |
Also retrieved by: "what is this link someone sent me", "check what's behind this URL before I open it", "see what this shared link points to".
box.remove_shared_link_file
Disable the shared link on a Box file so it stops working. Use when the user wants to unshare, revoke, or kill a file's link, without touching the file itself. For a folder's link instead, use remove_shared_link_folder.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). Scopes root_readwrite. Calls PUT /files/{{params.file_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
file_id | string | yes | Box id of the file whose shared link should be removed. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
removed | boolean |
Also retrieved by: "kill that link I sent for this document", "shut off access through that URL", "stop that document's link from working".
box.remove_shared_link_folder
Disable the shared link on a Box folder so it stops working. Use when the user wants to unshare, revoke, or kill a folder's link, without touching the folder itself. For a file's link instead, use remove_shared_link_file.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). Scopes root_readwrite. Calls PUT /folders/{{params.folder_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
folder_id | string | yes | Box id of the folder whose shared link should be removed. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
removed | boolean |
Also retrieved by: "kill that link I sent for this folder", "shut off access through that directory's URL", "stop that folder's link from working".
box.add_collaboration
Invite a person by email to a Box file or folder, as a viewer, editor, or another Box role. Use when the user wants to add, invite, or give someone access to something in Box.
Class write (writes, no confirmation needed). Scopes root_readwrite. Calls POST /collaborations.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
email | string | yes | Email address of the person to invite. |
item_id | string | yes | Box id of the file or folder to add the collaborator to. |
item_type | string, one of file, folder | yes | Whether the item being shared is a file or a folder. |
role | string, one of editor, viewer, previewer, uploader, co-owner | yes | Box collaboration role to grant. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
accessible_by | object | |
accessible_by.login | string | |
accessible_by.name | string | |
id | string | |
role | string | |
status | string |
Also retrieved by: "invite someone to work on this with me", "give a new person access to this", "let this person in on the shared work".
box.list_folder_collaborations
List who has access to a Box folder and their role. Use when the user wants to see who can view or edit a shared folder, before changing its membership.
Class read (reads only). Scopes root_readonly. Calls GET /folders/{{params.folder_id}}/collaborations.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
folder_id | string | yes | Box id of the folder to check collaborators on. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
entries | array of object | |
entries[].accessible_by | object | |
entries[].accessible_by.login | string | |
entries[].accessible_by.name | string | |
entries[].id | string | |
entries[].role | string | |
entries[].status | string |
Also retrieved by: "who's on this shared space", "see everyone with access here", "check the roster for this shared area".
box.update_collaboration_role
Change the role an existing Box collaborator has on a file or folder, e.g. from viewer to editor. Use when the user wants to promote, demote, or change someone's permission level. Requires the collaboration id from list_folder_collaborations.
Class write (writes, no confirmation needed). Scopes root_readwrite. Calls PUT /collaborations/{{params.collaboration_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
collaboration_id | string | yes | Collaboration id, from list_folder_collaborations. |
role | string, one of editor, viewer, previewer, uploader, co-owner | yes | New Box collaboration role to set. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | string | |
role | string | |
status | string |
Also retrieved by: "bump this person up to editor", "change what this collaborator is allowed to do", "downgrade their permission level".
box.remove_collaboration
Revoke a person's collaboration on a Box file or folder. Use when the user wants to remove, kick out, or stop someone from accessing something they were added to. Requires the collaboration id from list_folder_collaborations.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). Scopes root_readwrite. Calls DELETE /collaborations/{{params.collaboration_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
collaboration_id | string | yes | Collaboration id to remove, from list_folder_collaborations. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
removed | boolean |
Also retrieved by: "take this person off the shared space", "kick them out of this collaborative area", "cut their access to this".
box.get_metadata
Read the structured metadata fields set on a Box file under one metadata template, e.g. status, priority, or category values a workflow tracks. Use when the user asks about a file's tags, custom fields, or classification rather than its name or size.
Class read (reads only). Scopes root_readonly. Calls GET /files/{{params.file_id}}/metadata/{{params.scope}}/{{params.template_key}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
file_id | string | yes | Box id of the file to read metadata from. |
scope | string, one of global, enterprise | yes | Which metadata scope the template lives in. "global" for Box's built-in templates, "enterprise" for ones the account defined. |
template_key | string | yes | The metadata template's key, e.g. "documentFlow" or "properties". |
Also retrieved by: "what tags does this have", "check the custom fields on this document", "what status or category is set on this".
box.set_metadata
Attach structured metadata to a Box file for the first time under one template, e.g. tagging it with a status or category. Use when the user wants to classify, tag, or set custom fields on a file that doesn't have that template's metadata yet. To change values it already has, use update_metadata instead.
Class write (writes, no confirmation needed). Scopes root_readwrite. Calls POST /files/{{params.file_id}}/metadata/{{params.scope}}/{{params.template_key}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
fields | object | yes | Field values to set, keyed by the metadata template's own field names, e.g. {"status": "Reviewed", "priority": 2}. |
file_id | string | yes | Box id of the file to attach metadata to. |
scope | string, one of global, enterprise | yes | Which metadata scope the template lives in. |
template_key | string | yes | The metadata template's key, e.g. "documentFlow" or "properties". |
Also retrieved by: "tag this with a status", "classify this document", "add custom fields to this for the first time".
box.update_metadata
Change specific field values in a Box file's existing metadata under one template. Use when the user wants to update, correct, or change a tag or custom field a file already carries. To attach that template's metadata for the first time, use set_metadata instead.
Class write (writes, no confirmation needed). Scopes root_readwrite. Calls PUT /files/{{params.file_id}}/metadata/{{params.scope}}/{{params.template_key}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
file_id | string | yes | Box id of the file whose metadata is being changed. |
operations | array of object | yes | JSON Patch operations against the existing fields, e.g. [{"op": "replace", "path": "/status", "value": "Approved"}]. |
scope | string, one of global, enterprise | yes | Which metadata scope the template lives in. |
template_key | string | yes | The metadata template's key, e.g. "documentFlow" or "properties". |
Also retrieved by: "change the status tag on this", "correct one of the custom fields on this", "update what this document is tagged with".
box.delete_metadata
Remove a whole metadata template's fields from a Box file. Use when the user wants to clear, strip, or remove the tags or custom fields a template added, not just change one value.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). Scopes root_readwrite. Calls DELETE /files/{{params.file_id}}/metadata/{{params.scope}}/{{params.template_key}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
file_id | string | yes | Box id of the file to remove metadata from. |
scope | string, one of global, enterprise | yes | Which metadata scope the template lives in. |
template_key | string | yes | The metadata template's key, e.g. "documentFlow" or "properties". |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
removed | boolean |
Also retrieved by: "strip the tags off this document", "clear the custom fields on this", "remove that classification entirely".
box.get_current_user
Get the signed-in Box account's name, login email, and storage usage. Use when the user asks who they're signed in as or wants their own account details.
Class read (reads only). Scopes root_readonly. Calls GET /users/me.
Takes no arguments.
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | string | |
login | string | |
name | string | |
space_amount | integer | |
space_used | integer |
Also retrieved by: "who am I signed in as", "show my own profile details", "what account is this".
Triggers
Triggers are app-initiated. They are not retrievable as tools and cannot be called; subscribe with TriggersService.CreateSubscription and events arrive as signed deliveries.
file_uploaded
Fires when a new file is uploaded into a Box folder this project is subscribed to. Carries the uploaded file's id and name; call get_file or download_file afterward for its full details or content.
Payload fields (anything the schema does not declare never reaches a subscriber):
| Field | Type | Notes |
|---|---|---|
created_at | string (date-time) | |
source | object | |
source.id | string | |
source.name | string | |
source.type | string | |
trigger | string |
collaboration_created
Fires when someone is added as a collaborator on a Box file or folder this project is subscribed to. Carries the new collaboration's id and role; call list_folder_collaborations afterward to see the full membership.
Payload fields (anything the schema does not declare never reaches a subscriber):
| Field | Type | Notes |
|---|---|---|
created_at | string (date-time) | |
source | object | |
source.id | string | |
source.role | string | |
source.status | string | |
trigger | string |
Inbound webhooks
Providers post to /webhooks/box. Posts that fail verification are rejected before anything is stored, and the ingest path refuses every post while the secret variable is unset.
| Property | Value |
|---|---|
| Verification scheme | hmac_sha256 |
| Shared secret | AUTOMATON_BOX_WEBHOOK_SECRET (deployment environment) |
| Signature header | BOX-SIGNATURE-PRIMARY |
| Signature format | {sig} |
Mappings are tried in order and the first match wins.
| Trigger | Matches when | Entity resolved from |
|---|---|---|
file_uploaded | payload trigger = FILE.UPLOADED | |
collaboration_created | payload trigger = COLLABORATION.CREATED |