# JD Monthly Product Sales

Monthly product-level sales analytics.

ID: dataset:jd · Region: global · Status: available

catalog_version: 938eb1e3bdb6476050bf2983e6e8db1edcf9f0942d16c7ebd2029dcd28295afe
updated_at: 2026-10-21T10:40:52.196893+00:00

JD

Dataset releases define historical periods; live reads describe request-time data and do not guarantee completeness.

Docs: https://docs.kleardata.ai/capabilities/dataset%3Ajd

## GET /v1/datasets/jd

legacy · available · api_key, oauth

REST requires a customer API Key; MCP requires an enabled authenticated server; CLI requires its published artifact and command.

Only monthly-grain data is available.
search_products finds product identity candidates by name or title; product filters in query_metrics and query_details still require an exact product_id or a standard item.jd.com product URL.
Shops accept an exact shop_id, a standard mall.jd.com URL, or an exact shop name resolved with search_values.
Reviews, traffic, inventory, causal explanations, and other platforms are not provided.
YoY, MoM, share, contribution, and cross-period set differences must be computed by the Agent from atomic query results.

Existing pricing applies; metadata reads do not charge Credits.

Where the request declares idempotency_key, reuse it for the same operation; metadata GET is read-only.

A pending response supplies a result/status reference. Read it first; do not automatically resubmit paid execution after a timeout or ambiguous result. Correct 401/403/422 errors before retrying.

### Input schema / 输入契约

```json
{
  "properties": {
    "dataset": {
      "const": "jd"
    },
    "task": {
      "pattern": "^[a-z][a-z0-9_]*$",
      "type": "string"
    },
    "task_query": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional task attribution: when provided, write one concise, self-contained task_query in the user's language and reuse that exact value in every call for the task, including discovery, search, approval retry, results, export, and status checks. For MCP calls, when omitted, Asklear records a generic non-user-specific attribution so compatible clients can still call the tool. REST calls may omit it and remain unattributed. It is a task description, not a task identifier. Do not include hidden reasoning, credentials, or direct personal identifiers such as phone numbers, email addresses, identity numbers, or street addresses.",
      "maxLength": 300
    }
  },
  "type": "object"
}
```

### Synthetic request / 合成请求

```json
{
  "dataset": "jd"
}
```

### Synthetic response / 合成响应

```json
{
  "dimensions": [
    {
      "desc": "京东商品的稳定标识，用于精确筛选，并与 product_url 对应。",
      "desc_i18n": {
        "en": "Stable JD product identifier used for exact filtering and paired with product_url.",
        "zh-CN": "京东商品的稳定标识，用于精确筛选，并与 product_url 对应。"
      },
      "dictionary_searchable": false,
      "entity_type": "product",
      "name": "product_id",
      "reference_formats": [
        "jd_product_id",
        "jd_product_url"
      ],
      "type": "string"
    },
    {
      "desc": "该自然月记录的商品标题；可用于结果展示和分组，但不能直接作为 query_metrics 或 query_details 的筛选条件。按名称或标题查找商品请使用 search_products。",
      "desc_i18n": {
        "en": "Product title recorded for the month; it is returned for display and grouping, but it is not a direct query_metrics or query_details filter. Use search_products for title lookup.",
        "zh-CN": "该自然月记录的商品标题；可用于结果展示和分组，但不能直接作为 query_metrics 或 query_details 的筛选条件。按名称或标题查找商品请使用 search_products。"
      },
      "dictionary_searchable": false,
      "entity_type": "product",
      "name": "title",
      "reference_formats": [],
      "type": "string"
    },
    {
      "desc": "根据 product_id 生成的标准京东商品详情页链接。",
      "desc_i18n": {
        "en": "Canonical JD product-detail URL generated from product_id.",
        "zh-CN": "根据 product_id 生成的标准京东商品详情页链接。"
      },
      "dictionary_searchable": false,
      "entity_type": "product",
      "name": "product_url",
      "reference_formats": [],
      "type": "string"
    },
    {
      "desc": "京东店铺的稳定标识，用于精确筛选，并与 shop_url 对应。",
      "desc_i18n": {
        "en": "Stable JD shop identifier used for exact filtering and paired with shop_url.",
        "zh-CN": "京东店铺的稳定标识，用于精确筛选，并与 shop_url 对应。"
      },
      "dictionary_searchable": false,
      "entity_type": "shop",
      "name": "shop_id",
      "reference_formats": [
        "jd_shop_id",
        "jd_shop_url"
      ],
      "type": "string"
    },
    {
      "desc": "京东上游记录提供的标准店铺页面链接，与 shop_id 对应；可能为空。",
      "desc_i18n": {
        "en": "Canonical JD shop-page URL supplied by the upstream record and paired with shop_id; it may be empty.",
        "zh-CN": "京东上游记录提供的标准店铺页面链接，与 shop_id 对应；可能为空。"
      },
      "dictionary_searchable": false,
      "entity_type": "shop",
      "name": "shop_url",
      "reference_formats": [],
      "type": "string"
    },
    {
      "desc": "京东上游记录的品牌名称，与 brand_id 对应；可能为空，也可能存在名称写法差异。",
      "desc_i18n": {
        "en": "Brand name recorded by the upstream JD data, paired with brand_id; it may be missing or vary in spelling.",
        "zh-CN": "京东上游记录的品牌名称，与 brand_id 对应；可能为空，也可能存在名称写法差异。"
      },
      "dictionary_searchable": true,
      "name": "brand",
      "reference_formats": [],
      "type": "string"
    },
    {
      "desc": "京东上游品类体系中的一级品类名称，与 category_l1_id 对应。",
      "desc_i18n": {
        "en": "Level-1 category name in the upstream JD hierarchy, paired with category_l1_id.",
        "zh-CN": "京东上游品类体系中的一级品类名称，与 category_l1_id 对应。"
      },
      "dictionary_searchable": true,
      "name": "category_l1",
      "reference_formats": [],
      "type": "string"
    },
    {
      "desc": "京东上游品类体系中的二级品类名称，与 category_l2_id 对应。",
      "desc_i18n": {
        "en": "Level-2 category name in the upstream JD hierarchy, paired with category_l2_id.",
        "zh-CN": "京东上游品类体系中的二级品类名称，与 category_l2_id 对应。"
      },
      "dictionary_searchable": true,
      "name": "category_l2",
      "reference_formats": [],
      "type": "string"
    },
    {
      "desc": "京东上游品类体系中的三级品类名称，与 category_l3_id 对应。",
      "desc_i18n": {
        "en": "Level-3 category name in the upstream JD hierarchy, paired with category_l3_id.",
        "zh-CN": "京东上游品类体系中的三级品类名称，与 category_l3_id 对应。"
      },
      "dictionary_searchable": true,
      "name": "category_l3",
      "reference_formats": [],
      "type": "string"
    },
    {
      "desc": "京东记录的店铺名称，与 shop_id 对应；名称可能随时间变化。",
      "desc_i18n": {
        "en": "Shop name recorded by JD, paired with shop_id; it may change over time.",
        "zh-CN": "京东记录的店铺名称，与 shop_id 对应；名称可能随时间变化。"
      },
      "dictionary_searchable": true,
      "name": "shop",
      "reference_formats": [],
      "type": "string"
    },
    {
      "desc": "商品销售记录所属自然月，格式为 YYYY-MM；该数据集为月粒度。",
      "desc_i18n": {
        "en": "Calendar month to which the product sales record belongs, formatted as YYYY-MM; the dataset grain is monthly.",
        "zh-CN": "商品销售记录所属自然月，格式为 YYYY-MM；该数据集为月粒度。"
      },
      "dictionary_searchable": false,
      "name": "month",
      "reference_formats": [],
      "type": "time"
    }
  ],
  "metrics": [
    {
      "certified": true,
      "desc": "券后销售额，单位为人民币元；聚合查询返回所选范围合计，明细查询返回单条商品月记录的金额。",
      "desc_i18n": {
        "en": "Post-coupon sales amount in CNY; aggregate queries sum the selected scope, while detail queries return the value for one product-month record.",
        "zh-CN": "券后销售额，单位为人民币元；聚合查询返回所选范围合计，明细查询返回单条商品月记录的金额。"
      },
      "name": "gmv"
    },
    {
      "certified": false,
      "desc": "商品销量；聚合查询返回所选范围合计，明细查询返回单条商品月记录的销量。",
      "desc_i18n": {
        "en": "Units sold; aggregate queries sum the selected scope, while detail queries return the value for one product-month record.",
        "zh-CN": "商品销量；聚合查询返回所选范围合计，明细查询返回单条商品月记录的销量。"
      },
      "name": "units"
    },
    {
      "certified": false,
      "desc": "加权平均成交价，单位为人民币元，按 SUM(gmv) / SUM(units) 计算；总销量为 0 时返回空，仅支持聚合查询。",
      "desc_i18n": {
        "en": "Weighted average selling price in CNY, calculated as SUM(gmv) / SUM(units); null when total units is zero, and available only in aggregate queries.",
        "zh-CN": "加权平均成交价，单位为人民币元，按 SUM(gmv) / SUM(units) 计算；总销量为 0 时返回空，仅支持聚合查询。"
      },
      "name": "asp"
    }
  ]
}
```

- dimensions (array<object>): No field description available
- metrics (array<object>): No field description available
## describe

legacy · available · api_key, oauth

REST requires a customer API Key; MCP requires an enabled authenticated server; CLI requires its published artifact and command.

Only monthly-grain data is available.
search_products finds product identity candidates by name or title; product filters in query_metrics and query_details still require an exact product_id or a standard item.jd.com product URL.
Shops accept an exact shop_id, a standard mall.jd.com URL, or an exact shop name resolved with search_values.
Reviews, traffic, inventory, causal explanations, and other platforms are not provided.
YoY, MoM, share, contribution, and cross-period set differences must be computed by the Agent from atomic query results.

Existing pricing applies; metadata reads do not charge Credits.

Where the request declares idempotency_key, reuse it for the same operation; metadata GET is read-only.

A pending response supplies a result/status reference. Read it first; do not automatically resubmit paid execution after a timeout or ambiguous result. Correct 401/403/422 errors before retrying.

### Input schema / 输入契约

```json
{
  "properties": {
    "dataset": {
      "const": "jd"
    },
    "task": {
      "pattern": "^[a-z][a-z0-9_]*$",
      "type": "string"
    },
    "task_query": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional task attribution: when provided, write one concise, self-contained task_query in the user's language and reuse that exact value in every call for the task, including discovery, search, approval retry, results, export, and status checks. For MCP calls, when omitted, Asklear records a generic non-user-specific attribution so compatible clients can still call the tool. REST calls may omit it and remain unattributed. It is a task description, not a task identifier. Do not include hidden reasoning, credentials, or direct personal identifiers such as phone numbers, email addresses, identity numbers, or street addresses.",
      "maxLength": 300
    }
  },
  "type": "object"
}
```

### Synthetic request / 合成请求

```json
{
  "dataset": "jd"
}
```

### Synthetic response / 合成响应

