# Products

Revenue and conversions broken down by product or plan.

Source: https://sourceloop.ai/help/api/products/

---

| Endpoint | Method | Path | Permission |
| --- | --- | --- | --- |
| Get products | GET | `/v1/products` | `metrics:read` |

Base URL: `https://app.sourceloop.ai/api/v1`

## Get products

`GET /v1/products`

Per-product sales for a connected store

Requires scope: `metrics:read`

Revenue, units, orders and margin per product, NET of refunds.

Margin covers only the share of revenue whose cost the merchant has set, and
`meta.cost_coverage_pct` reports that share. Below 100 the margin describes
part of the catalogue rather than all of it.

An empty list with `meta.no_data_reason` means no store is connected or no
orders were placed, which is not the same as selling nothing.

### Query parameters

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `website` | string | no | Website domain, e.g. acme.com. Required only when the key covers more than one. |
| `period` | string | no | Plain-language period: "last 30 days", "yesterday", "July 2026", or "2026-07-01..2026-07-31". Ignored when from/to are given. |
| `platform` | string | no |  |
| `limit` | integer | no |  |

### Responses

- `200` One row per product
- `429` Too many requests for this workspace in the current minute. Wait Retry-After seconds and repeat the request unchanged.

### Example (cURL)

```bash
curl -s -X GET "https://app.sourceloop.ai/api/v1/products?website=acme.com&period=last%2030%20days&platform=shopify" \
  -H "Authorization: Bearer $SOURCELOOP_API_KEY"
```

### Example (Node)

```javascript
const res = await fetch(
  "https://app.sourceloop.ai/api/v1/products?website=acme.com&period=last%2030%20days&platform=shopify",
  {
    method: "GET",
    headers: {
      Authorization: `Bearer ${process.env.SOURCELOOP_API_KEY}`,
    },
  },
);

const data = await res.json();
```

### Example (Python)

```python
import os, requests

res = requests.get(
    "https://app.sourceloop.ai/api/v1/products?website=acme.com&period=last%2030%20days&platform=shopify",
    headers={"Authorization": f"Bearer {os.environ['SOURCELOOP_API_KEY']}"},
)
data = res.json()
```
