跳转到主要内容

接口概述

该接口用于 VIP 用户进行 Etsy 店铺数据查询,支持按销量、收藏、评论、国家、分类等多条件筛选,并支持排序与分页。 每条返回店铺将消耗对应的 API 积分。
  • 接口类型:REST API
  • 请求方式:POST
  • 数据格式:JSON
  • 鉴权方式:API Key
  • 适用用户:VIP / 订阅用户

接口地址

POST /api/v1/stores

鉴权说明

请求 Header 中必须携带有效的 API Key:
X-VIP-TOKEN: your_api_key_here
若 API Key 无效、未订阅或积分不足,将返回对应错误。

请求参数

请求体(JSON)

{
  "search_key": "jewelry",
  "status": 1,
  "country": "US",
  "category": "String",
  "sales_weekly": "10~100",
  "sales": "100~5000",
  "favorites": "50~2000",
  "favorites_weekly": "5~200",
  "reviews": "20~1000",
  "reviews_weekly": "2~100",
  "start_at": "2020-01-01~2023-01-01",
  "is_star": 0,
  "is_raving": 0,
  "sort_by": 8,
  "desc": 1,
  "page_num": 1,
  "page_size": 20
}

参数说明

参数名类型必填说明
search_keystring搜索关键词或店铺名称、店铺URL
statusint店铺状态:1=活跃,0=非活跃
countrystring店铺所在国家
categorystring店铺主营分类
sales_weeklystring店铺周销量范围,例如:1~100
salesstring店铺总销量范围
favoritesstring店铺收藏数范围,例如:1~100
favorites_weeklystring店铺周新增收藏数
reviewsstring店铺评论数范围,例如:1~100
reviews_weeklystring店铺周新增评论数
start_atstring店铺开店时间区间(YYYY-MM-DD)
is_starint是否星标店铺:1=是
is_ravingint是否 Raving 店铺:1=是
sort_byint排序字段:8=总销量,9=周销量,10=评论数,11=收藏数
descint排序方向:1=降序,0=升序
page_numint页码,从 1 开始
page_sizeint每页数量,最大 100

请求示例

curl -X POST https://api.example.com/api/v1/stores \
  -H "Content-Type: application/json" \
  -H "X-VIP-TOKEN: your_api_key_here" \
  -d '{
    "search_key": "jewelry",
    "country": "US",
    "page_num": 1,
    "page_size": 20
  }'
import requests
import json

url = "https://api.example.com/api/v1/stores"

headers = {
    "Content-Type": "application/json",
    "X-VIP-TOKEN": "your_api_key_here"
}

payload = {
    "search_key": "jewelry",
    "country": "US",
    "page_num": 1,
    "page_size": 20
}

response = requests.post(url, headers=headers, json=payload)
data = response.json()

print(json.dumps(data, indent=2))
const axios = require('axios');

const url = 'https://api.example.com/api/v1/stores';

const headers = {
  'Content-Type': 'application/json',
  'X-VIP-TOKEN': 'your_api_key_here'
};

const payload = {
  search_key: 'jewelry',
  country: 'US',
  page_num: 1,
  page_size: 20
};

axios.post(url, payload, { headers })
  .then(response => {
    console.log(JSON.stringify(response.data, null, 2));
  })
  .catch(error => {
    console.error('Error:', error.response?.data || error.message);
  });
<?php
$url = "https://api.example.com/api/v1/stores";

$headers = [
    "Content-Type: application/json",
    "X-VIP-TOKEN: your_api_key_here"
];

$payload = [
    "search_key" => "jewelry",
    "country" => "US",
    "page_num" => 1,
    "page_size" => 20
];

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
$data = json_decode($response, true);

curl_close($ch);

echo json_encode($data, JSON_PRETTY_PRINT);
?>
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io/ioutil"
    "net/http"
)

