Landers
Explora landing pages from the Premium Explorer library — same data as /landers in the dashboard. POST /api/v1/landers/explore accepts an API key and costs 1 crédito per call.
JSON body or form fields; query string params are merged in as fallbacks.
/api/v1/landers/exploreSearch landing pages with filters matching the Landers explorer table.
Clave X-API on every request.Body parameters
páginaentero1-based page.
tamaño de páginaenteroRows per page; max 250.
clave de ordenacióncadenae.g. relevant, landers_ad_volume, monthly_visits, store_revenue.
dirección de ordenacióncadenabuscarcadenaGeneral search term.
landersAdvertisercadenaFilter by advertiser / page name.
landersUrlcadenaFilter by landing URL fragment.
landersNichecadenalandersPageTypecadenaproduct, collection, homepage, …
landersAdVolumecadenalandersRunningTimecadenalandersMonthlyVisitscadenalandersMonthlyRevenuecadenapaíscadena
curl -sS \
-X POST \
-H "X-API-Key: $WH_API_KEY" \
-H "Content-Type: application/json" \
"{origin}/api/v1/landers/explore" \
-d '{"page":1,"pageSize":10,"sortingKey":"relevant","sortingDirection":"desc","search":"string","landersAdvertiser":"string","landersUrl":"string","landersNiche":"string","landersPageType":"string","landersAdVolume":"string","landersRunningTime":"string","landersMonthlyVisits":"string","landersMonthlyRevenue":"string","country":"All"}'const res = await fetch(`${ORIGIN}/api/v1/landers/explore`, {
method: 'POST',
headers: {
'X-API-Key': process.env.WH_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"page": 1,
"pageSize": 10,
"sortingKey": "relevant",
"sortingDirection": "desc",
"search": "string",
"landersAdvertiser": "string",
"landersUrl": "string",
"landersNiche": "string",
"landersPageType": "string",
"landersAdVolume": "string",
"landersRunningTime": "string",
"landersMonthlyVisits": "string",
"landersMonthlyRevenue": "string",
"country": "All"
}),
});
const data = await res.json();import os, requests
res = requests.post(
f"{ORIGIN}/api/v1/landers/explore",
headers={"X-API-Key": os.environ["WH_API_KEY"]},
json={
"page": 1,
"pageSize": 10,
"sortingKey": "relevant",
"sortingDirection": "desc",
"search": "string",
"landersAdvertiser": "string",
"landersUrl": "string",
"landersNiche": "string",
"landersPageType": "string",
"landersAdVolume": "string",
"landersRunningTime": "string",
"landersMonthlyVisits": "string",
"landersMonthlyRevenue": "string",
"country": "All"
},
)
data = res.json(){
"data": [
{
"lander_key": "im8health.com/pages/drjames",
"url": "https://im8health.com/pages/drjames",
"url_host": "im8health.com",
"url_path": "/pages/drjames",
"page_type": "nofunnels",
"primary_niche": "Health",
"primary_niche_code": "HT",
"advertiser_names": [
"Dr. James DiNicolantonio"
],
"advertiser_count": 1,
"advertisers": [
{
"page_id": "300483420412645",
"name": "Dr. James DiNicolantonio",
"ads_to_lander": 52,
"total_active_ads_on_page": 51,
"total_active_ads_on_page_growth_1w": 59,
"page_like_count": 179230,
"ig_followers": 3744626
}
],
"active_ad_count": 52,
"active_ad_count_30d": 52,
"running_days": 10,
"niche_codes": [
"HT",
"SP"
],
"niches": [
"Health",
"Supplements"
],
"countries": [
"US"
],
"first_seen_at": "2026-08-15T15:57:56+00:00",
"last_seen_at": "2026-08-25T00:00:00+00:00"
}
],
"total": 1240,
"facets": [],
"credits": null,
"credits_unlimited": true,
"cpm": 11
}{
"success": false,
"error": "Unauthorized"
}{
"success": false,
"error": "No API credits remaining. Buy an add-on pack or wait until next monthly reset."
}créditos es el Premium Explorer (Landers) pool — no programmatic API credits. On Standard it is null con credits_unlimited: true (legacy DB sentinel -1 is normalized away). Basic plans see a non-negative integer. Every /api/v1/landers/* call still costs 1 programmatic credit. The 200 body has no top-level éxito.
facets is always [] on this route today (unused). Rows include advertiser rollups, niche codes, country mixes, and many more ES fields. explore_wlads_ads is omitted unless Meta ad previews were requested/hydrated.
EU reach/spend filters and tracked-brand rules use the same POST field names as the dashboard (landersReachMin, landersSpendMax, landersTrackedBrandsRules, age/gender share fields, etc.).
Favorites
List and toggle starred landers. Each call costs 1 API credit.
/api/v1/landers/favoritesList the authenticated user's saved lander favorites.
Clave X-API on every request.curl -sS \
-H "X-API-Key: $WH_API_KEY" \
"{origin}/api/v1/landers/favorites"const res = await fetch(`${ORIGIN}/api/v1/landers/favorites`, {
method: 'GET',
headers: {
'X-API-Key': process.env.WH_API_KEY,
},
});
const data = await res.json();import os, requests
res = requests.get(
f"{ORIGIN}/api/v1/landers/favorites",
headers={"X-API-Key": os.environ["WH_API_KEY"]},
)
data = res.json(){
"success": true,
"data": [
{
"id": 42,
"userid": "user_abc",
"lander_key": "glowbeautyco.com/products/vitamin-c-serum",
"lander_url": "https://glowbeautyco.com/products/vitamin-c-serum",
"advertiser_name": "Glow Beauty Co.",
"entity_data": null,
"created_at": "2026-03-14 12:00:00",
"updated_at": "2026-03-14 12:00:00"
}
]
}/api/v1/landers/favorites/toggleAdd or remove a lander favorite.
Clave X-API on every request.Body parameters
lander_keycadenarequiredlander_urlcadenaadvertiser_namecadenaentity_dataobject
curl -sS \
-X POST \
-H "X-API-Key: $WH_API_KEY" \
-H "Content-Type: application/json" \
"{origin}/api/v1/landers/favorites/toggle" \
-d '{"lander_key":"string","lander_url":"string","advertiser_name":"string","entity_data":"string"}'const res = await fetch(`${ORIGIN}/api/v1/landers/favorites/toggle`, {
method: 'POST',
headers: {
'X-API-Key': process.env.WH_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"lander_key": "string",
"lander_url": "string",
"advertiser_name": "string",
"entity_data": "string"
}),
});
const data = await res.json();import os, requests
res = requests.post(
f"{ORIGIN}/api/v1/landers/favorites/toggle",
headers={"X-API-Key": os.environ["WH_API_KEY"]},
json={
"lander_key": "string",
"lander_url": "string",
"advertiser_name": "string",
"entity_data": "string"
},
)
data = res.json(){
"success": true,
"action": "added",
"is_favorite": true
}{
"success": false,
"error": "missing_required_fields"
}Related routes (session-only)
| Method | Ruta | Notas |
|---|---|---|
| PUBLICAR | /api/shops/explore |
Shop browse (distinct from metered POST /api/v1/store-explorer) |
| OBTENER | /api/landers/filter-bootstrap |
Facet options for dashboard UI |
| OBTENER | /api/lander/overview |
Single lander overview fragment |