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

# Extract a single product from a URL

`POST /brand/ai/product`

Beta feature: Given a single URL, determines if it is a product detail page, classifies the platform/product type, and extracts the product information. Supports Amazon, TikTok Shop, Etsy, and generic ecommerce sites.

## Request body

- object
  - `url` string, uri, required — The product page URL to extract product data from.
  - `timeoutMS` integer — Optional timeout in milliseconds for the request. Maximum allowed value is 300000ms (5 minutes).

## Response `200`

Successful response

- object
  - `is_product_page` boolean — Whether the given URL is a product detail page
  - `platform` 'amazon' | 'tiktok_shop' | 'etsy' | 'generic', 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', nullable — Billing frequency for the product
    - `pricing_model` 'per_seat' | 'flat' | 'tiered' | 'freemium' | 'custom', 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)

## Other responses

- `400` — Bad Request - validation error
- `401` — Unauthorized
- `408` — Request Timeout
- `500` — Internal server error

## Changes

- **2026-02-22** `98ef96cef5b0` — 1 info
  - added the required property `product/images` to the response with the `200` status
- **2026-02-12** `ec0e897d65be` — 1 breaking
  - the `timeoutMS` request property's min was increased to `1000.00`
- **2026-02-09** `f6fec0ae4fa4` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/context/apis/brand-api/changes/brand/ai/product/post.md)

---

[API](https://skmtc.dev/context/apis/brand-api.md) · [All operations](https://skmtc.dev/context/apis/brand-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/context/brand-api/revisions/05a30711e18b/schema)
