{
  "id": "contextdev.brand.ai.product",
  "object": "tool",
  "name": "Extract Product",
  "summary": "Detect whether a URL is a product page and extract a normalized product record.",
  "description": "Turn a single product page into structured commerce data: name, description, price and regular price with currency, billing frequency and pricing model, category, availability, dimensions, features, target audience, tags, imagery, and SKU. Context.dev first classifies the URL (Amazon, TikTok Shop, Etsy, or generic), so a non-product page is reported as such rather than hallucinated into a product. Built for catalog ingestion, competitive pricing monitors, and merchandising workflows.\n\nRaw contextdev#brand/ai/product endpoint: input is { body, queryParams, pathParams } as the provider documents them (https://docs.context.dev/api-reference/web-extraction/product).",
  "category": "lookup",
  "hosted_by": "Context.dev",
  "runtime": "partner",
  "side_effects": false,
  "status": "live",
  "credits": 0,
  "price": null,
  "providers": [
    {
      "id": "contextdev",
      "name": "Context.dev",
      "price": null,
      "own_key_only": true
    }
  ],
  "mcp_name": "contextdev_brand_ai_product",
  "input_schema": {
    "type": "object",
    "properties": {
      "body": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "pattern": "^https?:\\/\\/\\S+$",
            "description": "The product page URL to extract from. Context.dev first decides whether the URL really is a product page."
          },
          "maxAgeMs": {
            "type": "integer",
            "minimum": 0,
            "maximum": 2592000000,
            "description": "Reuse a cached result younger than this many milliseconds. Default 604800000 (7 days), max 2592000000 (30 days)."
          },
          "timeoutOpts": {
            "type": "object",
            "properties": {
              "milliseconds": {
                "type": "integer",
                "minimum": 1000,
                "maximum": 300000,
                "description": "Request deadline in milliseconds (1000-300000)."
              },
              "behavior": {
                "type": "string",
                "enum": [
                  "fail",
                  "return-partial"
                ],
                "description": "What to do at the deadline: 'fail' returns 408 at no charge (default); 'return-partial' returns the usable results collected so far and bills them."
              }
            },
            "required": [
              "milliseconds"
            ],
            "additionalProperties": false,
            "description": "Request deadline and behavior on timeout."
          }
        },
        "required": [
          "url"
        ],
        "additionalProperties": false
      }
    },
    "required": [
      "body"
    ],
    "additionalProperties": false
  },
  "kind": "endpoint"
}