```json
{
  "dimensions": [
    {
      "desc": "京东商品的稳定标识，用于精确筛选，并与 product_url 对应。",
      "desc_i18n": {
        "en": "Stable JD product identifier used for exact filtering and paired with product_url.",
        "zh-CN": "京东商品的稳定标识，用于精确筛选，并与 product_url 对应。"
      },
      "dictionary_searchable": false,
      "entity_type": "product",
      "name": "product_id",
      "reference_formats": [
        "jd_product_id",
        "jd_product_url"
      ],
      "type": "string"
    },
    {
      "desc": "该自然月记录的商品标题；可用于结果展示和分组，但不能直接作为 query_metrics 或 query_details 的筛选条件。按名称或标题查找商品请使用 search_products。",
      "desc_i18n": {
        "en": "Product title recorded for the month; it is returned for display and grouping, but it is not a direct query_metrics or query_details filter. Use search_products for title lookup.",
        "zh-CN": "该自然月记录的商品标题；可用于结果展示和分组，但不能直接作为 query_metrics 或 query_details 的筛选条件。按名称或标题查找商品请使用 search_products。"
      },
      "dictionary_searchable": false,
      "entity_type": "product",
      "name": "title",
      "reference_formats": [],
      "type": "string"
    },
    {
      "desc": "根据 product_id 生成的标准京东商品详情页链接。",
      "desc_i18n": {
        "en": "Canonical JD product-detail URL generated from product_id.",
        "zh-CN": "根据 product_id 生成的标准京东商品详情页链接。"
      },
      "dictionary_searchable": false,
      "entity_type": "product",
      "name": "product_url",
      "reference_formats": [],
      "type": "string"
    },
    {
      "desc": "京东店铺的稳定标识，用于精确筛选，并与 shop_url 对应。",
      "desc_i18n": {
        "en": "Stable JD shop identifier used for exact filtering and paired with shop_url.",
        "zh-CN": "京东店铺的稳定标识，用于精确筛选，并与 shop_url 对应。"
      },
      "dictionary_searchable": false,
      "entity_type": "shop",
      "name": "shop_id",
      "reference_formats": [
        "jd_shop_id",
        "jd_shop_url"
      ],
      "type": "string"
    },
    {
      "desc": "京东上游记录提供的标准店铺页面链接，与 shop_id 对应；可能为空。",
      "desc_i18n": {
        "en": "Canonical JD shop-page URL supplied by the upstream record and paired with shop_id; it may be empty.",
        "zh-CN": "京东上游记录提供的标准店铺页面链接，与 shop_id 对应；可能为空。"
      },
      "dictionary_searchable": false,
      "entity_type": "shop",
      "name": "shop_url",
      "reference_formats": [],
      "type": "string"
    },
    {
      "desc": "京东上游记录的品牌名称，与 brand_id 对应；可能为空，也可能存在名称写法差异。",
      "desc_i18n": {
        "en": "Brand name recorded by the upstream JD data, paired with brand_id; it may be missing or vary in spelling.",
        "zh-CN": "京东上游记录的品牌名称，与 brand_id 对应；可能为空，也可能存在名称写法差异。"
      },
      "dictionary_searchable": true,
      "name": "brand",
      "reference_formats": [],
      "type": "string"
    },
    {
      "desc": "京东上游品类体系中的一级品类名称，与 category_l1_id 对应。",
      "desc_i18n": {
        "en": "Level-1 category name in the upstream JD hierarchy, paired with category_l1_id.",
        "zh-CN": "京东上游品类体系中的一级品类名称，与 category_l1_id 对应。"
      },
      "dictionary_searchable": true,
      "name": "category_l1",
      "reference_formats": [],
      "type": "string"
    },
    {
      "desc": "京东上游品类体系中的二级品类名称，与 category_l2_id 对应。",
      "desc_i18n": {
        "en": "Level-2 category name in the upstream JD hierarchy, paired with category_l2_id.",
        "zh-CN": "京东上游品类体系中的二级品类名称，与 category_l2_id 对应。"
      },
      "dictionary_searchable": true,
      "name": "category_l2",
      "reference_formats": [],
      "type": "string"
    },
    {
      "desc": "京东上游品类体系中的三级品类名称，与 category_l3_id 对应。",
      "desc_i18n": {
        "en": "Level-3 category name in the upstream JD hierarchy, paired with category_l3_id.",
        "zh-CN": "京东上游品类体系中的三级品类名称，与 category_l3_id 对应。"
      },
      "dictionary_searchable": true,
      "name": "category_l3",
      "reference_formats": [],
      "type": "string"
    },
    {
      "desc": "京东记录的店铺名称，与 shop_id 对应；名称可能随时间变化。",
      "desc_i18n": {
        "en": "Shop name recorded by JD, paired with shop_id; it may change over time.",
        "zh-CN": "京东记录的店铺名称，与 shop_id 对应；名称可能随时间变化。"
      },
      "dictionary_searchable": true,
      "name": "shop",
      "reference_formats": [],
      "type": "string"
    },
    {
      "desc": "商品销售记录所属自然月，格式为 YYYY-MM；该数据集为月粒度。",
      "desc_i18n": {
        "en": "Calendar month to which the product sales record belongs, formatted as YYYY-MM; the dataset grain is monthly.",
        "zh-CN": "商品销售记录所属自然月，格式为 YYYY-MM；该数据集为月粒度。"
      },
      "dictionary_searchable": false,
      "name": "month",
      "reference_formats": [],
      "type": "time"
    }
  ],
  "metrics": [
    {
      "certified": true,
      "desc": "券后销售额，单位为人民币元；聚合查询返回所选范围合计，明细查询返回单条商品月记录的金额。",
      "desc_i18n": {
        "en": "Post-coupon sales amount in CNY; aggregate queries sum the selected scope, while detail queries return the value for one product-month record.",
        "zh-CN": "券后销售额，单位为人民币元；聚合查询返回所选范围合计，明细查询返回单条商品月记录的金额。"
      },
      "name": "gmv"
    },
    {
      "certified": false,
      "desc": "商品销量；聚合查询返回所选范围合计，明细查询返回单条商品月记录的销量。",
      "desc_i18n": {
        "en": "Units sold; aggregate queries sum the selected scope, while detail queries return the value for one product-month record.",
        "zh-CN": "商品销量；聚合查询返回所选范围合计，明细查询返回单条商品月记录的销量。"
      },
      "name": "units"
    },
    {
      "certified": false,
      "desc": "加权平均成交价，单位为人民币元，按 SUM(gmv) / SUM(units) 计算；总销量为 0 时返回空，仅支持聚合查询。",
      "desc_i18n": {
        "en": "Weighted average selling price in CNY, calculated as SUM(gmv) / SUM(units); null when total units is zero, and available only in aggregate queries.",
        "zh-CN": "加权平均成交价，单位为人民币元，按 SUM(gmv) / SUM(units) 计算；总销量为 0 时返回空，仅支持聚合查询。"
      },
      "name": "asp"
    }
  ]
}
```

- dimensions (array<object>): No field description available
- metrics (array<object>): No field description available
## asklear describe

legacy · unavailable · api_key, oauth

REST requires a customer API Key; MCP requires an enabled authenticated server; CLI requires its published artifact and command.

Only monthly-grain data is available.
search_products finds product identity candidates by name or title; product filters in query_metrics and query_details still require an exact product_id or a standard item.jd.com product URL.
Shops accept an exact shop_id, a standard mall.jd.com URL, or an exact shop name resolved with search_values.
Reviews, traffic, inventory, causal explanations, and other platforms are not provided.
YoY, MoM, share, contribution, and cross-period set differences must be computed by the Agent from atomic query results.

Existing pricing applies; metadata reads do not charge Credits.

Where the request declares idempotency_key, reuse it for the same operation; metadata GET is read-only.

A pending response supplies a result/status reference. Read it first; do not automatically resubmit paid execution after a timeout or ambiguous result. Correct 401/403/422 errors before retrying.

### Input schema / 输入契约

```json
{
  "properties": {
    "dataset": {
      "const": "jd"
    },
    "task": {
      "pattern": "^[a-z][a-z0-9_]*$",
      "type": "string"
    },
    "task_query": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional task attribution: when provided, write one concise, self-contained task_query in the user's language and reuse that exact value in every call for the task, including discovery, search, approval retry, results, export, and status checks. For MCP calls, when omitted, Asklear records a generic non-user-specific attribution so compatible clients can still call the tool. REST calls may omit it and remain unattributed. It is a task description, not a task identifier. Do not include hidden reasoning, credentials, or direct personal identifiers such as phone numbers, email addresses, identity numbers, or street addresses.",
      "maxLength": 300
    }
  },
  "type": "object"
}
```

### Synthetic request / 合成请求

```json
{
  "dataset": "jd"
}
```

### Synthetic response / 合成响应

```json
{
  "dimensions": [
    {
      "desc": "京东商品的稳定标识，用于精确筛选，并与 product_url 对应。",
      "desc_i18n": {
        "en": "Stable JD product identifier used for exact filtering and paired with product_url.",
        "zh-CN": "京东商品的稳定标识，用于精确筛选，并与 product_url 对应。"
      },
      "dictionary_searchable": false,
      "entity_type": "product",
      "name": "product_id",
      "reference_formats": [
        "jd_product_id",
        "jd_product_url"
      ],
      "type": "string"
    },
    {
      "desc": "该自然月记录的商品标题；可用于结果展示和分组，但不能直接作为 query_metrics 或 query_details 的筛选条件。按名称或标题查找商品请使用 search_products。",
      "desc_i18n": {
        "en": "Product title recorded for the month; it is returned for display and grouping, but it is not a direct query_metrics or query_details filter. Use search_products for title lookup.",
        "zh-CN": "该自然月记录的商品标题；可用于结果展示和分组，但不能直接作为 query_metrics 或 query_details 的筛选条件。按名称或标题查找商品请使用 search_products。"
      },
      "dictionary_searchable": false,
      "entity_type": "product",
      "name": "title",
      "reference_formats": [],
      "type": "string"
    },
    {
      "desc": "根据 product_id 生成的标准京东商品详情页链接。",
      "desc_i18n": {
        "en": "Canonical JD product-detail URL generated from product_id.",
        "zh-CN": "根据 product_id 生成的标准京东商品详情页链接。"
      },
      "dictionary_searchable": false,
      "entity_type": "product",
      "name": "product_url",
      "reference_formats": [],
      "type": "string"
    },
    {
      "desc": "京东店铺的稳定标识，用于精确筛选，并与 shop_url 对应。",
      "desc_i18n": {
        "en": "Stable JD shop identifier used for exact filtering and paired with shop_url.",
        "zh-CN": "京东店铺的稳定标识，用于精确筛选，并与 shop_url 对应。"
      },
      "dictionary_searchable": false,
      "entity_type": "shop",
      "name": "shop_id",
      "reference_formats": [
        "jd_shop_id",
        "jd_shop_url"
      ],
      "type": "string"
    },
    {
      "desc": "京东上游记录提供的标准店铺页面链接，与 shop_id 对应；可能为空。",
      "desc_i18n": {
        "en": "Canonical JD shop-page URL supplied by the upstream record and paired with shop_id; it may be empty.",
        "zh-CN": "京东上游记录提供的标准店铺页面链接，与 shop_id 对应；可能为空。"
      },
      "dictionary_searchable": false,
      "entity_type": "shop",
      "name": "shop_url",
      "reference_formats": [],
      "type": "string"
    },
    {
      "desc": "京东上游记录的品牌名称，与 brand_id 对应；可能为空，也可能存在名称写法差异。",
      "desc_i18n": {
        "en": "Brand name recorded by the upstream JD data, paired with brand_id; it may be missing or vary in spelling.",
        "zh-CN": "京东上游记录的品牌名称，与 brand_id 对应；可能为空，也可能存在名称写法差异。"
      },
      "dictionary_searchable": true,
      "name": "brand",
      "reference_formats": [],
      "type": "string"
    },
    {
      "desc": "京东上游品类体系中的一级品类名称，与 category_l1_id 对应。",
      "desc_i18n": {
        "en": "Level-1 category name in the upstream JD hierarchy, paired with category_l1_id.",
        "zh-CN": "京东上游品类体系中的一级品类名称，与 category_l1_id 对应。"
      },
      "dictionary_searchable": true,
      "name": "category_l1",
      "reference_formats": [],
      "type": "string"
    },
    {
      "desc": "京东上游品类体系中的二级品类名称，与 category_l2_id 对应。",
      "desc_i18n": {
        "en": "Level-2 category name in the upstream JD hierarchy, paired with category_l2_id.",
        "zh-CN": "京东上游品类体系中的二级品类名称，与 category_l2_id 对应。"
      },
      "dictionary_searchable": true,
      "name": "category_l2",
      "reference_formats": [],
      "type": "string"
    },
    {
      "desc": "京东上游品类体系中的三级品类名称，与 category_l3_id 对应。",
      "desc_i18n": {
        "en": "Level-3 category name in the upstream JD hierarchy, paired with category_l3_id.",
        "zh-CN": "京东上游品类体系中的三级品类名称，与 category_l3_id 对应。"
      },
      "dictionary_searchable": true,
      "name": "category_l3",
      "reference_formats": [],
      "type": "string"
    },
    {
      "desc": "京东记录的店铺名称，与 shop_id 对应；名称可能随时间变化。",
      "desc_i18n": {
        "en": "Shop name recorded by JD, paired with shop_id; it may change over time.",
        "zh-CN": "京东记录的店铺名称，与 shop_id 对应；名称可能随时间变化。"
      },
      "dictionary_searchable": true,
      "name": "shop",
      "reference_formats": [],
      "type": "string"
    },
    {
      "desc": "商品销售记录所属自然月，格式为 YYYY-MM；该数据集为月粒度。",
      "desc_i18n": {
        "en": "Calendar month to which the product sales record belongs, formatted as YYYY-MM; the dataset grain is monthly.",
        "zh-CN": "商品销售记录所属自然月，格式为 YYYY-MM；该数据集为月粒度。"
      },
      "dictionary_searchable": false,
      "name": "month",
      "reference_formats": [],
      "type": "time"
    }
  ],
  "metrics": [
    {
      "certified": true,
      "desc": "券后销售额，单位为人民币元；聚合查询返回所选范围合计，明细查询返回单条商品月记录的金额。",
      "desc_i18n": {
        "en": "Post-coupon sales amount in CNY; aggregate queries sum the selected scope, while detail queries return the value for one product-month record.",
        "zh-CN": "券后销售额，单位为人民币元；聚合查询返回所选范围合计，明细查询返回单条商品月记录的金额。"
      },
      "name": "gmv"
    },
    {
      "certified": false,
      "desc": "商品销量；聚合查询返回所选范围合计，明细查询返回单条商品月记录的销量。",
      "desc_i18n": {
        "en": "Units sold; aggregate queries sum the selected scope, while detail queries return the value for one product-month record.",
        "zh-CN": "商品销量；聚合查询返回所选范围合计，明细查询返回单条商品月记录的销量。"
      },
      "name": "units"
    },
    {
      "certified": false,
      "desc": "加权平均成交价，单位为人民币元，按 SUM(gmv) / SUM(units) 计算；总销量为 0 时返回空，仅支持聚合查询。",
      "desc_i18n": {
        "en": "Weighted average selling price in CNY, calculated as SUM(gmv) / SUM(units); null when total units is zero, and available only in aggregate queries.",
        "zh-CN": "加权平均成交价，单位为人民币元，按 SUM(gmv) / SUM(units) 计算；总销量为 0 时返回空，仅支持聚合查询。"
      },
      "name": "asp"
    }
  ]
}
```

