{"formatVersion":"1","kind":"dock_integration","slug":"box-api","title":"Box API","summary":"Import a Harbor-safe Box starter set for folder browsing, file lookup, and approval-friendly folder creation.","description":"A Dock-hosted Box API starter integration for Harbor. Importing it creates a local http_api port shell plus a Harbor-safe Box action set for listing folder items, getting file information, and creating folders with explicit approval. Tokens remain local to Harbor Node.","version":"0.1.0","publisher":{"slug":"box","name":"Box","websiteUrl":"https://developer.box.com/reference/"},"category":"Storage","tags":["box","storage","files","folders","content"],"compatibility":{"harborNode":">=0.1.0","notes":"Requires local operator-configured auth after import. Box templates use explicit input.path values for folder and file IDs, typed input.query values for pagination, and input.body JSON for folder creation."},"requiredPlan":"community","portTemplates":[{"kind":"http_api","label":"Box API","description":"Box API connection managed locally through Harbor.","baseUrl":"https://api.box.com/2.0/","authMode":"header_token","authHeaderName":"Authorization","authTokenPrefix":"Bearer"}],"actionTemplates":[{"slug":"get-current-user","label":"Get Current User","description":"Fetch the current Box user profile tied to the local token so Harbor can confirm tenant and principal context before broader file actions.","method":"GET","path":"/users/me","approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"list-folder-items","label":"List Folder Items","description":"List files, folders, and web links in a Box folder using an explicit folder ID and typed pagination controls.","method":"GET","path":"/folders/{folderId}/items","inputs":{"parameters":[{"name":"folderId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Box folder ID to inspect. Use 0 for the root folder."},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":1000},"default":100,"description":"Maximum number of items to return."},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0},"description":"Offset for offset-based pagination."},{"name":"usemarker","in":"query","schema":{"type":"boolean"},"description":"Enable marker-based pagination for large folders."},{"name":"marker","in":"query","schema":{"type":"string"},"description":"Marker returned by a previous marker-based page."},{"name":"sort","in":"query","schema":{"type":"string","enum":["id","name","date","size"]},"description":"Field to sort folder items by."},{"name":"direction","in":"query","schema":{"type":"string","enum":["ASC","DESC"]},"description":"Sort direction."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"get-folder","label":"Get Folder","description":"Fetch Box folder information using an explicit folder ID.","method":"GET","path":"/folders/{folderId}","inputs":{"parameters":[{"name":"folderId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Box folder ID to fetch. Use 0 for the root folder."},{"name":"fields","in":"query","schema":{"type":"string","maxLength":400},"description":"Optional comma-separated field names to request from Box."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"get-file","label":"Get File","description":"Fetch Box file information using an explicit file ID.","method":"GET","path":"/files/{fileId}","inputs":{"parameters":[{"name":"fileId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Box file ID to fetch."},{"name":"fields","in":"query","schema":{"type":"string","maxLength":400},"description":"Optional comma-separated field names to request from Box."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"search-content","label":"Search Content","description":"Search Box content using an explicit query string with bounded content-type, ancestor, and pagination filters.","method":"GET","path":"/search","inputs":{"parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":200},"description":"Search text to match against Box content."},{"name":"ancestor_folder_ids","in":"query","schema":{"type":"string","maxLength":300},"description":"Optional comma-separated Box folder IDs to keep search traversal bounded."},{"name":"type","in":"query","schema":{"type":"string","enum":["file","folder","web_link"]},"description":"Optional Box content type filter."},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":200},"default":30,"description":"Maximum number of search results to return."},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0},"description":"Offset for offset-based search pagination."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"list-collaborations","label":"List Collaborations","description":"List collaborations on a specific Box file or folder using typed pagination inputs.","method":"GET","path":"/list_collaborations","inputs":{"parameters":[{"name":"item_id","in":"query","required":true,"schema":{"type":"string","minLength":1},"description":"Box item ID."},{"name":"item_type","in":"query","required":true,"schema":{"type":"string","enum":["file","folder"]},"description":"Box item type."},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":1000},"default":100,"description":"Maximum number of collaborations to return."},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0},"description":"Offset for pagination."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"create-folder","label":"Create Folder","description":"Create a Box folder using a bounded JSON request body under input.body.","method":"POST","path":"/folders","approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"create-collaboration","label":"Create Collaboration","description":"Create a Box collaboration using a bounded JSON request body.","method":"POST","path":"/collaborations","approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"delete-file","label":"Delete File","description":"Delete a Box file using an explicit file ID.","method":"DELETE","path":"/files/{fileId}","inputs":{"parameters":[{"name":"fileId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Box file ID."}]},"approvalMode":"require_approval","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"delete-folder","label":"Delete Folder","description":"Delete a Box folder using an explicit folder ID.","method":"DELETE","path":"/folders/{folderId}","inputs":{"parameters":[{"name":"folderId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Box folder ID."},{"name":"recursive","in":"query","schema":{"type":"boolean"},"description":"Whether to recursively delete folder contents."}]},"approvalMode":"require_approval","requestBodyMode":"none","resultMode":"json_summary"}],"helpText":"Import to Harbor, configure local auth, then validate and test list-folder-items and get-file before enabling create-folder. Use explicit folder and file IDs rather than widening the port into arbitrary Box navigation. Keep create-folder on approval unless your local policy explicitly allows it.","installNotes":"Dock shares only safe metadata. Hidden auth must be configured locally inside Harbor after import. Box reads use input.path and input.query, and create-folder expects input.body in Box's JSON shape, such as a folder name plus a parent object with an ID."}