---
title: "Get traffic sources"
method: GET
path: "/v3/web-analytics/sources"
tags: ["Web Analytics"]
---

# Get traffic sources

`GET /v3/web-analytics/sources`

Visit attribution grouped by the selected UTM dimension. Preserve special bucket kinds and null unavailable metrics. Requires web_analytics:read. The authenticated credential determines the business; no business_id override is accepted. Reporting and scope-option calls share a 600-request/hour limit per API key or OAuth installation, in addition to the normal burst and hourly limits. Responses contain recorded analytics, which may be lower than actual traffic because of consent choices, self-traffic exclusion, blockers, and unavailable attribution.

## Query parameters

- `from` string, date, required
- `to` string, date, required
- `timezone` string
- `store_id` integer
- `entity_type` 'landing_page' | 'product' | 'bundle_price_option' | 'store_home' | 'cart' | 'checkout' | 'payment_link' | 'order_detail' | 'order_success' | 'order_invoice' — Customer-facing page surface. The owner is a landing page, product, bundle price option, store, or protected payment-link scope; order surfaces use the store owner, never an order ID.
- `entity_id` string
- `entity_path` string
- `page_id` integer
- `page_host` string
- `page_path` string
- `ad_click` 'paid' | 'organic' | 'meta' | 'google' | 'tiktok'
- `limit` integer
- `utm_type` 'source' | 'medium' | 'campaign' | 'content' | 'term'

## Response `200`

Success

- WebAnalyticsSources
  - `data` WebAnalyticsSource[], required
    - `utm_type` 'source' | 'medium' | 'campaign' | 'content' | 'term', required
    - `bucket_kind` 'direct' | 'label' | 'unknown', required — Use bucket_kind together with the exact value to identify a bucket. A literal label named Direct or Unknown is distinct from the special direct or unknown bucket.
    - `value` string, required — Decoded attribution label, empty for direct, or Unknown for unresolved labels.
    - `traffic_status` 'available' | 'unavailable', required
    - `revenue_status` 'available' | 'unavailable', required
    - `views` integer, nullable, required
    - `visitors` integer, nullable, required
    - `sessions` integer, nullable, required
    - `attribution` 'first_touch', required
  - `is_paginated` false, required

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `429` — Too Many Requests. Storefront public requests using `X-Scalev-Storefront-Api-Key` or `X-Scalev-Guest-Token` are rate-limited as direct client/browser requests. Machine-authenticated business requests are rate-limited per API key or OAuth installation. Rate-limit responses may be plain text instead of the normal JSON error shape.

## Changes

- **2026-09-20** `af4231e0cad9` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/scalev/apis/nexus-commerce-api/changes/v3/web-analytics/sources/get.md)

---

[API](https://skmtc.dev/scalev/apis/nexus-commerce-api.md) · [All operations](https://skmtc.dev/scalev/apis/nexus-commerce-api/llms.txt) · [OpenAPI document](https://skmtc.dev/scalev/apis/nexus-commerce-api/revisions/215156c4eee0?raw)
