> ## Documentation Index
> Fetch the complete documentation index at: https://docs.makelocalads.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Manage products

> Create and maintain the products used by LocalAds workflows.

Products contain the customer-facing information and images LocalAds uses in
creative workflows. Every product belongs to a brand.

## Create a product

`brand_id` and `name` are required. Get the brand ID from
[`GET /brands`](/guides/manage-brands). Add `image_urls` when the product will
be used for image generation.

```bash theme={null}
curl --request POST \
  --url https://makelocalads.com/api/v1/products \
  --header "Authorization: Bearer $LOCALADS_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "brand_id": "1423f915-beca-4c53-a5e4-7c8c99537be9",
    "name": "Hydrating Face Serum",
    "kind": "skincare",
    "image_urls": ["https://cdn.example.com/serum-front.jpg"]
  }'
```

## List products

```bash theme={null}
curl "https://makelocalads.com/api/v1/products?brand_id=1423f915-beca-4c53-a5e4-7c8c99537be9&limit=20" \
  --header "Authorization: Bearer $LOCALADS_API_KEY"
```

The response uses cursor pagination:

```json theme={null}
{
  "data": [
    {
      "id": "a1516a75-9be5-461a-93af-c1896a0a3127",
      "brand_id": "1423f915-beca-4c53-a5e4-7c8c99537be9",
      "name": "Hydrating Face Serum",
      "kind": "skincare",
      "source_url": null,
      "image_urls": ["https://cdn.example.com/serum-front.jpg"],
      "status": "ready",
      "created_at": "2026-07-24T14:30:00.000Z",
      "updated_at": "2026-07-24T14:30:00.000Z"
    }
  ],
  "next_cursor": null
}
```

When `next_cursor` is not `null`, pass it unchanged in the next request:

```bash theme={null}
curl "https://makelocalads.com/api/v1/products?brand_id=1423f915-beca-4c53-a5e4-7c8c99537be9&limit=20&cursor=CURSOR" \
  --header "Authorization: Bearer $LOCALADS_API_KEY"
```

## Retrieve a product

```bash theme={null}
curl https://makelocalads.com/api/v1/products/a1516a75-9be5-461a-93af-c1896a0a3127 \
  --header "Authorization: Bearer $LOCALADS_API_KEY"
```

Resources outside the API key's organization return `404`, just like missing
resources.

## Update a product

Send only the fields that should change:

```bash theme={null}
curl --request PATCH \
  --url https://makelocalads.com/api/v1/products/a1516a75-9be5-461a-93af-c1896a0a3127 \
  --header "Authorization: Bearer $LOCALADS_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "name": "Hydrating Face Serum — 30 ml",
    "image_urls": [
      "https://cdn.example.com/serum-front.jpg",
      "https://cdn.example.com/serum-side.jpg"
    ]
  }'
```

`image_urls` replaces the complete image list. To clear the images, send an
empty array.

## Delete a product

```bash theme={null}
curl --request DELETE \
  --url https://makelocalads.com/api/v1/products/a1516a75-9be5-461a-93af-c1896a0a3127 \
  --header "Authorization: Bearer $LOCALADS_API_KEY"
```

A successful deletion returns `204 No Content`. Deletion is permanent and also
removes resources owned by that product.
