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

# Reporting

Pull click and commission data for your account. Use it to power dashboards, reconcile payouts, or feed analytics into your own systems.

Both endpoints authenticate with your Channel3 API key (`x-api-key`).

## Endpoints

| Endpoint                                                                     | What you get                                |
| ---------------------------------------------------------------------------- | ------------------------------------------- |
| [`GET /v1/reporting/clicks`](/api-reference/v1/reporting-clicks)             | Click events plus a total-click summary     |
| [`GET /v1/reporting/transactions`](/api-reference/v1/reporting-transactions) | CPA transactions plus net commission totals |

Commission amounts on transactions are **your net share** after Channel3's take rate. See [Commissions](/commissions) for how payouts work.

## Date windows

Pass `start_date` and `end_date` as ISO 8601 datetimes:

* Omit both to default to the **last 30 days** ending now.
* Provide **both** or **neither** — a single bound returns `400`.
* Maximum window is **90 days**.
* Offset-aware values (e.g. `2026-08-01T00:00:00-04:00`) are converted to UTC. Naive values are treated as UTC.
* Responses echo the resolved window as UTC (`...Z`).

## Pagination

Results are newest-first. Use `page` (1-indexed) and `limit` (1–100, default 20). Each response includes `total_count`, `has_more`, and a `summary` for the full window (not just the current page).

## List clicks

<CodeGroup>
  ```typescript TypeScript theme={null}
  import Channel3 from "@channel3/sdk";

  const client = new Channel3();

  const clicks = await client.reporting.clicks.list({
    start_date: "2026-07-01T00:00:00Z",
    end_date: "2026-07-31T23:59:59Z",
    page: 1,
    limit: 50,
  });

  console.log(clicks.summary.total_clicks);
  for (const click of clicks.items) {
    console.log(click.timestamp, click.product?.title, click.country);
  }
  ```

  ```python Python theme={null}
  from channel3_sdk import Channel3

  client = Channel3()

  clicks = client.reporting.clicks.list(
      start_date="2026-07-01T00:00:00Z",
      end_date="2026-07-31T23:59:59Z",
      page=1,
      limit=50,
  )

  print(clicks.summary.total_clicks)
  for click in clicks.items:
      print(click.timestamp, click.product, click.country)
  ```

  ```bash cURL theme={null}
  curl "https://api.trychannel3.com/v1/reporting/clicks?start_date=2026-07-01T00:00:00Z&end_date=2026-07-31T23:59:59Z&page=1&limit=50" \
    -H "x-api-key: $CHANNEL3_API_KEY"
  ```
</CodeGroup>

Each click includes an `id`, `timestamp`, optional geo (`city` / `country`), and a compact `product` when we can match one (`id`, `title`, `image_url`).

## List transactions

<CodeGroup>
  ```typescript TypeScript theme={null}
  const transactions = await client.reporting.transactions.list({
    start_date: "2026-07-01T00:00:00Z",
    end_date: "2026-07-31T23:59:59Z",
  });

  console.log(transactions.summary);
  // { total_count, total_commission, pending_commission, paid_commission }

  for (const txn of transactions.items) {
    console.log(
      txn.purchased_at,
      txn.status,
      txn.commission_amount,
      txn.brand_name,
    );
  }
  ```

  ```python Python theme={null}
  transactions = client.reporting.transactions.list(
      start_date="2026-07-01T00:00:00Z",
      end_date="2026-07-31T23:59:59Z",
  )

  print(transactions.summary)
  for txn in transactions.items:
      print(txn.purchased_at, txn.status, txn.commission_amount, txn.brand_name)
  ```

  ```bash cURL theme={null}
  curl "https://api.trychannel3.com/v1/reporting/transactions?start_date=2026-07-01T00:00:00Z&end_date=2026-07-31T23:59:59Z" \
    -H "x-api-key: $CHANNEL3_API_KEY"
  ```
</CodeGroup>

### Transaction status

| Status    | Meaning                                                                                          |
| --------- | ------------------------------------------------------------------------------------------------ |
| `pending` | Not yet paid out — includes network-approved commissions waiting on the retailer's return window |
| `paid`    | Commission has been paid out                                                                     |

The summary breaks out `pending_commission` and `paid_commission`, and `total_commission` is their sum.

## Related

* [Commissions](/commissions) — how attribution and payouts work
* [API reference: clicks](/api-reference/v1/reporting-clicks)
* [API reference: transactions](/api-reference/v1/reporting-transactions)
