title: Google Sheets API v4 Spreadsheets.Values.Update returns ERROR 404:Requested entity was not found
body: <p>I am trying to update a cell on google sheet using Spreadsheets.Values.Update method. I am able to access to the google sheet and read data back, but when using Spreadsheets.Values.Update method, I got the following error:</p>
  
  <blockquote>
    <p>com.google.api.client.googleapis.json.GoogleJsonResponseException: 404
    Not Found</p>
  </blockquote>
  
  <pre><code>{
    "code" : 404,
    "errors" : [ {
      "domain" : "global",
      "message" : "Requested entity was not found.",
      "reason" : "notFound"
    } ],
    "message" : "Requested entity was not found.",
    "status" : "NOT_FOUND"
  }
  </code></pre>
  
  <p>below is the code. I used the quickstart code from google developers guide to create authentication.</p>
  
  <pre><code>/**
   * Application name.
   */
  public class Quickstart {
  
  private static final String APPLICATION_NAME =
          "Google Sheets 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/sheets.googleapis.com-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.
   * &lt;p/&gt;
   * If modifying these scopes, delete your previously saved credentials
   * at ~/.credentials/sheets.googleapis.com-java-quickstart
   */
  private static final List&lt;String&gt; SCOPES =
          Arrays.asList(SheetsScopes.SPREADSHEETS);
  
  static {
      try {
          HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
          DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR);
      } catch (Throwable t) {
          t.printStackTrace();
          System.exit(1);
      }
  }
  
  private static Sheets service;
  
  /**
   * Creates an authorized Credential object.
   *
   * @return an authorized Credential object.
   * @throws IOException
   */
  private 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 Sheets API client service.
   *
   * @return an authorized Sheets API client service
   * @throws IOException
   */
  private static Sheets getSheetsService() throws IOException {
      Credential credential = authorize();
  
      return new Sheets.Builder(HTTP_TRANSPORT,
              JSON_FACTORY,
              credential)
              .setApplicationName(APPLICATION_NAME)
              .build();
  }
  
  private static void updateCell(String spreadsheetId, String range, 
      String newData) throws Exception {
      service = getSheetsService();
      ValueRange aValueRange = new ValueRange();
      aValueRange.setMajorDimension("ROWS");
      aValueRange.setRange(range);
      List&lt;List&lt;Object&gt;&gt; dataArr = new ArrayList&lt;List&lt;Object&gt;&gt;();
      List&lt;Object&gt; cellData = new ArrayList&lt;Object&gt;();
      cellData.add(newData);
      dataArr.add(cellData);
      aValueRange.setValues(dataArr);
      System.out.println("\nNew value range: " + aValueRange);
      service.spreadsheets().values().update(spreadsheetId, range, 
      aValueRange).setValueInputOption("RAW").execute();
  }
  
  public static void main(String[] args) throws IOException {
      try {
          String updatedSheetId = "123456";
          String range = "F5:F5";
          updateCell(updatedSheetId, range, "inUse"); 
          } catch (Exception ex) {
          ex.printStackTrace();
          }
  }
  }
  </code></pre>