# Trust Center & Subprocessor Monitor API (`taroyamada/trust-center-subprocessor-monitor`) Actor

Monitor vendor trust centers, subprocessor lists, DPA updates, and security posture changes. Outputs one summary-first digest per vendor with executiveSummary, actionNeeded, recommendedActions, changedSinceLastRun, pageSummaries, and evidence.

- **URL**: https://apify.com/taroyamada/trust-center-subprocessor-monitor.md
- **Developed by:** [太郎 山田](https://apify.com/taroyamada) (community)
- **Categories:** Business, Automation
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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

## Trust Center & Subprocessor Monitor

Monitor vendor trust centers, subprocessor lists, DPA pages, and security posture. Detect subprocessor additions and removals, DPA updates, certification drift, and security page changes. Outputs **one summary-first digest per vendor** with `executiveSummary`, `actionNeeded`, `recommendedActions`, `changedSinceLastRun`, `pageSummaries`, and `evidence`.

---

### Quickstart (2 minutes)

**Step 1 — Add your vendor:**
```json
{
  "vendors": [
    {
      "id": "okta",
      "name": "Okta",
      "criticality": "high",
      "owner": "Security / Legal",
      "subprocessorsUrl": "https://www.okta.com/privacy/okta-personal-data-sub-processors/",
      "dpaUrl": "https://www.okta.com/privacy/data-processing-addendum/"
    }
  ],
  "delivery": "dataset",
  "datasetMode": "changes_only",
  "snapshotKey": "trust-center-quickstart"
}
````

**Step 2 — Run once to capture baseline.** The first run produces `status: "initial"` for all pages.

**Step 3 — Schedule recurring runs** (daily or weekly). Subsequent runs will detect drift and set `actionNeeded: true` with `evidence` when subprocessors or DPA content changes.

***

### Vendor Configuration

#### Shorthand fields (quickstart-friendly)

| Field | Pack | Description |
|---|---|---|
| `trustCenterUrl` | `trustCenter` | Main trust center page |
| `subprocessorsUrl` | `subprocessors` | Subprocessor list page |
| `securityUrl` | `security` | Security posture page |
| `dpaUrl` | `dpa` | Data Processing Addendum |
| `privacyUrl` | `privacy` | Privacy policy page |

#### Full urlPacks (advanced)

```json
{
  "id": "salesforce",
  "name": "Salesforce",
  "criticality": "mission_critical",
  "urlPacks": {
    "subprocessors": [{ "id": "sf-sp", "url": "https://..." }],
    "dpa": [{ "id": "sf-dpa", "url": "https://..." }],
    "trustCenter": [{ "id": "sf-trust", "url": "https://..." }],
    "security": [{ "id": "sf-sec", "url": "https://..." }]
  }
}
```

Supported packs: `trustCenter`, `subprocessors`, `security`, `dpa`, `privacy`, `changelog`

***

### Output Fields Per Vendor

| Field | Description |
|---|---|
| `vendorId` | Stable vendor identifier |
| `vendorName` | Display name |
| `status` | `initial` / `changed` / `unchanged` / `partial` / `error` |
| `severity` | `high` / `watch` / `info` |
| `actionNeeded` | `true` when compliance follow-up is required |
| `changedSinceLastRun` | `true` when any monitored page changed |
| `executiveSummary` | One-line human-readable summary |
| `recommendedActions` | Ordered list of follow-up actions |
| `changedPacks` | Which packs changed (`subprocessors`, `dpa`, etc.) |
| `pageSummaries` | Per-page status with brief description |
| `evidence` | Changed lines grouped by pack (added / removed) |

***

### Delivery Modes

| Mode | When to use |
|---|---|
| `dataset` | Default. Apify Dataset output. Use `datasetMode` to filter rows. |
| `webhook` | POST summary to your endpoint on every run (or only on changes). |
| `email` | Placeholder — not yet implemented. |

#### Dataset Modes

| `datasetMode` | Rows included |
|---|---|
| `changes_only` | Initial + changed + error |
| `action_needed` | Only `actionNeeded: true` rows |
| `all` | Every vendor regardless of status |

***

### Scheduling

For compliance monitoring, schedule weekly or bi-weekly runs using Apify Scheduler. Use the same `snapshotKey` across runs to maintain baselines.

For immediate alerting, use `delivery: "webhook"` with `datasetMode: "action_needed"` and `notifyOnNoChange: false`.

***

### Local Development

```bash
node src/index.js             ## Reads input.json or input.local.json
node --test test/*.test.js    ## Run tests
```

Set `APIFY_INPUT_PATH`, `OUTPUT_DIR`, and `STATE_DIR` environment variables to control paths.

# Actor input Schema

## `vendors` (type: `array`):

Each vendor can use shorthand fields (trustCenterUrl, subprocessorsUrl, securityUrl, dpaUrl) or a full urlPacks object. Quickstart: one vendor with subprocessorsUrl is enough.

## `requestTimeoutSeconds` (type: `integer`):

HTTP request timeout per page.

## `userAgent` (type: `string`):

Optional User-Agent header override.

## `maxChars` (type: `integer`):

Upper bound on extracted text length per page.

## `delivery` (type: `string`):

dataset: Apify Dataset (default). webhook: POST to webhookUrl. email: placeholder, not implemented.

## `datasetMode` (type: `string`):

changes\_only: changed + initial + error rows. action\_needed: only vendors requiring follow-up. all: every vendor regardless of status.

## `webhookUrl` (type: `string`):

Required when delivery is webhook.

## `notifyOnNoChange` (type: `boolean`):

When false, webhook delivery is skipped if no vendors changed and no action is needed.

## `snapshotKey` (type: `string`):

Stable key for snapshot storage. Keep the same across runs to detect drift. Change it to reset baselines.

## `diffMode` (type: `string`):

line\_summary: human-readable added/removed lines. hash\_only: lightweight hash comparison only.

## `summaryMaxLines` (type: `integer`):

Maximum added/removed lines retained in evidence per page.

## `concurrency` (type: `integer`):

Number of pages fetched in parallel. Keep low (1-3) for stable recurring runs.

## `batchDelayMs` (type: `integer`):

Delay between batches to reduce rate-limit pressure.

## `nowIso` (type: `string`):

Optional deterministic timestamp for testing or backfill.

## `dryRun` (type: `boolean`):

Preview without persisting snapshots or triggering delivery.

## Actor input object example

```json
{
  "vendors": [
    {
      "id": "okta",
      "name": "Okta",
      "criticality": "high",
      "owner": "Security / Legal",
      "tags": [
        "iam",
        "renewal-q4"
      ],
      "subprocessorsUrl": "https://www.okta.com/privacy/okta-personal-data-sub-processors/",
      "dpaUrl": "https://www.okta.com/privacy/data-processing-addendum/",
      "trustCenterUrl": "https://trust.okta.com/"
    }
  ],
  "requestTimeoutSeconds": 30,
  "maxChars": 40000,
  "delivery": "dataset",
  "datasetMode": "changes_only",
  "notifyOnNoChange": false,
  "snapshotKey": "trust-center-subprocessor-monitor-snapshots",
  "diffMode": "line_summary",
  "summaryMaxLines": 15,
  "concurrency": 3,
  "batchDelayMs": 500,
  "dryRun": false
}
```

# 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 = {
    "vendors": [
        {
            "id": "okta",
            "name": "Okta",
            "criticality": "high",
            "owner": "Security / Legal",
            "tags": [
                "iam",
                "renewal-q4"
            ],
            "subprocessorsUrl": "https://www.okta.com/privacy/okta-personal-data-sub-processors/",
            "dpaUrl": "https://www.okta.com/privacy/data-processing-addendum/",
            "trustCenterUrl": "https://trust.okta.com/"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("taroyamada/trust-center-subprocessor-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 = { "vendors": [{
            "id": "okta",
            "name": "Okta",
            "criticality": "high",
            "owner": "Security / Legal",
            "tags": [
                "iam",
                "renewal-q4",
            ],
            "subprocessorsUrl": "https://www.okta.com/privacy/okta-personal-data-sub-processors/",
            "dpaUrl": "https://www.okta.com/privacy/data-processing-addendum/",
            "trustCenterUrl": "https://trust.okta.com/",
        }] }

# Run the Actor and wait for it to finish
run = client.actor("taroyamada/trust-center-subprocessor-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 '{
  "vendors": [
    {
      "id": "okta",
      "name": "Okta",
      "criticality": "high",
      "owner": "Security / Legal",
      "tags": [
        "iam",
        "renewal-q4"
      ],
      "subprocessorsUrl": "https://www.okta.com/privacy/okta-personal-data-sub-processors/",
      "dpaUrl": "https://www.okta.com/privacy/data-processing-addendum/",
      "trustCenterUrl": "https://trust.okta.com/"
    }
  ]
}' |
apify call taroyamada/trust-center-subprocessor-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=taroyamada/trust-center-subprocessor-monitor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Trust Center & Subprocessor Monitor API",
        "description": "Monitor vendor trust centers, subprocessor lists, DPA updates, and security posture changes. Outputs one summary-first digest per vendor with executiveSummary, actionNeeded, recommendedActions, changedSinceLastRun, pageSummaries, and evidence.",
        "version": "0.1",
        "x-build-id": "iPxtNC1MQe68EJXBn"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/taroyamada~trust-center-subprocessor-monitor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-taroyamada-trust-center-subprocessor-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/taroyamada~trust-center-subprocessor-monitor/runs": {
            "post": {
                "operationId": "runs-sync-taroyamada-trust-center-subprocessor-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/taroyamada~trust-center-subprocessor-monitor/run-sync": {
            "post": {
                "operationId": "run-sync-taroyamada-trust-center-subprocessor-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",
                "required": [
                    "vendors"
                ],
                "properties": {
                    "vendors": {
                        "title": "Vendors to monitor",
                        "type": "array",
                        "description": "Each vendor can use shorthand fields (trustCenterUrl, subprocessorsUrl, securityUrl, dpaUrl) or a full urlPacks object. Quickstart: one vendor with subprocessorsUrl is enough."
                    },
                    "requestTimeoutSeconds": {
                        "title": "Request timeout (seconds)",
                        "minimum": 5,
                        "maximum": 120,
                        "type": "integer",
                        "description": "HTTP request timeout per page.",
                        "default": 30
                    },
                    "userAgent": {
                        "title": "Custom User-Agent",
                        "type": "string",
                        "description": "Optional User-Agent header override."
                    },
                    "maxChars": {
                        "title": "Global max chars per page",
                        "minimum": 1000,
                        "maximum": 200000,
                        "type": "integer",
                        "description": "Upper bound on extracted text length per page.",
                        "default": 40000
                    },
                    "delivery": {
                        "title": "Delivery mode",
                        "enum": [
                            "dataset",
                            "webhook",
                            "email"
                        ],
                        "type": "string",
                        "description": "dataset: Apify Dataset (default). webhook: POST to webhookUrl. email: placeholder, not implemented.",
                        "default": "dataset"
                    },
                    "datasetMode": {
                        "title": "Dataset filter mode",
                        "enum": [
                            "action_needed",
                            "changes_only",
                            "all"
                        ],
                        "type": "string",
                        "description": "changes_only: changed + initial + error rows. action_needed: only vendors requiring follow-up. all: every vendor regardless of status.",
                        "default": "changes_only"
                    },
                    "webhookUrl": {
                        "title": "Webhook URL",
                        "type": "string",
                        "description": "Required when delivery is webhook."
                    },
                    "notifyOnNoChange": {
                        "title": "Notify even if no change",
                        "type": "boolean",
                        "description": "When false, webhook delivery is skipped if no vendors changed and no action is needed.",
                        "default": false
                    },
                    "snapshotKey": {
                        "title": "Snapshot key (recurring monitor ID)",
                        "type": "string",
                        "description": "Stable key for snapshot storage. Keep the same across runs to detect drift. Change it to reset baselines.",
                        "default": "trust-center-subprocessor-monitor-snapshots"
                    },
                    "diffMode": {
                        "title": "Diff mode",
                        "enum": [
                            "line_summary",
                            "hash_only"
                        ],
                        "type": "string",
                        "description": "line_summary: human-readable added/removed lines. hash_only: lightweight hash comparison only.",
                        "default": "line_summary"
                    },
                    "summaryMaxLines": {
                        "title": "Max diff lines per page",
                        "minimum": 5,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Maximum added/removed lines retained in evidence per page.",
                        "default": 15
                    },
                    "concurrency": {
                        "title": "Concurrency",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Number of pages fetched in parallel. Keep low (1-3) for stable recurring runs.",
                        "default": 3
                    },
                    "batchDelayMs": {
                        "title": "Inter-batch delay (ms)",
                        "minimum": 0,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Delay between batches to reduce rate-limit pressure.",
                        "default": 500
                    },
                    "nowIso": {
                        "title": "Override current time (ISO 8601)",
                        "type": "string",
                        "description": "Optional deterministic timestamp for testing or backfill."
                    },
                    "dryRun": {
                        "title": "Dry run",
                        "type": "boolean",
                        "description": "Preview without persisting snapshots or triggering delivery.",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