- dimensions (array<object>): No field description available
- metrics (array<object>): No field description available
## GET /v1/datasets/jd/sample

legacy · available · api_key, oauth

REST requires a customer API Key; MCP requires an enabled authenticated server; CLI requires its published artifact and command.

Example row shape only; samples are not analytical evidence.

Existing pricing applies; metadata reads do not charge Credits.

Where the request declares idempotency_key, reuse it for the same operation; metadata GET is read-only.

A pending response supplies a result/status reference. Read it first; do not automatically resubmit paid execution after a timeout or ambiguous result. Correct 401/403/422 errors before retrying.

### Input schema / 输入契约

```json
{
  "properties": {
    "dataset": {
      "const": "jd"
    },
    "n": {
      "maximum": 10,
      "minimum": 1,
      "type": "integer"
    },
    "task_query": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional task attribution: when provided, write one concise, self-contained task_query in the user's language and reuse that exact value in every call for the task, including discovery, search, approval retry, results, export, and status checks. For MCP calls, when omitted, Asklear records a generic non-user-specific attribution so compatible clients can still call the tool. REST calls may omit it and remain unattributed. It is a task description, not a task identifier. Do not include hidden reasoning, credentials, or direct personal identifiers such as phone numbers, email addresses, identity numbers, or street addresses.",
      "maxLength": 300
    }
  },
  "required": [
    "dataset"
  ],
  "type": "object"
}
```

### Synthetic request / 合成请求

```json
{
  "dataset": "jd",
  "n": 10
}
```

### Synthetic response / 合成响应

```json
{
  "data": []
}
```

- data (array<object>): No field description available
## sample_rows

legacy · available · api_key, oauth

REST requires a customer API Key; MCP requires an enabled authenticated server; CLI requires its published artifact and command.

Example row shape only; samples are not analytical evidence.

Existing pricing applies; metadata reads do not charge Credits.

Where the request declares idempotency_key, reuse it for the same operation; metadata GET is read-only.

A pending response supplies a result/status reference. Read it first; do not automatically resubmit paid execution after a timeout or ambiguous result. Correct 401/403/422 errors before retrying.

### Input schema / 输入契约

```json
{
  "properties": {
    "dataset": {
      "const": "jd"
    },
    "n": {
      "maximum": 10,
      "minimum": 1,
      "type": "integer"
    },
    "task_query": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional task attribution: when provided, write one concise, self-contained task_query in the user's language and reuse that exact value in every call for the task, including discovery, search, approval retry, results, export, and status checks. For MCP calls, when omitted, Asklear records a generic non-user-specific attribution so compatible clients can still call the tool. REST calls may omit it and remain unattributed. It is a task description, not a task identifier. Do not include hidden reasoning, credentials, or direct personal identifiers such as phone numbers, email addresses, identity numbers, or street addresses.",
      "maxLength": 300
    }
  },
  "required": [
    "dataset"
  ],
  "type": "object"
}
```

### Synthetic request / 合成请求

```json
{
  "dataset": "jd",
  "n": 10
}
```

### Synthetic response / 合成响应

```json
{
  "data": []
}
```

- data (array<object>): No field description available
## asklear sample

legacy · unavailable · api_key, oauth

REST requires a customer API Key; MCP requires an enabled authenticated server; CLI requires its published artifact and command.

Example row shape only; samples are not analytical evidence.

Existing pricing applies; metadata reads do not charge Credits.

Where the request declares idempotency_key, reuse it for the same operation; metadata GET is read-only.

A pending response supplies a result/status reference. Read it first; do not automatically resubmit paid execution after a timeout or ambiguous result. Correct 401/403/422 errors before retrying.

### Input schema / 输入契约

```json
{
  "properties": {
    "dataset": {
      "const": "jd"
    },
    "n": {
      "maximum": 10,
      "minimum": 1,
      "type": "integer"
    },
    "task_query": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional task attribution: when provided, write one concise, self-contained task_query in the user's language and reuse that exact value in every call for the task, including discovery, search, approval retry, results, export, and status checks. For MCP calls, when omitted, Asklear records a generic non-user-specific attribution so compatible clients can still call the tool. REST calls may omit it and remain unattributed. It is a task description, not a task identifier. Do not include hidden reasoning, credentials, or direct personal identifiers such as phone numbers, email addresses, identity numbers, or street addresses.",
      "maxLength": 300
    }
  },
  "required": [
    "dataset"
  ],
  "type": "object"
}
```

### Synthetic request / 合成请求

```json
{
  "dataset": "jd",
  "n": 10
}
```

### Synthetic response / 合成响应

```json
{
  "data": []
}
```

- data (array<object>): No field description available
## POST /v1/query_metrics

legacy · available · api_key, oauth

REST requires a customer API Key; MCP requires an enabled authenticated server; CLI requires its published artifact and command.

Only monthly-grain data is available.
search_products finds product identity candidates by name or title; product filters in query_metrics and query_details still require an exact product_id or a standard item.jd.com product URL.
Shops accept an exact shop_id, a standard mall.jd.com URL, or an exact shop name resolved with search_values.
Reviews, traffic, inventory, causal explanations, and other platforms are not provided.
YoY, MoM, share, contribution, and cross-period set differences must be computed by the Agent from atomic query results.

Existing dataset query pricing and account authorization apply.

Where the request declares idempotency_key, reuse it for the same operation; metadata GET is read-only.

A pending response supplies a result/status reference. Read it first; do not automatically resubmit paid execution after a timeout or ambiguous result. Correct 401/403/422 errors before retrying.

### Input schema / 输入契约

