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

> ## Agent Instructions
> For new direct REST integrations, use the v2026-04 surfaces. The @fluid-app FairShare SDK continues to use its own published public-v2025-06 contract.
> Authenticate with the header Authorization: Bearer <token>; public storefront read endpoints require no auth.
> Lists use cursor pagination via the page[cursor] and page[limit] query params; follow meta.pagination.next_cursor until it is null.
> When the same operation exists on more than one surface, use the newest: dated API versions are newer than unversioned ones, and later dates win (v2026-04 > v2025-06 > unversioned v0/v1.1). Fall back to a legacy or unversioned operation only when no newer versioned equivalent exists — the company-v0 notes below list the known superseded operations. /api/company/v1 and /api/v1/... paths are documented in no spec here and must never be used (/api/v1.1/... is distinct and documented in company-v0). Use page/per_page offset pagination only where a spec documents it — in practice the unversioned company-v0 admin surface; every versioned surface uses cursor pagination.
> The OpenAPI specs under api-reference/ are the authoritative contracts; prefer them over prose when in doubt. api-reference/storefront-v2026-04.yaml covers the v2026-04 storefront surface (/api/v202604/... paths); api-reference/auth-v0.yaml covers the unversioned auth surface (/api/... paths — authentication, MFA, social auth, and token exchange); api-reference/checkout-v2026-04.yaml covers the v2026-04 checkout surface (/api/checkout/v2026-04/... paths — carts, cart auth, discounts, items, subscriptions, orders, enrollments, and store config); api-reference/public-v2025-06.yaml covers the Public SDK surface used by the @fluid-app FairShare SDK, including its parallel cart lifecycle, browser integrations, versioned payment callbacks, unversioned public utilities, and the cart price-override operation; api-reference/payment-v2026-04.yaml covers the v2026-04 payment gateway admin surface (/api/payment/v2026-04/... paths, bearer-authenticated — gateway CRUD, gateway purchase/authorize/$0-verify, transaction list/show and capture/void/credit, and merchant payment configuration); api-reference/payments-v2026-04.yaml covers the v2026-04 cart payment surface (/api/payments/v2026-04/carts/{cart_token}/... paths, authenticated by the cart token in the path with no bearer — payment-method selection, VGS card tokenization, 3D Secure verification, and PayPal/Braintree/Klarna/Apple Pay flows); api-reference/commerce-v2026-04.yaml covers the v2026-04 commerce order-editing surface (/api/v202604/orders/{order_id}/edits paths, bearer-authenticated — post-checkout order edits that atomically insert items and add adjustments/discounts, with an optional dry-run preview); api-reference/webhooks-v0.yaml covers the unversioned webhooks surface (/api/... paths — webhook registration, delivery payloads, callback registrations, company events, and webhook/callback schemas); api-reference/company-v0.yaml covers the legacy unversioned company admin surface (/api/... paths, bearer-authenticated — company settings and management, customers, users, roles, subscription plans, subscription bundles, subscriptions, media, pages, catch-ups, inventory levels, domains, agreements, and admin order actions). company-v0 caveats: it is the legacy v0 admin contract and its lists use flat page/per_page offset pagination, which is expected there despite the general cursor-pagination rule; where an operation exists in both company-v0 and a versioned spec, prefer the versioned spec — the subscriptions lifecycle (list/create/show/update, cancel, pause, reactivate, resume, retry, skip, failed-cycle-waiver, discounts) and subscription bundles are superseded by checkout-v2026-04, and company pages/media CRUD plus the public pages, categories, products, and media list endpoints are superseded by storefront-v2026-04. Subscription plan management (/api/subscription_plans, resource-wrapped {"subscription_plan": {...}} bodies) exists only in company-v0.
> Successful responses wrap the resource payload alongside a top-level integer status and a meta object.

# Get traffic campaigns

> Returns the store's UTM-tagged traffic broken down by campaign for a
named reporting period.

The payload carries the resolved period window, the tagged-traffic
summary headline (distinct tagged visitors, their share of all
visitors, and the number of active campaigns), the ranked per-campaign
split keyed by the (campaign, source, medium) tuple with a trailing
"(other)" row folding the tail, and the five per-dimension UTM rankings
(sources, mediums, campaigns, contents, terms).




## OpenAPI

````yaml /api-reference/company-v0.yaml get /api/analytics/traffic/campaigns
openapi: 3.1.0
info:
  title: Fluid Company API
  version: v0
  contact:
    email: support@fluid.app
  license:
    name: Proprietary
    identifier: LicenseRef-Proprietary
servers:
  - url: https://api.fluid.app
  - url: https://{company}.fluid.app
    description: Production server with company subdomain
    variables:
      company:
        default: myco
        description: Company subdomain
