title: add signature of gmail using gmail API
body: <p>I am new to Gmail APIs. I need to add a signature using google APIs via java. </p>
  
  <p>I followed &amp; tried <a href="https://developers.google.com/gmail/api/quickstart/java" rel="nofollow noreferrer">https://developers.google.com/gmail/api/quickstart/java</a> and working fine.</p>
  
  <p>But, when I am integrating tis code into the above link code. 403 error it's throwing.</p>
  
  <pre><code>import com.google.api.client.auth.oauth2.Credential;
  import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
  import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
  import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
  import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
  import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
  import com.google.api.client.http.HttpTransport;
  import com.google.api.client.json.jackson2.JacksonFactory;
  import com.google.api.client.json.JsonFactory;
  import com.google.api.client.util.store.FileDataStoreFactory;
  
  import com.google.api.services.gmail.GmailScopes;
  import com.google.api.services.gmail.model.*;
  import com.google.api.services.gmail.Gmail;
  
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.InputStreamReader;
  import java.util.Arrays;
  import java.util.List;
  
  public class Quickstart {
      /** Application name. */
      private static final String APPLICATION_NAME =
              "Gmail API Java Quickstart";
  
      /** Directory to store user credentials for this application. */
      private static final java.io.File DATA_STORE_DIR = new java.io.File(
              System.getProperty("user.home"), ".credentials/gmail-java-quickstart");
  
      /** Global instance of the {@link FileDataStoreFactory}. */
      private static FileDataStoreFactory DATA_STORE_FACTORY;
  
      /** Global instance of the JSON factory. */
      private static final JsonFactory JSON_FACTORY =
              JacksonFactory.getDefaultInstance();
  
      /** Global instance of the HTTP transport. */
      private static HttpTransport HTTP_TRANSPORT;
  
      /** Global instance of the scopes required by this quickstart.
       *
       * If modifying these scopes, delete your previously saved credentials
       * at ~/.credentials/gmail-java-quickstart
       */
      private static final List&lt;String&gt; SCOPES = Arrays.asList(GmailScopes.MAIL_GOOGLE_COM);
  
  
      static {
          try {
              HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
              DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR);
          } catch (Throwable t) {
              t.printStackTrace();
              System.exit(1);
          }
      }
  
      /**
       * Creates an authorized Credential object.
       * @return an authorized Credential object.
       * @throws IOException
       */
      public static Credential authorize() throws IOException {
          // Load client secrets.
          InputStream in =
                  Quickstart.class.getResourceAsStream("/client_secret.json");
          GoogleClientSecrets clientSecrets =
                  GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
  
          // Build flow and trigger user authorization request.
          GoogleAuthorizationCodeFlow flow =
                  new GoogleAuthorizationCodeFlow.Builder(
                          HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
                          .setDataStoreFactory(DATA_STORE_FACTORY)
                          .setAccessType("offline")
                          .build();
          Credential credential = new AuthorizationCodeInstalledApp(
                  flow, new LocalServerReceiver()).authorize("user");
          System.out.println(
                  "Credentials saved to " + DATA_STORE_DIR.getAbsolutePath());
          return credential;
      }
  
      /**
       * Build and return an authorized Gmail client service.
       * @return an authorized Gmail client service
       * @throws IOException
       */
      public static Gmail getGmailService() throws IOException {
          Credential credential = authorize();
          return new Gmail.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
                  .setApplicationName(APPLICATION_NAME)
                  .build();
      }
  
      public static void main(String[] args) throws IOException {
          // Build a new authorized API client service.
          Gmail service = getGmailService();
          String user = "me";
  
          ListLabelsResponse listResponse =
                  service.users().labels().list(user).execute();
          //        SendAs primaryAlias = null;
          //      ListSendAsResponse aliases = service.users().settings().sendAs().list("me").execute();
          //        for (SendAs alias: aliases.getSendAs()) {
          //            if (alias.getIsPrimary()) {
          //                primaryAlias = alias;
          //                break;
          //            }
          //        }
          //        SendAs aliasSettings = new SendAs().setSignature("I heart cats.");
          //        SendAs result = service.users().settings().sendAs().patch(
          //                "me",
          //                primaryAlias.getSendAsEmail(),
          //                aliasSettings)
          //                .execute();
          //        System.out.println("Updated signature for " + result.getDisplayName());
          // Print the labels in the user's account.
          //ListLabelsResponse listResponse =
          //      service.users().labels().list(user).execute();
          List&lt;Label&gt; labels = listResponse.getLabels();
          if (labels.size() == 0) {
              System.out.println("No labels found.");
          } else {
              System.out.println("Labels:");
              for (Label label : labels) {
                  System.out.printf("- %s\n", label.getName());
              }
          }
      }
  
  
  }
  </code></pre>
  
  <p>The error I am facing is:</p>
  
  <pre><code>Exception in thread "main" com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
  {
    "code" : 403,
    "errors" : [ {
      "domain" : "global",
      "message" : "Insufficient Permission",
      "reason" : "insufficientPermissions"
    } ],
    "message" : "Insufficient Permission"
  }
          at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:146)
          at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
          at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
          at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321)
          at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1065)
          at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
          at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
          at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
          at Quickstart.main(Quickstart.java:101)
  
  FAILURE: Build failed with an exception.
  </code></pre>
  
  <p>How can I access signature and update my signature from the code.</p>