> [!CAUTION]
> **Caution** : Document AI Warehouse is deprecated and will no longer be available on Google Cloud after January 16, 2025. To safeguard your data, migrate any documents currently saved in Document AI Warehouse to an alternative like Cloud Storage. Verify that your data migration is completed before the discontinuation date to prevent any data loss. See [Deprecations](https://docs.cloud.google.com/document-warehouse/docs/deprecations) for details.

<br />

This document describes how to manage the documents in Document AI Warehouse,
including create, fetch, update, and delete operations.

## What are documents

A document is the data model used in Document AI Warehouse to organize a real-world
document (for example, PDF or TXT) and its associated properties. You interact with
Document AI Warehouse by operations on the documents.

## File types supported

While the focus of Document AI Warehouse is documents, it's also used to manage associated images
(for example, in verticals such as insurance, engineering, construction, and research).

- The Ingest API supports PDFs and TIFF, JPEG, and PNG images, along with any properties or pre-extracted text.
- The Upload UI supports the extraction of PDFs using Document AI OCR and custom processors.
- The Viewer UI supports rendering in PDF, text, and Microsoft Office files.

> [!NOTE]
> **Note:** For more operations such as search, access control, folders, and schema, find the corresponding page using the navigation bar on the left.

## Before you begin

Before you begin, make sure you have completed the
[Quickstart](https://docs.cloud.google.com/document-warehouse/docs/quickstart) page.

For document creation, if your data resides in your own Cloud Storage bucket, you have to
give the Document AI Warehouse service account storage object viewer permission to read
your data.

> [!NOTE]
> **Note:** Document AI Warehouse does not use the service account for any other purposes beyond uploading the specified files from your Cloud Storage bucket.

Each document is specified by a schema and belongs to a document type.
A document schema defines the document structure in Document AI Warehouse.
Before you can create documents, you need to [create a document schema](https://cloud.google.com/document-warehouse/docs/manage-document-schemas).

## Create a document

To create a document, you need to provide raw document content to
Document AI Warehouse. The two ways to provide raw document byte content are by
setting either `Document.inline_raw_document` or `Document.raw_document_path`.

The differences are as follows:

- `Document.raw_document_path`: This is the preferred approach. It uses the Cloud Storage path (gs://bucket/object) of the file to be ingested. Note that the caller needs to have read permission on this object for the call to succeed.
- `Document.inline_raw_document`: byte/text representation of the file,
  provided directly to the endpoint.

  > [!NOTE]
  > **Note:** This approach has a limitation of 10 MB files.

To create a document, do the following:

- [Upload a document from Cloud Storage](https://docs.cloud.google.com/document-warehouse/docs/manage-documents#upload-from-cloud-storage)
- [Upload from a local machine](https://docs.cloud.google.com/document-warehouse/docs/manage-documents#upload-from-local)

### Upload a document from Cloud Storage

You need to grant the Document AI Warehouse service account access to your Cloud Storage bucket
as described in the prerequisite section.

You need to upload your file onto a Cloud Storage bucket, following the
[instructions](https://cloud.google.com/storage/docs/uploading-objects).

### REST

Request:

    curl --location --request POST --url https://contentwarehouse.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION/documents \
    --header "Authorization: Bearer $(gcloud auth print-access-token)" \
    --header "Content-Type: application/json; charset=utf-8" \
    --data '{
    "document": {
      "display_name": "TestDoc3",
      "document_schema_name": "projects/PROJECT_NUMBER/locations/LOCATION/documentSchemas/DOCUMENT_SCHEMA_ID",
      "raw_document_path": "gs://BUCKET_URI/FILE_URI",
      "properties": [
        {
          "name": "supplier_name",
          "text_values": {
            "values": "Stanford Plumbing & Heating"
          }
        },
        {
          "name": "total_amount",
          "float_values": {
            "values": "1091.81"
          }
        },
      ]
    }, 
    "requestMetadata":{
      "userInfo":{
        "id": "user:USER_EMAIL_ID"
      }
    }
    }'

### Upload from a local machine

### REST

Request:

    curl --location --request POST --url https://contentwarehouse.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION/documents/ \
    --header "Authorization: Bearer $(gcloud auth print-access-token)" \
    --header "Content-Type: application/json; charset=utf-8" \
    --data '{
    "document": {
      "display_name": "TestDoc3",
      "document_schema_name": "projects/PROJECT_NUMBER/locations/LOCATION/documentSchemas/DOCUMENT_SCHEMA_ID",
      "inline_raw_document": "<bytes>",
      "properties": [
        {
          "name": "supplier_name",
          "text_values": {
            "values": "Stanford Plumbing & Heating"
          }
        },
        {
          "name": "total_amount",
          "float_values": {
            "values": "1091.81"
          }
        },
      ]
    },
    "requestMetadata": {
      "userInfo": {
        "id": "user:USER_EMAIL_ID"
      }
    }
    }'

## Get a document

By `document_id`:

### REST

    curl --request POST \
    --header "Authorization: Bearer $(gcloud auth print-access-token)" \
    --header "Content-Type: application/json; charset=UTF-8" -d '{
      "requestMetadata":{
        "userInfo":{
          "id": "user:USER_EMAIL"
        }
      }
    }' \
    "https://contentwarehouse.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION/documents/DOCUMENT_ID:get"

### Python


For more information, see the
[Document AI Warehouse Python API
reference documentation](https://docs.cloud.google.com/python/docs/reference/contentwarehouse/latest).


To authenticate to Document AI Warehouse, set up Application Default Credentials.
For more information, see

[Set up authentication for a local development environment](https://docs.cloud.google.com/docs/authentication/set-up-adc-local-dev-environment).


    from google.cloud import contentwarehouse


    def sample_get_document(document_name: str, user_id: str) -> contentwarehouse.Document:
        """Gets a document.

        Args:
            document_name: The resource name of the document.
                    Format: 'projects/{project_number}/
                    locations/{location}/documents/{document_id}'.
            user_id: user:YOUR_SERVICE_ACCOUNT_ID or user:USER_EMAIL.
        Returns:
            Response object
        """
        # Create a client
        client = contentwarehouse.DocumentServiceClient()

        request_metadata = contentwarehouse.RequestMetadata(
            user_info=contentwarehouse.UserInfo(id=user_id)
        )

        # Initialize request argument(s)
        request = contentwarehouse.GetDocumentRequest(
            name=document_name, request_metadata=request_metadata
        )

        # Make the request
        response = client.get_document(request=request)

        return response

### Java


For more information, see the
[Document AI Warehouse Java API
reference documentation](https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/overview).


To authenticate to Document AI Warehouse, set up Application Default Credentials.
For more information, see

[Set up authentication for a local development environment](https://docs.cloud.google.com/docs/authentication/set-up-adc-local-dev-environment).


    import com.google.cloud.contentwarehouse.v1.https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.Document.html;
    import com.google.cloud.contentwarehouse.v1.https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.DocumentName.html;
    import com.google.cloud.contentwarehouse.v1.https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.DocumentServiceClient.html;
    import com.google.cloud.contentwarehouse.v1.https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.DocumentServiceSettings.html;
    import com.google.cloud.contentwarehouse.v1.https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.GetDocumentRequest.html;
    import com.google.cloud.contentwarehouse.v1.https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.RequestMetadata.html;
    import com.google.cloud.contentwarehouse.v1.https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.UserInfo.html;
    import com.google.cloud.resourcemanager.v3.https://docs.cloud.google.com/java/docs/reference/google-cloud-resourcemanager/latest/com.google.cloud.resourcemanager.v3.Project.html;
    import com.google.cloud.resourcemanager.v3.https://docs.cloud.google.com/java/docs/reference/google-cloud-resourcemanager/latest/com.google.cloud.resourcemanager.v3.ProjectName.html;
    import com.google.cloud.resourcemanager.v3.https://docs.cloud.google.com/java/docs/reference/google-cloud-resourcemanager/latest/com.google.cloud.resourcemanager.v3.ProjectsClient.html;
    import java.io.IOException;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.TimeoutException;

    public class GetDocument {

      public static void getDocument() throws IOException, 
            InterruptedException, ExecutionException, TimeoutException {
        String projectId = "your-project-id";
        String location = "your-region"; // Format is "us" or "eu".
        String documentId = "your-document-id";
        String userId = "your-user-id"; // Format is user:<user-id>
        getDocument(projectId, location, documentId, userId);
      }

      // Retrieves details about existing Document using the document Id
      public static void getDocument(String projectId, String location, 
            String documentId, String userId) throws IOException, 
                InterruptedException, ExecutionException, TimeoutException {
        String projectNumber = getProjectNumber(projectId);

        String endpoint = "contentwarehouse.googleapis.com:443";
        if (!"us".equals(location)) {
          endpoint = String.format("%s-%s", location, endpoint);
        }
        https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.DocumentServiceSettings.html documentServiceSettings = 
             https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.DocumentServiceSettings.html.newBuilder().setEndpoint(endpoint).build(); 

        // Create a Document Service client
        try (https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.DocumentServiceClient.html documentServiceClient =
            https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.DocumentServiceClient.html.create(documentServiceSettings)) {
          /* The full resource name of the location, e.g.: 
           projects/{project_number}/location/{location}/documents/{document_id} */
          https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.DocumentName.html documentName = 
              https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.DocumentName.html.of(projectNumber, location, documentId);

          // Define Request Metadata for enforcing access control
          https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.RequestMetadata.html requestMetadata = https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.RequestMetadata.html.newBuilder()
                .setUserInfo(
                https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.UserInfo.html.newBuilder()
                  .https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.UserInfo.Builder.html#com_google_cloud_contentwarehouse_v1_UserInfo_Builder_setId_java_lang_String_(userId).build()).build();

          // Define request to get details of a specific Document Schema
          https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.GetDocumentRequest.html getDocumentRequest = 
              https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.GetDocumentRequest.html.newBuilder()
              .setName(documentName.https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.DocumentName.html#com_google_cloud_contentwarehouse_v1_DocumentName_toString__())
              .setRequestMetadata(requestMetadata).build();

          // Get details of the Document 
          https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.Document.html document = documentServiceClient.getDocument(getDocumentRequest);

          System.out.println(document.https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.Document.html#com_google_cloud_contentwarehouse_v1_Document_getName__());
        }
      }

      private static String getProjectNumber(String projectId) throws IOException { 
        /* Initialize client that will be used to send requests. 
        * This client only needs to be created once, and can be reused for multiple requests. */
        try (https://docs.cloud.google.com/java/docs/reference/google-cloud-resourcemanager/latest/com.google.cloud.resourcemanager.v3.ProjectsClient.html projectsClient = https://docs.cloud.google.com/java/docs/reference/google-cloud-resourcemanager/latest/com.google.cloud.resourcemanager.v3.ProjectsClient.html.create()) { 
          https://docs.cloud.google.com/java/docs/reference/google-cloud-resourcemanager/latest/com.google.cloud.resourcemanager.v3.ProjectName.html projectName = https://docs.cloud.google.com/java/docs/reference/google-cloud-resourcemanager/latest/com.google.cloud.resourcemanager.v3.ProjectName.html.of(projectId); 
          https://docs.cloud.google.com/java/docs/reference/google-cloud-resourcemanager/latest/com.google.cloud.resourcemanager.v3.Project.html project = projectsClient.getProject(projectName);
          String projectNumber = project.https://docs.cloud.google.com/java/docs/reference/google-cloud-resourcemanager/latest/com.google.cloud.resourcemanager.v3.Project.html#com_google_cloud_resourcemanager_v3_Project_getName__(); // Format returned is projects/xxxxxx
          return projectNumber.substring(projectNumber.lastIndexOf("/") + 1);
        } 
      }
    }

### Node.js


For more information, see the
[Document AI Warehouse Node.js API
reference documentation](https://docs.cloud.google.com/nodejs/docs/reference/contentwarehouse/latest).


To authenticate to Document AI Warehouse, set up Application Default Credentials.
For more information, see

[Set up authentication for a local development environment](https://docs.cloud.google.com/docs/authentication/set-up-adc-local-dev-environment).


    /**
     * TODO(developer): Uncomment these variables before running the sample.
     * const projectNumber = 'YOUR_PROJECT_NUMBER';
     * const location = 'YOUR_PROJECT_LOCATION'; // Format is 'us' or 'eu'
     * documentId = 'YOUR_DOCUMENT_ID';
     * const userId = 'user:xxx@example.com'; // Format is "user:xxx@example.com"
     */

    // Import from google cloud
    const {DocumentServiceClient} = require('https://docs.cloud.google.com/nodejs/docs/reference/contentwarehouse/latest/overview.html').v1;

    const apiEndpoint =
      location === 'us'
        ? 'contentwarehouse.googleapis.com'
        : `${location}-contentwarehouse.googleapis.com`;

    // Create service client
    const serviceClient = new https://docs.cloud.google.com/nodejs/docs/reference/contentwarehouse/latest/overview.html({
      apiEndpoint: apiEndpoint,
    });

    // Get Document Schema
    async function getDocument() {
      // Initialize request argument(s)
      const documentRequest = {
        // The full resource name of the document, e.g.:
        // projects/{project_number}/locations/{location}/documents/{document_id}
        name: serviceClient.projectLocationDocumentPath(
          projectNumber,
          location,
          documentId
        ),
        requestMetadata: {userInfo: {id: userId}},
      };

      // Make Request
      const response = serviceClient.getDocument(documentRequest);

      // Print out response
      response.then(
        result => console.log(`Document Found: ${JSON.stringify(result)}`),
        error => console.log(`${error}`)
      );
    }

<br />

By `reference_id`:

      curl --request POST \
        --header "Authorization: Bearer $(gcloud auth print-access-token)" \
        --header "Content-Type: application/json; charset=UTF-8" -d '{
          "requestMetadata":{
            "userInfo":{
              "id": "user:USER_EMAIL"
            }
          }
        }' \
        "https://contentwarehouse.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION/documents/referenceId/REFERENCE_ID:get"

## Update a document

By `document_id`:

### REST

`posix-terminal
curl --location --request POST --url https://contentwarehouse.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION/documents \
--header "Authorization: Bearer $(gcloud auth print-access-token)" \
--header "Content-Type: application/json; charset=utf-8" \
--data '{
"document": {
"display_name": "TestDoc3",
"document_schema_name": "projects/PROJECT_NUMBER/locations/LOCATION/documentSchemas/DOCUMENT_SCHEMA_ID",
"raw_document_path": "gs://BUCKET_URI/FILE_URI",
"properties": [
{
"name": "supplier_name",
"text_values": {
"values": "Stanford Plumbing & Heating"
}
},
{
"name": "total_amount",
"float_values": {
"values": "1091.81"
}
},
{
"name": "invoice_id",
"text_values": {
"values": "invoiceid"
}
},
]
},
"requestMetadata": {
"userInfo": {
"id": "user:USER_EMAIL"
}
}
}'`

### Python


For more information, see the
[Document AI Warehouse Python API
reference documentation](https://docs.cloud.google.com/python/docs/reference/contentwarehouse/latest).


To authenticate to Document AI Warehouse, set up Application Default Credentials.
For more information, see

[Set up authentication for a local development environment](https://docs.cloud.google.com/docs/authentication/set-up-adc-local-dev-environment).


    from google.cloud import contentwarehouse


    def sample_update_document(
        document_name: str, document: contentwarehouse.https://docs.cloud.google.com/python/docs/reference/contentwarehouse/latest/google.cloud.contentwarehouse_v1.types.Document.html, user_id: str
    ) -> contentwarehouse.CreateDocumentResponse:
        """Updates a document.

        Args:
            document_name: The resource name of the document.
                        Format: 'projects/{project_number}/
                        locations/{location}/documents/{document_id}'.
            document: Document AI Warehouse Document object..
            user_id: user_id: user:YOUR_SERVICE_ACCOUNT_ID or user:USER_EMAIL.
        Returns:
            Response object.
        """
        # Create a client
        client = contentwarehouse.https://docs.cloud.google.com/python/docs/reference/contentwarehouse/latest/google.cloud.contentwarehouse_v1.services.document_service.DocumentServiceClient.html()

        # Update document fields
        # For fields which can be updated, refer
        # https://cloud.google.com/python/docs/reference/contentwarehouse/
        # latest/google.cloud.contentwarehouse_v1.types.Document
        document.display_name = "Updated Order Invoice"

        request_metadata = contentwarehouse.https://docs.cloud.google.com/python/docs/reference/contentwarehouse/latest/google.cloud.contentwarehouse_v1.types.RequestMetadata.html(
            user_info=contentwarehouse.https://docs.cloud.google.com/python/docs/reference/contentwarehouse/latest/google.cloud.contentwarehouse_v1.types.UserInfo.html(id=user_id)
        )

        request = contentwarehouse.https://docs.cloud.google.com/python/docs/reference/contentwarehouse/latest/google.cloud.contentwarehouse_v1.types.UpdateDocumentRequest.html(
            name=document_name, document=document, request_metadata=request_metadata
        )

        # Make the request
        response = client.https://docs.cloud.google.com/python/docs/reference/contentwarehouse/latest/google.cloud.contentwarehouse_v1.services.document_service.DocumentServiceClient.html#google_cloud_contentwarehouse_v1_services_document_service_DocumentServiceClient_update_document(request=request)

        return response

### Java


For more information, see the
[Document AI Warehouse Java API
reference documentation](https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/overview).


To authenticate to Document AI Warehouse, set up Application Default Credentials.
For more information, see

[Set up authentication for a local development environment](https://docs.cloud.google.com/docs/authentication/set-up-adc-local-dev-environment).

    import com.google.cloud.contentwarehouse.v1.https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.Document.html;
    import com.google.cloud.contentwarehouse.v1.https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.DocumentName.html;
    import com.google.cloud.contentwarehouse.v1.https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.DocumentServiceClient.html;
    import com.google.cloud.contentwarehouse.v1.https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.DocumentServiceSettings.html;
    import com.google.cloud.contentwarehouse.v1.https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.GetDocumentRequest.html;
    import com.google.cloud.contentwarehouse.v1.https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.RequestMetadata.html;
    import com.google.cloud.contentwarehouse.v1.https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.UpdateDocumentRequest.html;
    import com.google.cloud.contentwarehouse.v1.https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.UpdateDocumentResponse.html;
    import com.google.cloud.contentwarehouse.v1.https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.UserInfo.html;
    import com.google.cloud.resourcemanager.v3.https://docs.cloud.google.com/java/docs/reference/google-cloud-resourcemanager/latest/com.google.cloud.resourcemanager.v3.Project.html;
    import com.google.cloud.resourcemanager.v3.https://docs.cloud.google.com/java/docs/reference/google-cloud-resourcemanager/latest/com.google.cloud.resourcemanager.v3.ProjectName.html;
    import com.google.cloud.resourcemanager.v3.https://docs.cloud.google.com/java/docs/reference/google-cloud-resourcemanager/latest/com.google.cloud.resourcemanager.v3.ProjectsClient.html;
    import java.io.IOException;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.TimeoutException;

    public class UpdateDocument {
      public static void updateDocument() throws IOException, 
            InterruptedException, ExecutionException, TimeoutException { 
        // TODO(developer): Replace these variables before running the sample.
        String projectId = "your-project-id";
        String location = "your-region"; // Format is "us" or "eu".
        String documentId = "your-document-id";
        String userId = "your-user-id"; // Format is user:<user-id>
        /* The below method call retrieves details about the document you are about to update.
        * It is important to note that some properties cannot be edited or removed. 
        * For more information on managing documents, please see the below documentation.
        * https://cloud.google.com/document-warehouse/docs/manage-documents */
        GetDocument.getDocument(projectId, location, documentId, userId);
        updateDocument(projectId, location, documentId, userId);
      }

      // Updates an existing Document
      public static void updateDocument(String projectId, String location,
            String documentId, String userId) throws IOException, InterruptedException,
              ExecutionException, TimeoutException { 
        String projectNumber = getProjectNumber(projectId);

        String endpoint = "contentwarehouse.googleapis.com:443";
        if (!"us".equals(location)) {
          endpoint = String.format("%s-%s", location, endpoint);
        }

        https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.DocumentServiceSettings.html documentServiceSettings = 
                 https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.DocumentServiceSettings.html.newBuilder().setEndpoint(endpoint).build(); 

        /* Create the Document Service Client 
         * Initialize client that will be used to send requests. 
         * This client only needs to be created once, and can be reused for multiple requests. */
        try (https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.DocumentServiceClient.html documentServiceClient = 
                https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.DocumentServiceClient.html.create(documentServiceSettings)) {

          /* The full resource name of the location, e.g.: 
           projects/{project_number}/location/{location}/documentSchemas/{document_schema_id} */
          https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.DocumentName.html documentName = 
              https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.DocumentName.html.of(projectNumber, location, documentId);

          // Define RequestMetadata object for context of the user making the API call
          https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.RequestMetadata.html requestMetadata = https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.RequestMetadata.html.newBuilder()
              .setUserInfo(
              https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.UserInfo.html.newBuilder()
                .https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.UserInfo.Builder.html#com_google_cloud_contentwarehouse_v1_UserInfo_Builder_setId_java_lang_String_(userId).build()).build();

          // Get the document to retreive the document schema associated with the object
          https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.GetDocumentRequest.html getDocumentRequest = https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.GetDocumentRequest.html.newBuilder()
              .setName(documentName.https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.DocumentName.html#com_google_cloud_contentwarehouse_v1_DocumentName_toString__())
              .setRequestMetadata(requestMetadata)
              .build(); 

          // Execute the request and store response in a document object
          https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.Document.html document = documentServiceClient.getDocument(getDocumentRequest);

          // Define the updates to the document that will be passed in the request
          https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.Document.html updatedDocument = https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.Document.html.newBuilder()
              .setDisplayName("Updated Document Display Name")
              .setDocumentSchemaName(document.https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.Document.html#com_google_cloud_contentwarehouse_v1_Document_getDocumentSchemaName__()).build();

          // Create the request to Update the Document
          https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.UpdateDocumentRequest.html updateDocumentRequest = 
                https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.UpdateDocumentRequest.html.newBuilder()
                  .setName(documentName.https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.DocumentName.html#com_google_cloud_contentwarehouse_v1_DocumentName_toString__())
                  .setDocument(updatedDocument)
                  .setRequestMetadata(requestMetadata)
                  .build();

          // Update Document and receive response
          https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.UpdateDocumentResponse.html updateDocumentResponse = 
              documentServiceClient.updateDocument(updateDocumentRequest);

          // Read the output of Updated Document Name
          System.out.println(updateDocumentResponse.https://docs.cloud.google.com/java/docs/reference/google-cloud-contentwarehouse/latest/com.google.cloud.contentwarehouse.v1.UpdateDocumentResponse.html#com_google_cloud_contentwarehouse_v1_UpdateDocumentResponse_getDocument__().getDisplayName());
        }
      }

      private static String getProjectNumber(String projectId) throws IOException { 
        /* Initialize client that will be used to send requests. 
        * This client only needs to be created once, and can be reused for multiple requests. */
        try (https://docs.cloud.google.com/java/docs/reference/google-cloud-resourcemanager/latest/com.google.cloud.resourcemanager.v3.ProjectsClient.html projectsClient = https://docs.cloud.google.com/java/docs/reference/google-cloud-resourcemanager/latest/com.google.cloud.resourcemanager.v3.ProjectsClient.html.create()) { 
          https://docs.cloud.google.com/java/docs/reference/google-cloud-resourcemanager/latest/com.google.cloud.resourcemanager.v3.ProjectName.html projectName = https://docs.cloud.google.com/java/docs/reference/google-cloud-resourcemanager/latest/com.google.cloud.resourcemanager.v3.ProjectName.html.of(projectId); 
          https://docs.cloud.google.com/java/docs/reference/google-cloud-resourcemanager/latest/com.google.cloud.resourcemanager.v3.Project.html project = projectsClient.getProject(projectName);
          String projectNumber = project.https://docs.cloud.google.com/java/docs/reference/google-cloud-resourcemanager/latest/com.google.cloud.resourcemanager.v3.Project.html#com_google_cloud_resourcemanager_v3_Project_getName__(); // Format returned is projects/xxxxxx
          return projectNumber.substring(projectNumber.lastIndexOf("/") + 1);
        } 
      }
    }

<br />

By `reference_id`:

      curl --location --request POST --url https://contentwarehouse.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION/documents \
    --header "Authorization: Bearer $(gcloud auth print-access-token)" \
    --header "Content-Type: application/json; charset=utf-8" \
    --data '{
      "document": {
        "display_name": "TestDoc3",
        "document_schema_name": "projects/PROJECT_NUMBER/locations/LOCATION/documentSchemas/referenceId/REFERENCE_ID",
        "raw_document_path": "gs://BUCKET_URI/FILE_URI",
        "properties": [
          {
            "name": "supplier_name",
            "text_values": {
              "values": "Stanford Plumbing & Heating"
            }
          },
          {
            "name": "total_amount",
            "float_values": {
              "values": "1091.81"
            }
          },
          {
            "name": "invoice_id",
            "text_values": {
              "values": "invoiceid"
            }
          },
        ]
      },
      "requestMetadata": {
        "userInfo": {
          "id": "user:USER_EMAIL"
        }
      }
    }'

## Delete a document

### REST

By `document_id`:

    curl --request POST \
      --header "Authorization: Bearer $(gcloud auth print-access-token)" \
      --header "Content-Type: application/json; charset=UTF-8" -d '{
        "requestMetadata":{
          "userInfo":{
            "id": "user:USER_EMAIL"
          }
        }
      }' \
      "https://contentwarehouse.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION/documents/DOCUMENT_ID:delete"

By `reference_id`:

    curl --request POST \
      --header "Authorization: Bearer $(gcloud auth print-access-token)" \
      --header "Content-Type: application/json; charset=UTF-8" -d '{
        "requestMetadata":{
          "userInfo":{
            "id": "user:USER_EMAIL"
          }
        }
      }' \
      "https://contentwarehouse.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION/documents/referenceId/REFERENCE_ID":delete"

## Next steps

- Proceed to [Organize documents in folders](https://docs.cloud.google.com/document-warehouse/docs/advanced-search) to learn how to organize documents in folders.