# Google API Discovery Drift Monitor (`defenestrator/google-api-discovery-drift-monitor`) Actor

Monitor Google's public Discovery API directory and selected discovery documents for API version, preferred flag, revision, schema, and method-surface drift.

- **URL**: https://apify.com/defenestrator/google-api-discovery-drift-monitor.md
- **Developed by:** [Defenestrator](https://apify.com/defenestrator) (community)
- **Categories:** Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 monitor rows

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Google API Discovery Drift Monitor

Monitor Google public Discovery API metadata for API version, preferred-version, revision, schema, method, and OAuth-scope drift.

This Actor is for platform, SaaS integration, API client, governance, and developer-tool teams that depend on Google APIs. It is not affiliated with Google, Google Cloud, or Alphabet, and it does not use Google account credentials.

### What it checks

- The public Discovery API directory at `https://www.googleapis.com/discovery/v1/apis`.
- Selected public Discovery documents via each API version's `discoveryRestUrl`.
- API name, version, ID, title, documentation link, preferred flag, revision, service path, root URL, base URL, protocol, method count, schema count, resource count, OAuth-scope count, and semantic hashes.
- Alert conditions for missing watched APIs, non-preferred versions, unexpected versions, new versions, preferred-flag drift, revision drift, and Discovery-surface hash drift.

### Repeat-use loop

1. Run the Actor once for a watched set such as Drive, Gmail, Calendar, and Sheets.
2. Save the output snapshot or previous dataset rows.
3. Run it on a schedule and pass the previous run back as a baseline.
4. Review only alert, changed, new, or unexpected rows unless you intentionally include unchanged rows.

### Input highlights

- `apiNamePatterns`: exact names or wildcard-style patterns for APIs to monitor.
- `criticalApiNames`: API names that should become high priority when missing or changed.
- `fetchDiscoveryDocuments`: fetch public Discovery documents and compute method/schema/scope fingerprints.
- `maxDiscoveryDocuments`: cap the number of Discovery documents fetched in one run.
- `baselineDataset`, `baselineDatasetId`, or `baselineRows`: previous-run data for drift comparison.
- `expectedApiVersions`: optional mapping from API name to expected version list.
- `maxRows`, `maxDirectoryBytes`, and `maxDiscoveryBytes`: cost and payload controls for large API surfaces.

### Output

Each dataset row is one selected Google API version or one missing watched API row. `OUTPUT` contains source metadata, alert counts, priority counts, and a compact snapshot suitable for chaining into a later baseline.

Important fields include `alert`, `priority`, `alertReasons`, `changedSincePrevious`, `newSincePrevious`, `preferred`, `revision`, `methodCount`, `schemaCount`, `resourceCount`, `oauthScopeCount`, `directoryHash`, `discoveryHash`, and `semanticHash`.

### Pricing

This Actor uses Apify Pay Per Event (PPE) pricing:

- `apify-actor-start`: `$0.00005` per run start.
- `apify-default-dataset-item`: `$0.002` per dataset row (`Monitor row`).
- Platform usage is included in the event price; users do not pay a separate platform-usage pass-through.
- A dataset row is one monitored result, source, or drift-check row emitted by the Actor. Run cost scales with the number of rows produced and the limits you choose.

Use Apify's max total charge setting before starting a run if you want a hard spend cap.

### Limitations

- Source data is public Google Discovery API metadata, not a contractual Google SLA and not a live test of every endpoint.
- Some Google APIs are absent from the Discovery API or expose only partial public metadata.
- Discovery document changes can be valid routine API evolution; verify operational impact against official Google documentation before making production changes.
- The Actor intentionally does not use Google account credentials and should not be given private credentials or confidential customer data.

### Responsible use

Use this Actor for monitoring public API metadata and internal change review. Do not represent its output as an official Google certification, compliance opinion, or legal advice.

# Actor input Schema

## `apiNamePatterns` (type: `array`):

Exact names or wildcard patterns for Google APIs to monitor from the public Discovery directory, such as drive, gmail, calendar, sheets, admin, storage, compute, cloudresourcemanager, iam, or serviceusage. Patterns also match id and title.
## `criticalApiNames` (type: `array`):

API names that should be promoted to high priority when they are missing, become non-preferred, or drift from the previous baseline.
## `includeNonPreferredVersions` (type: `boolean`):

If true, include matching API versions even when Google's Discovery directory marks them as non-preferred. This is useful for legacy Admin SDK variants and upgrade monitoring.
## `alertOnNonPreferredVersions` (type: `boolean`):

If true, rows marked preferred=false in the Discovery directory create alerts so deprecated or legacy versions are visible.
## `fetchDiscoveryDocuments` (type: `boolean`):

If true, fetch selected public discoveryRestUrl documents to compute revision, method, schema, scope, and semantic-surface fingerprints.
## `maxDiscoveryDocuments` (type: `integer`):

Maximum number of matched discoveryRestUrl documents to fetch in one run. Directory-only rows are still emitted for additional matches up to maxRows.
## `baselineDataset` (type: `string`):

Optional previous run dataset for drift comparison. Use the picker so this limited-permission Actor receives READ access to the selected private dataset.
## `baselineDatasetId` (type: `string`):

Advanced/API fallback for a previous dataset ID. Prefer the picker under limited permissions.
## `baselineRows` (type: `array`):

Optional rows copied from a previous run. Rows with rowKey plus semanticHash or discoveryHash are used for drift comparison.
## `expectedApiVersions` (type: `object`):

Optional JSON object mapping API names to expected version strings or arrays, for example {"drive":["v3"],"gmail":["v1"]}. Unexpected matching versions create warning rows.
## `alertOnNewApiVersion` (type: `boolean`):

If true, a selected Google API version absent from the previous baseline creates an alert.
## `alertOnPreferredChange` (type: `boolean`):

If true, a change in Google's preferred flag compared with baseline creates an alert.
## `alertOnRevisionChange` (type: `boolean`):

If true, a changed public discovery-document revision compared with baseline creates an alert.
## `alertOnDiscoveryHashDrift` (type: `boolean`):

If true, a changed semantic discovery-document fingerprint compared with baseline creates an alert.
## `alertOnMissingWatchedApi` (type: `boolean`):

If true, exact watched API names without wildcard characters that are absent from the directory create missing-source alert rows.
## `includeUnchangedRows` (type: `boolean`):

If false, only alert, changed, or error rows are pushed to the dataset. OUTPUT.snapshot still includes the selected checked rows up to maxRows.
## `maxRows` (type: `integer`):

Maximum rows to emit after alert/change priority sorting. Keep this bounded for cheap scheduled monitoring.
## `maxDirectoryBytes` (type: `integer`):

Maximum size of the public Google Discovery API directory response after HTTP decoding.
## `maxDiscoveryBytes` (type: `integer`):

Maximum size of each selected public discoveryRestUrl document after HTTP decoding.
## `requestTimeoutSecs` (type: `integer`):

Timeout for each public Google Discovery API request.

## Actor input object example

```json
{
  "apiNamePatterns": [
    "drive",
    "gmail",
    "calendar",
    "sheets"
  ],
  "criticalApiNames": [
    "drive",
    "gmail",
    "calendar",
    "sheets"
  ],
  "includeNonPreferredVersions": false,
  "alertOnNonPreferredVersions": false,
  "fetchDiscoveryDocuments": true,
  "maxDiscoveryDocuments": 4,
  "baselineRows": [],
  "expectedApiVersions": {},
  "alertOnNewApiVersion": true,
  "alertOnPreferredChange": true,
  "alertOnRevisionChange": true,
  "alertOnDiscoveryHashDrift": true,
  "alertOnMissingWatchedApi": true,
  "includeUnchangedRows": true,
  "maxRows": 20,
  "maxDirectoryBytes": 2000000,
  "maxDiscoveryBytes": 5000000,
  "requestTimeoutSecs": 30
}
````

# Actor output Schema

## `datasetItems` (type: `string`):

No description

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "apiNamePatterns": [
        "drive",
        "gmail",
        "calendar",
        "sheets"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("defenestrator/google-api-discovery-drift-monitor").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "apiNamePatterns": [
        "drive",
        "gmail",
        "calendar",
        "sheets",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("defenestrator/google-api-discovery-drift-monitor").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "apiNamePatterns": [
    "drive",
    "gmail",
    "calendar",
    "sheets"
  ]
}' |
apify call defenestrator/google-api-discovery-drift-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=defenestrator/google-api-discovery-drift-monitor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google API Discovery Drift Monitor",
        "description": "Monitor Google's public Discovery API directory and selected discovery documents for API version, preferred flag, revision, schema, and method-surface drift.",
        "version": "0.0",
        "x-build-id": "AM6pgHI9Weow5FMFg"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/defenestrator~google-api-discovery-drift-monitor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-defenestrator-google-api-discovery-drift-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/defenestrator~google-api-discovery-drift-monitor/runs": {
            "post": {
                "operationId": "runs-sync-defenestrator-google-api-discovery-drift-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/defenestrator~google-api-discovery-drift-monitor/run-sync": {
            "post": {
                "operationId": "run-sync-defenestrator-google-api-discovery-drift-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "apiNamePatterns": {
                        "title": "API name patterns",
                        "type": "array",
                        "description": "Exact names or wildcard patterns for Google APIs to monitor from the public Discovery directory, such as drive, gmail, calendar, sheets, admin, storage, compute, cloudresourcemanager, iam, or serviceusage. Patterns also match id and title.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "criticalApiNames": {
                        "title": "Critical API names",
                        "type": "array",
                        "description": "API names that should be promoted to high priority when they are missing, become non-preferred, or drift from the previous baseline.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "drive",
                            "gmail",
                            "calendar",
                            "sheets"
                        ]
                    },
                    "includeNonPreferredVersions": {
                        "title": "Include non-preferred versions",
                        "type": "boolean",
                        "description": "If true, include matching API versions even when Google's Discovery directory marks them as non-preferred. This is useful for legacy Admin SDK variants and upgrade monitoring.",
                        "default": false
                    },
                    "alertOnNonPreferredVersions": {
                        "title": "Alert on non-preferred versions",
                        "type": "boolean",
                        "description": "If true, rows marked preferred=false in the Discovery directory create alerts so deprecated or legacy versions are visible.",
                        "default": false
                    },
                    "fetchDiscoveryDocuments": {
                        "title": "Fetch discovery documents",
                        "type": "boolean",
                        "description": "If true, fetch selected public discoveryRestUrl documents to compute revision, method, schema, scope, and semantic-surface fingerprints.",
                        "default": true
                    },
                    "maxDiscoveryDocuments": {
                        "title": "Max discovery documents",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum number of matched discoveryRestUrl documents to fetch in one run. Directory-only rows are still emitted for additional matches up to maxRows.",
                        "default": 4
                    },
                    "baselineDataset": {
                        "title": "Previous run dataset",
                        "type": "string",
                        "description": "Optional previous run dataset for drift comparison. Use the picker so this limited-permission Actor receives READ access to the selected private dataset."
                    },
                    "baselineDatasetId": {
                        "title": "Previous dataset ID (advanced)",
                        "type": "string",
                        "description": "Advanced/API fallback for a previous dataset ID. Prefer the picker under limited permissions."
                    },
                    "baselineRows": {
                        "title": "Inline previous rows",
                        "type": "array",
                        "description": "Optional rows copied from a previous run. Rows with rowKey plus semanticHash or discoveryHash are used for drift comparison.",
                        "items": {
                            "type": "object"
                        },
                        "default": []
                    },
                    "expectedApiVersions": {
                        "title": "Expected API versions",
                        "type": "object",
                        "description": "Optional JSON object mapping API names to expected version strings or arrays, for example {\"drive\":[\"v3\"],\"gmail\":[\"v1\"]}. Unexpected matching versions create warning rows.",
                        "default": {}
                    },
                    "alertOnNewApiVersion": {
                        "title": "Alert on new API version after baseline",
                        "type": "boolean",
                        "description": "If true, a selected Google API version absent from the previous baseline creates an alert.",
                        "default": true
                    },
                    "alertOnPreferredChange": {
                        "title": "Alert on preferred flag drift",
                        "type": "boolean",
                        "description": "If true, a change in Google's preferred flag compared with baseline creates an alert.",
                        "default": true
                    },
                    "alertOnRevisionChange": {
                        "title": "Alert on discovery revision drift",
                        "type": "boolean",
                        "description": "If true, a changed public discovery-document revision compared with baseline creates an alert.",
                        "default": true
                    },
                    "alertOnDiscoveryHashDrift": {
                        "title": "Alert on discovery surface hash drift",
                        "type": "boolean",
                        "description": "If true, a changed semantic discovery-document fingerprint compared with baseline creates an alert.",
                        "default": true
                    },
                    "alertOnMissingWatchedApi": {
                        "title": "Alert on missing watched API",
                        "type": "boolean",
                        "description": "If true, exact watched API names without wildcard characters that are absent from the directory create missing-source alert rows.",
                        "default": true
                    },
                    "includeUnchangedRows": {
                        "title": "Include unchanged rows",
                        "type": "boolean",
                        "description": "If false, only alert, changed, or error rows are pushed to the dataset. OUTPUT.snapshot still includes the selected checked rows up to maxRows.",
                        "default": true
                    },
                    "maxRows": {
                        "title": "Max dataset rows",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum rows to emit after alert/change priority sorting. Keep this bounded for cheap scheduled monitoring.",
                        "default": 20
                    },
                    "maxDirectoryBytes": {
                        "title": "Max directory bytes",
                        "minimum": 100000,
                        "maximum": 10000000,
                        "type": "integer",
                        "description": "Maximum size of the public Google Discovery API directory response after HTTP decoding.",
                        "default": 2000000
                    },
                    "maxDiscoveryBytes": {
                        "title": "Max discovery document bytes",
                        "minimum": 100000,
                        "maximum": 25000000,
                        "type": "integer",
                        "description": "Maximum size of each selected public discoveryRestUrl document after HTTP decoding.",
                        "default": 5000000
                    },
                    "requestTimeoutSecs": {
                        "title": "Request timeout seconds",
                        "minimum": 5,
                        "maximum": 90,
                        "type": "integer",
                        "description": "Timeout for each public Google Discovery API request.",
                        "default": 30
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