```json
{
  "$defs": {
    "Schema1": {
      "properties": {
        "filters": {
          "description": "Query-specific filters; shared scope belongs in common_filters.",
          "items": {
            "$ref": "#/$defs/Schema3"
          },
          "type": "array"
        },
        "group_by": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "limit": {
          "default": 100,
          "maximum": 1000,
          "minimum": 1,
          "type": "integer"
        },
        "metrics": {
          "items": {
            "type": "string"
          },
          "minItems": 1,
          "type": "array"
        },
        "name": {
          "pattern": "^[a-z][a-z0-9_]{0,63}$",
          "type": "string"
        },
        "order_by": {
          "items": {
            "$ref": "#/$defs/Schema2"
          },
          "type": "array"
        },
        "time": {
          "anyOf": [
            {
              "$ref": "#/$defs/Schema4"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Omit to inherit the main query time; provide for cross-period analysis."
        }
      },
      "required": [
        "name",
        "metrics"
      ],
      "type": "object"
    },
    "Schema2": {
      "properties": {
        "dir": {
          "default": "asc",
          "enum": [
            "asc",
            "desc"
          ],
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      },
      "required": [
        "field"
      ],
      "type": "object"
    },
    "Schema3": {
      "properties": {
        "field": {
          "description": "Public dimension used to scope the query.",
          "type": "string"
        },
        "op": {
          "description": "Use eq with one platform raw value already returned by search_values or earlier context; use in with all relevant returned raw values.",
          "enum": [
            "eq",
            "neq",
            "in",
            "not_in",
            "gt",
            "gte",
            "lt",
            "lte",
            "contains",
            "is_unknown",
            "is_known"
          ],
          "type": "string"
        },
        "value": {
          "anyOf": [
            {},
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Single operand for eq, neq, comparisons, or contains."
        },
        "values": {
          "anyOf": [
            {
              "items": {},
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Platform raw values used by in or not_in."
        }
      },
      "required": [
        "field",
        "op"
      ],
      "type": "object"
    },
    "Schema4": {
      "properties": {
        "end": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Inclusive end month/date. Use together with start."
        },
        "grain": {
          "const": "month",
          "default": "month",
          "type": "string"
        },
        "last_complete_months": {
          "anyOf": [
            {
              "maximum": 60,
              "minimum": 1,
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Server-resolved latest complete months ending at the authenticated data-through month. Use instead of describe for current/latest/recent monthly questions."
        },
        "start": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Inclusive start month/date. Use together with end."
        }
      },
      "type": "object"
    }
  },
  "properties": {
    "additional_queries": {
      "description": "Up to three additional analyses for shares, comparisons, or multiple views.",
      "items": {
        "$ref": "#/$defs/Schema1"
      },
      "maxItems": 3,
      "type": "array"
    },
    "approved_plan_digest": {
      "anyOf": [
        {
          "pattern": "^plan_[0-9a-f]{64}$",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "common_filters": {
      "description": "Filters applied to every query in the bundle.",
      "items": {
        "$ref": "#/$defs/Schema3"
      },
      "type": "array"
    },
    "dataset": {
      "const": "jd"
    },
    "dry_run": {
      "default": false,
      "description": "Set true only when the user asks for a price preview.",
      "type": "boolean"
    },
    "filters": {
      "description": "Aligned query scope. Resolve user-supplied brand, shop, and category names with search_values; product/shop URLs are values for product_id/shop_id.",
      "items": {
        "$ref": "#/$defs/Schema3"
      },
      "type": "array"
    },
    "group_by": {
      "description": "Exact public result dimensions. Include month for a monthly trend; for entity results include the declared ID, name, and URL fields.",
      "items": {
        "enum": [
          "product_id",
          "title",
          "product_url",
          "shop_id",
          "shop_url",
          "brand",
          "category_l1",
          "category_l2",
          "category_l3",
          "shop",
          "month"
        ]
      },
      "type": "array"
    },
    "idempotency_key": {
      "anyOf": [
        {
          "maxLength": 128,
          "minLength": 1,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "MCP paid non-dry-run single operations require idempotency_key; REST and free previews may omit it. Bundles reject idempotency_key; omit it with additional_queries. Bundles are non-atomic; recover failed items as independent single operations, not whole-bundle replay."
    },
    "limit": {
      "default": 100,
      "maximum": 1000,
      "minimum": 1,
      "type": "integer"
    },
    "main_query_name": {
      "anyOf": [
        {
          "pattern": "^[a-z][a-z0-9_]{0,63}$",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Main result ID for a bundle; omit for one query. Use lowercase ASCII, digits, and underscores."
    },
    "max_credits": {
      "anyOf": [
        {
          "exclusiveMinimum": 0,
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "metrics": {
      "description": "Public metrics requested by the user; do not add unrequested metrics.",
      "items": {
        "enum": [
          "gmv",
          "units",
          "asp"
        ]
      },
      "minItems": 1,
      "type": "array"
    },
    "order_by": {
      "description": "Sort by a returned metric or groupable dimension.",
      "items": {
        "$ref": "#/$defs/Schema2"
      },
      "type": "array"
    },
    "task_query": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional task attribution: when provided, write one concise, self-contained task_query in the user's language and reuse that exact value in every call for the task, including discovery, search, approval retry, results, export, and status checks. For MCP calls, when omitted, Asklear records a generic non-user-specific attribution so compatible clients can still call the tool. REST calls may omit it and remain unattributed. It is a task description, not a task identifier. Do not include hidden reasoning, credentials, or direct personal identifiers such as phone numbers, email addresses, identity numbers, or street addresses.",
      "maxLength": 300
    },
    "time": {
      "$ref": "#/$defs/Schema4",
      "description": "Absolute range or last_complete_months; relative time needs no describe."
    }
  },
  "required": [
    "dataset",
    "metrics",
    "time"
  ],
  "type": "object"
}
```

### Synthetic request / 合成请求

```json
{
  "dataset": "jd",
  "group_by": [
    "brand"
  ],
  "limit": 10,
  "metrics": [
    "gmv"
  ],
  "order_by": [
    {
      "dir": "desc",
      "field": "gmv"
    }
  ],
  "task_query": "查看京东最近一个完整月的品牌销售额排名",
  "time": {
    "last_complete_months": 1
  }
}
```

### Synthetic response / 合成响应

```json
{
  "data": [],
  "meta": {
    "dataset": "jd"
  }
}
```

- data[].product_id (string): Stable JD product identifier used for exact filtering and paired with product_url.
- data[].title (string): Product title recorded for the month; it is returned for display and grouping, but it is not a direct query_metrics or query_details filter. Use search_products for title lookup.
- data[].product_url (string): Canonical JD product-detail URL generated from product_id.
- data[].shop_id (string): Stable JD shop identifier used for exact filtering and paired with shop_url.
- data[].shop_url (string): Canonical JD shop-page URL supplied by the upstream record and paired with shop_id; it may be empty.
- data[].brand (string): Brand name recorded by the upstream JD data, paired with brand_id; it may be missing or vary in spelling.
- data[].category_l1 (string): Level-1 category name in the upstream JD hierarchy, paired with category_l1_id.
- data[].category_l2 (string): Level-2 category name in the upstream JD hierarchy, paired with category_l2_id.
- data[].category_l3 (string): Level-3 category name in the upstream JD hierarchy, paired with category_l3_id.
- data[].shop (string): Shop name recorded by JD, paired with shop_id; it may change over time.
- data[].month (time): Calendar month to which the product sales record belongs, formatted as YYYY-MM; the dataset grain is monthly.
- data[].gmv (number): Post-coupon sales amount in CNY; aggregate queries sum the selected scope, while detail queries return the value for one product-month record.
- data[].units (number): Units sold; aggregate queries sum the selected scope, while detail queries return the value for one product-month record.
- data[].asp (number): Weighted average selling price in CNY, calculated as SUM(gmv) / SUM(units); null when total units is zero, and available only in aggregate queries.
## query_metrics

legacy · available · api_key, oauth

REST requires a customer API Key; MCP requires an enabled authenticated server; CLI requires its published artifact and command.

Only monthly-grain data is available.
search_products finds product identity candidates by name or title; product filters in query_metrics and query_details still require an exact product_id or a standard item.jd.com product URL.
Shops accept an exact shop_id, a standard mall.jd.com URL, or an exact shop name resolved with search_values.
Reviews, traffic, inventory, causal explanations, and other platforms are not provided.
YoY, MoM, share, contribution, and cross-period set differences must be computed by the Agent from atomic query results.

Existing dataset query pricing and account authorization apply.

Where the request declares idempotency_key, reuse it for the same operation; metadata GET is read-only.

A pending response supplies a result/status reference. Read it first; do not automatically resubmit paid execution after a timeout or ambiguous result. Correct 401/403/422 errors before retrying.

### Input schema / 输入契约

```json
{
  "$defs": {
    "Schema1": {
      "properties": {
        "filters": {
          "description": "Query-specific filters; shared scope belongs in common_filters.",
          "items": {
            "$ref": "#/$defs/Schema3"
          },
          "type": "array"
        },
        "group_by": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "limit": {
          "default": 100,
          "maximum": 1000,
          "minimum": 1,
          "type": "integer"
        },
        "metrics": {
          "items": {
            "type": "string"
          },
          "minItems": 1,
          "type": "array"
        },
        "name": {
          "pattern": "^[a-z][a-z0-9_]{0,63}$",
          "type": "string"
        },
        "order_by": {
          "items": {
            "$ref": "#/$defs/Schema2"
          },
          "type": "array"
        },
        "time": {
          "anyOf": [
            {
              "$ref": "#/$defs/Schema4"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Omit to inherit the main query time; provide for cross-period analysis."
        }
      },
      "required": [
        "name",
        "metrics"
      ],
      "type": "object"
    },
    "Schema2": {
      "properties": {
        "dir": {
          "default": "asc",
          "enum": [
            "asc",
            "desc"
          ],
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      },
      "required": [
        "field"
      ],
      "type": "object"
    },
    "Schema3": {
      "properties": {
        "field": {
          "description": "Public dimension used to scope the query.",
          "type": "string"
        },
        "op": {
          "description": "Use eq with one platform raw value already returned by search_values or earlier context; use in with all relevant returned raw values.",
          "enum": [
            "eq",
            "neq",
            "in",
            "not_in",
            "gt",
            "gte",
            "lt",
            "lte",
            "contains",
            "is_unknown",
            "is_known"
          ],
          "type": "string"
        },
        "value": {
          "anyOf": [
            {},
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Single operand for eq, neq, comparisons, or contains."
        },
        "values": {
          "anyOf": [
            {
              "items": {},
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Platform raw values used by in or not_in."
        }
      },
      "required": [
        "field",
        "op"
      ],
      "type": "object"
    },
    "Schema4": {
      "properties": {
        "end": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Inclusive end month/date. Use together with start."
        },
        "grain": {
          "const": "month",
          "default": "month",
          "type": "string"
        },
        "last_complete_months": {
          "anyOf": [
            {
              "maximum": 60,
              "minimum": 1,
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Server-resolved latest complete months ending at the authenticated data-through month. Use instead of describe for current/latest/recent monthly questions."
        },
        "start": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Inclusive start month/date. Use together with end."
        }
      },
      "type": "object"
    }
  },
  "properties": {
    "additional_queries": {
      "description": "Up to three additional analyses for shares, comparisons, or multiple views.",
      "items": {
        "$ref": "#/$defs/Schema1"
      },
      "maxItems": 3,
      "type": "array"
    },
    "approved_plan_digest": {
      "anyOf": [
        {
          "pattern": "^plan_[0-9a-f]{64}$",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "common_filters": {
      "description": "Filters applied to every query in the bundle.",
      "items": {
        "$ref": "#/$defs/Schema3"
      },
      "type": "array"
    },
    "dataset": {
      "const": "jd"
    },
    "dry_run": {
      "default": false,
      "description": "Set true only when the user asks for a price preview.",
      "type": "boolean"
    },
    "filters": {
      "description": "Aligned query scope. Resolve user-supplied brand, shop, and category names with search_values; product/shop URLs are values for product_id/shop_id.",
      "items": {
        "$ref": "#/$defs/Schema3"
      },
      "type": "array"
    },
    "group_by": {
      "description": "Exact public result dimensions. Include month for a monthly trend; for entity results include the declared ID, name, and URL fields.",
      "items": {
        "enum": [
          "product_id",
          "title",
          "product_url",
          "shop_id",
          "shop_url",
          "brand",
          "category_l1",
          "category_l2",
          "category_l3",
          "shop",
          "month"
        ]
      },
      "type": "array"
    },
    "idempotency_key": {
      "anyOf": [
        {
          "maxLength": 128,
          "minLength": 1,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "MCP paid non-dry-run single operations require idempotency_key; REST and free previews may omit it. Bundles reject idempotency_key; omit it with additional_queries. Bundles are non-atomic; recover failed items as independent single operations, not whole-bundle replay."
    },
    "limit": {
      "default": 100,
      "maximum": 1000,
      "minimum": 1,
      "type": "integer"
    },
    "main_query_name": {
      "anyOf": [
        {
          "pattern": "^[a-z][a-z0-9_]{0,63}$",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Main result ID for a bundle; omit for one query. Use lowercase ASCII, digits, and underscores."
    },
    "max_credits": {
      "anyOf": [
        {
          "exclusiveMinimum": 0,
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "metrics": {
      "description": "Public metrics requested by the user; do not add unrequested metrics.",
      "items": {
        "enum": [
          "gmv",
          "units",
          "asp"
        ]
      },
      "minItems": 1,
      "type": "array"
    },
    "order_by": {
      "description": "Sort by a returned metric or groupable dimension.",
      "items": {
        "$ref": "#/$defs/Schema2"
      },
      "type": "array"
    },
    "task_query": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional task attribution: when provided, write one concise, self-contained task_query in the user's language and reuse that exact value in every call for the task, including discovery, search, approval retry, results, export, and status checks. For MCP calls, when omitted, Asklear records a generic non-user-specific attribution so compatible clients can still call the tool. REST calls may omit it and remain unattributed. It is a task description, not a task identifier. Do not include hidden reasoning, credentials, or direct personal identifiers such as phone numbers, email addresses, identity numbers, or street addresses.",
      "maxLength": 300
    },
    "time": {
      "$ref": "#/$defs/Schema4",
      "description": "Absolute range or last_complete_months; relative time needs no describe."
    }
  },
  "required": [
    "dataset",
    "metrics",
    "time"
  ],
  "type": "object"
}
```

### Synthetic request / 合成请求

