{
  "openapi": "3.0.1",
  "info": {
    "title": "SAM.gov Opportunities – Government Bids & Federal Procurement",
    "description": "Scrape live US federal contracting opportunities from SAM.gov — solicitations, sources sought and awards — plus wage determinations, CFDA grant/loan programs and organization-only exclusion records, with no API key and no login. NAICS, set-aside, notice type and state filters, contacts, watch mode.",
    "version": "0.1",
    "x-build-id": "AAG114h1wCzICTZQL"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/fetchsmith~sam-gov-opportunities-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-fetchsmith-sam-gov-opportunities-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/fetchsmith~sam-gov-opportunities-scraper/runs": {
      "post": {
        "operationId": "runs-sync-fetchsmith-sam-gov-opportunities-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/fetchsmith~sam-gov-opportunities-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-fetchsmith-sam-gov-opportunities-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": {
          "dataType": {
            "title": "Data type",
            "enum": [
              "opportunities",
              "wage-determinations-dbra",
              "wage-determinations-sca",
              "wage-determinations-cba",
              "assistance-listings",
              "exclusions"
            ],
            "type": "string",
            "description": "Which SAM.gov public dataset to pull. **Contract opportunities** (default) returns solicitations/awards. The three **wage determination** options return the Department of Labor determinations SAM.gov publishes: **Davis-Bacon Act** (construction, ~85k records), **Service Contract Act** (services, ~2.7k) and **Collective Bargaining Agreement** (~108k). Wage-determination modes support the keyword, state, active-only and max-results filters only — NAICS, set-aside, notice type, organization and detail enrichment are opportunity-only and are ignored (with a log warning) if set. They return the determination index (which determination applies to which state/counties, its revision and whether it is current), not the per-occupation hourly rate tables. **Assistance listings (CFDA)** returns the Catalog of Federal Domestic Assistance — federal grant/loan/direct-payment programs (~7.4k, ~2.9k currently active) — with objective, eligibility, funding-obligation history and agency contact per program. Supports keyword, organization, active-only and max-results only — NAICS/set-aside/notice-type/state are opportunity-only and ignored here (assistance-listing programs are nationwide, not filtered by place of performance). **Exclusions** returns SAM.gov's federal debarment/suspension list, restricted to organizations only (firms, vessels and special entity designations — ~35.2k records) — it never returns the individual-person exclusion records SAM.gov also publishes, to avoid shipping a people-search product; see the README for detail. Supports keyword (entity name) and organization only — NAICS/set-aside/notice-type/state/active-only are ignored (state is applied server-side but returns zero matches on this index; active-only has no effect on it at all).",
            "default": "opportunities"
          },
          "keyword": {
            "title": "Keyword",
            "type": "string",
            "description": "Searched against opportunity title/description. For wage determinations it matches the determination's reference number (e.g. \"AK20260001\"), NOT trades or occupations. For assistance listings it matches title/objective/program number. For exclusions it matches the excluded entity's name. Leave empty for all. Defaults to \"contract\" for opportunities so a first test run never returns 0 rows; other data types default to empty."
          },
          "naicsCodes": {
            "title": "NAICS codes",
            "type": "array",
            "description": "Filter to one or more 6-digit NAICS codes, e.g. 541511.",
            "items": {
              "type": "string"
            }
          },
          "setAsideTypes": {
            "title": "Set-aside types",
            "type": "array",
            "description": "Filter to SAM.gov set-aside codes, e.g. SBA (total small business). Codes are case-sensitive on SAM.gov's backend but this Actor corrects the case for you, so `sba` and `SBA` both work. Valid codes: SBA, SBP, 8A, 8AN, HZC, HZS, SDVOSBC, SDVOSBS, WOSB, WOSBSS, EDWOSB, EDWOSBSS, LAS, IEE, ISBEE, BICiv, VSA, VSS. The umbrella names 8(a), SDVOSB and HUBZone are also accepted and expand to the real code(s) they cover (SDVOSB -> SDVOSBC + SDVOSBS, HUBZone -> HZC + HZS). Three further codes SAM.gov accepts are supported but are not ordinary set-asides: NONE is SAM.gov's explicit \"unrestricted / no set-aside\" tag (~39k opportunities, ~3.3k of them active) — it NARROWS your search to those rows, and is not the same as leaving this field empty; SDB (Total Small Disadvantaged Business, ~464 rows) and ESB (Emerging Small Business, ~714 rows) are retired programs with zero active opportunities and nothing posted since 2020, kept because those historical rows are otherwise unreachable by this filter. Anything else is not a code SAM.gov knows: the run logs a warning and that value matches ZERO opportunities (it never widens your results). Multiple values are ORed.",
            "items": {
              "type": "string"
            }
          },
          "noticeTypes": {
            "title": "Notice types",
            "uniqueItems": true,
            "type": "array",
            "description": "Which SAM.gov notice types to include. All types if left empty. The last 4 (m/f/j/l) are legacy codes SAM.gov's own UI dropdown no longer lists and stopped issuing around 2019-2020, but ~97k real historical opportunities still carry them and are otherwise unreachable by this filter -- useful for historical research, not current solicitations. IMPORTANT: on a Watch mode run with \"also alert on lifecycle/deadline changes\" on, setting this filters out the very lifecycle transition that option watches for -- an opportunity whose notice type moves out of your selection (e.g. Solicitation to Award) stops matching the query entirely, so that change is never reported. Leave empty on a watchChanges run if you need to see notice-type transitions.",
            "items": {
              "type": "string",
              "enum": [
                "p",
                "o",
                "k",
                "r",
                "a",
                "s",
                "g",
                "i",
                "u",
                "m",
                "f",
                "j",
                "l"
              ],
              "enumTitles": [
                "Presolicitation",
                "Solicitation",
                "Combined Synopsis/Solicitation",
                "Sources Sought",
                "Award Notice",
                "Special Notice",
                "Sale of Surplus",
                "Intent to Bundle",
                "Justification",
                "Modification/Amendment/Cancel (legacy, retired ~2020)",
                "Foreign Government Standard (legacy, retired ~2019)",
                "Justification and Approval, J&A (legacy, retired ~2019)",
                "Fair Opportunity/Limited Sources Justification (legacy, retired ~2019)"
              ]
            }
          },
          "states": {
            "title": "Place of performance state(s)",
            "type": "array",
            "description": "2-letter US state codes, e.g. CA. For opportunities this is the place of performance; for wage determinations it is the state the determination covers. Multiple states are OR-ed. Not supported for assistance listings or exclusions (ignored for both).",
            "items": {
              "type": "string"
            }
          },
          "postedFrom": {
            "title": "Posted on or after (YYYY-MM-DD)",
            "type": "string",
            "description": "Only return records whose `publishDate` falls on or after this calendar date, e.g. 2026-01-01. Inclusive. SAM.gov's search backend has no date-range parameter of its own, so this is applied by the Actor after each row is fetched and **before it is pushed or charged** — you are never billed for a row outside your window. Two consequences: the window does not make the run cheaper in time (every matching row is still read from SAM.gov, so a narrow window over a broad keyword may hit the run's time budget before `maxResults` is filled — narrow the keyword/NAICS filters too), and `declaredMatches` in RUN_SUMMARY stays SAM.gov's own pre-window count. Dates are compared as the calendar date the row itself carries (the leading YYYY-MM-DD of its timestamp), not re-zoned to UTC. A row with no readable `publishDate` is dropped (and counted in RUN_SUMMARY as `dateWindowMissing`) rather than passed through unverified. Supported for contract opportunities, wage determinations and assistance listings; NOT supported for exclusions, whose records carry no publish date at all (the run stops with an explanation instead of billing you for an unfiltered set)."
          },
          "postedTo": {
            "title": "Posted on or before (YYYY-MM-DD)",
            "type": "string",
            "description": "Only return records whose `publishDate` falls on or before this calendar date, e.g. 2026-03-31. Inclusive. Same mechanics and same dataType support as **Posted on or after** — see that field. Use both together for a two-sided window; either one alone is an open-ended range. WATCH MODE WARNING: combined with `watchLabel`, a FIXED value here is a permanent dead end once today's date passes it — `publishDate` is the date SAM.gov itself posted the notice, and a brand-new notice is always posted on or after the day it first appears, never before, so the watch goes quiet for good once real time passes the cutoff (see README FAQ). Leave it unset in a watched query so it stays unbounded; `postedFrom` alone is safe to keep."
          },
          "deadlineFrom": {
            "title": "Response deadline on or after (YYYY-MM-DD)",
            "type": "string",
            "description": "Only return opportunities whose `responseDate` (the response/bid deadline) falls on or after this calendar date. Inclusive. Set this to today's date to exclude opportunities whose deadline has already passed, or to a future date to find only the ones you still have time to bid on. Applied after fetch and before charging, exactly like the posted-date window. **Opportunities only** — wage determinations, assistance listings and exclusions have no response deadline, and the run stops with an explanation rather than ignoring the field. Note: do not combine this with Watch mode's \"also alert on lifecycle/deadline changes\", which watches `responseDate` — a deadline moved out of your window stops matching and the change can never be reported (the run warns you; see the README FAQ \"don't filter on the field you're watching\")."
          },
          "deadlineTo": {
            "title": "Response deadline on or before (YYYY-MM-DD)",
            "type": "string",
            "description": "Only return opportunities whose `responseDate` (the response/bid deadline) falls on or before this calendar date. Inclusive. Same mechanics, same opportunities-only support and the same Watch-mode caveat as **Response deadline on or after** — see that field."
          },
          "solicitationNumber": {
            "title": "Solicitation number (exact match)",
            "type": "string",
            "description": "Return only the opportunity/opportunities whose own solicitation number exactly equals this value, e.g. \"SPRRA2-22-R-0016\" or \"SPRRA222R0016\" (dashes/spaces are ignored and matching is case-insensitive -- SAM.gov strips them too when it builds its own internal `cleanSolicitationNumber`). SAM.gov's search backend has no exact-match parameter for this field (a `solnum` query parameter exists but is silently ignored, confirmed live), so this is applied by the Actor after each row is fetched and **before it is pushed or charged** -- you are never billed for a row that only mentions the number in its title/description rather than carrying it as its own. The value is also sent to SAM.gov as the search keyword to narrow the walk (overriding the Keyword field, which is ignored for this run if also set) -- it does not make the run cheaper in time, since every row the keyword surfaces is still read before the exact-match check runs. Opportunities only; wage determinations, assistance listings and exclusions have no solicitation number field, and the run stops with an explanation rather than ignoring it."
          },
          "minAwardAmount": {
            "title": "Minimum award amount (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Only return opportunities whose own `award.amount` is at or above this dollar value, e.g. 100000. Inclusive. SAM.gov's search backend only supports an EXACT award-amount match (`award_amount=<n>`, confirmed live) and rejects every range syntax with HTTP 400, so this is applied by the Actor after each row is fetched and **before it is pushed or charged** -- you are never billed for a row outside your range. `award.amount` is null on every notice type that has not been awarded yet (presolicitation, solicitation, sources sought, ...) -- a row with no award amount is dropped (counted in RUN_SUMMARY as `awardAmountMissing`), not passed through unverified. Pair this with Notice types set to `a` (award notices) or most fetched rows will be dropped as having nothing to compare. Opportunities only; wage determinations, assistance listings and exclusions carry no award-amount field at all, and the run stops with an explanation rather than billing you for an unfiltered set."
          },
          "maxAwardAmount": {
            "title": "Maximum award amount (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Only return opportunities whose own `award.amount` is at or below this dollar value. Inclusive. Same mechanics, same notice-type caveat and same dataType support as **Minimum award amount** -- see that field. Use both together for a two-sided range; either one alone is an open-ended bound."
          },
          "organizationId": {
            "title": "Organization ID",
            "type": "string",
            "description": "SAM.gov internal organization ID to filter to one agency/office (advanced; find via a search result's organizationHierarchy). Supported for opportunities, assistance listings and exclusions; ignored for wage determinations."
          },
          "activeOnly": {
            "title": "Active records only",
            "type": "boolean",
            "description": "Only return records SAM.gov currently flags active (for wage determinations: currently in force, i.e. not superseded by a later revision; for assistance listings: the program is currently active, ~2.9k of ~7.4k). Has no effect on exclusions — SAM.gov's exclusions index does not support server-side active-status filtering; check each row's own isActive/terminationDate fields instead. IMPORTANT: this is ON BY DEFAULT and, combined with Watch mode's \"also alert on lifecycle/deadline changes\", makes the active → inactive/awarded transition structurally unreportable — once a row goes inactive it stops matching the query entirely, so the change is never seen. Set this to false on any watchChanges run where you need that transition; see the README FAQ \"don't filter on the field you're watching\".",
            "default": true
          },
          "enrichDetail": {
            "title": "Enrich with detail call",
            "type": "boolean",
            "description": "Make one extra request per opportunity to add NAICS codes, set-aside, place-of-performance state/country and point-of-contact (name/email/phone, published by the agency itself as part of the public notice). Slower. Opportunities only; ignored for wage determinations, assistance listings and exclusions (their search rows already carry the full record).",
            "default": false
          },
          "includeIncumbentAwards": {
            "title": "Attach incumbent awards (who holds this work now)",
            "type": "boolean",
            "description": "For each opportunity's NAICS code, attach the top 3 US federal contract awards by dollar value from **USAspending.gov** as `incumbentAwards` -- recipient name/UEI, amount, start and end dates, awarding agency and a usaspending.gov link -- so you can see who currently performs this work before deciding whether to bid. Matched on NAICS code and, when the notice's department maps to one of USAspending's top-tier agency names, on agency too (`incumbentAwardsMatchedBy` on every row tells you which). **Not billed separately** -- no extra per-result charge. Two things to know: (1) NAICS codes are not on SAM.gov's search row, so this turns **Enrich with detail call** on automatically (one extra request and ~200ms per row); (2) the look-back window matches each award's **last-modification date, not its start date**, so a long-running contract that began before the window but was recently modified is included -- that is intentional (it is still the incumbent), and every row carries both dates. Lookups are deduped per unique NAICS+agency pair, so 200 opportunities across 5 NAICS codes cost 5 requests, not 200. Definitive contract awards only (type A/B/C/D) -- not IDV vehicles, grants or loans. Opportunities only; the run stops with an explanation on other data types rather than billing you for rows that can never carry the field.",
            "default": false
          },
          "incumbentYears": {
            "title": "Incumbent look-back (years, by last modification)",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How far back to look for incumbent awards, in years, when **Attach incumbent awards** is on. 1 to 10, default 3; out-of-range values are clamped. This window is matched against each award's **last-modification/obligation date on USAspending, not its award or start date** (measured live) -- so a 3-year setting can legitimately return a contract that started in 2007 and was last modified in 2025. The exact window used is written to `RUN_SUMMARY.incumbentAwards.lastModifiedBetween`.",
            "default": 3
          },
          "includeAttachments": {
            "title": "Include attachment download links",
            "type": "boolean",
            "description": "Make one extra request per opportunity to list its attachments (drawings, full statements of work, forms) and add an `attachments` field with each file's name, size, MIME type and a direct, no-login download URL. Slower. Opportunities only; ignored for wage determinations, assistance listings and exclusions (SAM.gov does not attach files to those).",
            "default": false
          },
          "maxResults": {
            "title": "Max results",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Stop after this many opportunities. SAM.gov's own search backend caps result depth at 10,000 for any single query — narrow keyword/filters to go deeper.",
            "default": 200
          },
          "watchLabel": {
            "title": "Watch label (only new since last run)",
            "type": "string",
            "description": "Optional. Name a saved search (e.g. \"my-naics-541511-watch\") and this run returns ONLY opportunities not delivered under that same label and filter set before, instead of the full match set every time. The first run for a label is a free baseline: it records what already matches and returns zero rows. Run it again later — on a schedule, typically — to get only what's new. The baseline is kept in your own Apify account (a named key-value store), keyed by label plus a fingerprint of your other filters, so changing a filter starts a fresh baseline instead of dumping previously-excluded opportunities as \"new\"."
          },
          "watchChanges": {
            "title": "Watch mode: also alert on lifecycle/deadline changes",
            "type": "boolean",
            "description": "Only used together with Watch label. When on, a run also re-delivers a record you already have if its watched fields changed since you last saw it: for opportunities, active/notice-type status (e.g. presolicitation turning into a solicitation, or an award landing), response deadline, modified date, modification count, awardee or description; for wage determinations, revision number, active status or modified date; for assistance listings, active or funded status, modified date, or historical-index entry count; for exclusions, active status or termination date (a debarment being lifted). Charged at the same per-row price as a new record. Each changed row is tagged with `_watchChangeType` (one or more of `isActive`, `noticeTypeCode`, `responseDate`, `modifiedDate`, `modificationsCount`, `awardeeName`, `description`, `revisionNumber`, `isFunded`, `historicalIndexCount`, `terminationDate`) plus the previous value(s) under `_watchPrevious`. Off by default so existing watches keep their current behaviour. IMPORTANT: do not combine this with Active records only (on by default!) or the Notice types filter -- both are server-side filters on fields this option watches, so a row whose isActive or noticeTypeCode moves out of your filter stops matching the search and its change can never be reported. The run warns you if you do; see the README FAQ \"don't filter on the field you're watching\".",
            "default": false
          },
          "webhookUrl": {
            "title": "Webhook URL (notify on completion)",
            "type": "string",
            "description": "Optional. An http(s) URL to POST a small JSON summary to when the run finishes — opportunities pushed, rows scanned, and (when Watch label is set) whether this was a baseline run plus the new/changed/skipped counts, along with the run's dataset ID so you can fetch the results. A convenience for callers who want a completion ping without setting up an Apify platform webhook (which needs separate Console/API configuration per Task, not per run). Best-effort: a failed or slow webhook is logged as a warning and never fails the run or affects charging — it fires after every opportunity has already been pushed and charged. Leave empty to skip."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}