diff --git a/CHANGELOG.md b/CHANGELOG.md
index 78807e0..d0f79e0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,13 @@
# Changelog
+## v1.10.0-sdk.1
+
+- Regenerated from the public API contract (525 to 529 operations). Adds the
+ **Airbnb Markets dataset** (4 endpoints): aggregate short-term-rental market
+ statistics -- listing supply, Superhost share, ratings, and nightly-price bands
+ -- rolled up by country, metro, and geo cell (search, item lookup, facets, and
+ nearby density). Aggregate-only: no individual listings or hosts.
+
## v1.9.0-sdk.1
- Regenerated from the public API contract (499 to 525 operations). Adds four
diff --git a/docs/operations.md b/docs/operations.md
index a226578..5e153fe 100644
--- a/docs/operations.md
+++ b/docs/operations.md
@@ -2,7 +2,7 @@
Generated from `openapi/public.json`. Deprecated, admin, and internal operations are excluded from this SDK contract.
-Total operations: `525`
+Total operations: `529`
| Group | SDK method | Operation ID | HTTP | Params | Auth | Response | Notes |
| --- | --- | --- | --- | --- | --- | --- | --- |
@@ -93,6 +93,10 @@ Total operations: `525`
| web | `web.antibot_check` | `antibot-check` | `POST /diagnostics/antibot-check` | `request` (body String required) | `ApiKeyAuth` | `WebAntibotCheckResponse` | |
| web | `web.scrape` | `web-scrape` | `POST /web/scrape` | `scrapeOption` (body String required) | `ApiKeyAuth` | `WebScrapeResponse` | |
| datasets | `datasets.list` | `datasets-list` | `GET /datasets` | none | `ApiKeyAuth` | `DatasetsListResponse` | |
+| datasets | `datasets.airbnb_markets_facets` | `datasets-airbnb-markets-facets` | `GET /datasets/airbnb-markets/facets` | `facet` (query String required)
`group_by` (query String)
`country` (query String)
`market` (query String)
`superhost` (query bool)
`min_rating` (query Float)
`min_review_count` (query Integer)
`active_since` (query String)
`min_listings` (query Integer) | `ApiKeyAuth` | `DatasetsAirbnbMarketsFacetsResponse` | |
+| datasets | `datasets.airbnb_markets_item` | `datasets-airbnb-markets-item` | `GET /datasets/airbnb-markets/items/{country}` | `country` (path String required) | `ApiKeyAuth` | `DatasetsAirbnbMarketsItemResponse` | |
+| datasets | `datasets.airbnb_markets_nearby` | `datasets-airbnb-markets-nearby` | `GET /datasets/airbnb-markets/nearby` | `lat` (query Float required)
`lon` (query Float required)
`radius_m` (query Integer required)
`precision` (query Integer)
`min_listings` (query Integer)
`country` (query String)
`superhost` (query bool)
`min_rating` (query Float)
`active_since` (query String) | `ApiKeyAuth` | `DatasetsAirbnbMarketsNearbyResponse` | |
+| datasets | `datasets.airbnb_markets_search` | `datasets-airbnb-markets-search` | `GET /datasets/airbnb-markets/search` | `group_by` (query String)
`country` (query String)
`market` (query String)
`superhost` (query bool)
`min_rating` (query Float)
`min_review_count` (query Integer)
`active_since` (query String)
`min_listings` (query Integer)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsAirbnbMarketsSearchResponse` | |
| datasets | `datasets.apps_charts_search` | `datasets-apps-charts-search` | `GET /datasets/apps-charts/search` | `q` (query String)
`store` (query String)
`chart_type` (query String)
`collection` (query String)
`category` (query String)
`country` (query String)
`app_id` (query String)
`date` (query String)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsAppsChartsSearchResponse` | |
| datasets | `datasets.apps_reviews_search` | `datasets-apps-reviews-search` | `GET /datasets/apps-reviews/search` | `q` (query String)
`store` (query String)
`app_id` (query String)
`country` (query String)
`min_score` (query Integer)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsAppsReviewsSearchResponse` | |
| datasets | `datasets.apps_search` | `datasets-apps-search` | `GET /datasets/apps/search` | `q` (query String)
`store` (query String)
`category` (query String)
`country` (query String)
`developer` (query String)
`free` (query bool)
`min_rating` (query Float)
`min_reviews` (query Integer)
`sort` (query String)
`page` (query Integer)
`page_size` (query Integer) | `ApiKeyAuth` | `DatasetsAppsSearchResponse` | |
diff --git a/lib/crawlora/operations.rb b/lib/crawlora/operations.rb
index f29994e..52687d9 100644
--- a/lib/crawlora/operations.rb
+++ b/lib/crawlora/operations.rb
@@ -4273,6 +4273,237 @@ module Crawlora
"ApiKeyAuth"
]
},
+ "datasets-airbnb-markets-facets" => {
+ "id" => "datasets-airbnb-markets-facets",
+ "method" => "GET",
+ "path" => "/datasets/airbnb-markets/facets",
+ "pathParams" => [],
+ "queryParams" => [
+ {
+ "name" => "facet",
+ "in" => "query",
+ "type" => "string",
+ "required" => true
+ },
+ {
+ "name" => "group_by",
+ "in" => "query",
+ "type" => "string"
+ },
+ {
+ "name" => "country",
+ "in" => "query",
+ "type" => "string"
+ },
+ {
+ "name" => "market",
+ "in" => "query",
+ "type" => "string"
+ },
+ {
+ "name" => "superhost",
+ "in" => "query",
+ "type" => "boolean"
+ },
+ {
+ "name" => "min_rating",
+ "in" => "query",
+ "type" => "number"
+ },
+ {
+ "name" => "min_review_count",
+ "in" => "query",
+ "type" => "integer"
+ },
+ {
+ "name" => "active_since",
+ "in" => "query",
+ "type" => "string"
+ },
+ {
+ "name" => "min_listings",
+ "in" => "query",
+ "type" => "integer"
+ }
+ ],
+ "formParams" => [],
+ "bodyParam" => nil,
+ "bodyRequired" => false,
+ "consumes" => [
+ "application/json"
+ ],
+ "produces" => [
+ "application/json"
+ ],
+ "security" => [
+ "ApiKeyAuth"
+ ]
+ },
+ "datasets-airbnb-markets-item" => {
+ "id" => "datasets-airbnb-markets-item",
+ "method" => "GET",
+ "path" => "/datasets/airbnb-markets/items/{country}",
+ "pathParams" => [
+ "country"
+ ],
+ "queryParams" => [],
+ "formParams" => [],
+ "bodyParam" => nil,
+ "bodyRequired" => false,
+ "consumes" => [
+ "application/json"
+ ],
+ "produces" => [
+ "application/json"
+ ],
+ "security" => [
+ "ApiKeyAuth"
+ ]
+ },
+ "datasets-airbnb-markets-nearby" => {
+ "id" => "datasets-airbnb-markets-nearby",
+ "method" => "GET",
+ "path" => "/datasets/airbnb-markets/nearby",
+ "pathParams" => [],
+ "queryParams" => [
+ {
+ "name" => "lat",
+ "in" => "query",
+ "type" => "number",
+ "required" => true
+ },
+ {
+ "name" => "lon",
+ "in" => "query",
+ "type" => "number",
+ "required" => true
+ },
+ {
+ "name" => "radius_m",
+ "in" => "query",
+ "type" => "integer",
+ "required" => true
+ },
+ {
+ "name" => "precision",
+ "in" => "query",
+ "type" => "integer"
+ },
+ {
+ "name" => "min_listings",
+ "in" => "query",
+ "type" => "integer"
+ },
+ {
+ "name" => "country",
+ "in" => "query",
+ "type" => "string"
+ },
+ {
+ "name" => "superhost",
+ "in" => "query",
+ "type" => "boolean"
+ },
+ {
+ "name" => "min_rating",
+ "in" => "query",
+ "type" => "number"
+ },
+ {
+ "name" => "active_since",
+ "in" => "query",
+ "type" => "string"
+ }
+ ],
+ "formParams" => [],
+ "bodyParam" => nil,
+ "bodyRequired" => false,
+ "consumes" => [
+ "application/json"
+ ],
+ "produces" => [
+ "application/json"
+ ],
+ "security" => [
+ "ApiKeyAuth"
+ ]
+ },
+ "datasets-airbnb-markets-search" => {
+ "id" => "datasets-airbnb-markets-search",
+ "method" => "GET",
+ "path" => "/datasets/airbnb-markets/search",
+ "pathParams" => [],
+ "queryParams" => [
+ {
+ "name" => "group_by",
+ "in" => "query",
+ "type" => "string"
+ },
+ {
+ "name" => "country",
+ "in" => "query",
+ "type" => "string"
+ },
+ {
+ "name" => "market",
+ "in" => "query",
+ "type" => "string"
+ },
+ {
+ "name" => "superhost",
+ "in" => "query",
+ "type" => "boolean"
+ },
+ {
+ "name" => "min_rating",
+ "in" => "query",
+ "type" => "number"
+ },
+ {
+ "name" => "min_review_count",
+ "in" => "query",
+ "type" => "integer"
+ },
+ {
+ "name" => "active_since",
+ "in" => "query",
+ "type" => "string"
+ },
+ {
+ "name" => "min_listings",
+ "in" => "query",
+ "type" => "integer"
+ },
+ {
+ "name" => "sort",
+ "in" => "query",
+ "type" => "string"
+ },
+ {
+ "name" => "page",
+ "in" => "query",
+ "type" => "integer"
+ },
+ {
+ "name" => "page_size",
+ "in" => "query",
+ "type" => "integer"
+ }
+ ],
+ "formParams" => [],
+ "bodyParam" => nil,
+ "bodyRequired" => false,
+ "consumes" => [
+ "application/json"
+ ],
+ "produces" => [
+ "application/json"
+ ],
+ "security" => [
+ "ApiKeyAuth"
+ ],
+ "paginatable" => true
+ },
"datasets-apps-charts-search" => {
"id" => "datasets-apps-charts-search",
"method" => "GET",
@@ -20368,6 +20599,10 @@ module Crawlora
},
"datasets" => {
"list" => "datasets-list",
+ "airbnb_markets_facets" => "datasets-airbnb-markets-facets",
+ "airbnb_markets_item" => "datasets-airbnb-markets-item",
+ "airbnb_markets_nearby" => "datasets-airbnb-markets-nearby",
+ "airbnb_markets_search" => "datasets-airbnb-markets-search",
"apps_charts_search" => "datasets-apps-charts-search",
"apps_reviews_search" => "datasets-apps-reviews-search",
"apps_search" => "datasets-apps-search",
@@ -20873,7 +21108,7 @@ module Crawlora
}
}.freeze
- OPERATION_COUNT = 525
+ OPERATION_COUNT = 529
module OperationId
AIRBNB_ROOM = "airbnb-room"
@@ -20959,6 +21194,10 @@ module OperationId
COIN_GECKO_TOKEN_UNLOCKS = "coingecko-token-unlocks"
COIN_GECKO_TREASURIES = "coingecko-treasuries"
COIN_GECKO_TRENDING = "coingecko-trending"
+ DATASETS_AIRBNB_MARKETS_FACETS = "datasets-airbnb-markets-facets"
+ DATASETS_AIRBNB_MARKETS_ITEM = "datasets-airbnb-markets-item"
+ DATASETS_AIRBNB_MARKETS_NEARBY = "datasets-airbnb-markets-nearby"
+ DATASETS_AIRBNB_MARKETS_SEARCH = "datasets-airbnb-markets-search"
DATASETS_APPS_CHARTS_SEARCH = "datasets-apps-charts-search"
DATASETS_APPS_REVIEWS_SEARCH = "datasets-apps-reviews-search"
DATASETS_APPS_SEARCH = "datasets-apps-search"
diff --git a/lib/crawlora/version.rb b/lib/crawlora/version.rb
index cf32911..262fab6 100644
--- a/lib/crawlora/version.rb
+++ b/lib/crawlora/version.rb
@@ -5,5 +5,5 @@ module Crawlora
# as the Go/Java/PHP SDKs). RubyGems treats it as a prerelease and normalizes
# the published gem version (the `-` becomes `.pre.`, e.g. `1.5.0.pre.sdk.N`).
# Bumped across all SDK repos by the API repo's tools/sdkgen/bump_version.py.
- VERSION = "1.9.0-sdk.1"
+ VERSION = "1.10.0-sdk.1"
end
diff --git a/openapi/public.json b/openapi/public.json
index 4ef2ec5..acda16d 100644
--- a/openapi/public.json
+++ b/openapi/public.json
@@ -8479,6 +8479,84 @@
},
"type": "object"
},
+ "datasets.AirbnbMarketFacetResponse": {
+ "properties": {
+ "dataset": {
+ "type": "string"
+ },
+ "facet": {
+ "type": "string"
+ },
+ "items": {
+ "items": {
+ "$ref": "#/definitions/es.AirbnbMarketFacetItem"
+ },
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
+ "datasets.AirbnbMarketNearbyResponse": {
+ "properties": {
+ "cells": {
+ "items": {
+ "$ref": "#/definitions/es.AirbnbDensityCell"
+ },
+ "type": "array"
+ },
+ "dataset": {
+ "type": "string"
+ },
+ "lat": {
+ "type": "number"
+ },
+ "lon": {
+ "type": "number"
+ },
+ "precision": {
+ "type": "integer"
+ },
+ "radius_m": {
+ "type": "integer"
+ },
+ "total": {
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ "datasets.AirbnbMarketSearchResponse": {
+ "properties": {
+ "dataset": {
+ "type": "string"
+ },
+ "group_by": {
+ "type": "string"
+ },
+ "items": {
+ "items": {
+ "$ref": "#/definitions/es.AirbnbMarketCell"
+ },
+ "type": "array"
+ },
+ "min_listings": {
+ "type": "integer"
+ },
+ "page": {
+ "type": "integer"
+ },
+ "page_size": {
+ "type": "integer"
+ },
+ "sort": {
+ "type": "string"
+ },
+ "total": {
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
"datasets.AppsSearchResponse": {
"properties": {
"dataset": {
@@ -8703,6 +8781,70 @@
},
"type": "object"
},
+ "datasets.airbnbMarketResponseDoc": {
+ "properties": {
+ "code": {
+ "example": 200,
+ "type": "integer"
+ },
+ "data": {
+ "$ref": "#/definitions/es.AirbnbMarketDetail"
+ },
+ "msg": {
+ "example": "OK",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "datasets.airbnbMarketsFacetResponseDoc": {
+ "properties": {
+ "code": {
+ "example": 200,
+ "type": "integer"
+ },
+ "data": {
+ "$ref": "#/definitions/datasets.AirbnbMarketFacetResponse"
+ },
+ "msg": {
+ "example": "OK",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "datasets.airbnbMarketsNearbyResponseDoc": {
+ "properties": {
+ "code": {
+ "example": 200,
+ "type": "integer"
+ },
+ "data": {
+ "$ref": "#/definitions/datasets.AirbnbMarketNearbyResponse"
+ },
+ "msg": {
+ "example": "OK",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "datasets.airbnbMarketsSearchResponseDoc": {
+ "properties": {
+ "code": {
+ "example": 200,
+ "type": "integer"
+ },
+ "data": {
+ "$ref": "#/definitions/datasets.AirbnbMarketSearchResponse"
+ },
+ "msg": {
+ "example": "OK",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
"datasets.appsSearchResponseDoc": {
"properties": {
"code": {
@@ -9538,6 +9680,144 @@
},
"type": "object"
},
+ "es.AirbnbDensityCell": {
+ "properties": {
+ "geohash": {
+ "type": "string"
+ },
+ "lat": {
+ "type": "number"
+ },
+ "listings": {
+ "type": "integer"
+ },
+ "lon": {
+ "type": "number"
+ },
+ "superhost_listings": {
+ "type": "integer"
+ },
+ "superhost_pct": {
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "es.AirbnbGeoBounds": {
+ "properties": {
+ "bottom_right": {
+ "$ref": "#/definitions/es.GeoPoint"
+ },
+ "top_left": {
+ "$ref": "#/definitions/es.GeoPoint"
+ }
+ },
+ "type": "object"
+ },
+ "es.AirbnbMarketCell": {
+ "properties": {
+ "avg_rating": {
+ "type": "number"
+ },
+ "avg_review_count": {
+ "type": "number"
+ },
+ "key": {
+ "type": "string"
+ },
+ "last_seen": {
+ "type": "string"
+ },
+ "listings": {
+ "type": "integer"
+ },
+ "rated_listings": {
+ "type": "integer"
+ },
+ "superhost_listings": {
+ "type": "integer"
+ },
+ "superhost_pct": {
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "es.AirbnbMarketDetail": {
+ "properties": {
+ "avg_rating": {
+ "type": "number"
+ },
+ "avg_review_count": {
+ "type": "number"
+ },
+ "bounds": {
+ "$ref": "#/definitions/es.AirbnbGeoBounds"
+ },
+ "country": {
+ "type": "string"
+ },
+ "currencies": {
+ "items": {
+ "$ref": "#/definitions/es.AirbnbPriceStats"
+ },
+ "type": "array"
+ },
+ "last_seen": {
+ "type": "string"
+ },
+ "listings": {
+ "type": "integer"
+ },
+ "metros": {
+ "items": {
+ "$ref": "#/definitions/es.AirbnbMarketCell"
+ },
+ "type": "array"
+ },
+ "rated_listings": {
+ "type": "integer"
+ },
+ "superhost_listings": {
+ "type": "integer"
+ },
+ "superhost_pct": {
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "es.AirbnbMarketFacetItem": {
+ "properties": {
+ "count": {
+ "type": "integer"
+ },
+ "value": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "es.AirbnbPriceStats": {
+ "properties": {
+ "currency": {
+ "type": "string"
+ },
+ "listings": {
+ "type": "integer"
+ },
+ "p25": {
+ "type": "number"
+ },
+ "p50": {
+ "type": "number"
+ },
+ "p75": {
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
"es.AppRecord": {
"properties": {
"android_max_installs": {
@@ -48059,6 +48339,393 @@
]
}
},
+ "/datasets/airbnb-markets/facets": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "description": "Returns suppressed distribution counts over the Airbnb markets dataset, honoring the same filters as search. Facet enum: `country`, `market`, `currency`, `superhost`, `rating_band`, `review_band`. group_by enum: `country`, `market`.",
+ "operationId": "datasets-airbnb-markets-facets",
+ "parameters": [
+ {
+ "description": "Facet enum: country, market, currency, superhost, rating_band, review_band",
+ "in": "query",
+ "name": "facet",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "description": "Aggregate cell dimension enum: country, market. Defaults to country",
+ "in": "query",
+ "name": "group_by",
+ "type": "string"
+ },
+ {
+ "description": "Exact ISO-3166-1 alpha-2 country filter, e.g. FR",
+ "in": "query",
+ "name": "country",
+ "type": "string"
+ },
+ {
+ "description": "Exact metro-market filter, max 128 characters",
+ "in": "query",
+ "name": "market",
+ "type": "string"
+ },
+ {
+ "description": "Count only Superhost listings",
+ "in": "query",
+ "name": "superhost",
+ "type": "boolean"
+ },
+ {
+ "description": "Minimum listing rating, from 0 through 5",
+ "in": "query",
+ "name": "min_rating",
+ "type": "number"
+ },
+ {
+ "description": "Minimum listing review count, 0 or greater",
+ "in": "query",
+ "name": "min_review_count",
+ "type": "integer"
+ },
+ {
+ "description": "Freshness filter, an ISO-8601 date (YYYY-MM-DD)",
+ "in": "query",
+ "name": "active_since",
+ "type": "string"
+ },
+ {
+ "description": "Minimum listings per bucket; raises the small-cell suppression floor",
+ "in": "query",
+ "name": "min_listings",
+ "type": "integer"
+ }
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/datasets.airbnbMarketsFacetResponseDoc"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/app.Response"
+ }
+ },
+ "429": {
+ "description": "Too Many Requests",
+ "schema": {
+ "$ref": "#/definitions/app.Response"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/app.Response"
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "summary": "Facet the Airbnb markets dataset",
+ "tags": [
+ "Datasets"
+ ]
+ }
+ },
+ "/datasets/airbnb-markets/items/{country}": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "description": "Returns one country's full aggregate Airbnb market profile from dataset id enum value `airbnb-markets` — headline supply, Superhost share, ratings, its top metros, bounding box and per-currency nightly-price percentiles. Aggregate-only. Returns 404 for a country below the suppression floor.",
+ "operationId": "datasets-airbnb-markets-item",
+ "parameters": [
+ {
+ "description": "ISO-3166-1 alpha-2 country code, e.g. FR",
+ "in": "path",
+ "name": "country",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/datasets.airbnbMarketResponseDoc"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/app.Response"
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "schema": {
+ "$ref": "#/definitions/app.Response"
+ }
+ },
+ "429": {
+ "description": "Too Many Requests",
+ "schema": {
+ "$ref": "#/definitions/app.Response"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/app.Response"
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "summary": "Get an Airbnb market from the dataset",
+ "tags": [
+ "Datasets"
+ ]
+ }
+ },
+ "/datasets/airbnb-markets/nearby": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "description": "Returns an aggregate geohash-grid density map of Airbnb listings within a radius of a coordinate, from dataset id enum value `airbnb-markets`. Each cell reports a centroid, listing count and Superhost share; thin cells are suppressed. Aggregate-only.",
+ "operationId": "datasets-airbnb-markets-nearby",
+ "parameters": [
+ {
+ "description": "Center latitude, from -90 through 90",
+ "in": "query",
+ "name": "lat",
+ "required": true,
+ "type": "number"
+ },
+ {
+ "description": "Center longitude, from -180 through 180",
+ "in": "query",
+ "name": "lon",
+ "required": true,
+ "type": "number"
+ },
+ {
+ "description": "Search radius in meters, from 1 through 50000",
+ "in": "query",
+ "name": "radius_m",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "description": "Geohash precision, from 1 through 12; defaults to a value derived from the radius",
+ "in": "query",
+ "name": "precision",
+ "type": "integer"
+ },
+ {
+ "description": "Minimum listings per cell; raises the small-cell suppression floor",
+ "in": "query",
+ "name": "min_listings",
+ "type": "integer"
+ },
+ {
+ "description": "Exact ISO-3166-1 alpha-2 country filter, e.g. US",
+ "in": "query",
+ "name": "country",
+ "type": "string"
+ },
+ {
+ "description": "Count only Superhost listings",
+ "in": "query",
+ "name": "superhost",
+ "type": "boolean"
+ },
+ {
+ "description": "Minimum listing rating, from 0 through 5",
+ "in": "query",
+ "name": "min_rating",
+ "type": "number"
+ },
+ {
+ "description": "Freshness filter, an ISO-8601 date (YYYY-MM-DD)",
+ "in": "query",
+ "name": "active_since",
+ "type": "string"
+ }
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/datasets.airbnbMarketsNearbyResponseDoc"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/app.Response"
+ }
+ },
+ "429": {
+ "description": "Too Many Requests",
+ "schema": {
+ "$ref": "#/definitions/app.Response"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/app.Response"
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "summary": "Airbnb market density near a coordinate",
+ "tags": [
+ "Datasets"
+ ]
+ }
+ },
+ "/datasets/airbnb-markets/search": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "description": "Returns aggregate Airbnb short-term-rental market rollups from the dataset id enum value `airbnb-markets`. Aggregate-only: each row is a market cell (a country or a metro), never an individual listing. Thin cells are suppressed. group_by enum: `country`, `market`. Sort enum: `listings_desc`, `superhost_pct_desc`, `rating_desc`, `key_asc`.",
+ "operationId": "datasets-airbnb-markets-search",
+ "parameters": [
+ {
+ "description": "Aggregate cell dimension enum: country, market. Defaults to country",
+ "in": "query",
+ "name": "group_by",
+ "type": "string"
+ },
+ {
+ "description": "Exact ISO-3166-1 alpha-2 country filter, e.g. FR",
+ "in": "query",
+ "name": "country",
+ "type": "string"
+ },
+ {
+ "description": "Exact metro-market filter, e.g. Paris, max 128 characters",
+ "in": "query",
+ "name": "market",
+ "type": "string"
+ },
+ {
+ "description": "Count only Superhost listings",
+ "in": "query",
+ "name": "superhost",
+ "type": "boolean"
+ },
+ {
+ "description": "Minimum listing rating, from 0 through 5",
+ "in": "query",
+ "name": "min_rating",
+ "type": "number"
+ },
+ {
+ "description": "Minimum listing review count, 0 or greater",
+ "in": "query",
+ "name": "min_review_count",
+ "type": "integer"
+ },
+ {
+ "description": "Freshness filter, an ISO-8601 date (YYYY-MM-DD); only listings last seen on or after it are counted",
+ "in": "query",
+ "name": "active_since",
+ "type": "string"
+ },
+ {
+ "description": "Minimum listings per cell; raises the small-cell suppression floor (never lowered below the built-in minimum)",
+ "in": "query",
+ "name": "min_listings",
+ "type": "integer"
+ },
+ {
+ "description": "Sort enum: listings_desc, superhost_pct_desc, rating_desc, key_asc",
+ "in": "query",
+ "name": "sort",
+ "type": "string"
+ },
+ {
+ "description": "Page number, defaults to 1",
+ "in": "query",
+ "name": "page",
+ "type": "integer"
+ },
+ {
+ "description": "Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000",
+ "in": "query",
+ "name": "page_size",
+ "type": "integer"
+ }
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/datasets.airbnbMarketsSearchResponseDoc"
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "schema": {
+ "$ref": "#/definitions/app.Response"
+ }
+ },
+ "429": {
+ "description": "Too Many Requests",
+ "schema": {
+ "$ref": "#/definitions/app.Response"
+ }
+ },
+ "500": {
+ "description": "Internal Server Error",
+ "schema": {
+ "$ref": "#/definitions/app.Response"
+ }
+ }
+ },
+ "security": [
+ {
+ "ApiKeyAuth": []
+ }
+ ],
+ "summary": "Search the Airbnb markets dataset",
+ "tags": [
+ "Datasets"
+ ]
+ }
+ },
"/datasets/apps-charts/search": {
"get": {
"consumes": [
diff --git a/sig/crawlora.rbs b/sig/crawlora.rbs
index 8bc74f4..de91a17 100644
--- a/sig/crawlora.rbs
+++ b/sig/crawlora.rbs
@@ -137,6 +137,10 @@ module Crawlora
class DatasetsGroup
def initialize: (Client, Hash[String, String]) -> void
def list: (?_response_type: ("auto" | "json" | "text" | "stream"), ?_timeout: Float, ?_headers: Hash[String, String], **untyped) -> untyped
+ def airbnb_markets_facets: (?facet: String, ?group_by: String, ?country: String, ?market: String, ?superhost: bool, ?min_rating: Float, ?min_review_count: Integer, ?active_since: String, ?min_listings: Integer, ?_response_type: ("auto" | "json" | "text" | "stream"), ?_timeout: Float, ?_headers: Hash[String, String], **untyped) -> untyped
+ def airbnb_markets_item: (?country: String, ?_response_type: ("auto" | "json" | "text" | "stream"), ?_timeout: Float, ?_headers: Hash[String, String], **untyped) -> untyped
+ def airbnb_markets_nearby: (?lat: Float, ?lon: Float, ?radius_m: Integer, ?precision: Integer, ?min_listings: Integer, ?country: String, ?superhost: bool, ?min_rating: Float, ?active_since: String, ?_response_type: ("auto" | "json" | "text" | "stream"), ?_timeout: Float, ?_headers: Hash[String, String], **untyped) -> untyped
+ def airbnb_markets_search: (?group_by: String, ?country: String, ?market: String, ?superhost: bool, ?min_rating: Float, ?min_review_count: Integer, ?active_since: String, ?min_listings: Integer, ?sort: String, ?page: Integer, ?page_size: Integer, ?_response_type: ("auto" | "json" | "text" | "stream"), ?_timeout: Float, ?_headers: Hash[String, String], **untyped) -> untyped
def apps_charts_search: (?q: String, ?store: String, ?chart_type: String, ?collection: String, ?category: String, ?country: String, ?app_id: String, ?date: String, ?sort: String, ?page: Integer, ?page_size: Integer, ?_response_type: ("auto" | "json" | "text" | "stream"), ?_timeout: Float, ?_headers: Hash[String, String], **untyped) -> untyped
def apps_reviews_search: (?q: String, ?store: String, ?app_id: String, ?country: String, ?min_score: Integer, ?sort: String, ?page: Integer, ?page_size: Integer, ?_response_type: ("auto" | "json" | "text" | "stream"), ?_timeout: Float, ?_headers: Hash[String, String], **untyped) -> untyped
def apps_search: (?q: String, ?store: String, ?category: String, ?country: String, ?developer: String, ?free: bool, ?min_rating: Float, ?min_reviews: Integer, ?sort: String, ?page: Integer, ?page_size: Integer, ?_response_type: ("auto" | "json" | "text" | "stream"), ?_timeout: Float, ?_headers: Hash[String, String], **untyped) -> untyped