{
  "openapi": "3.0.1",
  "info": {
    "title": "SHAB Swiss New Company Registrations Scraper",
    "description": "Scrape every newly registered Swiss company from the SHAB/FOSC commercial gazette (rubric HR01): name, CHE UID, full street address, canton, legal form, share capital, business purpose, cantonal register office and the named founders and officers. Filter by canton, legal form, capital or keyword.",
    "version": "0.1",
    "x-build-id": "FjCZbjswSn4Wd7opf"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapersdelight~shab-new-companies-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapersdelight-shab-new-companies-scraper",
        "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/scrapersdelight~shab-new-companies-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapersdelight-shab-new-companies-scraper",
        "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/scrapersdelight~shab-new-companies-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapersdelight-shab-new-companies-scraper",
        "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": {
          "lookbackDays": {
            "title": "Look back this many days",
            "minimum": 1,
            "maximum": 3000,
            "type": "integer",
            "description": "How many publication days back from today to crawl, when you have not set explicit dates below. 1 = today only. The Actor issues exactly ONE request per publication day (never offset paging, see the README for why that matters), so 30 days = 30 list requests.",
            "default": 1
          },
          "dateFrom": {
            "title": "Publication date from",
            "type": "string",
            "description": "YYYY-MM-DD. Overrides the lookback window. Day-granular and verified server-side. The archive starts 2018-01-01 (2017 returns 0 rows).",
            "default": ""
          },
          "dateTo": {
            "title": "Publication date to",
            "type": "string",
            "description": "YYYY-MM-DD. Overrides the lookback window.",
            "default": ""
          },
          "includeFuturePublications": {
            "title": "Include tomorrow's gazette (the head start)",
            "type": "boolean",
            "description": "SHAB loads a publication into the API up to ~2 days BEFORE its official publication date. With this on, the default window reaches 7 days forward, so you see registrations before they are formally gazetted. Measured 2026-09-03: the window 2026-09-04 to 2026-09-10 already returned 244 rows created 2026-09-02. That head start is the buyer's real edge. Turn it off for a strict historical export.",
            "default": true
          },
          "cantons": {
            "title": "Cantons",
            "uniqueItems": true,
            "type": "array",
            "description": "Server-side filter, verified additive (ZH 73,011 + VD 39,458 = 112,469 together). Counts in brackets are that canton's total HR01 registrations since 2018, measured live 2026-09-04. Leave empty for all of Switzerland.",
            "items": {
              "type": "string",
              "enum": [
                "ZH",
                "VD",
                "BE",
                "GE",
                "AG",
                "ZG",
                "SG",
                "VS",
                "TI",
                "LU",
                "FR",
                "SZ",
                "TG",
                "BL",
                "BS",
                "SO",
                "GR",
                "NE",
                "SH",
                "JU",
                "AR",
                "NW",
                "OW",
                "GL",
                "UR",
                "AI"
              ],
              "enumTitles": [
                "ZH - Zurich (73,011)",
                "VD - Vaud (39,458)",
                "BE - Bern (33,458)",
                "GE - Geneva (33,069)",
                "AG - Aargau (25,612)",
                "ZG - Zug (23,876)",
                "SG - St. Gallen (21,358)",
                "VS - Valais (18,874)",
                "TI - Ticino (18,383)",
                "LU - Lucerne (17,820)",
                "FR - Fribourg (14,106)",
                "SZ - Schwyz (11,428)",
                "TG - Thurgau (11,272)",
                "BL - Basel-Landschaft (10,389)",
                "BS - Basel-Stadt (10,350)",
                "SO - Solothurn (10,071)",
                "GR - Graubuenden (8,741)",
                "NE - Neuchatel (6,932)",
                "SH - Schaffhausen (3,191)",
                "JU - Jura (2,929)",
                "AR - Appenzell Ausserrhoden (2,520)",
                "NW - Nidwalden (2,383)",
                "OW - Obwalden (1,703)",
                "GL - Glarus (1,632)",
                "UR - Uri (1,061)",
                "AI - Appenzell Innerrhoden (1,035)"
              ]
            },
            "default": []
          },
          "keyword": {
            "title": "Keyword (full text, server-side)",
            "type": "string",
            "description": "Searched server-side across the entire publication text: company name, business purpose, address and the named officers. This is the lever that turns the gazette into a niche lead list. Measured hit counts across the whole archive: Zahnarzt 72, Softwareentwicklung 1,254, Treuhand 6,698, postcode 8001 gives 2,789, an exact CHE UID gives exactly 1.",
            "default": ""
          },
          "publicationLanguage": {
            "title": "Publication language",
            "enum": [
              "any",
              "de",
              "fr",
              "it"
            ],
            "type": "string",
            "description": "The language the cantonal register published in, a good proxy for the language region. Server-side. Measured archive split: German 272,438, French 112,595, Italian 19,629.",
            "default": "any"
          },
          "uids": {
            "title": "Company UIDs",
            "type": "array",
            "description": "Swiss UIDs in the form CHE-123.456.789. Verified to resolve to exactly one publication on 12 of 12 spot checks across all 404,662 records.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "companyNames": {
            "title": "Company names",
            "type": "array",
            "description": "Exact or partial company names, resolved through the same server-side full-text search.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "publicationIds": {
            "title": "SHAB publication IDs",
            "type": "array",
            "description": "The publication UUID from a shab.ch detail URL. Fetched directly. Anything that is not an HR01 new registration is skipped with a warning rather than silently returned.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "SHAB URLs",
            "type": "array",
            "description": "Paste shab.ch publication links or raw API URLs. The publication UUID is read out of each one. A URL carrying no UUID is skipped with a warning.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "legalForms": {
            "title": "Legal forms",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only these legal forms. Empty = all. The raw 4-digit register code is always emitted in the legalForm field regardless, and legalFormLabel is null for any code we have not seen in a live publication rather than guessed at (measured 99.5% labelled over 400 consecutive registrations).",
            "items": {
              "type": "string",
              "enum": [
                "Limited liability company (GmbH/Sàrl/Sagl)",
                "Company limited by shares (AG/SA)",
                "Sole proprietorship",
                "General partnership",
                "Limited partnership",
                "Cooperative",
                "Association",
                "Foundation",
                "Branch office of a Swiss entity",
                "Branch office of a foreign entity",
                "Non-commercial power of attorney"
              ]
            },
            "default": []
          },
          "excludeBranches": {
            "title": "Exclude branch registrations",
            "type": "boolean",
            "description": "On by default. A branch (Zweigniederlassung / succursale) is a new office of a company that already exists, so it carries no founders and no share capital and is a weak lead. Measured 3.6% of registrations, and all 5 records in our 250-doc sample where no person could be parsed were branches.",
            "default": true
          },
          "minShareCapitalChf": {
            "title": "Minimum share capital (CHF)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only companies whose registered nominal capital is at least this. Capital is present on 62.8% of registrations. It is absent BY LAW on sole proprietorships, not missing data, so any minimum implicitly drops them."
          },
          "maxShareCapitalChf": {
            "title": "Maximum share capital (CHF)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only companies at or below this nominal capital. Useful for targeting the CHF 20,000 GmbH floor rather than large incorporations."
          },
          "requireCapital": {
            "title": "Only companies with share capital",
            "type": "boolean",
            "description": "Drops sole proprietorships and other forms that register no capital.",
            "default": false
          },
          "requirePaidUpFull": {
            "title": "Only fully paid-up capital",
            "type": "boolean",
            "description": "Keeps only companies whose paid-in capital equals the nominal capital, a solvency signal for finance and leasing buyers.",
            "default": false
          },
          "zipCodes": {
            "title": "Postcodes",
            "type": "array",
            "description": "Exact Swiss postcodes of the registered office, e.g. 8001. Empty = anywhere.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "townContains": {
            "title": "Town contains",
            "type": "string",
            "description": "Substring match against the registered town and the registered seat, case-insensitive.",
            "default": ""
          },
          "requireStreetAddress": {
            "title": "Only companies with a street address",
            "type": "boolean",
            "description": "Drops the rare registration filed with no domicile address. Measured 100% street, 100% postcode and 99.2% house number on a 250-record sample, so this removes very little.",
            "default": false
          },
          "purposeKeywords": {
            "title": "Business-purpose keywords",
            "type": "array",
            "description": "Matched case-insensitively against the statutory business purpose, the full register text and the company name. This is what turns the feed into a vertical: Zahnarzt / cabinet dentaire, Bauunternehmen, Restaurant, Immobilien, Software. Every Swiss company must file a purpose, and the field is present on 97.2% of records.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "purposeKeywordsMode": {
            "title": "Purpose keyword mode",
            "enum": [
              "any",
              "all"
            ],
            "type": "string",
            "description": "ANY keeps a company matching at least one keyword (a vertical). ALL keeps only companies matching every keyword (a precise niche).",
            "default": "any"
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Drop any company whose purpose, register text or name contains one of these. Applied after the include filters.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "requireRegisteredPersons": {
            "title": "Only companies with a named founder or officer",
            "type": "boolean",
            "description": "Keeps only rows where at least one named person was parsed out of the register text. Measured on 250 records: 98.0% overall and 100.0% of non-branch registrations. See the README honest-limits section: the register does not publish persons as structured XML.",
            "default": false
          },
          "registrationOfficeContains": {
            "title": "Cantonal register office contains",
            "type": "string",
            "description": "Substring match against the filing office name, e.g. Zurich or Geneve. Mostly redundant with the canton filter, but exposed for exact office-level exports.",
            "default": ""
          },
          "includeDetail": {
            "title": "Fetch the full register record",
            "type": "boolean",
            "description": "ON (default): one extra request per company fetches the register XML, giving UID, address, legal form, share capital, business purpose and the named founders. OFF: list metadata only (headline, date, canton, register office) with NO UID, address, capital or persons. List-only rows are billed at a separate, much cheaper event.",
            "default": true
          },
          "extractRegisteredPersons": {
            "title": "Extract founders and officers",
            "type": "boolean",
            "description": "Parse the named persons out of the register text into a structured array. Turn this OFF for a company-only export containing no personal data at all.",
            "default": true
          },
          "personsAsSeparateRows": {
            "title": "One row per person",
            "type": "boolean",
            "description": "Emit one dataset row per named founder or officer, each carrying the full company columns, which is the shape a CRM import wants. You are still billed ONCE PER COMPANY, never per person.",
            "default": false
          },
          "includeFullPublicationText": {
            "title": "Include the full register text",
            "type": "boolean",
            "description": "The complete published notice in German, French or Italian. Present on 100% of records and the honest fallback wherever person parsing is imperfect.",
            "default": true
          },
          "includePurpose": {
            "title": "Include the business purpose",
            "type": "boolean",
            "description": "The full statutory purpose clause, often 1,000 to 2,500 characters.",
            "default": true
          },
          "purposeMaxChars": {
            "title": "Truncate the purpose at",
            "minimum": 0,
            "type": "integer",
            "description": "0 keeps the whole clause. Set e.g. 300 if you are exporting to Google Sheets, where multi-thousand-character cells are painful.",
            "default": 0
          },
          "legalFormLabelLanguage": {
            "title": "Legal-form label language",
            "enum": [
              "en",
              "de",
              "fr",
              "it"
            ],
            "type": "string",
            "description": "Language of the human-readable legalFormLabel. The raw 4-digit code stays in legalForm.",
            "default": "en"
          },
          "includeTitleTranslations": {
            "title": "Include the headline in all four languages",
            "type": "boolean",
            "description": "SHAB publishes each headline in German, French, Italian and English. English is always emitted; this adds the other three.",
            "default": false
          },
          "includePublicationUrl": {
            "title": "Include the shab.ch link",
            "type": "boolean",
            "description": "A direct link to the published notice on shab.ch. A Zefix company link is always included.",
            "default": true
          },
          "includeXmlUrl": {
            "title": "Include the source XML link",
            "type": "boolean",
            "description": "The API URL of the underlying register XML, so you can audit any row back to the source bytes.",
            "default": false
          },
          "includePdfUrl": {
            "title": "Include the signed-PDF link",
            "type": "boolean",
            "description": "The officially signed PDF of the notice. Not every publication has one.",
            "default": false
          },
          "includeRawXml": {
            "title": "Include the raw register XML",
            "type": "boolean",
            "description": "Attaches the complete source XML to every row. An escape hatch for buyers who want fields we do not surface; it makes rows several kilobytes larger.",
            "default": false
          },
          "fieldsToInclude": {
            "title": "Keep only these fields",
            "type": "array",
            "description": "Whitelist of output field names, e.g. companyName, uid, addressFull, primaryPerson. Empty keeps every field. A whitelist that matches nothing is ignored rather than emptying your rows.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "flattenOutput": {
            "title": "Flatten for CSV or Sheets",
            "type": "boolean",
            "description": "Flattens nested objects and arrays into dot-notation columns (registeredPersons.0.fullName and so on) so a CSV or Google Sheets export is readable.",
            "default": false
          },
          "maxItems": {
            "title": "Maximum companies",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on billed companies. Set 0 for no cap, bounded then only by your date window and the run timeout.",
            "default": 100
          },
          "maxDaysToCrawl": {
            "title": "Maximum publication days",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many publication days, whatever the date window says. 0 means no limit. A safety rail for large historical backfills.",
            "default": 0
          },
          "dedupeBy": {
            "title": "Also collapse duplicates by",
            "enum": [
              "publicationId",
              "uid",
              "none"
            ],
            "type": "string",
            "description": "The same publication is NEVER delivered or billed twice; that guard is always on. This chooses whether a second, company-level pass also collapses two publications sharing one CHE UID (rare in HR01, but possible across a wide window).",
            "default": "publicationId"
          },
          "dedupeAgainstPreviousRuns": {
            "title": "Skip companies seen in earlier runs",
            "type": "boolean",
            "description": "Remembers every publication ID in a NAMED key-value store that survives between runs, so a daily or weekly schedule only ever returns, and only ever bills, genuinely new registrations.",
            "default": false
          },
          "onlyNewSinceLastRun": {
            "title": "Start where the last run stopped",
            "type": "boolean",
            "description": "Begins the date window at the newest publication date any previous run delivered, instead of the lookback window. Uses the same named store.",
            "default": false
          },
          "namedStateStoreKey": {
            "title": "Name of the memory store",
            "type": "string",
            "description": "Optional. Which named key-value store holds the run-to-run memory. Defaults to shab-new-companies-state. Give separate schedules separate names so they do not share memory.",
            "default": ""
          },
          "sortOrder": {
            "title": "Publication date order",
            "enum": [
              "desc",
              "asc"
            ],
            "type": "string",
            "description": "Newest publication day first, or oldest first, which is better for a chronological backfill.",
            "default": "desc"
          },
          "requestConcurrency": {
            "title": "Concurrent requests",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Parallel register-XML fetches. Measured success through the Apify datacenter proxy: 5 gave 100% (15/15), 10 gave 100% (30/30), 20 gave 95% (57/60, and all 3 losses were proxy-side socket resets, never a block from shab.ch). 10 is the tested sweet spot.",
            "default": 10
          },
          "maxRequestRetries": {
            "title": "Retries per request",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "Across 554 recon requests, 98.0% succeeded first try and 100% succeeded after at most one retry. Every loss was an Apify-proxy socket reset: no CAPTCHA, no 403, no rate limit.",
            "default": 3
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 300,
            "type": "integer",
            "description": "How long a single request may take before it is retried.",
            "default": 60
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify datacenter proxy is the default and is all this Actor needs: measured 200 OK on datacenter, on residential Switzerland and on residential US, all returning identical data. Residential was 5x slower for no benefit. Pin a country only if your own policy requires it.",
            "default": {
              "useApifyProxy": true
            }
          },
          "webhookUrl": {
            "title": "Webhook URL",
            "type": "string",
            "description": "Optional. POSTed a JSON summary at the end of the run: company count, the run and dataset IDs, and up to 50 sample companies. Pair it with the memory store for a genuine new-registration alert.",
            "default": ""
          },
          "slackWebhookUrl": {
            "title": "Slack webhook URL",
            "type": "string",
            "description": "Optional. Posts a formatted digest of the newest registrations to a Slack incoming webhook.",
            "default": ""
          },
          "notifyOnlyNew": {
            "title": "Alert only on genuinely new companies",
            "type": "boolean",
            "description": "Restricts the webhook and Slack alerts to publications not seen by a previous run. Uses the same named memory store.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}