security: []
paths:
  /api/analytics/traffic/campaigns:
    get:
      tags:
        - analytics
      summary: Get traffic campaigns
      description: |
        Returns the store's UTM-tagged traffic broken down by campaign for a
        named reporting period.

        The payload carries the resolved period window, the tagged-traffic
        summary headline (distinct tagged visitors, their share of all
        visitors, and the number of active campaigns), the ranked per-campaign
        split keyed by the (campaign, source, medium) tuple with a trailing
        "(other)" row folding the tail, and the five per-dimension UTM rankings
        (sources, mediums, campaigns, contents, terms).
      operationId: company_v0_get_analytics_traffic_campaigns
      parameters:
        - name: period
          in: query
          required: false
          description: |
            Named reporting period (default last_30_days). Supported names:
            today, last_7_days, last_30_days, last_90_days, last_12_months,
            this_month, last_month. An unsupported name returns 422.
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompanyTrafficCampaignsResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedResponse'
        '422':
          description: Unsupported period
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorResponse'
      security:
        - bearer_auth: []
components:
  schemas:
    CompanyTrafficCampaignsResponse:
      description: >-
        Store-traffic campaigns for a period — the resolved window, the
        tagged-traffic summary headline, the ranked per-campaign split, and the
        five per-dimension UTM rankings, wrapped in the standard API response
        envelope.
      type: object
      additionalProperties: false
      required:
        - period
        - summary
        - campaigns
        - utm
        - status
        - meta
      properties:
        period:
          type: object
          additionalProperties: false
          required:
            - name
            - starts_on
            - ends_on
            - bucket
          properties:
            name:
              type: string
              description: The resolved period name (e.g. last_30_days).
            starts_on:
              type: string
              format: date
              description: Inclusive first day of the window (YYYY-MM-DD, UTC).
            ends_on:
              type: string
              format: date
              description: Inclusive last day of the window (YYYY-MM-DD, UTC).
            bucket:
              type: string
              description: The bucket granularity of the period window (always "day").
        summary:
          type: object
          additionalProperties: false
          required:
            - tagged_visitors
            - tagged_share
            - active_campaigns
          properties:
            tagged_visitors:
              type: integer
              description: Distinct bot-free visitors whose visit carried any UTM value.
            tagged_share:
              type: number
              description: >-
                tagged_visitors over the window's total distinct visitors, in
                the range 0 to 1.
            active_campaigns:
              type: integer
              description: >-
                Count of distinct non-blank utm_campaign values seen in the
                window.
        campaigns:
          type: array
          description: >-
            Campaigns ranked by distinct visitors, keyed by the (campaign,
            source, medium) tuple, optionally ending in an "(other)" row folding
            the tail.
          items:
            type: object
            additionalProperties: false
            required:
              - name
              - source
              - medium
              - visitors
              - page_views
              - other
              - orders
              - revenue
              - conversion_rate
            properties:
              name:
                type: string
                description: The utm_campaign value, or "(other)" for the folded tail.
              source:
                type:
                  - string
                  - 'null'
                description: >-
                  The utm_source value, or null (including on the "(other)"
                  row).
              medium:
                type:
                  - string
                  - 'null'
                description: >-
                  The utm_medium value, or null (including on the "(other)"
                  row).
              visitors:
                type: integer
                description: Distinct bot-free visitors for the tuple.
              page_views:
                type: integer
                description: Bot-free page views for the tuple.
              other:
                type: boolean
                description: >-
                  True only on the synthetic (other) tail row; false on real
                  campaigns.
              orders:
                type: integer
                description: >-
                  Orders attributed to this campaign tuple that reached paid,
                  counted over the conversion-capture-forward part of the window
                  — zero for a window entirely before the company's first
                  stamped order. On the "(other)" row, a true aggregate over the
                  same folded tuples, never the total minus the listed rows.
                  Campaign rows cover conversions whose tuple appears in the
                  window's ranking or its "(other)" tail, so the campaign totals
                  can undercount the channel totals in the Sources view when few
                  tuples ranked.
              revenue:
                type: string
                description: >-
                  Revenue from those orders, as a decimal string in the platform
                  base currency (the sum of each order's amount_in_base),
                  rounded once to the base currency's minor units.
              conversion_rate:
                type:
                  - number
                  - 'null'
                minimum: 0
                description: >-
                  Those orders divided by the row's distinct visitors over the
                  conversion-capture-forward part of the window, rounded to four
                  decimals. Null when that visitor count is zero, including
                  every window with no conversion-capture-forward day. Normally
                  at most 1, and higher only when a campaign's visitors placed
                  more than one order each.
        utm:
          type: object
          additionalProperties: false
          required:
            - sources
            - mediums
            - campaigns
            - contents
            - terms
          properties:
            sources:
              type: array
              description: >-
                utm_source values ranked by distinct visitors, optionally ending
                in an "(other)" row folding the tail.
              items:
                type: object
                additionalProperties: false
                required:
                  - value
                  - visitors
                  - page_views
                  - other
                properties:
                  value:
                    type: string
                    description: The utm_source value, or "(other)" for the folded tail.
                  visitors:
                    type: integer
                    description: Distinct bot-free visitors for the value.
                  page_views:
                    type: integer
                    description: Bot-free page views for the value.
                  other:
                    type: boolean
                    description: True only on the synthetic (other) tail row.
            mediums:
              type: array
              description: >-
                utm_medium values ranked by distinct visitors, optionally ending
                in an "(other)" row folding the tail.
              items:
                type: object
                additionalProperties: false
                required:
                  - value
                  - visitors
                  - page_views
                  - other
                properties:
                  value:
                    type: string
                    description: The utm_medium value, or "(other)" for the folded tail.
                  visitors:
                    type: integer
                    description: Distinct bot-free visitors for the value.
                  page_views:
                    type: integer
                    description: Bot-free page views for the value.
                  other:
                    type: boolean
                    description: True only on the synthetic (other) tail row.
            campaigns:
              type: array
              description: >-
                utm_campaign values ranked by distinct visitors, optionally
                ending in an "(other)" row folding the tail.
              items:
                type: object
                additionalProperties: false
                required:
                  - value
                  - visitors
                  - page_views
                  - other
                properties:
                  value:
                    type: string
                    description: The utm_campaign value, or "(other)" for the folded tail.
                  visitors:
                    type: integer
                    description: Distinct bot-free visitors for the value.
                  page_views:
                    type: integer
                    description: Bot-free page views for the value.
                  other:
                    type: boolean
                    description: True only on the synthetic (other) tail row.
            contents:
              type: array
              description: >-
                utm_content values ranked by distinct visitors, optionally
                ending in an "(other)" row folding the tail.
              items:
                type: object
                additionalProperties: false
                required:
                  - value
                  - visitors
                  - page_views
                  - other
                properties:
                  value:
                    type: string
                    description: The utm_content value, or "(other)" for the folded tail.
                  visitors:
                    type: integer
                    description: Distinct bot-free visitors for the value.
                  page_views:
                    type: integer
                    description: Bot-free page views for the value.
                  other:
                    type: boolean
                    description: True only on the synthetic (other) tail row.
            terms:
              type: array
              description: >-
                utm_term values ranked by distinct visitors, optionally ending
                in an "(other)" row folding the tail.
              items:
                type: object
                additionalProperties: false
                required:
                  - value
                  - visitors
                  - page_views
                  - other
                properties:
                  value:
                    type: string
                    description: The utm_term value, or "(other)" for the folded tail.
                  visitors:
                    type: integer
                    description: Distinct bot-free visitors for the value.
                  page_views:
                    type: integer
                    description: Bot-free page views for the value.
                  other:
                    type: boolean
                    description: True only on the synthetic (other) tail row.
        status:
          type: integer
          description: The HTTP status code echoed in the response envelope.
        meta:
          type: object
          additionalProperties: false
          required:
            - request_uuid
            - timestamp
          properties:
            request_uuid:
              type:
                - string
                - 'null'
              description: The request correlation id, or null when unset.
            timestamp:
              type: string
              format: date-time
              description: ISO 8601 timestamp when the response was built.
    UnauthorizedResponse:
      type: object
      properties:
        message:
          type: string
      required:
        - message
    StandardErrorResponse:
      description: >-
        Common legacy error response envelope. Older endpoints may return one or
        more of these fields depending on the controller path.
      type: object
      properties:
        message:
          type: string
        error:
          $ref: '#/components/schemas/ErrorMessage'
        error_message:
          $ref: '#/components/schemas/ErrorMessage'
        errors:
          $ref: '#/components/schemas/ErrorBag'
        meta:
          $ref: '#/components/schemas/Meta'
      additionalProperties:
        $ref: '#/components/schemas/JsonValue'
    ErrorMessage:
      description: An API error message represented as text or structured JSON.
      anyOf:
        - type: string
        - $ref: '#/components/schemas/ErrorBag'
        - type: 'null'
    ErrorBag:
      description: >-
        Validation errors keyed by field, a list of errors, a single error
        message, or null when no structured error details are available.
      anyOf:
        - type: string
        - type: array
          items:
            $ref: '#/components/schemas/ErrorValue'
        - type: object
          additionalProperties:
            $ref: '#/components/schemas/ErrorValue'
        - type: 'null'
    Meta:
      type:
        - object
        - 'null'
      properties:
        request_id:
          type:
            - string
            - number
            - integer
            - 'null'
        timestamp:
          type:
            - string
            - number
            - integer
            - 'null'
          format: date-time
    JsonValue:
      description: >-
        Any valid JSON value for provider, integration, theme, metadata, or
        other dynamic payloads whose keys are not fixed by the API contract.
      anyOf:
        - type: string
        - type: number
        - type: boolean
        - type: 'null'
        - type: array
          items:
            $ref: '#/components/schemas/JsonValue'
        - type: object
          additionalProperties:
            $ref: '#/components/schemas/JsonValue'
    ErrorValue:
      description: A validation or API error value.
      anyOf:
        - type: string
        - type: array
          items:
            type: string
        - type: object
          additionalProperties:
            $ref: '#/components/schemas/JsonValue'
  securitySchemes:
    bearer_auth:
      type: http
      scheme: bearer
      description: Bearer token authentication

````