```json
{
  "dataset": "jd",
  "group_by": [
    "brand"
  ],
  "idempotency_key": "directory-example",
  "limit": 10,
  "metrics": [
    "gmv"
  ],
  "order_by": [
    {
      "dir": "desc",
      "field": "gmv"
    }
  ],
  "task_query": "查看京东最近一个完整月的品牌销售额排名",
  "time": {
    "last_complete_months": 1
  }
}
```

### Synthetic response / 合成响应

```json
{
  "data": [],
  "meta": {
    "dataset": "jd"
  }
}
```

- data[].product_id (string): Stable JD product identifier used for exact filtering and paired with product_url.
- data[].title (string): Product title recorded for the month; it is returned for display and grouping, but it is not a direct query_metrics or query_details filter. Use search_products for title lookup.
- data[].product_url (string): Canonical JD product-detail URL generated from product_id.
- data[].shop_id (string): Stable JD shop identifier used for exact filtering and paired with shop_url.
- data[].shop_url (string): Canonical JD shop-page URL supplied by the upstream record and paired with shop_id; it may be empty.
- data[].brand (string): Brand name recorded by the upstream JD data, paired with brand_id; it may be missing or vary in spelling.
- data[].category_l1 (string): Level-1 category name in the upstream JD hierarchy, paired with category_l1_id.
- data[].category_l2 (string): Level-2 category name in the upstream JD hierarchy, paired with category_l2_id.
- data[].category_l3 (string): Level-3 category name in the upstream JD hierarchy, paired with category_l3_id.
- data[].shop (string): Shop name recorded by JD, paired with shop_id; it may change over time.
- data[].month (time): Calendar month to which the product sales record belongs, formatted as YYYY-MM; the dataset grain is monthly.
- data[].gmv (number): Post-coupon sales amount in CNY; aggregate queries sum the selected scope, while detail queries return the value for one product-month record.
- data[].units (number): Units sold; aggregate queries sum the selected scope, while detail queries return the value for one product-month record.
- data[].asp (number): Weighted average selling price in CNY, calculated as SUM(gmv) / SUM(units); null when total units is zero, and available only in aggregate queries.
## asklear query

legacy · unavailable · api_key, oauth

REST requires a customer API Key; MCP requires an enabled authenticated server; CLI requires its published artifact and command.

Only monthly-grain data is available.
search_products finds product identity candidates by name or title; product filters in query_metrics and query_details still require an exact product_id or a standard item.jd.com product URL.
Shops accept an exact shop_id, a standard mall.jd.com URL, or an exact shop name resolved with search_values.
Reviews, traffic, inventory, causal explanations, and other platforms are not provided.
YoY, MoM, share, contribution, and cross-period set differences must be computed by the Agent from atomic query results.

Existing dataset query pricing and account authorization apply.

Where the request declares idempotency_key, reuse it for the same operation; metadata GET is read-only.

A pending response supplies a result/status reference. Read it first; do not automatically resubmit paid execution after a timeout or ambiguous result. Correct 401/403/422 errors before retrying.

### Input schema / 输入契约

```json
{
  "$defs": {
    "Schema1": {
      "properties": {
        "filters": {
          "description": "Query-specific filters; shared scope belongs in common_filters.",
          "items": {
            "$ref": "#/$defs/Schema3"
          },
          "type": "array"
        },
        "group_by": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "limit": {
          "default": 100,
          "maximum": 1000,
          "minimum": 1,
          "type": "integer"
        },
        "metrics": {
          "items": {
            "type": "string"
          },
          "minItems": 1,
          "type": "array"
        },
        "name": {
          "pattern": "^[a-z][a-z0-9_]{0,63}$",
          "type": "string"
        },
        "order_by": {
          "items": {
            "$ref": "#/$defs/Schema2"
          },
          "type": "array"
        },
        "time": {
          "anyOf": [
            {
              "$ref": "#/$defs/Schema4"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Omit to inherit the main query time; provide for cross-period analysis."
        }
      },
      "required": [
        "name",
        "metrics"
      ],
      "type": "object"
    },
    "Schema2": {
      "properties": {
        "dir": {
          "default": "asc",
          "enum": [
            "asc",
            "desc"
          ],
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      },
      "required": [
        "field"
      ],
      "type": "object"
    },
    "Schema3": {
      "properties": {
        "field": {
          "description": "Public dimension used to scope the query.",
          "type": "string"
        },
        "op": {
          "description": "Use eq with one platform raw value already returned by search_values or earlier context; use in with all relevant returned raw values.",
          "enum": [
            "eq",
            "neq",
            "in",
            "not_in",
            "gt",
            "gte",
            "lt",
            "lte",
            "contains",
            "is_unknown",
            "is_known"
          ],
          "type": "string"
        },
        "value": {
          "anyOf": [
            {},
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Single operand for eq, neq, comparisons, or contains."
        },
        "values": {
          "anyOf": [
            {
              "items": {},
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Platform raw values used by in or not_in."
        }
      },
      "required": [
        "field",
        "op"
      ],
      "type": "object"
    },
    "Schema4": {
      "properties": {
        "end": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Inclusive end month/date. Use together with start."
        },
        "grain": {
          "const": "month",
          "default": "month",
          "type": "string"
        },
        "last_complete_months": {
          "anyOf": [
            {
              "maximum": 60,
              "minimum": 1,
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Server-resolved latest complete months ending at the authenticated data-through month. Use instead of describe for current/latest/recent monthly questions."
        },
        "start": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Inclusive start month/date. Use together with end."
        }
      },
      "type": "object"
    }
  },
  "properties": {
    "additional_queries": {
      "description": "Up to three additional analyses for shares, comparisons, or multiple views.",
      "items": {
        "$ref": "#/$defs/Schema1"
      },
      "maxItems": 3,
      "type": "array"
    },
    "approved_plan_digest": {
      "anyOf": [
        {
          "pattern": "^plan_[0-9a-f]{64}$",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "common_filters": {
      "description": "Filters applied to every query in the bundle.",
      "items": {
        "$ref": "#/$defs/Schema3"
      },
      "type": "array"
    },
    "dataset": {
      "const": "jd"
    },
    "dry_run": {
      "default": false,
      "description": "Set true only when the user asks for a price preview.",
      "type": "boolean"
    },
    "filters": {
      "description": "Aligned query scope. Resolve user-supplied brand, shop, and category names with search_values; product/shop URLs are values for product_id/shop_id.",
      "items": {
        "$ref": "#/$defs/Schema3"
      },
      "type": "array"
    },
    "group_by": {
      "description": "Exact public result dimensions. Include month for a monthly trend; for entity results include the declared ID, name, and URL fields.",
      "items": {
        "enum": [
          "product_id",
          "title",
          "product_url",
          "shop_id",
          "shop_url",
          "brand",
          "category_l1",
          "category_l2",
          "category_l3",
          "shop",
          "month"
        ]
      },
      "type": "array"
    },
    "idempotency_key": {
      "anyOf": [
        {
          "maxLength": 128,
          "minLength": 1,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "MCP paid non-dry-run single operations require idempotency_key; REST and free previews may omit it. Bundles reject idempotency_key; omit it with additional_queries. Bundles are non-atomic; recover failed items as independent single operations, not whole-bundle replay."
    },
    "limit": {
      "default": 100,
      "maximum": 1000,
      "minimum": 1,
      "type": "integer"
    },
    "main_query_name": {
      "anyOf": [
        {
          "pattern": "^[a-z][a-z0-9_]{0,63}$",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Main result ID for a bundle; omit for one query. Use lowercase ASCII, digits, and underscores."
    },
    "max_credits": {
      "anyOf": [
        {
          "exclusiveMinimum": 0,
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "metrics": {
      "description": "Public metrics requested by the user; do not add unrequested metrics.",
      "items": {
        "enum": [
          "gmv",
          "units",
          "asp"
        ]
      },
      "minItems": 1,
      "type": "array"
    },
    "order_by": {
      "description": "Sort by a returned metric or groupable dimension.",
      "items": {
        "$ref": "#/$defs/Schema2"
      },
      "type": "array"
    },
    "task_query": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional task attribution: when provided, write one concise, self-contained task_query in the user's language and reuse that exact value in every call for the task, including discovery, search, approval retry, results, export, and status checks. For MCP calls, when omitted, Asklear records a generic non-user-specific attribution so compatible clients can still call the tool. REST calls may omit it and remain unattributed. It is a task description, not a task identifier. Do not include hidden reasoning, credentials, or direct personal identifiers such as phone numbers, email addresses, identity numbers, or street addresses.",
      "maxLength": 300
    },
    "time": {
      "$ref": "#/$defs/Schema4",
      "description": "Absolute range or last_complete_months; relative time needs no describe."
    }
  },
  "required": [
    "dataset",
    "metrics",
    "time"
  ],
  "type": "object"
}
```

### Synthetic request / 合成请求

```json
{
  "dataset": "jd",
  "group_by": [
    "brand"
  ],
  "idempotency_key": "directory-example",
  "limit": 10,
  "metrics": [
    "gmv"
  ],
  "order_by": [
    {
      "dir": "desc",
      "field": "gmv"
    }
  ],
  "task_query": "查看京东最近一个完整月的品牌销售额排名",
  "time": {
    "last_complete_months": 1
  }
}
```

### Synthetic response / 合成响应

```json
{
  "data": [],
  "meta": {
    "dataset": "jd"
  }
}
```

- data[].product_id (string): Stable JD product identifier used for exact filtering and paired with product_url.
- data[].title (string): Product title recorded for the month; it is returned for display and grouping, but it is not a direct query_metrics or query_details filter. Use search_products for title lookup.
- data[].product_url (string): Canonical JD product-detail URL generated from product_id.
- data[].shop_id (string): Stable JD shop identifier used for exact filtering and paired with shop_url.
- data[].shop_url (string): Canonical JD shop-page URL supplied by the upstream record and paired with shop_id; it may be empty.
- data[].brand (string): Brand name recorded by the upstream JD data, paired with brand_id; it may be missing or vary in spelling.
- data[].category_l1 (string): Level-1 category name in the upstream JD hierarchy, paired with category_l1_id.
- data[].category_l2 (string): Level-2 category name in the upstream JD hierarchy, paired with category_l2_id.
- data[].category_l3 (string): Level-3 category name in the upstream JD hierarchy, paired with category_l3_id.
- data[].shop (string): Shop name recorded by JD, paired with shop_id; it may change over time.
- data[].month (time): Calendar month to which the product sales record belongs, formatted as YYYY-MM; the dataset grain is monthly.
- data[].gmv (number): Post-coupon sales amount in CNY; aggregate queries sum the selected scope, while detail queries return the value for one product-month record.
- data[].units (number): Units sold; aggregate queries sum the selected scope, while detail queries return the value for one product-month record.
- data[].asp (number): Weighted average selling price in CNY, calculated as SUM(gmv) / SUM(units); null when total units is zero, and available only in aggregate queries.
## POST /v1/quote

legacy · available · api_key, oauth

REST requires a customer API Key; MCP requires an enabled authenticated server; CLI requires its published artifact and command.

Optional REST cost preview; actual execution determines billing. MCP previews use query_metrics with dry_run=true.

Existing pricing applies; metadata reads do not charge Credits.

Where the request declares idempotency_key, reuse it for the same operation; metadata GET is read-only.

A pending response supplies a result/status reference. Read it first; do not automatically resubmit paid execution after a timeout or ambiguous result. Correct 401/403/422 errors before retrying.

### Input schema / 输入契约

