{
  "openapi": "3.0.1",
  "info": {
    "title": "Sentral Godkjenning Scraper - Norway Approved Contractors",
    "description": "From $3 per 1,000 rows. Scrape Norway's Sentral godkjenning register (DiBK, sgregister.dibk.no): all 10,408 centrally approved building enterprises with approval areas, tiltaksklasse, expiry date, insurance flags and address. Optional detail adds employee count. Approval-change monitor included.",
    "version": "0.1",
    "x-build-id": "WNvgSJRpeQQxgAx9p"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapersdelight~sentral-godkjenning-no-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapersdelight-sentral-godkjenning-no-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~sentral-godkjenning-no-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapersdelight-sentral-godkjenning-no-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~sentral-godkjenning-no-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapersdelight-sentral-godkjenning-no-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": {
          "mode": {
            "title": "Mode",
            "enum": [
              "register",
              "monitor"
            ],
            "type": "string",
            "description": "Register mode downloads the whole register (10,408 firms, measured 2026-09-08), applies your filters locally and returns matching firms. Monitor mode does the same read but delivers only the differences against a snapshot kept in a named key-value store; the FIRST monitor run just records the baseline, returns no rows and is not charged.",
            "default": "register"
          },
          "searchTerms": {
            "title": "Company-name search",
            "type": "array",
            "description": "Keep only firms whose name contains one of these (case- and diacritic-insensitive, so \"tomrer\" matches \"TØMRER\"). Several terms are OR-ed. Leave empty for every firm. Matched against the enterprise name only — use the field below for organisation numbers.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "organizationalNumbers": {
            "title": "Organisation numbers (compliance check)",
            "type": "array",
            "description": "Look up specific Norwegian organisation numbers — 9 digits each. Costs no extra requests: the whole register is downloaded either way, so this is a filter, not a lookup fee. Numbers that are NOT in the register come back as rows with `approved: false` and `in_register: false`, which is the answer to \"does this contractor hold central approval?\"",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "reportMissingOrganizationalNumbers": {
            "title": "Return a row for numbers that are NOT approved",
            "type": "boolean",
            "description": "On (default): every organisation number you asked for gets a row, including the ones with no central approval (`approved: false`, `in_register: false`). Off: only approved firms come back and a missing number is silently absent. Only applies when you filled in organisation numbers above. Those answer rows are appended after the register scan, so set maxFirms to 0 when you want an answer for every number you asked about — a cap can cut them, and the run says so.",
            "default": true
          },
          "functions": {
            "title": "Functions (funksjon)",
            "type": "array",
            "description": "The role the firm is approved for. Utførende = it builds; Prosjekterende = it designs/engineers; Ansvarlig søker = it is the responsible applicant on a building application; Uavhengig kontrollerende = it does independent inspection. Several are OR-ed. Empty = every function.",
            "items": {
              "type": "string",
              "enum": [
                "Utførende",
                "Prosjekterende",
                "Ansvarlig søker",
                "Uavhengig kontrollerende"
              ],
              "enumTitles": [
                "Utførende — Executing / trade contractor (9,070 firms)",
                "Prosjekterende — Designing / engineering (4,705 firms)",
                "Ansvarlig søker — Responsible applicant (2,898 firms)",
                "Uavhengig kontrollerende — Independent inspection (690 firms)"
              ]
            },
            "default": []
          },
          "subjectAreas": {
            "title": "Subject areas (fagområde)",
            "type": "array",
            "description": "The trade the approval covers. All 36 subject areas that exist in the register are listed with their real firm counts, so nothing here can return zero by typo. Several are OR-ed. Empty = every subject area.",
            "items": {
              "type": "string",
              "enum": [
                "Tømrerarbeid og montering av trekonstruksjoner",
                "(for alle typer tiltak)",
                "Vannforsynings- og avløpsanlegg",
                "Veg- og grunnarbeider",
                "Arkitektur",
                "Sanitærinstallasjoner",
                "Konstruksjonssikkerhet",
                "Riving og miljøsanering",
                "Landskapsutforming",
                "Varme- og kuldeinstallasjoner",
                "Plasstøpte betongkonstruksjoner",
                "Innmåling og utstikking av tiltak",
                "Montering av bærende metall- eller betongkonstruksjoner",
                "Bygningsfysikk",
                "Veg, utearealer og landskapsutforming",
                "Murarbeid",
                "Slukkeinstallasjoner",
                "Installasjon av brannalarmanlegg",
                "Taktekkingsarbeid",
                "Installasjon av ledesystem",
                "Montering av glasskonstruksjoner og fasadekledning",
                "Våtrom (i boliger)",
                "Oppmålingsteknisk prosjektering",
                "Brannalarmanlegg",
                "Ventilasjon- og klimainstallasjoner",
                "Ledesystem",
                "Lufttetthet (i nye boliger)",
                "Arbeid på bevaringsverdige byggverk",
                "Miljøsanering",
                "Brannkonsept",
                "Geoteknikk",
                "Overordnet ansvar for kontroll",
                "Fjernvarmeanlegg",
                "Brannsikkerhet",
                "Lydforhold og vibrasjoner",
                "Løfteinnretninger"
              ],
              "enumTitles": [
                "Tømrerarbeid og montering av trekonstruksjoner (3,852 firms)",
                "(for alle typer tiltak) (2,898 firms)",
                "Vannforsynings- og avløpsanlegg (2,278 firms)",
                "Veg- og grunnarbeider (2,067 firms)",
                "Arkitektur (1,554 firms)",
                "Sanitærinstallasjoner (1,543 firms)",
                "Konstruksjonssikkerhet (1,510 firms)",
                "Riving og miljøsanering (1,501 firms)",
                "Landskapsutforming (1,449 firms)",
                "Varme- og kuldeinstallasjoner (1,250 firms)",
                "Plasstøpte betongkonstruksjoner (1,158 firms)",
                "Innmåling og utstikking av tiltak (1,003 firms)",
                "Montering av bærende metall- eller betongkonstruksjoner (824 firms)",
                "Bygningsfysikk (778 firms)",
                "Veg, utearealer og landskapsutforming (775 firms)",
                "Murarbeid (693 firms)",
                "Slukkeinstallasjoner (665 firms)",
                "Installasjon av brannalarmanlegg (606 firms)",
                "Taktekkingsarbeid (598 firms)",
                "Installasjon av ledesystem (595 firms)",
                "Montering av glasskonstruksjoner og fasadekledning (526 firms)",
                "Våtrom (i boliger) (457 firms)",
                "Oppmålingsteknisk prosjektering (423 firms)",
                "Brannalarmanlegg (412 firms)",
                "Ventilasjon- og klimainstallasjoner (408 firms)",
                "Ledesystem (403 firms)",
                "Lufttetthet (i nye boliger) (401 firms)",
                "Arbeid på bevaringsverdige byggverk (375 firms)",
                "Miljøsanering (323 firms)",
                "Brannkonsept (270 firms)",
                "Geoteknikk (216 firms)",
                "Overordnet ansvar for kontroll (160 firms)",
                "Fjernvarmeanlegg (151 firms)",
                "Brannsikkerhet (97 firms)",
                "Lydforhold og vibrasjoner (96 firms)",
                "Løfteinnretninger (36 firms)"
              ]
            },
            "default": []
          },
          "subjectAreaCodes": {
            "title": "Subject-area codes (for API callers)",
            "type": "array",
            "description": "DiBK's own short codes, if you would rather pass those than the Norwegian names — e.g. UTOMRE (carpentry, 3,852 firms), UVEGRU (roads and groundworks, 2,067), PARKIT (architecture, 1,554), USANI (sanitary installation, 1,465). 46 codes exist across the 36 subject areas, because some areas have a separate code per function. OR-ed with the picker above.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minTiltaksklasse": {
            "title": "Minimum tiltaksklasse (1-3)",
            "minimum": 0,
            "maximum": 3,
            "type": "integer",
            "description": "Keep firms whose HIGHEST approval class is at least this. Tiltaksklasse is the project-complexity tier — 3 is the largest and most demanding work. Measured 2026-09-08: 5,258 firms top out at 1, 3,157 at 2 and 1,993 at 3. Set 3 for the key-account list. 0 = no filter.",
            "default": 0
          },
          "minApprovalAreas": {
            "title": "Minimum number of approval areas",
            "minimum": 0,
            "type": "integer",
            "description": "Keep firms holding at least this many valid approval areas — a rough breadth-of-capability proxy. The register holds 35,726 approval-area rows over 10,408 firms (average 3.4, maximum 30). 0 = no filter.",
            "default": 0
          },
          "requireLiabilityInsurance": {
            "title": "Only firms with liability insurance on file",
            "type": "boolean",
            "description": "DiBK's `liability_insurance` flag. True on 4,489 of 10,408 firms (43.1%), measured 2026-09-08.",
            "default": false
          },
          "requireInjuryInsurance": {
            "title": "Only firms with industrial-injury insurance on file",
            "type": "boolean",
            "description": "DiBK's `industrial_injury_insurance` flag. True on 4,354 of 10,408 firms (41.8%).",
            "default": false
          },
          "educationalEnterprisesOnly": {
            "title": "Only approved training enterprises (lærebedrift)",
            "type": "boolean",
            "description": "DiBK's `educational_enterprise_approved` flag — the firm is approved to take on apprentices. True on 4,553 of 10,408 firms (43.7%).",
            "default": false
          },
          "expiringWithinDays": {
            "title": "Expiring within N days",
            "minimum": 0,
            "type": "integer",
            "description": "Keep firms whose approval expires in this many days or fewer. 90 gives ~509 firms, 365 gives ~2,719 (measured 2026-09-08 — these move every day). 0 = no filter. Dates are compared in UTC.",
            "default": 0
          },
          "approvalExpiresBefore": {
            "title": "Approval expires on or before (YYYY-MM-DD)",
            "type": "string",
            "description": "Absolute upper bound on the approval end date, e.g. 2027-06-30. Empty = no bound.",
            "default": ""
          },
          "approvalExpiresAfter": {
            "title": "Approval expires on or after (YYYY-MM-DD)",
            "type": "string",
            "description": "Absolute lower bound on the approval end date. Combine with the field above for an exact window. The whole register currently sits between 2026-09-08 and 2029-09-07 (measured 2026-09-08). Empty = no bound.",
            "default": ""
          },
          "postalTowns": {
            "title": "Postal towns",
            "type": "array",
            "description": "Exact postal-town match, case- and diacritic-insensitive — typing \"tromso\" returns all 64 TROMSØ firms and \"alesund\" returns the ÅLESUND ones. Several towns are OR-ed. Empty = the whole country.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "postalCodePrefixes": {
            "title": "Postal-code prefixes",
            "type": "array",
            "description": "Keep firms whose business postcode starts with any of these, e.g. \"0\" for the Oslo series or \"50\" for central Bergen. Useful when you want a region rather than a town. OR-ed with each other, AND-ed with the town list above.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Country of the business address",
            "type": "array",
            "description": "21 of the 10,408 approved enterprises are registered outside Norway (measured 2026-09-08). Empty = all countries.",
            "items": {
              "type": "string",
              "enum": [
                "NO",
                "SE",
                "DK",
                "FI",
                "LT",
                "PL",
                "LV",
                "HU"
              ],
              "enumTitles": [
                "NO — Norway (10,387 firms)",
                "SE — Sweden (4)",
                "DK — Denmark (4)",
                "FI — Finland (4)",
                "LT — Lithuania (4)",
                "PL — Poland (2)",
                "LV — Latvia (2)",
                "HU — Hungary (1)"
              ]
            },
            "default": []
          },
          "onlyWithWebsite": {
            "title": "Only firms with a website",
            "type": "boolean",
            "description": "Keep only the 1,854 firms (17.8%, measured 2026-09-08) that publish a `www` value. Everything else is filtered out BEFORE billing, so you never pay for a row you then discard.",
            "default": false
          },
          "excludeSoleProprietorships": {
            "title": "Exclude probable sole proprietorships (personal names)",
            "type": "boolean",
            "description": "Norwegian sole proprietorships are listed under the owner's own name, and their business address is often a home address. This drops the 816 rows (7.8%, measured 2026-09-08) whose name carries no company-form suffix (AS, ASA, ANS, DA, NUF, KOMMUNE …). It is a HEURISTIC and it over-reaches slightly: a trade name like \"TARALDSEN ELEKTRO\" also has no suffix. Every row carries `likely_sole_proprietorship` and `company_form_suffix` so you can judge for yourself.",
            "default": false
          },
          "enrichWithDetails": {
            "title": "Fetch employee count + approval start date",
            "type": "boolean",
            "description": "Adds `employee_count_raw`, `employee_count_min`, `employee_count_max` and `approval_period_from` by fetching each delivered firm's register page. Charged per successful fetch — a not-found page, a rate-limited request or a timeout adds nothing and bills nothing. Filter FIRST, then enrich the slice: at the default 1 request/second, 400 firms take about 7 minutes and all 10,408 take about 2.9 hours.",
            "default": false
          },
          "maxDetailFetches": {
            "title": "Max detail fetches",
            "minimum": 0,
            "type": "integer",
            "description": "Hard ceiling on how many detail pages this run may fetch, regardless of how many rows it delivers. Rows past the ceiling are still delivered, with `detail_complete: false` and `detail_skipped_reason` saying why. 0 = enrich every delivered row.",
            "default": 0
          },
          "detailRequestsPerSecond": {
            "title": "Detail requests per second",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "DiBK publishes a limit of 300 requests per 5 minutes per IP — exactly 1 request/second sustained — and answers HTTP 429 above it. The default of 1 is that published number. Raising it is your call; the Actor honours 429 plus Retry-After either way and never bills a rate-limited fetch.",
            "default": 1
          },
          "detailConcurrency": {
            "title": "Detail concurrency",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many detail fetches may be in flight at once. The requests-per-second limiter above is the real gate, so this only smooths latency; raising it does not raise the request rate.",
            "default": 3
          },
          "rotateDetailProxySessions": {
            "title": "Rotate proxy sessions for detail fetches",
            "type": "boolean",
            "description": "Off (default): every detail request goes through ONE pinned proxy session, so the per-IP limit DiBK publishes applies to us as they intend. On: requests are spread over 20 proxy sessions, which is faster but deliberately routes around a published per-IP limit. Stated plainly so the choice is yours.",
            "default": false
          },
          "maxFirms": {
            "title": "Max firms to return",
            "minimum": 0,
            "type": "integer",
            "description": "Ceiling on delivered rows. **0 = every match** — the full register is 10,408 rows, which at $0.003/row is $31.22, so the default is deliberately 100 to stop an accidental full pull. When the cap truncates, the run log and the status message say so and name the cap as the reason. In Monitor mode the cap also applies to change rows — but a change it withheld keeps its PREVIOUS snapshot entry and is reported again on the next run, so a cap can never silently destroy an approval change.",
            "default": 100
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "register_order",
              "approval_expiry",
              "name",
              "organizational_number",
              "approval_area_count",
              "max_tiltaksklasse",
              "postal_town"
            ],
            "type": "string",
            "description": "Sorting is applied to ALL matching firms and only then is the cap applied, so \"top 50 by expiry\" really is the top 50 of the whole register — never the top 50 of an arbitrary first slice.",
            "default": "register_order"
          },
          "sortOrder": {
            "title": "Sort direction",
            "enum": [
              "asc",
              "desc"
            ],
            "type": "string",
            "description": "Ignored when sorting by register order.",
            "default": "asc"
          },
          "includeApprovalAreas": {
            "title": "Include the nested approval-area array",
            "type": "boolean",
            "description": "On (default): every row carries `valid_approval_areas` — one entry per approval with function, subject area, DiBK codes, tiltaksklasse and the planning-act version. Off: the row keeps the flat summary fields (`functions`, `subject_areas`, `approval_area_count`, `max_tiltaksklasse`, `approval_areas_text`) and drops the nested array, which makes a CSV export much narrower.",
            "default": true
          },
          "includeRawRecord": {
            "title": "Attach the raw API record",
            "type": "boolean",
            "description": "Adds `raw_record` — DiBK's untouched JSON object for that firm — next to the normalised fields, for auditing or for fields you would rather map yourself. Roughly doubles the dataset size.",
            "default": false
          },
          "monitorProfile": {
            "title": "Monitor profile name",
            "type": "string",
            "description": "Lets one account keep several independent watchlists — each profile has its own snapshot and its own run history. Change it and the next run starts a fresh baseline.",
            "default": "default"
          },
          "changeTypes": {
            "title": "Change types to return",
            "type": "array",
            "description": "Empty = all five. Change counts across the whole register are always reported in the log, even for types you filter out of the dataset. Note for `lapsed`: the firm is gone from DiBK, so only what the snapshot recorded can be filtered on (organisation number, name, postal town, approval end date, tiltaksklasse, approval-area count). If any other filter is active — website, insurance, function, subject area, country, postcode, expiring-within, exclude-sole-proprietorships — lapsed rows are withheld and NOT charged rather than delivered on a guess, and their snapshot entries are kept so a later run without that filter still reports them.",
            "items": {
              "type": "string",
              "enum": [
                "new_approval",
                "renewed",
                "approval_shortened",
                "areas_changed",
                "lapsed"
              ],
              "enumTitles": [
                "new_approval — the firm was not in the register before",
                "renewed — the approval end date moved later",
                "approval_shortened — the approval end date moved earlier",
                "areas_changed — approval areas or tiltaksklasse changed",
                "lapsed — the firm has dropped out of the register entirely"
              ]
            },
            "default": []
          },
          "monitorKeepHistoryRuns": {
            "title": "Monitoring runs to keep in the history record",
            "minimum": 1,
            "maximum": 3650,
            "type": "integer",
            "description": "The named key-value store also keeps a one-line summary of each monitoring run (date, register size, changes by type). At one run a day, 365 keeps a year of register history — which, since DiBK publishes no historical endpoint, exists nowhere else.",
            "default": 365
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Because the body is brotli-compressed the whole register costs only ~0.6 MB of proxy traffic per run, not 20 MB. Turn the proxy off entirely to go out from the Apify container IP — that works too.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}