This document explains how to manage approvals in the Google Drive API.
Users can send documents in Google Drive through a formal approval process. You can use this process to get approval on a contract review or an official document before publication. An approval tracks the status of both the review (such as In Progress, Approved, or Declined) and the reviewers involved. Approvals are an excellent way to validate content and to keep a record of reviewers.
You can create and manage content approvals in Drive. The
Google Drive API provides the approvals
resource
to work with file approvals. The methods of the approvals
resource work on
items within Drive, Google Docs, and other Google Workspace
editors. Reviewers can approve, reject, or leave feedback on the documents
directly.
Before you begin
-
Your file should contain the
canStartApprovalcapability . To check file capabilities, call thegetmethod on thefilesresource with thefileIdpath parameter and use thecanStartApprovalcapability field in thefieldsparameter. For more information, see Understand file capabilities .The boolean
canStartApprovalcapability isfalsewhen:- Administrator settings restrict access to the feature.
- Your Google Workspace edition is ineligible.
- The file is owned by a user outside your domain.
- The user lacks the
role=writerpermission on the file.
-
Make sure you manually share the target file with the reviewers. Drive doesn't do this automatically. If a reviewer doesn't have file access, the approval request will succeed, but they won't receive notifications or be able to view the file.
Concepts
The following key concepts form the foundation of approvals.
Approval status
When you request a document approval, the approval process ensures every reviewer approves the same version of the content. If the file is edited after a reviewer approves the request, and before the request is complete, the reviewer's approvals are reset and reviewers must approve the new version. If the content is edited after final approval, a banner appears on the document indicating that the current version differs from the approved one.
The approvals
resource includes a Status
object that details the status
of the approval when the resource is requested. It also includes the ReviewerResponse
object that
details the responses to an approval made by specific reviewers. Each reviewer's
response is represented by the Response
object.
Every action in the approval process generates email notifications that are sent to the initiator (the user requesting the approval) and all reviewers. It's also added to the approval activity log.
All reviewers must approve an approval. Any reviewer declining an approval sets
the completed state to DECLINED
.
After an approval is complete (the status is APPROVED
, CANCELLED
or DECLINED
), it remains in the completed state and can't be interacted with by
the initiator or reviewers. You can add comments to a completed approval as long
as there's no existing approval on a file with a status of IN_PROGRESS
.
Lifecycle of an approval
An approval goes through several states during its lifecycle. Figure 1 shows the high-level steps of an approval lifecycle:
-
Start the approval. Call
startto begin the approval request. Thestatusis then set toIN_PROGRESS. -
Approval is pending. While the approval is pending (
statusis set toIN_PROGRESS) both the initiator and reviewers can interact with it. They can add acomment, the initiator canreassignreviewers, and one or more reviewers canapprovethe request. -
Approval is in the completed state. An approval enters the completed state (
statusis set toAPPROVED,CANCELLEDorDECLINED) when all reviewers approve the request, the initiator elects tocancelthe request, or if any reviewer chooses todeclinethe request.
Use the fields parameter
If you want to specify the fields to return in the response, you can set the fields
system
parameter
with any method of the approvals
resource. If you omit the fields
parameter,
the server returns a default set of fields specific to the method. To return
different fields, see Return specific fields
.
Start and administer approvals
The approvals
resource can be used to start
and manage approvals using Drive API. These methods work with any of
the existing OAuth 2.0 Drive API scopes that allow writing file
metadata. For more information, see Choose Google Drive API scopes
.
Start approval
To start a new approval on a file, use the start
method on the approvals
resource and include the fileId
path parameter.
The request body
consists of
a required reviewerEmails
field that's an array of strings containing the
email addresses of the reviewers assigned to review the file. Each reviewer
email address must be associated with a Google Account or the request fails.
Additionally, three optional fields are offered:
-
dueTime: The deadline for the approval in RFC 3339 format. -
lockFile: A boolean indicating whether to lock the file when starting the approval. This blocks users from modifying the file during the approval process. Any user with therole=writerpermission can remove this lock. -
message: A custom message sent to reviewers.
The response body contains an instance of the approvals
resource and it
includes the initiator
field
which is the user that requested the approval. The approval Status
is set to IN_PROGRESS
.
If an existing approval is present with a Status
of IN_PROGRESS
, the start
method fails. You can only start an approval if there's no existing approval on
the file or if the existing approval is in the completed state (the status is APPROVED
, CANCELLED
or DECLINED
).
cURL
curl
-X
POST
'https://www.googleapis.com/drive/v3/files/ FILE_ID
/approvals:start'
\
-H
'Authorization: Bearer ACCESS_TOKEN
'
\
-H
'Content-Type: application/json'
\
-d
'{
"reviewerEmails": [
"reviewer1@example.com",
"reviewer2@example.com"
],
"dueTime": "2026-04-01T15:01:23Z",
"lockFile": true,
"message": "Please review this file for approval."
}'
Replace the following:
- FILE_ID : The ID of the file the approval is on.
- ACCESS_TOKEN : Your app's OAuth 2.0 token.
Comment on approval
To comment on an approval, use the comment
method on the approvals
resource and include the fileId
and approvalId
path parameters.
The request body
consists
of a required message
field that's a string containing the comment you want to
add to the approval.
The response body contains an instance of the approvals
resource. The message
is sent to the approval initiator and reviewers as a notification, and it's also
included in the approval activity log.
cURL
curl
-X
POST
'https://www.googleapis.com/drive/v3/files/ FILE_ID
/approvals/ APPROVAL_ID
:comment'
\
-H
'Authorization: Bearer ACCESS_TOKEN
'
\
-H
'Content-Type: application/json'
\
-d
'{
"message": "The required comment on the approval."
}'
Replace the following:
- FILE_ID : The ID of the file the approval is on.
- APPROVAL_ID : The ID of the approval.
- ACCESS_TOKEN : Your app's OAuth 2.0 token.
Reassign reviewers on approval
To reassign reviewers on an approval, use the reassign
method on the approvals
resource and include the fileId
and approvalId
path parameters.
The reassign
method lets the approval initiator (or a user with the role=writer
permission) to add or replace reviewers in the ReviewerResponse
object of
the approvals
resource. A user with the role=reader
permission can only
reassign an approval that's assigned to themselves. This lets the user reassign
a request to someone else who's a more capable reviewer.
Reviewers can only be reassigned while the Status
is IN_PROGRESS
and the response
field for the reviewer being reassigned is set to NO_RESPONSE
.
Note that you cannot remove a reviewer on an approval. If you need to remove a reviewer, you must cancel the approval and start a new one.
The request body
consists
of the optional addReviewers
and replaceReviewers
fields. Each field has a
repeated object for AddReviewer
and ReplaceReviewer
which each contain a single reviewer to add or a pair of reviewers to replace.
You can also add the optional message
field containing the comment you want to
send to the new reviewers.
The response body contains an instance of the approvals
resource. The message
is sent to the new reviewers as a notification, and it's also included in the
approval activity log.
cURL
curl
-X
POST
'https://www.googleapis.com/drive/v3/files/ FILE_ID
/approvals/ APPROVAL_ID
:reassign'
\
-H
'Authorization: Bearer ACCESS_TOKEN
'
\
-H
'Content-Type: application/json'
\
-d
'{
"addReviewers": [
{
"addedReviewerEmail": "new_reviewer@example.com"
}
],
"replaceReviewers": [
{
"addedReviewerEmail": "replacement_reviewer@example.com",
"removedReviewerEmail": "old_reviewer@example.com"
}
],
"message": "Reassigning reviewers for this approval request."
}'
Replace the following:
- FILE_ID : The ID of the file the approval is on.
- APPROVAL_ID : The ID of the approval.
- ACCESS_TOKEN : Your app's OAuth 2.0 token.
Cancel approval
To cancel an approval, use the cancel
method on the approvals
resource and include
the fileId
and approvalId
path parameters.
The cancel
method can only be called by the approval initiator (or a user with
the role=writer
permission) while the approval Status
is IN_PROGRESS
.
The request body
consists of
an optional message
field that's a string containing the message to accompany
the cancellation of the approval.
The response body contains an instance of the approvals
resource. The message
is sent as a notification, and it's also included in the approval activity log.
The approval Status
is set to CANCELLED
and it's in a completed state.
cURL
curl
-X
POST
'https://www.googleapis.com/drive/v3/files/ FILE_ID
/approvals/ APPROVAL_ID
:cancel'
\
-H
'Authorization: Bearer ACCESS_TOKEN
'
\
-H
'Content-Type: application/json'
\
-d
'{
"message": "The optional reason for cancelling this approval request."
}'
Replace the following:
- FILE_ID : The ID of the file the approval is on.
- APPROVAL_ID : The ID of the approval.
- ACCESS_TOKEN : Your app's OAuth 2.0 token.
Decline approval
To decline an approval, use the decline
method on the approvals
resource and include the fileId
and approvalId
path parameters.
The decline
method can only be called while the approval Status
is IN_PROGRESS
.
The request body
consists of
an optional message
field that's a string containing the message to accompany
the denial of the approval.
The response body contains an instance of the approvals
resource. The message
is sent as a notification, and it's also included in the approval activity log.
The response
field of the ReviewerResponse
object of the requesting user is set to DECLINED
. Additionally, the approval Status
is set to DECLINED
and it's in a completed state.
cURL
curl
-X
POST
'https://www.googleapis.com/drive/v3/files/ FILE_ID
/approvals/ APPROVAL_ID
:decline'
\
-H
'Authorization: Bearer ACCESS_TOKEN
'
\
-H
'Content-Type: application/json'
\
-d
'{
"message": "The optional reason for declining this approval request."
}'
Replace the following:
- FILE_ID : The ID of the file the approval is on.
- APPROVAL_ID : The ID of the approval.
- ACCESS_TOKEN : Your app's OAuth 2.0 token.
Approve approval
To approve an approval, use the approve
method on the approvals
resource and include the fileId
and approvalId
path parameters.
The approve
method can only be called while the approval Status
is IN_PROGRESS
.
The request body
consists
of an optional message
field that's a string containing the message to
accompany the approval.
The response body contains an instance of the approvals
resource. The message
is sent as a notification, and it's also included in the approval activity log.
The response
field of the ReviewerResponse
object of the requesting user is set to APPROVED
. Additionally, if this is the
last required reviewer response, the approval Status
is set to APPROVED
and
it's in a completed state.
cURL
curl
-X
POST
'https://www.googleapis.com/drive/v3/files/ FILE_ID
/approvals/ APPROVAL_ID
:approve'
\
-H
'Authorization: Bearer ACCESS_TOKEN
'
\
-H
'Content-Type: application/json'
\
-d
'{
"message": "The optional reason for approving this approval request."
}'
Replace the following:
- FILE_ID : The ID of the file the approval is on.
- APPROVAL_ID : The ID of the approval.
- ACCESS_TOKEN : Your app's OAuth 2.0 token.
Locate existing approvals
The approvals
resource can also be used to get
and list the status of your approvals using Drive API.
To view approvals on a file, you must have permission to read the metadata of the file. For more information, see Roles and permissions .
Get approval
To get an approval on a file, use the get
method on the approvals
resource with the fileId
and approvalId
path
parameters. If you don't know the approval ID, you can list
approvals
using the list
method.
The response body contains an instance of the approvals
resource.
cURL
curl
-X
GET
'https://www.googleapis.com/drive/v3/files/ FILE_ID
/approvals/ APPROVAL_ID
'
\
-H
'Authorization: Bearer ACCESS_TOKEN
'
\
-H
'Accept: application/json'
Replace the following:
- FILE_ID : The ID of the file the approval is on.
- APPROVAL_ID : The ID of the approval.
- ACCESS_TOKEN : Your app's OAuth 2.0 token.
List approvals
To list approvals on a file, call the list
method on the approvals
resource
and include the fileId
path parameter.
The response body
consists of
a list of approvals on the file. The items
field includes information about each approval in the form of an approvals
resource.
You can also pass the following query parameters to customize pagination of, or filter, the approvals:
-
pageSize: The maximum number of approvals to return per page. If you don't setpageSize, the server returns up to 100 approvals. -
pageToken: A page token, received from a previous list call. This token is used to retrieve the subsequent page. It should be set to the value ofnextPageTokenfrom a previous response.
cURL
curl
-X
GET
'https://www.googleapis.com/drive/v3/files/ FILE_ID
/approvals?pageSize=10'
\
-H
'Authorization: Bearer ACCESS_TOKEN
'
\
-H
'Accept: application/json'
Replace the following:
- FILE_ID : The ID of the file the approval is on.
- ACCESS_TOKEN : Your app's OAuth 2.0 token.