```json
{
  "$defs": {
    "Schema1": {
      "properties": {
        "filters": {
          "description": "Query-specific filters; shared scope belongs in common_filters.",
          "items": {
            "$ref": "#/$defs/Schema3"
          },
          "type": "array"
        },
        "group_by": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "limit": {
          "default": 100,
          "maximum": 1000,
          "minimum": 1,
          "type": "integer"
        },
        "metrics": {
          "items": {
            "type": "string"
          },
          "minItems": 1,
          "type": "array"
        },
        "name": {
          "pattern": "^[a-z][a-z0-9_]{0,63}$",
          "type": "string"
        },
        "order_by": {
          "items": {
            "$ref": "#/$defs/Schema2"
          },
          "type": "array"
        },
        "time": {
          "anyOf": [
            {
              "$ref": "#/$defs/Schema4"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Omit to inherit the main query time; provide for cross-period analysis."
        }
      },
      "required": [
        "name",
        "metrics"
      ],
      "type": "object"
    },
    "Schema2": {
      "properties": {
        "dir": {
          "default": "asc",
          "enum": [
            "asc",
            "desc"
          ],
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      },
      "required": [
        "field"
      ],
      "type": "object"
    },
    "Schema3": {
      "properties": {
        "field": {
          "description": "Public dimension used to scope the query.",
          "type": "string"
        },
        "op": {
          "description": "Use eq with one platform raw value already returned by search_values or earlier context; use in with all relevant returned raw values.",
          "enum": [
            "eq",
            "neq",
            "in",
            "not_in",
            "gt",
            "gte",
            "lt",
            "lte",
            "contains",
            "is_unknown",
            "is_known"
          ],
          "type": "string"
        },
        "value": {
          "anyOf": [
            {},
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Single operand for eq, neq, comparisons, or contains."
        },
        "values": {
          "anyOf": [
            {
              "items": {},
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Platform raw values used by in or not_in."
        }
      },
      "required": [
        "field",
        "op"
      ],
      "type": "object"
    },
    "Schema4": {
      "properties": {
        "end": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Inclusive end month/date. Use together with start."
        },
        "grain": {
          "const": "month",
          "default": "month",
          "type": "string"
        },
        "last_complete_months": {
          "anyOf": [
            {
              "maximum": 60,
              "minimum": 1,
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Server-resolved latest complete months ending at the authenticated data-through month. Use instead of describe for current/latest/recent monthly questions."
        },
        "start": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Inclusive start month/date. Use together with end."
        }
      },
      "type": "object"
    }
  },
  "description": "One flat request shape that FastMCP can expose as tool arguments.",
  "properties": {
    "additional_queries": {
      "anyOf": [
        {
          "items": {
            "$ref": "#/$defs/Schema1"
          },
          "maxItems": 3,
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "approved_plan_digest": {
      "anyOf": [
        {
          "pattern": "^plan_[0-9a-f]{64}$",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "common_filters": {
      "anyOf": [
        {
          "items": {
            "$ref": "#/$defs/Schema3"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "dataset": {
      "const": "jd"
    },
    "dry_run": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "filters": {
      "anyOf": [
        {
          "items": {
            "$ref": "#/$defs/Schema3"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "group_by": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "limit": {
      "anyOf": [
        {
          "maximum": 1000,
          "minimum": 1,
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "main_query_name": {
      "anyOf": [
        {
          "pattern": "^[a-z][a-z0-9_]{0,63}$",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional ASCII bundle result name. Omit for single metric quotes."
    },
    "max_credits": {
      "anyOf": [
        {
          "exclusiveMinimum": 0,
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "metrics": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "minItems": 1,
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "order_by": {
      "anyOf": [
        {
          "items": {
            "$ref": "#/$defs/Schema2"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "task_query": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional task attribution: when provided, write one concise, self-contained task_query in the user's language and reuse that exact value in every call for the task, including discovery, search, approval retry, results, export, and status checks. For MCP calls, when omitted, Asklear records a generic non-user-specific attribution so compatible clients can still call the tool. REST calls may omit it and remain unattributed. It is a task description, not a task identifier. Do not include hidden reasoning, credentials, or direct personal identifiers such as phone numbers, email addresses, identity numbers, or street addresses.",
      "maxLength": 300
    },
    "time": {
      "anyOf": [
        {
          "$ref": "#/$defs/Schema4"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    }
  },
  "type": "object"
}
```

### Synthetic request / 合成请求

```json
{
  "dataset": "jd",
  "group_by": [
    "brand"
  ],
  "limit": 10,
  "metrics": [
    "gmv"
  ],
  "order_by": [
    {
      "dir": "desc",
      "field": "gmv"
    }
  ],
  "task_query": "查看京东最近一个完整月的品牌销售额排名",
  "time": {
    "last_complete_months": 1
  }
}
```

### Synthetic response / 合成响应

```json
{}
```

- upper_bound_credits (integer): No field description available
## POST /v1/search_values

legacy · available · api_key, oauth

REST requires a customer API Key; MCP requires an enabled authenticated server; CLI requires its published artifact and command.

Only monthly-grain data is available.
search_products finds product identity candidates by name or title; product filters in query_metrics and query_details still require an exact product_id or a standard item.jd.com product URL.
Shops accept an exact shop_id, a standard mall.jd.com URL, or an exact shop name resolved with search_values.
Reviews, traffic, inventory, causal explanations, and other platforms are not provided.
YoY, MoM, share, contribution, and cross-period set differences must be computed by the Agent from atomic query results.

Existing pricing applies; metadata reads do not charge Credits.

Where the request declares idempotency_key, reuse it for the same operation; metadata GET is read-only.

A pending response supplies a result/status reference. Read it first; do not automatically resubmit paid execution after a timeout or ambiguous result. Correct 401/403/422 errors before retrying.

### Input schema / 输入契约

```json
{
  "$defs": {
    "Schema1": {
      "properties": {
        "field": {
          "type": "string"
        },
        "kw": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "limit": {
          "default": 20,
          "maximum": 100,
          "minimum": 1,
          "type": "integer"
        },
        "name": {
          "pattern": "^[a-z][a-z0-9_]{0,63}$",
          "type": "string"
        }
      },
      "required": [
        "name",
        "field"
      ],
      "type": "object"
    }
  },
  "properties": {
    "additional_searches": {
      "items": {
        "$ref": "#/$defs/Schema1"
      },
      "maxItems": 3,
      "type": "array"
    },
    "approved_plan_digest": {
      "anyOf": [
        {
          "pattern": "^plan_[0-9a-f]{64}$",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "dataset": {
      "const": "jd"
    },
    "dry_run": {
      "default": false,
      "description": "Set true only when the user asks for a price preview.",
      "type": "boolean"
    },
    "field": {
      "description": "Searchable field for a user-supplied name. category searches every category level. Exact IDs and URLs are ready to query.",
      "type": "string"
    },
    "idempotency_key": {
      "anyOf": [
        {
          "maxLength": 128,
          "minLength": 1,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "MCP paid non-dry-run single operations require idempotency_key; REST and free previews may omit it. Bundles reject idempotency_key; omit it with additional_searches or field=category, which expands into category levels. Recover failed items as single concrete-field operations."
    },
    "kw": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "limit": {
      "default": 20,
      "maximum": 100,
      "minimum": 1,
      "type": "integer"
    },
    "max_credits": {
      "anyOf": [
        {
          "exclusiveMinimum": 0,
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "task_query": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional task attribution: when provided, write one concise, self-contained task_query in the user's language and reuse that exact value in every call for the task, including discovery, search, approval retry, results, export, and status checks. For MCP calls, when omitted, Asklear records a generic non-user-specific attribution so compatible clients can still call the tool. REST calls may omit it and remain unattributed. It is a task description, not a task identifier. Do not include hidden reasoning, credentials, or direct personal identifiers such as phone numbers, email addresses, identity numbers, or street addresses.",
      "maxLength": 300
    }
  },
  "required": [
    "dataset",
    "field"
  ],
  "type": "object"
}
```

### Synthetic request / 合成请求

```json
{
  "dataset": "jd",
  "field": "brand",
  "kw": "example",
  "limit": 10
}
```

### Synthetic response / 合成响应

```json
{
  "data": []
}
```

- data (array<object>): No field description available
## search_values

legacy · available · api_key, oauth

REST requires a customer API Key; MCP requires an enabled authenticated server; CLI requires its published artifact and command.

Only monthly-grain data is available.
search_products finds product identity candidates by name or title; product filters in query_metrics and query_details still require an exact product_id or a standard item.jd.com product URL.
Shops accept an exact shop_id, a standard mall.jd.com URL, or an exact shop name resolved with search_values.
Reviews, traffic, inventory, causal explanations, and other platforms are not provided.
YoY, MoM, share, contribution, and cross-period set differences must be computed by the Agent from atomic query results.

Existing pricing applies; metadata reads do not charge Credits.

Where the request declares idempotency_key, reuse it for the same operation; metadata GET is read-only.

A pending response supplies a result/status reference. Read it first; do not automatically resubmit paid execution after a timeout or ambiguous result. Correct 401/403/422 errors before retrying.

### Input schema / 输入契约

```json
{
  "$defs": {
    "Schema1": {
      "properties": {
        "field": {
          "type": "string"
        },
        "kw": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "limit": {
          "default": 20,
          "maximum": 100,
          "minimum": 1,
          "type": "integer"
        },
        "name": {
          "pattern": "^[a-z][a-z0-9_]{0,63}$",
          "type": "string"
        }
      },
      "required": [
        "name",
        "field"
      ],
      "type": "object"
    }
  },
  "properties": {
    "additional_searches": {
      "items": {
        "$ref": "#/$defs/Schema1"
      },
      "maxItems": 3,
      "type": "array"
    },
    "approved_plan_digest": {
      "anyOf": [
        {
          "pattern": "^plan_[0-9a-f]{64}$",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "dataset": {
      "const": "jd"
    },
    "dry_run": {
      "default": false,
      "description": "Set true only when the user asks for a price preview.",
      "type": "boolean"
    },
    "field": {
      "description": "Searchable field for a user-supplied name. category searches every category level. Exact IDs and URLs are ready to query.",
      "type": "string"
    },
    "idempotency_key": {
      "anyOf": [
        {
          "maxLength": 128,
          "minLength": 1,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "MCP paid non-dry-run single operations require idempotency_key; REST and free previews may omit it. Bundles reject idempotency_key; omit it with additional_searches or field=category, which expands into category levels. Recover failed items as single concrete-field operations."
    },
    "kw": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "limit": {
      "default": 20,
      "maximum": 100,
      "minimum": 1,
      "type": "integer"
    },
    "max_credits": {
      "anyOf": [
        {
          "exclusiveMinimum": 0,
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "task_query": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional task attribution: when provided, write one concise, self-contained task_query in the user's language and reuse that exact value in every call for the task, including discovery, search, approval retry, results, export, and status checks. For MCP calls, when omitted, Asklear records a generic non-user-specific attribution so compatible clients can still call the tool. REST calls may omit it and remain unattributed. It is a task description, not a task identifier. Do not include hidden reasoning, credentials, or direct personal identifiers such as phone numbers, email addresses, identity numbers, or street addresses.",
      "maxLength": 300
    }
  },
  "required": [
    "dataset",
    "field"
  ],
  "type": "object"
}
```

### Synthetic request / 合成请求

```json
{
  "dataset": "jd",
  "field": "brand",
  "idempotency_key": "directory-example",
  "kw": "example",
  "limit": 10
}
```

### Synthetic response / 合成响应

```json
{
  "data": []
}
```

- data (array<object>): No field description available
## asklear search-values

legacy · unavailable · api_key, oauth

REST requires a customer API Key; MCP requires an enabled authenticated server; CLI requires its published artifact and command.

