Box Developer Documentation

Join BoxWorks 2024 to discover what's possible with content and AI!

Register now!

Sharing with Groups

Sharing with Groups

To share a file or folder with a group of users, create a collaboration using the group ID, the ID of the file or folder, and the role or permissions level the group should have when accessing the file or folder.

cURL
curl -i -X POST "https://api.box.com/2.0/collaborations" \
     -H "authorization: Bearer <ACCESS_TOKEN>" \
     -H "content-type: application/json" \
     -d '{
       "item": {
         "type": "file",
         "id": "11446498"
       },
       "accessible_by": {
         "type": "group",
         "id": "845344"
       },
       "role": "editor"
     }'
Java
BoxCollaborator group = new BoxGroup(api, "group-id");
BoxFolder folder = new BoxFolder(api, "folder-id");
folder.collaborate(group, BoxCollaboration.Role.EDITOR);
Python
from boxsdk.object.collaboration import CollaborationRole

group = client.group(group_id='11111')
collaboration = client.folder(folder_id='22222').collaborate(group, CollaborationRole.VIEWER)

collaborator = collaboration.accessible_by
item = collaboration.item
has_accepted = 'has' if collaboration.status == 'accepted' else 'has not'
print(f'{collaborator.name} {has_accepted} accepted the collaboration to folder "{item.name}"')
.NET
// collaborate folder 11111 with group 333333
BoxCollaborationRequest requestParams = new BoxCollaborationRequest()
{
    Item = new BoxRequestEntity()
    {
        Type = BoxType.folder,
        Id = "11111"
    },
    Role = "editor",
    AccessibleBy = new BoxCollaborationUserRequest()
    {
        Type = BoxType.group,
        Id = "333333"
    }
};
BoxCollaboration collab = await client.CollaborationsManager.AddCollaborationAsync(requestParams);
Node
client.collaborations.createWithGroupID('56473', '987654', client.collaborationRoles.UPLOADER)
	.then(collaboration => {
		/* collaboration -> {
			type: 'collaboration',
			id: '11111',
			created_by: null,
			created_at: '2016-11-16T21:48:44-08:00',
			modified_at: '2016-11-16T21:48:44-08:00',
			expires_at: null,
			status: 'accepted',
			accessible_by: { type: 'group', id: '56473', name: 'My Group' },
			role: 'uploader',
			acknowledged_at: '2016-11-16T21:48:44-08:00',
			item: 
			{ type: 'folder',
				id: '987654',
				sequence_id: '0',
				etag: '0',
				name: 'Collaborated Folder' } }
		*/
	});
iOS
client.collaborations.create(
    itemType: "folder",
    itemId: "22222",
    role: .editor,
    accessibleBy: "44444",
    accessibleByType: .group
) { (result: Result<Collaboration, BoxSDKError>) in
    guard case let .success(collaboration) = result else {
        print("Error creating collaboration")
        return
    }

    print("Collaboration successfully created")
}

The collaboration roles are editor, viewer, previewer, uploader, previewer uploader, viewer uploader, co-owner, or owner. For a full description of each role, please refer to our support documentation.

Nested objects

When creating a collaboration there are two nested objects within the request body: accessible_by and item.

The accessible_by object specifies who the item should be shared with and includes a group id and the type. The type field should always be set to group.

The item object specifies what is being shared. It includes a type field which should be set as file or folder, and an id for that file or folder.