func main() {
    url := "https://api.example.com/api/v1/stores"
    
    payload := map[string]interface{}{
        "search_key": "jewelry",
        "country":    "US",
        "page_num":   1,
        "page_size":  20,
    }
    
    jsonData, _ := json.Marshal(payload)
    
    req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("X-VIP-TOKEN", "your_api_key_here")
    
    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
    
    body, _ := ioutil.ReadAll(resp.Body)
    fmt.Println(string(body))
}
require 'net/http'
require 'json'
require 'uri'

url = URI.parse("https://api.example.com/api/v1/stores")

headers = {
  'Content-Type' => 'application/json',
  'X-VIP-TOKEN' => 'your_api_key_here'
}

payload = {
  search_key: 'jewelry',
  country: 'US',
  page_num: 1,
  page_size: 20
}

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url.path, headers)
request.body = payload.to_json

response = http.request(request)
data = JSON.parse(response.body)

puts JSON.pretty_generate(data)
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import org.json.JSONObject;

public class StoresQuery {
    public static void main(String[] args) throws Exception {
        String url = "https://api.example.com/api/v1/stores";
        
        URL obj = new URL(url);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();
        con.setRequestMethod("POST");
        con.setRequestProperty("Content-Type", "application/json");
        con.setRequestProperty("X-VIP-TOKEN", "your_api_key_here");
        con.setDoOutput(true);
        
        JSONObject payload = new JSONObject();
        payload.put("search_key", "jewelry");
        payload.put("country", "US");
        payload.put("page_num", 1);
        payload.put("page_size", 20);
        
        OutputStream os = con.getOutputStream();
        os.write(payload.toString().getBytes());
        os.flush();
        os.close();
        
        BufferedReader in = new BufferedReader(
            new InputStreamReader(con.getInputStream())
        );
        String inputLine;
        StringBuilder response = new StringBuilder();
        
        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();
        
        System.out.println(response.toString());
    }
}

返回结果

返回示例

Response
{
  "code": 0,
  "message": "success",
  "data": {
    "store_num": 1520,
    "page_size": 20,
    "final_count": 20,
    "list": [
      {
        "store_id": "123456",
        "store_name": "BestJewelryShop",
        "logo_url": "https://image.xxx/logo.png",
        "store_url": "https://www.etsy.com/shop/BestJewelryShop",
        "status": 1,
        "products": 320,
        "start_at": "2019-06-01",
        "sales_weekly": 120,
        "sales_total": 5600,
        "reviews": 980,
        "reviews_weekly": 12,
        "favorites": 3400,
        "favorites_weekly": 45,
        "is_star": 1,
        "is_raving": 0,
        "category": ["Jewelry"],
        "rating": 4.8,
        "country": ["US"],
        "social_info": [],
        "shop_badges": [],
        "shop_website": "https://www.etsy.com/shop/BestJewelryShop"
      }
    ]
  },
  "used_today": 80,
  "remaining_today": 920
}

返回字段说明

字段名类型说明
store_numint符合条件的店铺总数
page_sizeint每页返回数量
final_countint当前页返回条数
listarray店铺数据列表
used_todayint今日已使用积分
remaining_todayint今日剩余积分

积分消耗规则

- 每返回 1 条店铺数据,消耗 1 个积分
- 实际消耗积分 = final_count
- 当日积分不足将直接返回 429 错误

错误码说明

400  参数错误
401  API Key 无效或缺失
403  无订阅权限
429  今日调用额度已用尽
500  服务器内部错误

使用场景

  • Etsy 店铺筛选与调研
  • 高销量 / 高评分店铺挖掘
  • 竞品店铺监控
  • 市场规模与趋势分析

店铺查询场景

1. 查询星标优质店铺

{
  "search_key": "",
  "status": 1,
  "is_star": 1,
  "sales": "10000~",
  "sort_by": 8,
  "desc": 1,
  "page_size": 20
}
curl -X POST https://api.example.com/api/v1/stores \
  -H "Content-Type: application/json" \
  -H "X-VIP-TOKEN: your_api_key_here" \
  -d '{
    "search_key": "",
    "status": 1,
    "is_star": 1,
    "sales": "10000~",
    "sort_by": 8,
    "desc": 1,
    "page_size": 20
  }'