Only monthly-grain data is available.
search_products finds product identity candidates by name or title; product filters in query_metrics and query_details still require an exact product_id or a standard item.jd.com product URL.
Shops accept an exact shop_id, a standard mall.jd.com URL, or an exact shop name resolved with search_values.
Reviews, traffic, inventory, causal explanations, and other platforms are not provided.
YoY, MoM, share, contribution, and cross-period set differences must be computed by the Agent from atomic query results.

Existing pricing applies; metadata reads do not charge Credits.

Where the request declares idempotency_key, reuse it for the same operation; metadata GET is read-only.

A pending response supplies a result/status reference. Read it first; do not automatically resubmit paid execution after a timeout or ambiguous result. Correct 401/403/422 errors before retrying.

### Input schema / 输入契约

```json
{
  "$defs": {
    "Schema1": {
      "properties": {
        "field": {
          "type": "string"
        },
        "kw": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "limit": {
          "default": 20,
          "maximum": 100,
          "minimum": 1,
          "type": "integer"
        },
        "name": {
          "pattern": "^[a-z][a-z0-9_]{0,63}$",
          "type": "string"
        }
      },
      "required": [
        "name",
        "field"
      ],
      "type": "object"
    }
  },
  "properties": {
    "additional_searches": {
      "items": {
        "$ref": "#/$defs/Schema1"
      },
      "maxItems": 3,
      "type": "array"
    },
    "approved_plan_digest": {
      "anyOf": [
        {
          "pattern": "^plan_[0-9a-f]{64}$",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "dataset": {
      "const": "jd"
    },
    "dry_run": {
      "default": false,
      "description": "Set true only when the user asks for a price preview.",
      "type": "boolean"
    },
    "field": {
      "description": "Searchable field for a user-supplied name. category searches every category level. Exact IDs and URLs are ready to query.",
      "type": "string"
    },
    "idempotency_key": {
      "anyOf": [
        {
          "maxLength": 128,
          "minLength": 1,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "MCP paid non-dry-run single operations require idempotency_key; REST and free previews may omit it. Bundles reject idempotency_key; omit it with additional_searches or field=category, which expands into category levels. Recover failed items as single concrete-field operations."
    },
    "kw": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "limit": {
      "default": 20,
      "maximum": 100,
      "minimum": 1,
      "type": "integer"
    },
    "max_credits": {
      "anyOf": [
        {
          "exclusiveMinimum": 0,
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "task_query": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional task attribution: when provided, write one concise, self-contained task_query in the user's language and reuse that exact value in every call for the task, including discovery, search, approval retry, results, export, and status checks. For MCP calls, when omitted, Asklear records a generic non-user-specific attribution so compatible clients can still call the tool. REST calls may omit it and remain unattributed. It is a task description, not a task identifier. Do not include hidden reasoning, credentials, or direct personal identifiers such as phone numbers, email addresses, identity numbers, or street addresses.",
      "maxLength": 300
    }
  },
  "required": [
    "dataset",
    "field"
  ],
  "type": "object"
}
```

### Synthetic request / 合成请求

```json
{
  "dataset": "jd",
  "field": "brand",
  "idempotency_key": "directory-example",
  "kw": "example",
  "limit": 10
}
```

### Synthetic response / 合成响应

```json
{
  "data": []
}
```

- data (array<object>): No field description available
## POST /v1/query_details

legacy · unavailable · api_key, oauth

REST requires a customer API Key; MCP requires an enabled authenticated server; CLI requires its published artifact and command.

Only monthly-grain data is available.
search_products finds product identity candidates by name or title; product filters in query_metrics and query_details still require an exact product_id or a standard item.jd.com product URL.
Shops accept an exact shop_id, a standard mall.jd.com URL, or an exact shop name resolved with search_values.
Reviews, traffic, inventory, causal explanations, and other platforms are not provided.
YoY, MoM, share, contribution, and cross-period set differences must be computed by the Agent from atomic query results.

Existing pricing applies; metadata reads do not charge Credits.

Where the request declares idempotency_key, reuse it for the same operation; metadata GET is read-only.

A pending response supplies a result/status reference. Read it first; do not automatically resubmit paid execution after a timeout or ambiguous result. Correct 401/403/422 errors before retrying.

### Input schema / 输入契约

```json
{
  "$defs": {
    "Schema1": {
      "properties": {
        "field": {
          "description": "Public dimension used to scope the query.",
          "type": "string"
        },
        "op": {
          "description": "Use eq with one platform raw value already returned by search_values or earlier context; use in with all relevant returned raw values.",
          "enum": [
            "eq",
            "neq",
            "in",
            "not_in",
            "gt",
            "gte",
            "lt",
            "lte",
            "contains",
            "is_unknown",
            "is_known"
          ],
          "type": "string"
        },
        "value": {
          "anyOf": [
            {},
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Single operand for eq, neq, comparisons, or contains."
        },
        "values": {
          "anyOf": [
            {
              "items": {},
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Platform raw values used by in or not_in."
        }
      },
      "required": [
        "field",
        "op"
      ],
      "type": "object"
    },
    "Schema2": {
      "properties": {
        "end": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Inclusive end month/date. Use together with start."
        },
        "grain": {
          "const": "month",
          "default": "month",
          "type": "string"
        },
        "last_complete_months": {
          "anyOf": [
            {
              "maximum": 60,
              "minimum": 1,
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Server-resolved latest complete months ending at the authenticated data-through month. Use instead of describe for current/latest/recent monthly questions."
        },
        "start": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Inclusive start month/date. Use together with end."
        }
      },
      "type": "object"
    }
  },
  "properties": {
    "approved_plan_digest": {
      "anyOf": [
        {
          "pattern": "^plan_[0-9a-f]{64}$",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "dataset": {
      "const": "jd"
    },
    "dry_run": {
      "default": false,
      "type": "boolean"
    },
    "fields": {
      "description": "Raw detail output fields. Use query_metrics for rankings and product or shop links.",
      "items": {
        "enum": [
          "product_id",
          "title",
          "product_url",
          "shop_id",
          "shop_url",
          "brand_id",
          "brand",
          "category_l1_id",
          "category_l1",
          "category_l2_id",
          "category_l2",
          "category_l3_id",
          "category_l3",
          "shop",
          "specification",
          "month",
          "gmv",
          "units"
        ]
      },
      "maxItems": 34,
      "minItems": 1,
      "type": "array"
    },
    "filters": {
      "description": "Raw detail-field filters for a tightly scoped drilldown.",
      "items": {
        "$ref": "#/$defs/Schema1"
      },
      "type": "array"
    },
    "idempotency_key": {
      "anyOf": [
        {
          "maxLength": 128,
          "minLength": 1,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "MCP paid non-dry-run single operations require idempotency_key; REST and free previews may omit it."
    },
    "limit": {
      "default": 100,
      "maximum": 1000,
      "minimum": 1,
      "type": "integer"
    },
    "max_credits": {
      "anyOf": [
        {
          "exclusiveMinimum": 0,
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "task_query": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional task attribution: when provided, write one concise, self-contained task_query in the user's language and reuse that exact value in every call for the task, including discovery, search, approval retry, results, export, and status checks. For MCP calls, when omitted, Asklear records a generic non-user-specific attribution so compatible clients can still call the tool. REST calls may omit it and remain unattributed. It is a task description, not a task identifier. Do not include hidden reasoning, credentials, or direct personal identifiers such as phone numbers, email addresses, identity numbers, or street addresses.",
      "maxLength": 300
    },
    "time": {
      "$ref": "#/$defs/Schema2"
    }
  },
  "required": [
    "dataset",
    "fields",
    "time"
  ],
  "type": "object"
}
```

### Synthetic request / 合成请求

```json
{
  "dataset": "jd",
  "fields": [
    "product_id",
    "title",
    "product_url"
  ],
  "filters": [
    {
      "field": "product_id",
      "op": "eq",
      "value": "1234567890"
    }
  ],
  "limit": 10,
  "time": {
    "last_complete_months": 1
  }
}
```

### Synthetic response / 合成响应

```json
{
  "data": []
}
```

- data[].product_id (string): Stable JD product identifier used for exact filtering and paired with product_url.
- data[].title (string): Product title recorded for the month; it is returned for display and grouping, but it is not a direct query_metrics or query_details filter. Use search_products for title lookup.
- data[].product_url (string): Canonical JD product-detail URL generated from product_id.
- data[].shop_id (string): Stable JD shop identifier used for exact filtering and paired with shop_url.
- data[].shop_url (string): Canonical JD shop-page URL supplied by the upstream record and paired with shop_id; it may be empty.
- data[].brand_id (string): Upstream JD brand identifier paired with brand; it may be missing when the source does not identify a brand.
- data[].brand (string): Brand name recorded by the upstream JD data, paired with brand_id; it may be missing or vary in spelling.
- data[].category_l1_id (string): Identifier of category_l1 in the upstream JD category hierarchy; it may be missing.
- data[].category_l1 (string): Level-1 category name in the upstream JD hierarchy, paired with category_l1_id.
- data[].category_l2_id (string): Identifier of category_l2 in the upstream JD category hierarchy; it may be missing.
- data[].category_l2 (string): Level-2 category name in the upstream JD hierarchy, paired with category_l2_id.
- data[].category_l3_id (string): Identifier of category_l3 in the upstream JD category hierarchy; it may be missing.
- data[].category_l3 (string): Level-3 category name in the upstream JD hierarchy, paired with category_l3_id.
- data[].shop (string): Shop name recorded by JD, paired with shop_id; it may change over time.
- data[].specification (string): Product specification attributes, usually encoded as a JSON object string; keys vary by category, the value may be empty, and it is available only in detail output.
- data[].month (time): Calendar month to which the product sales record belongs, formatted as YYYY-MM; the dataset grain is monthly.
- data[].gmv (number): Post-coupon sales amount in CNY; aggregate queries sum the selected scope, while detail queries return the value for one product-month record.
- data[].units (number): Units sold; aggregate queries sum the selected scope, while detail queries return the value for one product-month record.
## query_details

legacy · unavailable · api_key, oauth

REST requires a customer API Key; MCP requires an enabled authenticated server; CLI requires its published artifact and command.

Only monthly-grain data is available.
search_products finds product identity candidates by name or title; product filters in query_metrics and query_details still require an exact product_id or a standard item.jd.com product URL.
Shops accept an exact shop_id, a standard mall.jd.com URL, or an exact shop name resolved with search_values.
Reviews, traffic, inventory, causal explanations, and other platforms are not provided.
YoY, MoM, share, contribution, and cross-period set differences must be computed by the Agent from atomic query results.

Existing pricing applies; metadata reads do not charge Credits.

Where the request declares idempotency_key, reuse it for the same operation; metadata GET is read-only.

A pending response supplies a result/status reference. Read it first; do not automatically resubmit paid execution after a timeout or ambiguous result. Correct 401/403/422 errors before retrying.

### Input schema / 输入契约

