Visit
[Chrome Management App Details API](https://developers.google.com/chrome/management/guides/app_details_api)
for an overview of API features.

All the requests shown below use the following variables:

- `$TOKEN` - OAuth 2 token
- `$CUSTOMER` - ID of the customer or literal `my_customer`

## Get details for a Chrome app / extension

To view details about a specific Chrome app, use the
`/apps/chrome/{app_id}@{app_version}` endpoint.

#### Request

      curl -X GET \
      -H "Authorization: Bearer $TOKEN" \
      "https://chromemanagement.googleapis.com/v1/customers/$CUSTOMER/apps/chrome/abcdefghijklmnopqrstuvwxyzabcdef@1.2.3"

#### Response

    {
        "name": "customers/<customer>/apps/chrome/abcdefghijklmnopqrstuvwxyzabcdef@1.2.3",
        "displayName": "Sample Google Chrome Extension",
        "description": "A sample Google Chrome extension.",
        "revisionId": "1.2.3",
        "type": "CHROME",
        "iconUri": "https://sample.chrome.extension.google.com/icon.png",
        "detailUri": "https://chrome.google.com/webstore/detail/abcdefghijklmnopqrstuvwxyzabcdef",
        "firstPublishTime": "2010-10-10T10:10:10.123456Z",
        "latestPublishTime": "2020-10-10T10:10:10.123456Z",
        "publisher": "sample.com",
        "homepageUri": "http://sample.chrome.extension.google.com/home",
        "reviewNumber": "10000",
        "reviewRating": 4.5,
        "chromeAppInfo": {
            "supportEnabled": false,
            "minUserCount": 6000000,
            "permissions": [
                {
                    "type": "content_security_policy",
                    "documentationUri": "https://developer.chrome.com/extensions/contentSecurityPolicy",
                    "accessUserData": false
                },
                {
                    "type": "contextmenus",
                    "documentationUri": "https://developer.chrome.com/extensions/contextMenus",
                    "accessUserData": false
                },
            ],
            "siteAccess": [
                {
                    "hostMatch": "<all_urls>"
                }
            ],
            "isTheme": false,
            "googleOwned": true,
            "isCwsHosted": true,
            "riskAssessment": {
                "entries": [
                    {
                        "provider": "RISK_ASSESSMENT_PROVIDER_LAYERX",
                        "riskAssessment": {
                            "assessment": "2.5",
                            "detailsUrl": "https://sample.riskprovider.com/extensions/chrome/abcdefghijklmnopqrstuvwxyzabcdef/1.2.3/",
                            "version": "1.2.3"
                        },
                        "riskLevel": "RISK_LEVEL_LOW"
                    }
                ],
                "overallRiskLevel": "RISK_LEVEL_LOW"
            }
        }
    }

## Get details for an Android app

To view details about a specific Android app, use the
`/apps/android/{app_id}@{app_version}` endpoint.

#### Request

      curl -X GET \
      -H "Authorization: Bearer $TOKEN" \
      "https://chromemanagement.googleapis.com/v1/customers/$CUSTOMER/apps/android/com.google.android.sample@1.2.3"

#### Response

    {
        "name": "customers/<customer>/apps/android/com.google.android.sample@1.2.3",
        "displayName": "Sample Android App",
        "description": "A sample Android app.",
        "appId": "com.google.android.sample",
        "revisionId": "1.2.3",
        "type": "ANDROID",
        "iconUri": "https://sample.android.app.google.com/icon.png",
        "detailUri": "https://play.google.com/store/apps/details?id=com.google.android.sample",
        "firstPublishTime": "2010-10-10T10:10:10.123456Z",
        "latestPublishTime": "2020-10-10T10:10:10.123456Z",
        "publisher": "Google LLC",
        "isPaidApp": true,
        "homepageUri": "http://sample.android.app.google.com/home",
        "privacyPolicyUri": "http://sample.android.app.google.com/privacy",
        "reviewNumber": "10000",
        "reviewRating": 4.5,
        "androidAppInfo": {
            "permissions": [
                {
                    "type": "android.permission.CAMERA"
                },
            ]
        }
    }

## Get details for a Progressive Web App

To view details about a specific Prgoressive Web App, use the
`/apps/web/{app_id}` endpoint.
Note that the app id is the URL-encoded app home page.

#### Request

      curl -X GET \
      -H "Authorization: Bearer $TOKEN" \
      "https://chromemanagement.googleapis.com/v1/customers/$CUSTOMER/apps/web/http%3A%2F%2Fsample.web.app.google.com%2F"

#### Response

    {
        "name": "customers/<customer>/apps/web/http%3A%2F%sample.web.app.google.com%2F",
        "displayName": "sample.web.app.google.com",
        "description": "A sample Progressive Web App.",
        "appId": "http://sample.web.app.google.com/",
        "type": "WEB",
        "iconUri": "http://sample.web.app.google.com/icon.png"
    }

## List requested Chrome extensions

To list requested Chrome apps, use the
`/apps:countChromeAppRequests` endpoint.

#### Request

      curl -X GET \
      -H "Authorization: Bearer $TOKEN" \
      "https://chromemanagement.googleapis.com/v1/customers/$CUSTOMER/apps:countChromeAppRequests"

#### Response

    {
      "requestedApps": [
        {
          "appId": "abcdefghijklmnopqrstuvwxyzabcdef",
          "displayName": "Sample Google Chrome Extension",
          "appDetails": "customers/<customer>/apps/chrome/abcdefghijklmnopqrstuvwxyzabcdef",
          "iconUri": "https://sample.chrome.extension.google.com/icon.png",
          "detailUri": "https://chrome.google.com/webstore/detail/abcdefghijklmnopqrstuvwxyzabcdef",
          "requestCount": "1",
          "latestRequestTime": "2020-10-10T10:10:10.123456Z"
        },
      ],
      "totalSize": 1
    }

### Taking action on extension requests

To take an appropriate action on app requests from end users, you will need to use the [Chrome Policy API](https://developers.google.com/chrome/policy). Follow the [setup guide](https://developers.google.com/chrome/policy/guides/setup) to get access to the API. Then you will be able to make requests to that API to take various actions. Samples for making app related requests can be found [here](https://developers.google.com/chrome/policy/guides/app_samples_policyapi). The following are examples of common actions you can take on an app request.

#### Approve extension request for manual install by the user/devices under an OU

    curl -X POST \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $TOKEN" \
      -d '{
            requests: [{
                    policyTargetKey: {
                            targetResource: "orgunits/04fatzly4jbjho9",
                            additionalTargetKeys: {"app_id": "chrome:abcdefghijklmnopqrstuvwxyzabcdef"}
                            },
                    policyValue: {
                            policySchema: "chrome.users.apps.InstallType",
                            value: {appInstallType: "ALLOWED"}
                            },
                    updateMask: {paths: "appInstallType"}
                    }]
          }' \
      "https://chromepolicy.googleapis.com/v1/customers/$CUSTOMER/policies/orgunits:batchModify"

A successful response should be empty:

    {}

#### Deny extension request for all users/devices under an OU

    curl -X POST \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $TOKEN" \
      -d '{
            requests: [{
                    policyTargetKey: {
                            targetResource: "orgunits/04fatzly4jbjho9",
                            additionalTargetKeys: {"app_id": "chrome:abcdefghijklmnopqrstuvwxyzabcdef"}
                            },
                    policyValue: {
                            policySchema: "chrome.users.apps.InstallType",
                            value: {appInstallType: "BLOCKED"}
                            },
                    updateMask: {paths: "appInstallType"}
                    }]
          }' \
      "https://chromepolicy.googleapis.com/v1/customers/$CUSTOMER/policies/orgunits:batchModify"

A successful response should be empty:

    {}

#### Force install extension for all users/devices under an OU

    curl -X POST \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $TOKEN" \
      -d '{
            requests: [{
                    policyTargetKey: {
                            targetResource: "orgunits/04fatzly4jbjho9",
                            additionalTargetKeys: {"app_id": "chrome:abcdefghijklmnopqrstuvwxyzabcdef"}
                            },
                    policyValue: {
                            policySchema: "chrome.users.apps.InstallType",
                            value: {appInstallType: "FORCED"}
                            },
                    updateMask: {paths: "appInstallType"}
                    }]
          }' \
      "https://chromepolicy.googleapis.com/v1/customers/$CUSTOMER/policies/orgunits:batchModify"

A successful response should be empty:

    {}