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

# Query reports

> Returns aggregate performance grouped by your chosen dimensions. Use it to compare campaigns, destinations, and traffic segments. Filter and sort the results to investigate a specific question.

**Dimensions** (`dimensions`, comma-separated):

- Time: `day`, `hour`, `month`, `dayOfWeek`.
- Entities: `campaign`, `traffic`, `landing`, `offer`, `affiliateNetwork`, `rotator`, `rotatorPath`.
- Device: `deviceType`, `deviceBrand`, `deviceModel`, `osFamily`, `osVersion`, `browserName`, `browserVersion`.
- Location and network: `country`, `continent`, `region`, `city`, `timezone`, `language`, `ipType`, `asn`, `asnOrg`, `isp`, `colo`, `connType`, `connSpeed`.
- Traffic quality: `threat`, `isBot`.
- Referrer: `refDomain`.
- Custom source parameters: `token1`..`token15`.
- Tags: `tag`, which requires a single campaign filter and a base dimension.

**Metrics** (`metrics`, comma-separated): `visits`, `uniqueVisits`, `lpclicks`, `uniqueClicks`, `ctr`, `uctr`, `conversions`, `cr`, `cv`, `ucr`, `ucv`, `revenue`, `cost`, `profit`, `roi`, `profitMargin`, `epv`, `epc`, `epa`, `epuc`, `cpv`, `cpc`, `cpa`, `cpuc`, `ppuc`, `suspicious`, `suspiciousPct`, and per-goal breakdowns `event1`..`event10`, `revenue1`..`revenue10`, `cost1`..`cost10`, `value1`..`value10`.

Raw event dimensions like `id`, `external`, `ip`, `refUrl` and other non-rollup fields are not supported here. Use `/api/v1/events` for raw inspection. Row keys in the response match the requested dimension and metric IDs.



## OpenAPI

