# Target Australia API — target.com.au product search, prices with was-price and promotions, online and per-store stock, variants, categories and stores

> Search Target Australia's catalogue by keywords, category or collection, with brand, price range, on-sale and sort filters, as the site's own search and category pages list it. Every row carries the printed price, the struck-through "was" price shown on the card, the price range across the product's variants, clearance and exclusivity flags, online and in-store stock counts, rating, review count, brand and category. Category pages list one row per colour (the pair product_id + colour_variant_id is the row key); keyword search one row per product. Omit query, category and collection to browse All Products. Target serves at most 10,000 rows per query (`total_capped`); sweep category by category with sort=price_asc.
> ReefAPI engine `target-au` · 5 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/target-au/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed calls are free except verified SHEIN NOT_FOUND on product/detail and price (4 credits).
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http). Send the key as `Authorization: Bearer <key>`, or put it in the URL (`?key=<key>`) when the client has no header field, as ChatGPT does.

## Endpoints

### POST https://api.reefapi.com/target-au/v1/search — 2 credits
Search Target Australia's catalogue by keywords, category or collection, with brand, price range, on-sale and sort filters, as the site's own search and category pages list it. Every row carries the printed price, the struck-through "was" price shown on the card, the price range across the product's variants, clearance and exclusivity flags, online and in-store stock counts, rating, review count, brand and category. Category pages list one row per colour (the pair product_id + colour_variant_id is the row key); keyword search one row per product. Omit query, category and collection to browse All Products. Target serves at most 10,000 rows per query (`total_capped`); sweep category by category with sort=price_asc.

**Parameters:**
- `query` (string, optional) — Keywords, as typed in Target's search box. Target also returns semantic matches: `matched_by_text` says how many rows contain the words.
- `category` (string, optional) — A Target category id (`W99700` = Home) from `categories`, or `AP01` for All Products. Combines with `query`.
- `collection` (string, optional) — A Target collection id as in the site's own links (`/search?collection_id=womens-sale`), e.g. womens-sale, mens-sale, kids-sale, baby-sale, home-sale, entertainment-sale. Not combined with `query` or `category`.
- `brand` (string, optional) — Brand name exactly as Target lists it in the `brand` facet (e.g. Anko, Bonds, Target, LEGO). A name Target does not carry answers 0 rows.
- `min_price` (number, optional) — Lowest price in AUD (the printed price, GST included).
- `max_price` (number, optional) — Highest price in AUD.
- `on_sale` (boolean, optional, default false) — Only products Target flags as on sale (its own `Sale` filter).
- `sort` (enum, optional, default "relevance") [one of: relevance, newest, rating, price_asc, price_desc, brand]
- `page` (integer, optional, default 1) — Result page. Target serves at most the first 10,000 rows of any query.
- `page_size` (integer, optional, default 48) — Rows per page, 1-200 (the site uses 48).

**Returns:** results[]{position, product_id, colour_variant_id, variant_id, title, brand, url, product_url, image, colour, price, was_price, discount_pct_computed, price_min, price_max, was_price_max, currency, clearance, in_stock, online_stock_qty, store_stock_qty, variant_count, colour_count, rating, review_count, category, category_ids[], online_exclusive, online_only_price} + page + page_size + total + total_capped + has_more + matched_by_text + matched_by_meaning + facets[]{name, label, options[]{value, label, count}} + related_searches[] + price_basis

**Example request body:**
```json
{
  "query": "bath towel",
  "sort": "price_asc"
}
```

### POST https://api.reefapi.com/target-au/v1/product — 3 credits
One Target Australia product as its product page shows it: title, printed price, "was" price, RRP, OnePass price, deal text and promotions (each separate from the price), colours and the shown colour's sizes with their codes, delivery options, breadcrumbs, description, features, materials, images, rating and review count — plus, from Target's catalogue, every variant's price, online stock count and in-store stock count, and the "was" price the search card prints (`listing_was_price`). Add `store` for that store's stock level of every variant.

**Parameters:**
- `product_id` (string, optional) — A product id from `search` (`product_id`, e.g. P72203439 or Wgacbt) or any colour/size variant code (e.g. 72203439). A variant code shows that colour. Provide product_id OR url.
- `url` (string, optional) — A target.com.au product URL (/p/<slug>/<code>).
- `store` (string, optional) — A Target store number from `stores` (e.g. 5123 = Belconnen). On `product` it adds that store's stock for every variant.