import requests

url = "https://api.example.com/api/v1/stores"
headers = {
    "Content-Type": "application/json",
    "X-VIP-TOKEN": "your_api_key_here"
}

payload = {
    "search_key": "",
    "status": 1,
    "is_star": 1,
    "sales": "10000~",
    "sort_by": 8,
    "desc": 1,
    "page_size": 20
}

response = requests.post(url, headers=headers, json=payload)
print(response.json())
const axios = require('axios');

const response = await axios.post(
  'https://api.example.com/api/v1/stores',
  {
    search_key: '',
    status: 1,
    is_star: 1,
    sales: '10000~',
    sort_by: 8,
    desc: 1,
    page_size: 20
  },
  {
    headers: {
      'Content-Type': 'application/json',
      'X-VIP-TOKEN': 'your_api_key_here'
    }
  }
);

console.log(response.data);

2. 查询特定国家的新兴店铺

{
  "search_key": "",
  "status": 1,
  "country": "US",
  "sales_weekly": "100~",
  "sort_by": 9,
  "desc": 1,
  "page_size": 20
}
curl -X POST https://api.example.com/api/v1/stores \
  -H "Content-Type: application/json" \
  -H "X-API-Key: your_api_key_here" \
  -d '{
    "search_key": "",
    "status": 1,
    "country": "US",
    "sales_weekly": "100~",
    "sort_by": 9,
    "desc": 1,
    "page_size": 20
  }'
import requests

payload = {
    "search_key": "",
    "status": 1,
    "country": "US",
    "sales_weekly": "100~",
    "sort_by": 9,
    "desc": 1,
    "page_size": 20
}

response = requests.post(
    "https://api.example.com/api/v1/stores",
    headers={
        "Content-Type": "application/json",
        "X-API-Key": "your_api_key_here"
    },
    json=payload
)

print(response.json())
const response = await axios.post(
  'https://api.example.com/api/v1/stores',
  {
    search_key: '',
    status: 1,
    country: 'US',
    sales_weekly: '100~',
    sort_by: 9,
    desc: 1,
    page_size: 20
  },
  {
    headers: {
      'Content-Type': 'application/json',
      'X-API-Key': 'your_api_key_here'
    }
  }
);

3. 查询Raving店铺(高好评率)

{
  "search_key": "",
  "status": 1,
  "is_raving": 1,
  "reviews": "1000~",
  "sort_by": 10,
  "desc": 1,
  "page_size": 20
}
curl -X POST https://api.example.com/api/v1/stores \
  -H "Content-Type: application/json" \
  -H "X-VIP-TOKEN: your_api_key_here" \
  -d '{
    "search_key": "",
    "status": 1,
    "is_raving": 1,
    "reviews": "1000~",
    "sort_by": 10,
    "desc": 1,
    "page_size": 20
  }'
import requests

payload = {
    "search_key": "",
    "status": 1,
    "is_raving": 1,
    "reviews": "1000~",
    "sort_by": 10,
    "desc": 1,
    "page_size": 20
}

response = requests.post(
    "https://api.example.com/api/v1/stores",
    headers={
        "Content-Type": "application/json",
        "X-VIP-TOKEN": "your_api_key_here"
    },
    json=payload
)

print(response.json())
const response = await axios.post(
  'https://api.example.com/api/v1/stores',
  {
    search_key: '',
    status: 1,
    is_raving: 1,
    reviews: '1000~',
    sort_by: 10,
    desc: 1,
    page_size: 20
  },
  {
    headers: {
      'Content-Type': 'application/json',
      'X-VIP-TOKEN': 'your_api_key_here'
    }
  }
);

注意事项

  • 建议合理控制 page_size,避免不必要的积分消耗
  • 多条件筛选可能增加查询耗时
  • 返回数据来源于 Etsy 公开信息,仅供分析使用

更新时间:2026-05-15
维护方:EHunt API Team