````yaml openapi.public.yaml GET /api/v1/reports
openapi: 3.0.3
info:
  title: Metricanic API
  version: 1.0.0
  description: >
    # Metricanic API


    Use the Metricanic REST API to manage campaigns, traffic sources, affiliate
    networks, landings, offers and rotators, and to read performance reports and
    individual events.


    Base URL: `https://panel.metricanic.com/api/v1`. Requests require an
    account-scoped Bearer key created in **Profile → API keys**. Use `read` for
    GET requests or `write` for supported mutations. Keys are intended for
    server-side integrations. Cross-origin browser writes are rejected.


    Start with the [API
    quickstart](https://docs.metricanic.com/api-reference/introduction), then
    follow the guides for
    [authentication](https://docs.metricanic.com/api-reference/authentication),
    [reports and event
    pagination](https://docs.metricanic.com/api-reference/reports-and-events),
    and [errors and retries](https://docs.metricanic.com/api-reference/errors).


    Only the operations in this specification are supported under `/api/v1`.
    Individual endpoint schemas define the request and response shapes. List
    endpoints do not all share the same pagination model. The product's OAuth
    MCP connection has separate, read-only capabilities.
  license:
    name: Proprietary
    url: https://metricanic.com/legal/terms
servers:
  - url: https://panel.metricanic.com
security:
  - bearerAuth: []
tags:
  - name: Auth
    description: Authentication and session endpoints.
  - name: Campaigns
    description: Campaign and campaign-related management endpoints.
  - name: Landings
    description: Landing page management endpoints.
  - name: Offers
    description: Offer management endpoints.
  - name: Reports
    description: Aggregated reporting and chart endpoints.
  - name: Rotators
    description: Rotator setup and routing-rule endpoints.
  - name: TrafficSources
    description: Traffic source configuration endpoints.
  - name: AffiliateNetworks
    description: Affiliate network management endpoints.
  - name: Events
    description: Raw event and error inspection endpoints.
paths:
  /api/v1/reports:
    get:
      tags:
        - Reports
      summary: Query reports
      description: >-
        Returns aggregate performance grouped by your chosen dimensions. Use it
        to compare campaigns, destinations, and traffic segments. Filter and
        sort the results to investigate a specific question.


        **Dimensions** (`dimensions`, comma-separated):


        - Time: `day`, `hour`, `month`, `dayOfWeek`.

        - Entities: `campaign`, `traffic`, `landing`, `offer`,
        `affiliateNetwork`, `rotator`, `rotatorPath`.

        - Device: `deviceType`, `deviceBrand`, `deviceModel`, `osFamily`,
        `osVersion`, `browserName`, `browserVersion`.

        - Location and network: `country`, `continent`, `region`, `city`,
        `timezone`, `language`, `ipType`, `asn`, `asnOrg`, `isp`, `colo`,
        `connType`, `connSpeed`.

        - Traffic quality: `threat`, `isBot`.

        - Referrer: `refDomain`.

        - Custom source parameters: `token1`..`token15`.

        - Tags: `tag`, which requires a single campaign filter and a base
        dimension.


        **Metrics** (`metrics`, comma-separated): `visits`, `uniqueVisits`,
        `lpclicks`, `uniqueClicks`, `ctr`, `uctr`, `conversions`, `cr`, `cv`,
        `ucr`, `ucv`, `revenue`, `cost`, `profit`, `roi`, `profitMargin`, `epv`,
        `epc`, `epa`, `epuc`, `cpv`, `cpc`, `cpa`, `cpuc`, `ppuc`, `suspicious`,
        `suspiciousPct`, and per-goal breakdowns `event1`..`event10`,
        `revenue1`..`revenue10`, `cost1`..`cost10`, `value1`..`value10`.


        Raw event dimensions like `id`, `external`, `ip`, `refUrl` and other
        non-rollup fields are not supported here. Use `/api/v1/events` for raw
        inspection. Row keys in the response match the requested dimension and
        metric IDs.
      operationId: queryReports
      parameters:
        - in: query
          name: timezone
          description: >-
            IANA timezone for date bucketing and range boundaries. Defaults to
            the account timezone when omitted. Supply it explicitly for
            reproducible reports.
          schema:
            type: string
        - in: query
          name: filter
          description: >-
            Comma-separated filter expressions, each URL-encoded as
            `field<op>value[|value2...]` where `<op>` is one of `=`, `!=`, `>`,
            `<`. Example: `filter=country=US|CA,ctr>0.05`. Field is any report
            dimension or metric. Max 6 filters, 1000 values per filter.
          schema:
            type: string
        - in: query
          name: dimensions
          description: >-
            Comma-separated aggregate report dimensions. Raw event dimensions
            are rejected. `tag` is a synthetic report column and requires a
            single campaign plus a base dimension.
          schema:
            type: string
        - in: query
          name: metrics
          schema:
            type: string
        - in: query
          name: status
          schema:
            type: string
            enum:
              - all
              - active
              - archived
        - in: query
          name: from
          schema:
            type: string
        - in: query
          name: to
          schema:
            type: string
        - in: query
          name: limit
          schema:
            type: integer
            minimum: 1
            maximum: 1000
            default: 100
        - in: query
          name: offset
          schema:
            type: integer
            minimum: 0
            default: 0
        - in: query
          name: totals
          schema:
            type: string
        - in: query
          name: sortBy
          schema:
            type: string
        - in: query
          name: sortDir
          schema:
            type: string
            enum:
              - asc
              - desc
        - in: query
          name: primaryDimension
          schema:
            type: string
          description: Canonical dimension id used for tagging.
      responses:
        '200':
          description: Report rows
          content:
            application/json:
              example:
                ok: true
                data:
                  meta:
                    limit: 100
                    offset: 0
                    totalRows: 1
                    timezone: UTC
                    totals:
                      visits: 1520
                      conversions: 12
                      cost: 18.24
                      revenue: 54
                  rows:
                    - campaign: 1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d
                      visits: 1520
                      conversions: 12
                      cost: 18.24
                      revenue: 54
              schema:
                $ref: '#/components/schemas/ReportListResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          $ref: '#/components/responses/RateLimitedError'
        '503':
          $ref: '#/components/responses/ServiceUnavailableError'
        default:
          $ref: '#/components/responses/ErrorResponse'
components:
  schemas:
    ReportListResponse:
      type: object
      properties:
        ok:
          type: boolean
          enum:
            - true
        data:
          type: object
          properties:
            meta:
              type: object
              properties:
                limit:
                  type: integer
                offset:
                  type: integer
                totalRows:
                  type: integer
                timezone:
                  type: string
                totals:
                  type: object
                  additionalProperties: true
                labels:
                  type: object
                  additionalProperties: true
              additionalProperties: false
            rows:
              type: array
              items:
                type: object
          additionalProperties: false
      required:
        - ok
        - data
      additionalProperties: false
    ErrorResponse:
      type: object
      properties:
        ok:
          type: boolean
          enum:
            - false
        error:
          type: object
          properties:
            code:
              type: string
            message:
              type: string
            details:
              type: object
              additionalProperties: true
          required:
            - code
            - message
          additionalProperties: false
        requestId:
          type: string
      required:
        - ok
        - error
      additionalProperties: false
  responses:
    RateLimitedError:
      description: Rate limit exceeded.
      headers:
        Retry-After:
          description: Seconds to wait before retrying when available.
          schema:
            type: string
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    ServiceUnavailableError:
      description: A required platform dependency is temporarily unavailable.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    ErrorResponse:
      description: >-
        Standard API error envelope. Common platform errors include
        authentication failures, forbidden scope or origin, billing gate, rate
        limiting, and temporary service unavailability.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````