**Returns:** product{product_id, code, title, brand, url, price, price_range, was_price, listing_was_price, discount_pct_computed, rrp, onepass_price, onepass_price_range, onepass_exclusive, target_exclusive, onepass_badge, deal, promotions[]{code, description, is_tmd}, currency, availability, in_stock, online_stock_qty, store_stock_qty, clearance, coming_soon, online_only, delivery{click_and_collect, home_delivery, express_delivery}, labels{}, rating, review_count, category, google_category, breadcrumbs[]{category_id, name, url}, description, features[], extra_info[], care_instructions[], materials[], images[], colour, colour_variant_id, size, colours[]{label, colour_variant_id, url, image}, sizes[]{label, variant_id, url, display_only}, variants[]{variant_id, colour_variant_id, size_variant_id, colour, size, price, listing_was_price, in_stock, online_stock_qty, store_stock_qty, clearance, url, store_stock}, store, store_defaulted, price_basis}

**Example request body:**
```json
{
  "product_id": "Wgacbt"
}
```

### POST https://api.reefapi.com/target-au/v1/stock — 3 credits
Stock of one Target Australia variant (a colour or size code) in every Target store — or in one store, or one state's stores — as Target's own store-stock service reports it (inStock / lowStock / outOfStock), plus click & collect, home delivery and express delivery availability (give `postcode` for delivery to that postcode). The variant is checked against Target's catalogue first: an unknown code is NOT_FOUND, never a false "out of stock".

**Parameters:**
- `variant_id` (string, required) — A colour or size variant code — `variant_id` of a `search` row or of `product.variants[]` (the code at the end of a product URL).
- `store` (string, optional) — A Target store number from `stores` (e.g. 5123 = Belconnen). On `product` it adds that store's stock for every variant.
- `state` (enum, optional) — Limit to the stores of one state or territory. [one of: act, nsw, nt, qld, sa, tas, vic, wa]
- `postcode` (string, optional) — An Australian postcode; Target answers home and express delivery availability for it (express depends on the postcode).

**Returns:** variant_id, product_id, title, colour, price, click_and_collect, home_delivery, express_delivery, any_store_has_stock, available_to_sell, stores[]{store_number, name, state, url, stock} + counts{inStock, lowStock, outOfStock} + postcode + store_defaulted

**Example request body:**
```json
{
  "variant_id": "71696447",
  "state": "nsw"
}
```

### POST https://api.reefapi.com/target-au/v1/categories — 2 credits
Target Australia's category tree with Target's own product count per category: the top level, or the sub-categories of `parent`, down to `depth` levels. Each `category_id` plugs into `search` as `category`.

**Parameters:**
- `parent` (string, optional) — List the sub-categories of this category id; omit for the top level.
- `depth` (integer, optional, default 1) — How many levels below `parent` to list (1 = direct children).

**Returns:** categories[]{category_id, name, product_count, parent_id, depth, path, has_children} + parent + total_products

**Example request body:**
```json
{
  "depth": 1
}
```

### POST https://api.reefapi.com/target-au/v1/stores — 1 credit
The Target Australia store directory (Target's own store list): store number, name, state and store page. Store numbers plug into `stock` and `product` as `store`.

**Parameters:**
- `state` (enum, optional) — Limit to the stores of one state or territory. [one of: act, nsw, nt, qld, sa, tas, vic, wa]

**Returns:** stores[]{store_number, name, state, url} + count

**Example request body:**
```json
{
  "state": "vic"
}
```

## At scale
- **Volume:** 5M+ requests a day, measured at 60 requests a second across the fleet with no
  central bottleneck. Per-key limits are raised for high-volume accounts; volume pricing on request.
- **Missing a source:** tell us a site we do not cover and it becomes an engine. A customer asked
  for bestprice.gr on 21 Sep 2026 and it was in the catalog on 22 Sep.
- **Support:** 2 minute median time from a question in the live chat to the first answer. Setup
  help included, no support tier to buy.
- **One key, one credit pool** across every API. No per-site plans, no separate subscriptions.

## More
- Try it live, no code: https://reefapi.com/playground?engine=target-au
- Human docs page: https://reefapi.com/docs/target-au
- Overview page: https://reefapi.com/target-au-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
