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

# Conversion Analytics

> Unified conversion details, leads, sales, funnel, and composite metrics

# Conversion Analytics

Conversion analytics routes expose conversion summaries and tab-specific views used across workspace, campaign, and link analytics pages.

## Core endpoints

* `GET /api/analytics/conversions/details`
* `GET /api/analytics/leads`
* `GET /api/analytics/leads/timeseries`
* `GET /api/analytics/leads/breakdown`
* `GET /api/analytics/sales`
* `GET /api/analytics/sales/timeseries`
* `GET /api/analytics/sales/breakdown`
* `GET /api/analytics/composite`
* `GET /api/analytics/funnel`

## Shared filters

<ParamField query="days" type="number" default="30">
  Date-range window.
</ParamField>

<ParamField query="campaignId" type="string">
  Optional campaign scope.
</ParamField>

<ParamField query="linkId" type="string">
  Optional link scope.
</ParamField>

<ParamField query="timezone" type="string">
  Optional timezone for time-bucketed responses.
</ParamField>

<ParamField query="currency" type="string">
  Display currency on conversion details where applicable.
</ParamField>

## Conversion details extras

`/conversions/details` also supports:

* `pixelId` (legacy pixel conversion scope)
* `granularity` (`day` or `month`)
* `limit` (recent rows / by-rule slices)

Response includes:

* `summary`
* `breakdown`
* `timeseries`
* `by_rule`
* `recent_conversions`

## Lead and sale semantics

* Lead analytics represent non-revenue conversions.
* Sale analytics represent revenue-bearing conversions.
* Funnel responses include monotonic normalized stages (`clicks >= leads >= sales`) plus raw stage counts.
* Composite response returns clicks + lead + sale totals in one payload.

## Typical failures

* `500 CONFIG_ERROR` when analytics backend is unavailable
* `500 INTERNAL_ERROR` on upstream query failures
* `403` when permission or plan access is insufficient
