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

# GET /v1/reports/outclick — your account's outclick events

> Retrieve the API click (outclick) events recorded for your account, enriched with the product, merchant, network, and client data captured at click time.

The `GET /v1/reports/outclick` endpoint returns the outclick events recorded
for your account — **product** clicks by default, or **merchant** clicks with `offer_type=merchant`.
A product event includes the click metadata, the price and provider data captured at click time,
the product name and direct URL from the stored offer snapshot, and the client details; a merchant
event carries the merchant/network identity but no product snapshot (see [Merchant outclicks](#merchant-outclicks)).

Requires a token with **API** product access.

## Endpoint

```
GET /v1/reports/outclick
```

## Key behavior

* Each query is limited to a **24-hour** window and excludes the most recent **5 minutes**.
* Returns **product** and **merchant** outclicks — pick with `offer_type` (defaults to `product`). Promotion outclicks are intentionally excluded.
* All filters are **exact** matches.
* Robot clicks are excluded unless `include_robots=true`.
* Results are ordered newest first (`created_at` descending).
* Prices are returned as floats (e.g. `131.25`).
* Each request bills **one API unit**, regardless of how many rows are returned.

## Merchant outclicks

Pass `offer_type=merchant` to return clicks on **merchant** outclick links — the `outclick` field of a `providers[]` entry (e.g. a homepage link to a service merchant such as HelloFresh or Avis), including AdMedia merchant links. A merchant click carries the merchant identity but **no product snapshot**:

* `offer_type` is `merchant`, and the top-level `merchant` (`id`, `object_id`, `name`) and `network` (`id`, `object_id`, `name`) objects are populated.
* `product` is `null` — a merchant has no offer/feed row, so there is nothing to snapshot.
* `sub_id`, `client.*`, `country`, and `origin_query_parameters` are populated as usual.

Narrow merchant clicks with `merchant_object_id` (`nmer_…`), `network_object_id` (`rnet_…`), or `sub_id`.

## Troubleshooting — a click isn't showing

<Note>
  The most common cause of an empty result right after a test click is the **5-minute window**, not missing data.
</Note>

* **Wait 5 minutes.** `end_at` must be at least 5 minutes in the past, so a click isn't queryable until \~5 minutes after it happens. A window whose `end_at` is older than the click returns nothing.
* **Match the account.** A click is owned by the account whose API key **minted the outclick** (baked in at link-build time), not the one that clicks it. Query with that same key — a different account won't see it.
* **`sub_id` is exact, and stored verbatim.** If you leave the `{AFF_ID}`/`{SUB_ID}` (or `@@@`/`###`) placeholders in the link unreplaced, they're recorded literally (e.g. `sub_id` becomes `{SUB_ID}`), so a tag filter won't match. Replace the slots with real values before clicking.
* **Robots are excluded by default.** Add `include_robots=true` if you're testing with a tool or headless browser.
* **Product-snapshot timing.** The click row is written synchronously, but the `product` snapshot is enriched by a background job — so on a **product** click the row can appear a moment before its `product` block is fully populated under load. Merchant clicks have no snapshot, so nothing lags.

## Headers

<ParamField header="Authorization" type="string" required>
  Bearer token for authentication. Format: `Bearer {your_api_key}`.
</ParamField>

## Query parameters

<ParamField query="start_at" type="string" required>
  Inclusive start of the window. Accepts an RFC 3339 timestamp (e.g. `2026-07-23T00:00:00Z`) or a UTC date (`2026-07-23`). A bare date resolves to midnight UTC. Maximum 64 characters.
</ParamField>

<ParamField query="end_at" type="string" required>
  Exclusive end of the window. Accepts an RFC 3339 timestamp or a UTC date. A bare date resolves to midnight UTC of the next day, so passing the same bare date as `start_at` requests the full UTC day. Must be after `start_at`, no more than 24 hours after `start_at`, and at least 5 minutes in the past. Maximum 64 characters.
</ParamField>

<ParamField query="page" type="integer" default="1">
  The page number to return. Integer, at least 1.
</ParamField>

<ParamField query="per_page" type="integer" default="100">
  The number of events to return per page. Integer from 1 through 1000.
</ParamField>

<ParamField query="offer_type" type="string" default="product">
  `product` or `merchant`. Selects which kind of outclick to return. See [Merchant outclicks](#merchant-outclicks).
</ParamField>

<ParamField query="sub_id" type="string">
  Exact sub ID match. Maximum 1,024 characters.
</ParamField>

<ParamField query="product_id" type="string">
  Exact product ID match. Maximum 1,024 characters.
</ParamField>

<ParamField query="merchant_id" type="string">
  Exact provider (network merchant) ID match. Maximum 255 characters.
</ParamField>

<ParamField query="merchant_object_id" type="string">
  Exact Affiliate.com merchant object ID. Requires the `nmer_` prefix (e.g. `nmer_01khfmtj1vpvy6345xfhwepz9t`).
</ParamField>

<ParamField query="network_id" type="string">
  Exact provider (network) ID match. Maximum 255 characters.
</ParamField>

<ParamField query="network_object_id" type="string">
  Exact Affiliate.com network object ID. Requires the `rnet_` prefix (e.g. `rnet_01kkgbyq466tn06cgev3b1dnaa`).
</ParamField>

<ParamField query="country" type="string">
  Two-letter client country code. Normalized to uppercase.
</ParamField>

<ParamField query="include_robots" type="boolean" default="false">
  When `true`, includes both robot and non-robot clicks. Defaults to `false` (non-robot clicks only).
</ParamField>

<ParamField query="fields" type="string">
  Comma-separated string or `fields[]` array selecting which fields to return. Between 1 and 50 fields. Omitting it returns all fields. Accepts any leaf field path listed under [Response fields](#response-fields), plus the parent paths `product`, `product.urls`, `product.merchant`, `product.network`, and `client` (which select the whole sub-object).
</ParamField>

## Example requests

Retrieve one day of outclicks:

```bash theme={null}
curl --request GET \
  --url 'https://api.affiliate.com/v1/reports/outclick?start_at=2026-07-23T00:00:00Z&end_at=2026-07-23T16:35:00Z&page=1&per_page=100' \
  --header 'Authorization: Bearer {your_api_key}'
```

Select a subset of fields for the full UTC day:

```bash theme={null}
curl --request GET \
  --url 'https://api.affiliate.com/v1/reports/outclick?start_at=2026-07-23&end_at=2026-07-23&fields=id,created_at,product.id,product.final_price,client.country' \
  --header 'Authorization: Bearer {your_api_key}'
```

## Response

```json theme={null}
{
  "meta": {
    "total": 8,
    "from": 1,
    "to": 8,
    "current_page": 1,
    "last_page": 1,
    "per_page": 100,
    "fields": [
      "id",
      "created_at",
      "event_type",
      "offer_type",
      "account_id",
      "team_id",
      "request_url",
      "origin_url",
      "origin_query_parameters",
      "sub_id",
      "trace_id",
      "click_tracking",
      "product.id",
      "product.name",
      "product.urls.direct",
      "product.regular_price",
      "product.final_price",
      "product.on_sale",
      "product.currency",
      "product.availability",
      "product.merchant.id",
      "product.merchant.object_id",
      "product.merchant.name",
      "product.network.id",
      "product.network.object_id",
      "product.network.name",
      "client.country",
      "client.is_robot",
      "client.robot_name",
      "client.device_type",
      "client.browser_name",
      "client.browser_version"
    ],
    "trace_id": "019f928c-677d-7075-889b-1277a9cd4b12"
  },
  "data": [
    {
      "id": "01ky98f5181va0cffv65pgf0rv",
      "created_at": "2026-07-24T05:09:46.000000Z",
      "event_type": "click",
      "offer_type": "product",
      "account_id": "01k12fc58qqr2y71n3dnrz0xcx",
      "team_id": 9,
      "request_url": "https://go.dustin.dk/t/t?a=1755474683&as=@@@&t=2&tk=1&cupa_sku=5020067783&url=https://www.dustin.dk/product/5020067783/folio-case?priceinclusivevat=1",
      "origin_url": "https://4381.click.affili8.dev/a/eyJpdiI6Ii4uLiJ9",
      "origin_query_parameters": {
        "affiliate_id": "@@@",
        "sub_id": null
      },
      "sub_id": null,
      "trace_id": "019f9287-05d8-713e-8fbb-49faeff2f435",
      "click_tracking": false,
      "product": {
        "id": "8663182891802204718",
        "name": "Zagg Folio Case Iphone 13, Iphone 14, Iphone 15, Iphone 16e, Iphone 17e Sort",
        "urls": {
          "direct": "https://www.dustin.dk/product/5020067783/folio-case?priceinclusivevat=1"
        },
        "regular_price": 131.25,
        "final_price": 131,
        "on_sale": true,
        "currency": "DKK",
        "availability": "InStock",
        "merchant": {
          "id": "66318",
          "object_id": "nmer_01khfmtj1vpvy6345xfhwepz9t",
          "name": "Dustin"
        },
        "network": {
          "id": "323",
          "object_id": "rnet_01kkgbyq466tn06cgev3b1dnaa",
          "name": "Adtraction Denmark"
        }
      },
      "client": {
        "country": "US",
        "is_robot": false,
        "robot_name": null,
        "device_type": "desktop",
        "browser_name": "Chrome",
        "browser_version": "150.0.0.0"
      }
    }
  ]
}
```

## Response fields

### `meta` object

<ResponseField name="meta.total" type="integer">
  Total number of events matching the query.
</ResponseField>

<ResponseField name="meta.from" type="integer">
  Index of the first event on the current page. `null` when there are no results.
</ResponseField>

<ResponseField name="meta.to" type="integer">
  Index of the last event on the current page. `null` when there are no results.
</ResponseField>

<ResponseField name="meta.current_page" type="integer">
  The current page number.
</ResponseField>

<ResponseField name="meta.last_page" type="integer">
  The total number of pages.
</ResponseField>

<ResponseField name="meta.per_page" type="integer">
  The number of records per page.
</ResponseField>

<ResponseField name="meta.fields" type="string[]">
  The field paths included in each event.
</ResponseField>

<ResponseField name="meta.trace_id" type="string">
  Unique identifier for this request. Include this value when contacting support.
</ResponseField>

### Event object (`data[]`)

<ResponseField name="id" type="string">
  Unique identifier for the click event.
</ResponseField>

<ResponseField name="created_at" type="string">
  Click timestamp, ISO 8601 (UTC).
</ResponseField>

<ResponseField name="event_type" type="string">
  The event type (e.g. `click`).
</ResponseField>

<ResponseField name="offer_type" type="string">
  The offer type: `product` or `merchant` (matches the `offer_type` filter).
</ResponseField>

<ResponseField name="account_id" type="string">
  The account that owns the click.
</ResponseField>

<ResponseField name="team_id" type="integer">
  The team that owns the click.
</ResponseField>

<ResponseField name="request_url" type="string">
  The provider tracking URL the click was sent to.
</ResponseField>

<ResponseField name="origin_url" type="string">
  The Affiliate.com outclick URL that initiated the redirect.
</ResponseField>

<ResponseField name="origin_query_parameters" type="object">
  Query parameters captured from the origin URL (e.g. `affiliate_id`, `sub_id`).
</ResponseField>

<ResponseField name="sub_id" type="string">
  The sub ID recorded on the click.
</ResponseField>

<ResponseField name="trace_id" type="string">
  Trace identifier for the click.
</ResponseField>

<ResponseField name="click_tracking" type="boolean">
  Whether click tracking was enabled for this outclick.
</ResponseField>

<ResponseField name="merchant" type="object">
  Merchant identity (`id`, `object_id`, `name`). Populated for **merchant** outclicks; on product clicks the merchant is under `product.merchant`.
</ResponseField>

<ResponseField name="network" type="object">
  Network identity (`id`, `object_id`, `name`). Populated for **merchant** outclicks; on product clicks the network is under `product.network`.
</ResponseField>

<ResponseField name="product" type="object">
  The offer snapshot for **product** outclicks. `null` on merchant outclicks.

  <Expandable title="Product object">
    <ResponseField name="id" type="string">
      The product (offer) ID.
    </ResponseField>

    <ResponseField name="name" type="string">
      The product name captured in the offer snapshot.
    </ResponseField>

    <ResponseField name="urls.direct" type="string">
      The direct product URL from the offer snapshot.
    </ResponseField>

    <ResponseField name="regular_price" type="float">
      The regular price at click time.
    </ResponseField>

    <ResponseField name="final_price" type="float">
      The final price at click time.
    </ResponseField>

    <ResponseField name="on_sale" type="boolean">
      Whether the product was on sale at click time.
    </ResponseField>

    <ResponseField name="currency" type="string">
      ISO currency code at click time.
    </ResponseField>

    <ResponseField name="availability" type="string">
      Availability at click time (e.g. `InStock`).
    </ResponseField>

    <ResponseField name="merchant" type="object">
      The merchant (provider) data.

      <Expandable title="Merchant object">
        <ResponseField name="id" type="string">
          The network merchant (provider) ID.
        </ResponseField>

        <ResponseField name="object_id" type="string">
          The Affiliate.com merchant object ID (`nmer_` prefix).
        </ResponseField>

        <ResponseField name="name" type="string">
          The merchant name.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="network" type="object">
      The network (provider) data.

      <Expandable title="Network object">
        <ResponseField name="id" type="string">
          The network (provider) ID.
        </ResponseField>

        <ResponseField name="object_id" type="string">
          The Affiliate.com network object ID (`rnet_` prefix).
        </ResponseField>

        <ResponseField name="name" type="string">
          The network name.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="client" type="object">
  The client (visitor) data captured at click time.

  <Expandable title="Client object">
    <ResponseField name="country" type="string">
      Two-letter client country code.
    </ResponseField>

    <ResponseField name="is_robot" type="boolean">
      Whether the click was identified as a robot.
    </ResponseField>

    <ResponseField name="robot_name" type="string">
      The robot name, when identified.
    </ResponseField>

    <ResponseField name="device_type" type="string">
      The client device type (e.g. `desktop`).
    </ResponseField>

    <ResponseField name="browser_name" type="string">
      The client browser name.
    </ResponseField>

    <ResponseField name="browser_version" type="string">
      The client browser version.
    </ResponseField>
  </Expandable>
</ResponseField>
