---
title: "Extract a single product from a URL"
method: POST
path: "/brand/ai/product"
tags: ["Web Extraction"]
---

# Extract a single product from a URL

`POST /brand/ai/product`

Given a single URL, determines if it is a product page and extracts the product information.

## Request body

- object
  - `url` string, uri, required — The product page URL to extract product data from.
  - `maxAgeMs` integer — Return a cached result if a prior scrape for the same parameters exists and is younger than this many milliseconds. Defaults to 7 days (604800000 ms) when omitted. Max is 30 days (2592000000 ms). Set to 0 to always scrape fresh.
  - `timeoutMS` integer — Optional timeout in milliseconds for the request. If the request takes longer than this value, it will be aborted with a 408 status code. Maximum allowed value is 300000ms (5 minutes).
  - `tags` string[] — Optional tags for tracking usage. Up to 20 tags, each 1 to 50 characters.

## Response `200`

Successful response

- object
  - `is_product_page` boolean — Whether the given URL is a product detail page
  - `platform` 'amazon' | 'tiktok_shop' | 'etsy' | 'generic' | 'null', nullable — The detected ecommerce platform, or null if not a product page
  - `product` object, nullable — The extracted product data, or null if not a product page
    - `name` string, required — Name of the product
    - `description` string, required — Description of the product
    - `price` number, nullable — Price of the product
    - `currency` string, nullable — Currency code for the price (e.g., USD, EUR)
    - `billing_frequency` 'monthly' | 'yearly' | 'one_time' | 'usage_based' | 'null', nullable — Billing frequency for the product
    - `pricing_model` 'per_seat' | 'flat' | 'tiered' | 'freemium' | 'custom' | 'null', nullable — Pricing model for the product
    - `url` string, nullable — URL to the product page
    - `category` string, nullable — Category of the product
    - `features` string[], required — List of product features
    - `target_audience` string[], required — Target audience for the product (array of strings)
    - `tags` string[], required — Tags associated with the product
    - `image_url` string, nullable — URL to the product image
    - `images` string[], required — URLs to product images on the page (up to 7)
    - `sku` string, nullable, required — Stock Keeping Unit (product identifier). Null if no identifier is found.
  - `key_metadata` KeyMetadata — Metadata about the API key used for the request. Included in every response whenever a valid API key is provided, even when the response status is not 200.
    - `credits_consumed` integer, required — The number of credits consumed by this request.
    - `credits_remaining` integer, required — The number of credits remaining for your organization after this request.

## Other responses

- `400` — Bad Request - validation error
- `401` — Unauthorized
- `408` — Request Timeout
- `429` — Rate limit exceeded
- `500` — Internal server error

---

[API](https://skmtc.net/context/apis/context-dev.md) · [All operations](https://skmtc.net/context/apis/context-dev/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/context/context-dev/versions/3c6a01ba967f/schema)
