A shared drive supports files owned by an organization rather than an individual user. Shared drives follow different sharing and ownership models from a specific user's "My Drive". Shared drives are the successors to the earlier concept of Team Drives.
How to capture a shared drive or files/folders that live on a shared drive for downstream use:
shared_drive_find() and shared_drive_get() return a dribble with
metadata on shared drives themselves. You will need this in order to use a
shared drive in certain file operations. For example, you can specify a
shared drive as the parent folder via the path argument for upload, move,
copy, etc. In that context, the id of a shared drive functions like the id of
its top-level or root folder.
drive_find() and drive_get() return a dribble with metadata on
files, including folders. Both can be directed to search for files on shared
drives using the optional arguments shared_drive or corpus (documented
below).
Regard the functions mentioned above as the official "port of
entry" for working with shared drives. Use these functions to capture your
target(s) in a dribble to pass along to other googledrive functions.
The flexibility to refer to files by name or path does not apply as broadly
to shared drives. While it's always a good idea to get things into a
dribble early, for shared drives it's often required.
To search one specific shared drive, pass its name, marked id, or
dribble to shared_drive somewhere in the call, like so:
drive_find(..., shared_drive = "i_am_a_shared_drive_name")
drive_find(..., shared_drive = as_id("i_am_a_shared_drive_id"))
drive_find(..., shared_drive = i_am_a_shared_drive_dribble)
The value provided to shared_drive is pre-processed with
as_shared_drive().
To search other collections, pass the corpus parameter somewhere in the
call, like so:
drive_find(..., corpus = "user") drive_find(..., corpus = "allDrives") drive_find(..., corpus = "domain")
Possible values of corpus and what they mean:
"user": Queries files that the user has accessed, including both shared
drive and My Drive files.
"drive": Queries all items in the shared drive specified via
shared_drive. googledrive automatically fills this in whenever
shared_drive is not NULL.
"allDrives": Queries files that the user has accessed and all shared
drives in which they are a member. Note that the response may include
incompleteSearch : true, indicating that some corpora were not searched
for this request (currently, googledrive does not surface this). Prefer
"user" or "drive" to "allDrives" for efficiency.
"domain": Queries files that are shared to the domain, including both
shared drive and My Drive files.
Here is some of the best official Google reading about shared drives:
Team Drives is being renamed to shared drives from Google Workspace blog
Upcoming changes to the Google Drive API and Google Picker API from the Google Cloud blog
https://developers.google.com/drive/api/v3/about-shareddrives
https://developers.google.com/drive/api/v3/shared-drives-diffs
Get started with shared drives from Google Workspace Learning Center
Best practices for shared drives from Google Workspace Learning Center
googledrive implements shared drive support as outlined here:
Users shouldn't need to know any of this, but here are details for the curious. The extra information needed to search shared drives consists of the following query parameters:
corpora: Where to search? Formed from googledrive's corpus argument.
driveId: The id of a specific shared drive. Only allowed -- and also
absolutely required -- when corpora = "drive". When user specifies a
shared_drive, googledrive sends its id and also infers that corpora
should be set to "drive".
includeItemsFromAllDrives: Do you want to see shared drive items?
Obviously, this should be TRUE and googledrive sends this whenever shared
drive parameters are detected.
supportsAllDrives: Does the sending application (googledrive, in this
case) know about shared drive? Obviously, this should be TRUE and
googledrive sends it for all applicable endpoints, all the time.