```json
{
  "$defs": {
    "Schema1": {
      "properties": {
        "field": {
          "description": "Public dimension used to scope the query.",
          "type": "string"
        },
        "op": {
          "description": "Use eq with one platform raw value already returned by search_values or earlier context; use in with all relevant returned raw values.",
          "enum": [
            "eq",
            "neq",
            "in",
            "not_in",
            "gt",
            "gte",
            "lt",
            "lte",
            "contains",
            "is_unknown",
            "is_known"
          ],
          "type": "string"
        },
        "value": {
          "anyOf": [
            {},
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Single operand for eq, neq, comparisons, or contains."
        },
        "values": {
          "anyOf": [
            {
              "items": {},
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Platform raw values used by in or not_in."
        }
      },
      "required": [
        "field",
        "op"
      ],
      "type": "object"
    },
    "Schema2": {
      "properties": {
        "end": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Inclusive end month/date. Use together with start."
        },
        "grain": {
          "const": "month",
          "default": "month",
          "type": "string"
        },
        "last_complete_months": {
          "anyOf": [
            {
              "maximum": 60,
              "minimum": 1,
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Server-resolved latest complete months ending at the authenticated data-through month. Use instead of describe for current/latest/recent monthly questions."
        },
        "start": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Inclusive start month/date. Use together with end."
        }
      },
      "type": "object"
    }
  },
  "properties": {
    "approved_plan_digest": {
      "anyOf": [
        {
          "pattern": "^plan_[0-9a-f]{64}$",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "dataset": {
      "const": "jd"
    },
    "dry_run": {
      "default": false,
      "type": "boolean"
    },
    "fields": {
      "description": "Raw detail output fields. Use query_metrics for rankings and product or shop links.",
      "items": {
        "enum": [
          "product_id",
          "title",
          "product_url",
          "shop_id",
          "shop_url",
          "brand_id",
          "brand",
          "category_l1_id",
          "category_l1",
          "category_l2_id",
          "category_l2",
          "category_l3_id",
          "category_l3",
          "shop",
          "specification",
          "month",
          "gmv",
          "units"
        ]
      },
      "maxItems": 34,
      "minItems": 1,
      "type": "array"
    },
    "filters": {
      "description": "Raw detail-field filters for a tightly scoped drilldown.",
      "items": {
        "$ref": "#/$defs/Schema1"
      },
      "type": "array"
    },
    "idempotency_key": {
      "anyOf": [
        {
          "maxLength": 128,
          "minLength": 1,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "MCP paid non-dry-run single operations require idempotency_key; REST and free previews may omit it."
    },
    "limit": {
      "default": 100,
      "maximum": 1000,
      "minimum": 1,
      "type": "integer"
    },
    "max_credits": {
      "anyOf": [
        {
          "exclusiveMinimum": 0,
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "task_query": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional task attribution: when provided, write one concise, self-contained task_query in the user's language and reuse that exact value in every call for the task, including discovery, search, approval retry, results, export, and status checks. For MCP calls, when omitted, Asklear records a generic non-user-specific attribution so compatible clients can still call the tool. REST calls may omit it and remain unattributed. It is a task description, not a task identifier. Do not include hidden reasoning, credentials, or direct personal identifiers such as phone numbers, email addresses, identity numbers, or street addresses.",
      "maxLength": 300
    },
    "time": {
      "$ref": "#/$defs/Schema2"
    }
  },
  "required": [
    "dataset",
    "fields",
    "time"
  ],
  "type": "object"
}
```

### Synthetic request / 合成请求

```json
{
  "dataset": "jd",
  "fields": [
    "product_id",
    "title",
    "product_url"
  ],
  "filters": [
    {
      "field": "product_id",
      "op": "eq",
      "value": "1234567890"
    }
  ],
  "idempotency_key": "directory-example",
  "limit": 10,
  "time": {
    "last_complete_months": 1
  }
}
```

### Synthetic response / 合成响应

```json
{
  "data": []
}
```

- data[].product_id (string): Stable JD product identifier used for exact filtering and paired with product_url.
- data[].title (string): Product title recorded for the month; it is returned for display and grouping, but it is not a direct query_metrics or query_details filter. Use search_products for title lookup.
- data[].product_url (string): Canonical JD product-detail URL generated from product_id.
- data[].shop_id (string): Stable JD shop identifier used for exact filtering and paired with shop_url.
- data[].shop_url (string): Canonical JD shop-page URL supplied by the upstream record and paired with shop_id; it may be empty.
- data[].brand_id (string): Upstream JD brand identifier paired with brand; it may be missing when the source does not identify a brand.
- data[].brand (string): Brand name recorded by the upstream JD data, paired with brand_id; it may be missing or vary in spelling.
- data[].category_l1_id (string): Identifier of category_l1 in the upstream JD category hierarchy; it may be missing.
- data[].category_l1 (string): Level-1 category name in the upstream JD hierarchy, paired with category_l1_id.
- data[].category_l2_id (string): Identifier of category_l2 in the upstream JD category hierarchy; it may be missing.
- data[].category_l2 (string): Level-2 category name in the upstream JD hierarchy, paired with category_l2_id.
- data[].category_l3_id (string): Identifier of category_l3 in the upstream JD category hierarchy; it may be missing.
- data[].category_l3 (string): Level-3 category name in the upstream JD hierarchy, paired with category_l3_id.
- data[].shop (string): Shop name recorded by JD, paired with shop_id; it may change over time.
- data[].specification (string): Product specification attributes, usually encoded as a JSON object string; keys vary by category, the value may be empty, and it is available only in detail output.
- data[].month (time): Calendar month to which the product sales record belongs, formatted as YYYY-MM; the dataset grain is monthly.
- data[].gmv (number): Post-coupon sales amount in CNY; aggregate queries sum the selected scope, while detail queries return the value for one product-month record.
- data[].units (number): Units sold; aggregate queries sum the selected scope, while detail queries return the value for one product-month record.
## asklear query-details

legacy · unavailable · api_key, oauth

REST requires a customer API Key; MCP requires an enabled authenticated server; CLI requires its published artifact and command.

Only monthly-grain data is available.
search_products finds product identity candidates by name or title; product filters in query_metrics and query_details still require an exact product_id or a standard item.jd.com product URL.
Shops accept an exact shop_id, a standard mall.jd.com URL, or an exact shop name resolved with search_values.
Reviews, traffic, inventory, causal explanations, and other platforms are not provided.
YoY, MoM, share, contribution, and cross-period set differences must be computed by the Agent from atomic query results.

Existing pricing applies; metadata reads do not charge Credits.

Where the request declares idempotency_key, reuse it for the same operation; metadata GET is read-only.

A pending response supplies a result/status reference. Read it first; do not automatically resubmit paid execution after a timeout or ambiguous result. Correct 401/403/422 errors before retrying.

### Input schema / 输入契约

```json
{
  "$defs": {
    "Schema1": {
      "properties": {
        "field": {
          "description": "Public dimension used to scope the query.",
          "type": "string"
        },
        "op": {
          "description": "Use eq with one platform raw value already returned by search_values or earlier context; use in with all relevant returned raw values.",
          "enum": [
            "eq",
            "neq",
            "in",
            "not_in",
            "gt",
            "gte",
            "lt",
            "lte",
            "contains",
            "is_unknown",
            "is_known"
          ],
          "type": "string"
        },
        "value": {
          "anyOf": [
            {},
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Single operand for eq, neq, comparisons, or contains."
        },
        "values": {
          "anyOf": [
            {
              "items": {},
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Platform raw values used by in or not_in."
        }
      },
      "required": [
        "field",
        "op"
      ],
      "type": "object"
    },
    "Schema2": {
      "properties": {
        "end": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Inclusive end month/date. Use together with start."
        },
        "grain": {
          "const": "month",
          "default": "month",
          "type": "string"
        },
        "last_complete_months": {
          "anyOf": [
            {
              "maximum": 60,
              "minimum": 1,
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Server-resolved latest complete months ending at the authenticated data-through month. Use instead of describe for current/latest/recent monthly questions."
        },
        "start": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Inclusive start month/date. Use together with end."
        }
      },
      "type": "object"
    }
  },
  "properties": {
    "approved_plan_digest": {
      "anyOf": [
        {
          "pattern": "^plan_[0-9a-f]{64}$",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "dataset": {
      "const": "jd"
    },
    "dry_run": {
      "default": false,
      "type": "boolean"
    },
    "fields": {
      "description": "Raw detail output fields. Use query_metrics for rankings and product or shop links.",
      "items": {
        "enum": [
          "product_id",
          "title",
          "product_url",
          "shop_id",
          "shop_url",
          "brand_id",
          "brand",
          "category_l1_id",
          "category_l1",
          "category_l2_id",
          "category_l2",
          "category_l3_id",
          "category_l3",
          "shop",
          "specification",
          "month",
          "gmv",
          "units"
        ]
      },
      "maxItems": 34,
      "minItems": 1,
      "type": "array"
    },
    "filters": {
      "description": "Raw detail-field filters for a tightly scoped drilldown.",
      "items": {
        "$ref": "#/$defs/Schema1"
      },
      "type": "array"
    },
    "idempotency_key": {
      "anyOf": [
        {
          "maxLength": 128,
          "minLength": 1,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "MCP paid non-dry-run single operations require idempotency_key; REST and free previews may omit it."
    },
    "limit": {
      "default": 100,
      "maximum": 1000,
      "minimum": 1,
      "type": "integer"
    },
    "max_credits": {
      "anyOf": [
        {
          "exclusiveMinimum": 0,
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "task_query": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional task attribution: when provided, write one concise, self-contained task_query in the user's language and reuse that exact value in every call for the task, including discovery, search, approval retry, results, export, and status checks. For MCP calls, when omitted, Asklear records a generic non-user-specific attribution so compatible clients can still call the tool. REST calls may omit it and remain unattributed. It is a task description, not a task identifier. Do not include hidden reasoning, credentials, or direct personal identifiers such as phone numbers, email addresses, identity numbers, or street addresses.",
      "maxLength": 300
    },
    "time": {
      "$ref": "#/$defs/Schema2"
    }
  },
  "required": [
    "dataset",
    "fields",
    "time"
  ],
  "type": "object"
}
```

### Synthetic request / 合成请求

```json
{
  "dataset": "jd",
  "fields": [
    "product_id",
    "title",
    "product_url"
  ],
  "filters": [
    {
      "field": "product_id",
      "op": "eq",
      "value": "1234567890"
    }
  ],
  "idempotency_key": "directory-example",
  "limit": 10,
  "time": {
    "last_complete_months": 1
  }
}
```

### Synthetic response / 合成响应

```json
{
  "data": []
}
```

- data[].product_id (string): Stable JD product identifier used for exact filtering and paired with product_url.
- data[].title (string): Product title recorded for the month; it is returned for display and grouping, but it is not a direct query_metrics or query_details filter. Use search_products for title lookup.
- data[].product_url (string): Canonical JD product-detail URL generated from product_id.
- data[].shop_id (string): Stable JD shop identifier used for exact filtering and paired with shop_url.
- data[].shop_url (string): Canonical JD shop-page URL supplied by the upstream record and paired with shop_id; it may be empty.
- data[].brand_id (string): Upstream JD brand identifier paired with brand; it may be missing when the source does not identify a brand.
- data[].brand (string): Brand name recorded by the upstream JD data, paired with brand_id; it may be missing or vary in spelling.
- data[].category_l1_id (string): Identifier of category_l1 in the upstream JD category hierarchy; it may be missing.
- data[].category_l1 (string): Level-1 category name in the upstream JD hierarchy, paired with category_l1_id.
- data[].category_l2_id (string): Identifier of category_l2 in the upstream JD category hierarchy; it may be missing.
- data[].category_l2 (string): Level-2 category name in the upstream JD hierarchy, paired with category_l2_id.
- data[].category_l3_id (string): Identifier of category_l3 in the upstream JD category hierarchy; it may be missing.
- data[].category_l3 (string): Level-3 category name in the upstream JD hierarchy, paired with category_l3_id.
- data[].shop (string): Shop name recorded by JD, paired with shop_id; it may change over time.
- data[].specification (string): Product specification attributes, usually encoded as a JSON object string; keys vary by category, the value may be empty, and it is available only in detail output.
- data[].month (time): Calendar month to which the product sales record belongs, formatted as YYYY-MM; the dataset grain is monthly.
- data[].gmv (number): Post-coupon sales amount in CNY; aggregate queries sum the selected scope, while detail queries return the value for one product-month record.
- data[].units (number): Units sold; aggregate queries sum the selected scope, while detail queries return the value for one product-month record.
