Google permissions
Every permission you can ask for on a Google connection, in the words the person sees, and what each one allows.
These are the permissions of the google-workspace connector. You list their names under permissions in cohostly.json. The description of each is the sentence the person reads on the consent screen, so they know what they are agreeing to.
How to read the tables
Each permission has a type:
- read can only look. It sends
GETcalls, plus a fewPOSTcalls that only read (for example asking a calendar when people are free). - read and write can look and also change things: add, edit, delete, send.
- write only can only send or create. It cannot read anything back.
The type matters for approval. When require_approval_for_writes is on, anything that is not a read waits for a person. Reads pass straight through. See holding writes for approval.
Many names come as a pair: .read and .write. Ask for .read unless you truly need to change things. A person is more willing to say yes to less.
A broader login covers a narrower need. If the person approved on Google's screen the access behind sheets.write, the access behind sheets.read is covered too. You still list sheets.read yourself if that is what your app asks for.
Google also has to agree. The person must approve the matching access on Google's own consent screen, and the connection collects every access that any tool was ever given. What keeps one tool away from a service it was not given is the platform's own check on the path of each call, not Google's access list.
Always asked in addition, so the platform can tell which account it is: sign-in basics (openid and email).
Careful Wider permissions, such as whole-account Sheets or whole Drive, need Google's own app review before every person can use them. Whether they are open to everyone on a given platform is up to the platform operator. The narrow "files you pick" permissions (
sheets.files,drive.files) do not have that problem. Prefer them when you can: see picked files and narrowing.
Gmail
gmail.readreadgmail.sendwrite onlygmail.composeread and writegmail.modifyread and writegmail.fullread and writeGoogle Drive
drive.filesread and writedrive.readreaddrive.writeread and writedrive.activityreaddrive.labels.readreaddrive.labels.writeread and writeSheets, Docs, Slides and Forms
A Docs, Sheets, Slides or Forms id is also its Drive file id.
sheets.filesread and writesheets.readreadsheets.writeread and writedocs.readreaddocs.writeread and writeslides.readreadslides.writeread and writeforms.readreadforms.writeread and writeA few Sheets reads are POST calls (the "by data filter" lookups). They count as reads, so they pass an approval gate untouched.
Calendar, Tasks and Contacts
calendar.readreadfreeBusy) counts as a read.calendar.writeread and writetasks.readreadtasks.writeread and writecontacts.readreadcontacts.writeread and writeChat, Meet and Keep
chat.readreadchat.writeread and writemeet.readreadmeet.writeread and writekeep.readreadkeep.writeread and writeApps Script and Classroom
scripts.readreadscripts.writeread and writeclassroom.readreadclassroom.writeread and writeOrganisation directory and profile
directory.readreaddirectory.writeread and writeprofile.readreadThe narrower Google ids
google-sheets offers only sheets.files, sheets.read and sheets.write. google-drive offers only drive.files. Their permissions mean the same as the ones above (the consent sentence for sheets.write says "read and change" instead of "read, create and change"). New apps should use google-workspace.
Paths
Each permission opens a set of paths on one Google service. The path in a call is Google's own, without the host, for example v4/spreadsheets/<id>/values/A1:C100 for Sheets or calendar/v3/calendars/primary/events for Calendar. The platform picks the host from the permission that allows the call. See calling the API.