{
  "openapi": "3.0.1",
  "info": {
    "title": "Expedia.com & Hotel.com [$2.5💰] Reviews/Ratings/Sentiment A.",
    "description": "[Only $2.5💰] Expedia + Hotels.com + Things-To-Do activities at $2.50/1k — only scraper covering all 3 brands. Deeplink auto-resolution, date filter, 10+ regional TLDs, bare property IDs. 25+ fields: sentiment, traveled-with, manager responses, category ratings. JSON or CSV. Pure HTTP.",
    "version": "0.0",
    "x-build-id": "MMKujIp8BDFK62OU6"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~expedia-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-expedia-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/memo23~expedia-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-expedia-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/memo23~expedia-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-expedia-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": {
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Hotel pages, activity (Things-To-Do) pages, Hotels.com pages, **or bare Expedia property IDs**. Expedia and Hotels.com URLs may be mixed in the same run.\n\n**Expedia hotels** — long slug (`.../City-Hotels-Name.h600217.Hotel-Information`), minimal slug (`.../Hotel.h600217.Hotel-Information`), short path (`.../h600217.Hotel-Information`), all regional TLDs (`expedia.co.uk`, `expedia.com.br`, `expedia.de`, `expedia.com.sg`, …), and deeplinks (`expe.app.link/...`, resolved automatically). Bare ids (digits or `h600217`) expand to `https://www.expedia.com/Hotel.h{id}.Hotel-Information`.\n\n**Expedia activities (Things-To-Do)** — `https://www.expedia.com/things-to-do/{slug}.a{id}.activity-details` (and regional equivalents). Returns activity reviews under `provider: \"expedia-activity\"`.\n\n**Hotels.com** — `https://{locale}.hotels.com/ho{id}/{slug}/`.\n\n**Not supported:** destination/region landing pages (`.../Name.d{id}.Place-To-Visit`) — those have no reviews of their own. If supplied, the run produces one explanatory row per such URL and skips the fetch entirely (no charges burned on dead URLs). Also accepts **Google Maps hotel URLs / Place IDs / Feature IDs** (auto-resolved; see `googleMapsTarget`).",
            "items": {
              "type": "string"
            }
          },
          "googleMapsInputs": {
            "title": "🆕 Google Maps hotel URLs / Place IDs",
            "type": "array",
            "description": "Google Maps inputs to auto-resolve to hotels: full Maps URLs (`https://www.google.com/maps/place/...`), bare Place IDs (`ChIJRUjdceH8WRMRe-u4F6qScEI`), Feature IDs (`0x1359fce171dd4845:0x427092aa17b8eb7b`), or short share links (`maps.app.goo.gl/...`). The hotel's name + coordinates are read from Google and matched against the Expedia Group catalog; only a high-confidence match is scraped (pick the platform with `googleMapsTarget` below). Every input emits a `google-maps-resolved` row documenting the mapping (ids, match score, distance) — or a `google-maps-unresolved` row with the closest candidates; the actor never guesses. Google inputs pasted into Start URLs above work identically.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Destination (city)",
            "type": "string",
            "description": "City or destination to search, e.g. London, Tokyo, New York. Leave empty to use Option A (URLs) instead."
          },
          "searchCheckIn": {
            "title": "Search: check-in date",
            "type": "string",
            "description": "Check-in date for the destination search (YYYY-MM-DD). Prices are a snapshot for this window. Leave empty to default to ~30 days from the run date. Only used in Option B."
          },
          "searchCheckOut": {
            "title": "Search: check-out date",
            "type": "string",
            "description": "Check-out date for the destination search (YYYY-MM-DD). Leave empty to default to the night after check-in. Only used in Option B."
          },
          "searchAdults": {
            "title": "Search: adults",
            "minimum": 1,
            "type": "integer",
            "description": "Number of adults per room for the search price quote. Defaults to 2. Only used in Option B.",
            "default": 2
          },
          "searchSort": {
            "title": "Search: sort order",
            "enum": [
              "RECOMMENDED",
              "PRICE_LOW_TO_HIGH",
              "PRICE_HIGH_TO_LOW",
              "REVIEW",
              "DISTANCE",
              "PROPERTY_CLASS"
            ],
            "type": "string",
            "description": "How to sort the destination search results.",
            "default": "RECOMMENDED"
          },
          "searchCurrency": {
            "title": "Search: currency",
            "type": "string",
            "description": "ISO 4217 currency code for search prices, e.g. USD, EUR, GBP, THB. Defaults to USD. Only used in Option B.",
            "default": "USD"
          },
          "searchRegionId": {
            "title": "Search: Expedia regionId (advanced)",
            "type": "string",
            "description": "Power-user override: skip city→regionId resolution and search this Expedia regionId directly (e.g. 6195474 for London City Centre). Leave empty to resolve from the Destination field above."
          },
          "ratePositionReport": {
            "title": "Run AI rate-position report (one report per destination)",
            "type": "boolean",
            "description": "Adds a `rowType: \"ratePositionReport\"` row per searched destination (up to 5 per run, biggest first), built from this run's destination-search hotel rows (the Destination field above). Needs at least 3 hotels with a nightly rate per destination. Billed per report via the `rate-position-report` event; never charged when a report can't be built.",
            "default": false
          },
          "ratePositionSubject": {
            "title": "Rate-position subject hotel (yours)",
            "type": "string",
            "description": "Which hotel is YOURS (the report subject). Use (part of) the hotel name as it appears on Expedia, e.g. `Marriott Marquis`. When it matches a hotel in the search results, the report adds that hotel's nightly-rate percentile and guest-score percentile within its destination. Leave empty for a market-only report."
          },
          "maxItems": {
            "title": "Max review rows per Start URL",
            "type": "integer",
            "description": "Maximum review rows scraped **per Start URL** (per hotel / activity / destination), newest first. This is a PER-URL cap, not a run total — a run with N URLs returns up to `maxItems × N` rows. That makes cost deterministic up front and guarantees every hotel returns data (one busy property can't consume the others' budget). Each review row is billed as one `result` event. Default: 1000 per URL. In `skipReviews` mode each hotel is a single summary row, so this has no effect there.",
            "default": 1000
          },
          "googleMapsUrlNote": {
            "title": "Google Maps URL / Place ID input",
            "type": "string",
            "description": "**You can paste Google Maps URLs, bare Place IDs (`ChIJ...`), or Feature IDs (`0x...:0x...`) directly into `Start URLs` above — the actor auto-resolves them to the matching hotel and scrapes it in the same run (Expedia, Hotels.com, or both — see the toggle below).** How it works: the place's name and coordinates are read from Google, matched against the unified Expedia Group hotel catalog, and only a high-confidence match is scraped (a `google-maps-resolved` row documents the mapping incl. Expedia and Hotels.com ids and a match score). If no confident match exists, you get a `google-maps-unresolved` row listing the closest candidates with ready-to-use URLs — the actor never guesses, because scraping the wrong hotel's reviews is worse than none. Short share links (maps.app.goo.gl) are supported too."
          },
          "googleMapsTarget": {
            "title": "Google Maps inputs: platform to scrape",
            "enum": [
              "expedia",
              "hotels",
              "both"
            ],
            "type": "string",
            "description": "Which platform a Google Maps URL / Place ID / Feature ID in Start URLs resolves to. `expedia` (default) scrapes the matched hotel on Expedia; `hotels` scrapes it on Hotels.com (the legacy ho-id is mapped automatically); `both` scrapes the two platforms in one run.",
            "default": "expedia"
          },
          "reviewsFrom": {
            "title": "Only scrape reviews newer than [date]",
            "type": "string",
            "description": "Format should be YYYY-MM-DD, e.g., 2025-02-20"
          },
          "reviewSort": {
            "title": "Sort order for reviews",
            "enum": [
              "newest",
              "relevant",
              "highest",
              "lowest",
              "mostHelpful"
            ],
            "type": "string",
            "description": "Order in which to fetch reviews. **All five values are fully wired** via Expedia's GraphQL `sortBy` URN — buyers get the order they ask for. `mostHelpful` maps to Expedia's `Most relevant` URN (Expedia has no separate helpfulness dimension; relevance already accounts for helpful-vote weighting). The resolved URN is printed at run start so you can verify what's being sent.",
            "default": "newest"
          },
          "includeReviewPhotos": {
            "title": "Include review photos",
            "type": "boolean",
            "description": "When `false`, the actor strips the `reviewPhotos` array from each emitted row. Useful for CSV exports where flat structure matters, or to make rows smaller. Default `true`.",
            "default": true
          },
          "includeOwnerResponses": {
            "title": "Include hotel manager responses",
            "type": "boolean",
            "description": "When `false`, the actor strips the `hotelResponse` object from each emitted row. Set `false` when you only want guest-side review data. Default `true`.",
            "default": true
          },
          "skipReviews": {
            "title": "Rooms-only mode (skip reviews)",
            "type": "boolean",
            "description": "When `true`, the actor does **not** scrape reviews — it emits a single summary row per hotel carrying whatever hotel-level data you enabled (room rates, meal-plan/cancellation pricing, property details, location, policies, images). Ideal for rate-intelligence / price-monitoring runs: no per-review charges, far fewer requests per hotel (so fewer 429s at scale). Leave `false` for normal review scraping.",
            "default": false
          },
          "includePropertySummary": {
            "title": "Emit a property-summary row when a hotel has no new reviews",
            "type": "boolean",
            "description": "When `true`, any property that returns **zero review rows** — e.g. nothing new inside your `reviewsFrom` window — still emits one hotel-summary row (`rowType: \"hotel\"`) carrying its cached `hotelOverallRating`, `hotelRatingLabel`, `hotelTotalReviews` and `hotelCategoryRatings` (plus any property details/images you enabled). Perfect for weekly monitoring: a property's current standing stays readable even on weeks with no new reviews, instead of that property being absent from the dataset. Requires `includeCategoryRatings: true` so the rating data is fetched. Off by default (fully backward-compatible). Distinct from `skipReviews`, which never scrapes reviews at all.",
            "default": false
          },
          "includeRatingDistribution": {
            "title": "Include rating distribution (Excellent/Good/Okay/Poor/Terrible counts)",
            "type": "boolean",
            "description": "When `true`, attaches a `ratingDistribution` array to every row — the 5-band review-score histogram exactly as Expedia shows it: `[{ rating: 10, label: \"Excellent\", count: 523, percent: 52 }, { rating: 8, label: \"Good\", count: 231, … }, … 6-Okay, 4-Poor, 2-Terrible]`. This isn't in Expedia's mobile API, so it fires a **separate desktop-web request per hotel** and is **billed one `additional-cost` event ($0.001) per hotel**. Pairs well with `includePropertySummary` for weekly monitoring. Off by default.",
            "default": false
          },
          "includeCategoryRatings": {
            "title": "Include hotel category ratings",
            "type": "boolean",
            "description": "Fetch hotel-level aggregate fields such as overall rating, rating label, total reviews, and category ratings. Billed one `additional-cost` event ($0.001) per hotel/activity URL. Default: true.",
            "default": true
          },
          "includePropertyDetails": {
            "title": "Include property description & amenities",
            "type": "boolean",
            "description": "Attach rich hotel-level descriptive fields to every review row: `propertyName`, `starRating`, `propertyType`, `propertyAddress`, `propertyCoordinates`, `propertyDescription`, `propertyLanguages`, `propertyAmenities` (categorized), and `propertyHighlights`. Extracted from the same page-layout response as the photo gallery — **no extra per-item charge**. Set `false` to omit these fields. Requires `includeCategoryRatings: true`.",
            "default": true
          },
          "includePropertyImages": {
            "title": "Include property photo gallery",
            "type": "boolean",
            "description": "Fetch every image URL in the hotel's photo gallery (typically 100-300 URLs per property) and attach them as `propertyImages` on every row. **Billed 1 `additional-cost` unit ($0.001) per image returned** — a 220-image hotel adds ~$0.22. Cap the count (and the cost) with `maxPropertyImages` below, or set `false` to skip the gallery and pay nothing for images. Requires `includeCategoryRatings: true`.",
            "default": true
          },
          "maxPropertyImages": {
            "title": "Max property images per hotel",
            "minimum": 1,
            "type": "integer",
            "description": "Keep only the **first N** gallery image URLs per hotel (gallery order — hero/cover shots first). You are **billed only for the images returned**, so `maxPropertyImages: 10` costs at most 10 `additional-cost` units ($0.01) per hotel instead of the full gallery's 100-300. Leave empty for the complete gallery. Only used when the photo gallery is enabled."
          },
          "includeLocation": {
            "title": "Include location intelligence (nearby places)",
            "type": "boolean",
            "description": "Attach a `propertyLocation` block to every review row — nearby landmarks/attractions, transit & airports, and restaurants, each with walk/drive times (e.g. \"Utah State University — 18 min walk\"). **Opt-in**: this fires a separate request per hotel and is **charged one `additional-cost` event ($0.001) per hotel**. Leave off if you don't need location data.",
            "default": false
          },
          "includePolicies": {
            "title": "Include policies & important info",
            "type": "boolean",
            "description": "Attach a `propertyPolicies` block to every review row — check-in/check-out times & fees, minimum check-in age, pet policy, children & extra beds, deposits, accepted payment types, and 'You need to know' notes, grouped by section. **Opt-in**: fires a separate request per hotel and is **charged one `additional-cost` event ($0.001) per hotel**.",
            "default": false
          },
          "includeRooms": {
            "title": "Include room inventory & rates",
            "type": "boolean",
            "description": "Attach a `propertyRooms` block to every row — each room type's name, bed config, occupancy, inclusions, nightly & total price, and cancellation terms. **Prices are a point-in-time snapshot** for the search window below (stamped in the output as `quotedFor`). **Opt-in**: fires a separate request per hotel and is **charged one `additional-cost` event ($0.001) per hotel**.",
            "default": false
          },
          "includeRoomOffers": {
            "title": "Include meal-plan & cancellation pricing",
            "type": "boolean",
            "description": "Adds `mealPlans` and `cancellationOptions` to every room — each meal-plan (No extras / Half board / All-inclusive …) and cancellation-policy (Non-refundable / Fully refundable …) option with its '+ $X' price delta, exactly as shown on the Expedia room card. **Self-sufficient: enabling this alone also fetches the room rates** (you don't need to set `includeRooms` too). Premium rate-intelligence data — billed via the `additional-cost` event: the base rooms unit plus 5 units per offer option extracted.",
            "default": false
          },
          "roomsCheckIn": {
            "title": "Room rates: check-in date",
            "type": "string",
            "description": "Check-in date for the room-rate quote, format YYYY-MM-DD. Only used when room rates are enabled. Leave empty to default to ~30 days from the run date."
          },
          "roomsCheckOut": {
            "title": "Room rates: check-out date",
            "type": "string",
            "description": "Check-out date for the room-rate quote, format YYYY-MM-DD. Only used when room rates are enabled. Leave empty to default to the night after check-in."
          },
          "roomsAdults": {
            "title": "Room rates: number of adults",
            "type": "integer",
            "description": "Number of adults for the room-rate quote. Only used when room rates are enabled. Defaults to 2.",
            "default": 2
          },
          "roomsRegion": {
            "title": "Room rates: region & currency",
            "enum": [
              "auto",
              "us",
              "ca",
              "mx",
              "br",
              "ar",
              "uk",
              "ie",
              "de",
              "fr",
              "es",
              "it",
              "nl",
              "be",
              "at",
              "ch",
              "dk",
              "fi",
              "gr",
              "no",
              "se",
              "au",
              "nz",
              "jp",
              "kr",
              "in",
              "sg",
              "hk",
              "tw",
              "my",
              "th",
              "ph",
              "vn",
              "id"
            ],
            "type": "string",
            "description": "Which Expedia point-of-sale quotes the room prices — this decides the **currency** of `nightlyRate` / `totalRate` / `mealPlans` / `cancellationOptions`. **Auto (default)**: currency follows each input URL's own domain — `www.expedia.se` URLs quote in SEK, `www.expedia.co.jp` in JPY, plain `.com` (and bare hotel IDs) in USD. Pick an explicit region to force every quote into that currency regardless of URL form — e.g. bare hotel IDs + `Sweden` → SEK. All 33 regions verified live. Note: option labels (meal plans etc.) come back in that region's language; numeric `nightlyRateValue`/`totalRateValue` fields are always plain numbers.",
            "default": "auto"
          },
          "roomsLanguage": {
            "title": "Room rates: label language",
            "enum": [
              "english",
              "site-default"
            ],
            "type": "string",
            "description": "Language of the room-rate **labels** (room names, meal plans, cancellation texts). **English (default)**: labels come back in English while prices keep the local currency — e.g. on `expedia.se` you get `\"Breakfast buffet\" + 237 kr` instead of `\"Frukostbuffé\" + 237 kr`. **Site default**: labels in the regional site's own language (Swedish on `.se`, German on `.de`, …). Currency is never affected by this setting — use the region selector above for that.",
            "default": "english"
          },
          "maxConcurrency": {
            "title": "Max Concurrency",
            "type": "integer",
            "description": "Maximum number of pages that can be processed at the same time. For large hotel lists, 3-5 reduces 429 rate-limit errors.",
            "default": 10
          },
          "minConcurrency": {
            "title": "Min Concurrency",
            "type": "integer",
            "description": "Minimum number of pages that will be processed at the same time.",
            "default": 1
          },
          "maxRequestRetries": {
            "title": "Max Request Retries",
            "type": "integer",
            "description": "Number of times the crawler will retry a failed request before giving up.",
            "default": 100
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Specifies proxy servers that will be used by the scraper in order to hide its origin.<br><br>For details, see <a href='https://apify.com/apify/web-scraper#proxy-configuration' target='_blank' rel='noopener'>Proxy configuration</a> in README.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}