{
  "openapi": "3.0.1",
  "info": {
    "title": "Swedish Org.nr Scraper - Organisationsnummer & Contacts",
    "description": "Turn Swedish company domains into registry-grade B2B leads from each site's statutory 28 kap. 5 § disclosure: företagsnamn, Luhn-validated organisationsnummer, säte, momsregistreringsnummer, F-skatt, bankgiro, email and phone. No login, no API key. $6 per 1,000 disclosures.",
    "version": "0.1",
    "x-build-id": "UEq73i3oIvmHaLHhy"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapersdelight~se-orgnr-website-contact-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapersdelight-se-orgnr-website-contact-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~se-orgnr-website-contact-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapersdelight-se-orgnr-website-contact-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~se-orgnr-website-contact-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapersdelight-se-orgnr-website-contact-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": {
          "domains": {
            "title": "Swedish domains (or villkor / om-oss page URLs)",
            "type": "array",
            "description": "One entry per company. Accepts all three shapes: a bare domain (\"nordicnest.se\"), a homepage URL (\"https://www.byggmax.se\") or a direct legal-page URL (\"https://x.se/kopvillkor\"). ANY TLD is accepted — Swedish companies trade on .com and .nu as well as .se, and filtering to .se would silently drop them. The Actor finds each site's statutory 28 kap. 5 § disclosure and parses it into one lead per domain. Leave empty to run the built-in Swedish demo batch.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs (list source)",
            "type": "array",
            "description": "The same domain list handed over as URLs, so Make, Zapier, Clay or a Google Sheet can pass it natively (a link to a text/CSV file of URLs also works). Merged with \"Swedish domains\".",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "sourceDatasetId": {
            "title": "Enrich an existing dataset",
            "type": "string",
            "description": "Dataset ID of a previous Actor run. Each item's domain/website column is read and enriched — the real agency workflow: run a directory, Maps or Bolagsverket scraper first, then pipe its output here."
          },
          "domainFieldName": {
            "title": "Domain field / CSV column",
            "type": "string",
            "description": "Which field of the source dataset (or which CSV column of the list file) holds the domain. Leave empty to auto-detect domain / website / webbplats / hemsida / url / site. Dotted paths like \"company.website\" work."
          },
          "domainsFileUrl": {
            "title": "Domain list file URL",
            "type": "string",
            "description": "URL of a CSV, TXT, JSON or JSONL file holding the domains — for lists too big to paste into the editor. The column is picked with \"Domain field / CSV column\"."
          },
          "skipDomains": {
            "title": "Suppression list",
            "type": "array",
            "description": "Domains to skip outright — accounts you already own, competitors, do-not-contact entries. Matched on the registrable domain, so \"www.x.se/sida\" and \"x.se\" are the same entry.",
            "items": {
              "type": "string"
            }
          },
          "previousDatasetId": {
            "title": "Skip rows already delivered (dataset ID)",
            "type": "string",
            "description": "Dataset ID of an earlier run of THIS Actor. Its stableId / companyNumber / domain values are loaded as a suppression list, so a monthly re-run never re-delivers — and never re-charges you for — a company you already bought."
          },
          "maxItems": {
            "title": "Max results (billed rows)",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on rows DELIVERED AND BILLED this run. Distinct from \"Max domains\": 28 kap. 5 § binds aktiebolag only, not enskild firma, so a mixed Swedish list yields a fraction of its domains as billed rows — the measured hit rate on a held-out slice of real Swedish business domains is published in the README. 0 = unlimited.",
            "default": 1000
          },
          "maxDomains": {
            "title": "Max domains attempted",
            "minimum": 0,
            "type": "integer",
            "description": "Cap on domains ATTEMPTED, applied before any request. Use it to sample a big list cheaply. 0 = attempt every domain supplied.",
            "default": 0
          },
          "maxDiscoveryRequestsPerDomain": {
            "title": "Max discovery requests per domain",
            "minimum": 0,
            "maximum": 40,
            "type": "integer",
            "description": "Hard cap on discovery + confirmation requests per domain, counted AFTER the homepage. This is the knob that stops one slow host burning a minute of a run.",
            "default": 8
          },
          "maxPagesParsed": {
            "title": "Max pages parsed per domain",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many fetched pages may be parsed and merged for one domain. The homepage counts as one. Raising it finds more fields on sites that split the disclosure across köpvillkor, kontakt and integritetspolicy pages; lowering it to 1 makes the run homepage-only and very cheap.",
            "default": 3
          },
          "perDomainTimeoutSecs": {
            "title": "Per-domain timeout (seconds)",
            "minimum": 5,
            "maximum": 600,
            "type": "integer",
            "description": "Wall-clock deadline for one domain, discovery and any browser render included.",
            "default": 60
          },
          "requestConcurrency": {
            "title": "Request concurrency",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "How many domains are worked in parallel. Higher is faster; keep it modest to stay polite to small business sites. The Actor lowers it automatically, with a warning, when the memory allocated to the run cannot support it — roughly 70 MB per parallel domain.",
            "default": 10
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "Timeout for a single HTTP request.",
            "default": 25
          },
          "maxRequestRetries": {
            "title": "Max request retries",
            "minimum": 0,
            "maximum": 6,
            "type": "integer",
            "description": "Retries per request, each on a FRESH proxy IP (got-scraping's own retry reuses the flagged IP, which is useless against a soft block).",
            "default": 2
          },
          "discoveryChannels": {
            "title": "Discovery channels",
            "type": "array",
            "description": "Which channels may be used to locate the disclosure, tried in this order. MEASURED over 240 real Swedish domains, counting which channel found the winning page: the site's own ranked links 39, the homepage footer 15, the XML sitemap 4, and guessed paths ZERO - while guessed paths produced 498 of that run's 1,791 requests as 404s, so they are OFF by default and are worth switching on only for a list whose footers carry no legal link at all. Ranked links use SWEDISH scoring - kopvillkor, om oss, juridisk information, integritetspolicy, kontakt - which is what makes this work: the English ladder used by the UK sibling scores zero on every one of those.",
            "items": {
              "type": "string",
              "enum": [
                "homepage",
                "anchor",
                "sitemap",
                "wpJson",
                "pathGuess"
              ],
              "enumTitles": [
                "Homepage footer + JSON-LD (free)",
                "Ranked Swedish links (kopvillkor / om oss / integritetspolicy)",
                "XML sitemap",
                "WordPress REST page index",
                "Guessed Swedish paths (measured: 0 wins in 240 domains)"
              ]
            },
            "default": [
              "homepage",
              "anchor",
              "sitemap",
              "wpJson"
            ]
          },
          "renderJsPages": {
            "title": "Render client-side pages in a real browser",
            "type": "boolean",
            "description": "Last rung, wired and working but OFF by default because it was MEASURED and did not pay. A real Chromium is launched only for a domain where plain HTTP found no disclosure AND the homepage behaved like a client-rendered shell. On a hand-picked list of large Swedish e-commerce sites it recovered 4 of 139 reachable domains (2.9%); on a random sample of real Swedish businesses it rendered 25 domains over 52 browser page loads and recovered ZERO, at 3.6x the compute per domain. Turn it on for a list of big consumer brands, and raise the run's memory to 2048 MB - below 1536 MB the Actor refuses to launch Chromium rather than risk an out-of-memory failure.",
            "default": false
          },
          "browserConcurrency": {
            "title": "Browser concurrency",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many Chromium contexts may render at once. Chromium needs far more memory than a cheerio parse, so this is deliberately much lower than the request concurrency. Raise it only together with the memory allocated to the run.",
            "default": 2
          },
          "browserWaitMs": {
            "title": "Browser settle time (ms)",
            "minimum": 0,
            "maximum": 15000,
            "type": "integer",
            "description": "How long the browser waits after DOM content load before reading the page, on top of a scroll to the bottom that mounts lazily-rendered footers. Raise it for slow single-page apps.",
            "default": 2500
          },
          "followWwwAndRootVariants": {
            "title": "Try www and apex variants",
            "type": "boolean",
            "description": "If the homepage fails, retry the other host form (www.x.se to x.se and back) before declaring the domain unreachable.",
            "default": true
          },
          "deepJsDiscovery": {
            "title": "Deep JS fallback (scan bundles for a legal-page URL)",
            "type": "boolean",
            "description": "A cheap, browser-free channel for a footer that only exists after client-side render: the Actor reads the page's inline JSON payloads and its external JavaScript bundles, searching them for a legal-page URL. Costs up to 6 extra requests per domain and is never charged separately.",
            "default": false
          },
          "respectRobotsTxt": {
            "title": "Respect robots.txt",
            "type": "boolean",
            "description": "Fetch and honour each site's robots.txt before requesting anything. Off by default because it costs one extra request per domain and these pages exist to be indexed. Turn it on if your own compliance policy requires it.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Proxy settings. Apify DATACENTER is the default, with a residential retry only when a host actually challenges us.",
            "default": {
              "useApifyProxy": true
            }
          },
          "proxyCountry": {
            "title": "Proxy country",
            "enum": [
              "none",
              "SE",
              "DK",
              "NO",
              "FI",
              "DE"
            ],
            "type": "string",
            "description": "Pin the exit country for sites that geo-tailor their content. MEASURED across this fleet: Apify datacenter proxies cannot be pinned to a country (they answer HTTP 407), so choosing a country here switches the run to RESIDENTIAL exit nodes in that country. Leave on None for the cheaper, faster datacenter path.",
            "default": "none"
          },
          "escalateToResidentialOnBlock": {
            "title": "Escalate to residential on a block",
            "type": "boolean",
            "description": "On a 403 / challenge (never on a dead host and never on a 404), retry the request once on RESIDENTIAL + country-SE. It only fires on an actual refusal, so it costs nothing on a clean list.",
            "default": true
          },
          "escalateToUnblockerOnBlock": {
            "title": "Escalate to Apify Unblocker on a block",
            "type": "boolean",
            "description": "A SECOND escalation, after residential, for the Cloudflare-managed-challenge tail. Off by default because Unblocker requests are billed to your Apify account on top of the row price.",
            "default": false
          },
          "customUserAgent": {
            "title": "Custom User-Agent",
            "type": "string",
            "description": "Override the browser User-Agent sent on every request. Leave empty for the built-in Chrome 124 fingerprint."
          },
          "extraHttpHeaders": {
            "title": "Extra HTTP headers",
            "type": "object",
            "description": "Additional request headers, merged over the defaults (e.g. a From: header identifying your crawler)."
          },
          "tldFilterMode": {
            "title": "TLD filter mode",
            "enum": [
              "none",
              "include",
              "exclude"
            ],
            "type": "string",
            "description": "No TLD filter is applied by default, deliberately: a real Swedish business corpus is only part .se — the rest is .com, .nu, .net and .org — so filtering to .se would discard a large share of it, including many of the larger companies. Use this only when your own list really is single-TLD.",
            "default": "none"
          },
          "tldFilter": {
            "title": "TLDs",
            "type": "array",
            "description": "The TLD list the mode above applies to, without the dot: se, com, nu, net, org.",
            "items": {
              "type": "string"
            }
          },
          "requireOrgNr": {
            "title": "Only rows with an organisationsnummer",
            "type": "boolean",
            "description": "Deliver (and bill) only companies whose disclosure carries a Luhn-valid organisationsnummer. Rows identified only by a momsregistreringsnummer, or only by företagsnamn plus säte, are filtered out here and never billed.",
            "default": false
          },
          "requireSate": {
            "title": "Only rows that state the säte",
            "type": "boolean",
            "description": "Deliver (and bill) only companies that publish \"den ort där styrelsen har sitt säte\" — the municipality of the registered seat, which 28 kap. 5 § requires and which is often a different place from the postal address.",
            "default": false
          },
          "requireFSkatt": {
            "title": "Only rows that state F-skatt approval",
            "type": "boolean",
            "description": "Deliver (and bill) only companies that state they are godkända för F-skatt. Not a 28 kap. 5 § field, but the standard Swedish signal that a supplier invoices with its own tax liability — useful when you are procuring services.",
            "default": false
          },
          "requireContact": {
            "title": "Only rows with a contact",
            "type": "boolean",
            "description": "Deliver (and bill) only companies with an email or a phone number.",
            "default": false
          },
          "excludeLiquidation": {
            "title": "Exclude companies in likvidation or konkurs",
            "type": "boolean",
            "description": "28 kap. 5 § second sentence obliges a company that has gone into likvidation to say so on its website. Turn this on to drop those rows (and konkurs / företagsrekonstruktion statements with them) so they are never delivered or billed.",
            "default": false
          },
          "entityKindFilter": {
            "title": "Entity kinds",
            "type": "array",
            "description": "Keep only companies whose organisationsnummer INDICATES one of these kinds. Bolagsverket's own words: \"Det går inte att helt säkert säga vilken företagsform som finns bakom ett organisationsnummer\" — so this is a filter on a strong indication, not on a verified fact. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "Aktiebolag",
                "Handelsbolag",
                "Ekonomisk",
                "Ideell",
                "Utländskt",
                "Trossamfund",
                "Statlig"
              ],
              "enumTitles": [
                "Aktiebolag / filial / bank (orgnr starts with 5)",
                "Handelsbolag or kommanditbolag (starts with 9)",
                "Ekonomisk förening / BRF (starts with 7)",
                "Ideell förening or stiftelse (starts with 8)",
                "Foreign entity trading in Sweden (starts with 3)",
                "Trossamfund (starts with 2 or 8)",
                "State agency (starts with 20)"
              ]
            },
            "default": []
          },
          "minFieldsRequired": {
            "title": "Minimum populated fields",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Quality floor: a row must carry at least this many of the 20 value fields before it is delivered and billed. 0 = no floor.",
            "default": 0
          },
          "emailPolicy": {
            "title": "Email policy",
            "enum": [
              "all",
              "role-only",
              "exclude-role"
            ],
            "type": "string",
            "description": "Agencies split hard on whether info@ / kontakt@ counts as a lead. \"Role only\" keeps just those; \"Exclude role\" keeps only named mailboxes.",
            "default": "all"
          },
          "dedupeBy": {
            "title": "Deduplicate by",
            "enum": [
              "orgnr-then-domain",
              "domain",
              "orgnr",
              "none"
            ],
            "type": "string",
            "description": "Which key collapses duplicates BEFORE anything is pushed or charged. The default uses the organisationsnummer when the page carries a checksum-valid one and the registrable domain otherwise, so two domains owned by the same company collapse to one billed row — and a repeated input line is dropped at queue time, before it costs a request.",
            "default": "orgnr-then-domain"
          },
          "validateTaxId": {
            "title": "Checksum-validate the identifiers",
            "type": "boolean",
            "description": "Run the Luhn (mod-10) check digit on every organisationsnummer and on the ten-digit core of every momsregistreringsnummer found, and emit the result. Unlike a UK company number, a Swedish organisationsnummer really does carry a checksum, so a validated number is a fact you can rely on rather than a format guess.",
            "default": true
          },
          "includeSoleTraderId": {
            "title": "Include a sole trader's personnummer when one is published",
            "type": "boolean",
            "description": "OFF by default, on purpose. An enskild näringsidkare has no organisationsnummer — its identity beteckning is the owner's PERSONNUMMER, which is personal data, and such a business is not bound by 28 kap. 5 § at all. The Actor detects these, reports them as status \"sole_trader\", never charges for them, and withholds the digits unless you switch this on and take responsibility for handling them under the GDPR.",
            "default": false
          },
          "extractOfficer": {
            "title": "Extract a named officer",
            "type": "boolean",
            "description": "A VD, styrelseordförande, firmatecknare or ansvarig utgivare named next to a label on the page. Honest expectation: Swedish sites rarely publish one — 28 kap. 5 § does not require it, unlike a German Impressum. The measured fill is in the README.",
            "default": true
          },
          "extractSocials": {
            "title": "Extract social profiles",
            "type": "boolean",
            "description": "LinkedIn, Facebook, Instagram, X, YouTube and TikTok links present on the pages read.",
            "default": true
          },
          "extractPolicyUrls": {
            "title": "Extract villkor & integritetspolicy URLs",
            "type": "boolean",
            "description": "The site's terms and privacy-policy URLs, linked from the pages read.",
            "default": true
          },
          "includeMissRows": {
            "title": "Include unbilled miss rows",
            "type": "boolean",
            "description": "Emit a row for every domain that produced no lead — dead host, blocked, publishes no disclosure, a sole trader, filtered out, a duplicate, or suppressed — with its status and missReason, so you can do coverage accounting. These rows are NEVER charged.",
            "default": false
          },
          "includeFieldSources": {
            "title": "Include per-field provenance",
            "type": "boolean",
            "description": "Add a fieldSources object naming the exact URL each field was read from. Useful when a disclosure is split across a köpvillkor page and a kontakt page and you need to audit which said what.",
            "default": false
          },
          "flattenOutput": {
            "title": "Flat columns",
            "type": "boolean",
            "description": "On: one flat row, ready for Google Sheets, Clay or a CSV export. Off: fields grouped into company {}, registry {}, contact {}, people {} and policies {} objects.",
            "default": true
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}