Belgeler
Ctrl+K Arama Alt+[Alt+] Kılavuzlar
API anahtarını al

API

Store explorer

Search Shopify stores by revenue, traffic, category, and more. MCP: search_shopify_stores, find_similar_stores_by_image, list_shopify_store_filter_options.

YAYIN/api/v1/mağaza-keşif

Search Shopify stores. Body matches the Explore Shops UI (form or JSON keys).

Send X-API-Anahtarı on every request.

Body parameters

  • aramadize
  • ülkedize

    Merchant country ISO2. Omit, empty, or Tümü = no country filter.

  • sortingKeydize
    Default: 30 günlük gelir
  • sortingDirectiondize
    Default: açıklamaValues: açıklama asc
  • sayfatamsayı
    Default: 1
  • pageSizetamsayı
    Default: 20
  • includeWladstamsayı

    Set 0 to skip Meta ad enrichment.

Talep
curl -sS \
  -X POST \
  -H "X-API-Key: $WH_API_KEY" \
  -H "Content-Type: application/json" \
  "{origin}/api/v1/store-explorer" \
  -d '{"search":"skincare","country":"US","sortingKey":"revenue_30d","sortingDirection":"desc","page":1,"pageSize":20,"includeWlads":0}'
const res = await fetch(`${ORIGIN}/api/v1/store-explorer`, {
  method: 'POST',
  headers: {
    'X-API-Key': process.env.WH_API_KEY,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
      "search": "skincare",
      "country": "US",
      "sortingKey": "revenue_30d",
      "sortingDirection": "desc",
      "page": 1,
      "pageSize": 20,
      "includeWlads": 0
  }),
});
const data = await res.json();
import os, requests

res = requests.post(
    f"{ORIGIN}/api/v1/store-explorer",
    headers={"X-API-Key": os.environ["WH_API_KEY"]},
    json={
        "search": "skincare",
        "country": "US",
        "sortingKey": "revenue_30d",
        "sortingDirection": "desc",
        "page": 1,
        "pageSize": 20,
        "includeWlads": 0
    },
)
data = res.json()
Yanıt
{
    "data": [
        {
            "shopid": "glow-beauty",
            "storeid": "b7963cd2df6f01b2656a02c06f5d9d58",
            "domain": "glowbeauty.com",
            "name": "Glow Beauty",
            "monthly_visits": 412000,
            "monthly_visits_historical": {
                "2026-02": 380000,
                "2026-03": 395000,
                "2026-04": 410000,
                "2026-05": 440000,
                "2026-06": 425000,
                "2026-07": 412000
            },
            "30d_rev_estimated_min": 126000,
            "30d_rev_estimated_max": 204000,
            "estimated_revenue": {
                "daily": {
                    "min": 4200,
                    "max": 6800
                },
                "monthly": {
                    "min": 126000,
                    "max": 204000
                }
            }
        }
    ],
    "count_deferred": true,
    "credits": null,
    "credits_unlimited": true
}
{
    "success": false,
    "error": "Unauthorized"
}
{
    "success": false,
    "error": "No API credits remaining. Buy an add-on pack or wait until next monthly reset.",
    "credits": {
        "used": 20000,
        "limit": 20000,
        "remaining": 0,
        "addon_remaining": 0,
        "total_remaining": 0
    },
    "purchase": {
        "url": "https://…/checkout-api-credits?credits=…"
    }
}

Kullanım pageSize in the JSON body (not sınırsınır is not remapped here). Revenue fields on store rows are 30d_rev_estimated_min / 30d_rev_estimated_max (and nested estimated_revenue), not estimated_revenue.monthly_min. When traffic enrichment is present, prefer monthly_visits_historical (month-by-month) over a single monthly_visits snapshot. krediler in the 200 body is the dashboard Explore Shops credit counter, not the programmatic API pool. Unlimited (Standard) returns credits: null ve credits_unlimited: true — never bare -1. Programmatic metering still charges 1 API credit per call via the proxy.

Query aliases on the API route (query string): sınırpageSize, sıralama / sort_bysortingKey, sipariş / sort_ordersortingDirection, anahtar kelime / qarama. In a JSON body, send pageSize / sortingKey / sortingDirection / arama directly — body sınır is not remapped.

YAYIN/api/v1/store-explorer/visual-search

Find visually similar Shopify stores from a product image.

Send X-API-Anahtarı on every request.

Body parameters

  • image_urldize

    Public image URL, or multipart görüntü upload.

  • ülkedize
Talep
curl -sS \
  -X POST \
  -H "X-API-Key: $WH_API_KEY" \
  -H "Content-Type: application/json" \
  "{origin}/api/v1/store-explorer/visual-search" \
  -d '{"image_url":"string","country":"US"}'
const res = await fetch(`${ORIGIN}/api/v1/store-explorer/visual-search`, {
  method: 'POST',
  headers: {
    'X-API-Key': process.env.WH_API_KEY,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
      "image_url": "string",
      "country": "US"
  }),
});
const data = await res.json();
import os, requests

res = requests.post(
    f"{ORIGIN}/api/v1/store-explorer/visual-search",
    headers={"X-API-Key": os.environ["WH_API_KEY"]},
    json={
        "image_url": "string",
        "country": "US"
    },
)
data = res.json()
Yanıt
{
    "data": [
        {
            "storeid": "glow-beauty",
            "domain": "glowbeauty.com",
            "store_name": "Glow Beauty",
            "image_src": "https://cdn.shopify.com/…/product.jpg",
            "similarity_score": 0.94,
            "price": 34,
            "estimated_price": 34,
            "product_url": "https://glowbeauty.com/products/vitamin-c-serum",
            "handle": "vitamin-c-serum",
            "product_id": "8123456789012",
            "rank": 1
        }
    ],
    "total": 1,
    "credits": 11,
    "visual_search_token": "vs_abc123opaque"
}
{
    "error": "Missing image upload, image_url, or visual_search_token"
}
{
    "success": false,
    "error": "Unauthorized"
}
{
    "success": false,
    "error": "Rate limit exceeded. Max 60 requests per minute."
}

Optional Explore Shops filters (kategori, monthlyRevenue, shopifyThemes, storeCreatedFrom / storeCreatedTo, visitor-country rules, …) apply on either route.

Related