# Target Products API

Target products with title, brand, URL, price and list price. Search by keyword or pass product URLs.

**Pricing:** $0.002 per product

**Endpoint:** `POST /v1/data/target/products/run`

**Auth:** `Authorization: Bearer mk_live_...`

## Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `queries` | array | No | One or more search keywords. One request reads them all. |
| `productUrls` | array | No | One or more product urls. One request reads them all. |
| `maxResults` | integer | No | How many products to return in total. Defaults to 100; use 0 for all. |
| `zipCode` | string | No | Optional 5-digit US zip code, for example 10001. It picks the nearest Target store for pickup stock. Pickup Availability, Pickup Store ID, Pickup Store Name, Pickup Quantity and Scheduled Delivery Availability fill only when a zip code is given; prices stay Target's online prices either way. |

## Example

`?wait=true` holds the request open until the run finishes (up to 60s) and returns the rows inline: one request, no polling.

```bash
curl -X POST "https://api.mindcase.co/v1/data/target/products/run?wait=true" \
  -H "Authorization: Bearer mk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"params":{}}'
```

```python
import requests

resp = requests.post(
    "https://api.mindcase.co/v1/data/target/products/run",
    params={"wait": "true"},
    headers={"Authorization": "Bearer mk_live_YOUR_API_KEY"},
    json={"params": {}},
)
rows = resp.json()["data"]
```

## Longer runs

If the run is still going at the 60s ceiling you get back `{ job_id, status: "running" }` instead of rows (same if the result is over 100 rows; those come back `truncated`). Poll with that `job_id`:

```bash
# 1) check status
curl https://api.mindcase.co/v1/jobs/JOB_ID \
  -H "Authorization: Bearer mk_live_YOUR_API_KEY"

# 2) when status == completed, fetch the rows
curl https://api.mindcase.co/v1/jobs/JOB_ID/results \
  -H "Authorization: Bearer mk_live_YOUR_API_KEY"
```

Full API reference (auth, jobs, balance, SDKs, MCP): https://mindcase.co/skills.md

## Response columns

| Field | Display name | Type |
|-------|--------------|------|
| `tcin` | Tcin | text |
| `title` | Title | text |
| `brand` | Brand | text |
| `productUrl` | Product URL | url |
| `price` | Price | number |
| `currency` | Currency | text |
| `listPrice` | List Price | number |
| `priceLabel` | Price Label | text |
| `priceType` | Price Type | text |
| `unitPrice` | Unit Price | text |
| `unitPriceUnit` | Unit Price Unit | text |
| `promotions` | Promotions | object_array |
| `rating` | Rating | rating |
| `ratingsCount` | Ratings Count | number |
| `ratingDistribution` | Rating Distribution | object |
| `availability` | Availability | text |
| `soldOut` | Sold Out | boolean |
| `outOfStockInAllStores` | Out Of Stock In All Stores | boolean |
| `pickupAvailability` | Pickup Availability | text |
| `pickupStoreId` | Pickup Store ID | text |
| `pickupStoreName` | Pickup Store Name | text |
| `pickupQuantity` | Pickup Quantity | number |
| `scheduledDeliveryAvailability` | Scheduled Delivery Availability | text |
| `shipsBy` | Ships By | date |
| `mainImage` | Main Image | image |
| `images` | Images | array |
| `dpci` | Dpci | text |
| `upc` | Upc | text |
| `itemType` | Item Type | text |
| `departmentId` | Department ID | text |
| `classId` | Class ID | text |
| `categoryId` | Category ID | text |
| `features` | Features | array |
| `specifications` | Specifications | array |
| `description` | Description | text |
| `searchTerm` | Search Term | text |
| `searchRank` | Search Rank | number |
