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

# List trackers



## OpenAPI

````yaml /api-reference/openapi.yaml get /trackers
openapi: 3.1.0
info:
  title: Unif API
  version: '2026-09-01'
  summary: One schema for commerce data across every channel.
  description: >
    The Unif API returns normalized commerce data — shops, products, creators,
    videos,

    livestreams and categories — through a single schema that does not change
    when the

    underlying data source does.


    Each request runs a cascade across the sources behind a channel, in cost
    order, stopping at

    the first result that verifies. You are charged for the hit, not for the
    attempts. See

    [the waterfall](/docs/concepts/waterfall).


    Every response is denominated in the currency you ask for, scoped to a
    market, and

    measured over a period you control, whichever source answered.


    **Base URL**


    ```

    https://api.unif.dev/v1

    ```


    All requests require a bearer token. See
    [Authentication](/docs/authentication).


    **Conventions**


    - Success and failure are carried by the HTTP status code. There is no
    envelope to unwrap:
      a `200` body is the object itself, and any `4xx` or `5xx` body is an
      [error object](/docs/platform/errors).
    - Lists are cursor-paginated. Read `next_cursor` and stop when `has_more` is
    false.

    - Every response carries `X-Request-Id`. Billable responses also carry
      `X-Unif-Credits-Charged` and `X-Unif-Credits-Remaining`.
    - Monetary fields are converted to the `currency` you request, and every
    object repeats
      the `currency` and `period` it was measured under.
  contact:
    name: Unif Support
    email: support@unif.dev
    url: https://unif.dev/docs
  license:
    name: Proprietary
    url: https://unif.dev/legal/terms
servers:
  - url: https://api.unif.dev/v1
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Meta
    description: Workspace, channel availability and field coverage.
  - name: Shops
    description: Storefronts and sellers.
  - name: Products
    description: Listings, pricing and sales performance.
  - name: Creators
    description: Affiliates and influencers who sell.
  - name: Videos
    description: Short-form video attributed to sales.
  - name: Livestreams
    description: Live selling sessions.
  - name: Categories
    description: The normalized category tree and category-level market data.
  - name: Resolution
    description: Turn a URL, handle or external ID into a Unif entity.
  - name: Jobs
    description: Asynchronous work for large searches, enrichments and exports.
  - name: Lists
    description: Saved sets of entities.
  - name: Trackers
    description: Scheduled re-checks that emit webhook events on change.
  - name: Webhooks
    description: Endpoint registration and delivery settings.
  - name: Usage
    description: Credit balance and per-request consumption.
paths:
  /trackers:
    get:
      tags:
        - Trackers
      summary: List trackers
      operationId: listTrackers
      parameters:
        - $ref: '#/components/parameters/LimitQuery'
        - $ref: '#/components/parameters/CursorQuery'
      responses:
        '200':
          description: Trackers.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrackerList'
components:
  parameters:
    LimitQuery:
      name: limit
      in: query
      description: How many objects to return per page.
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 25
    CursorQuery:
      name: cursor
      in: query
      description: The `next_cursor` from a previous response.
      schema:
        type: string
  schemas:
    TrackerList:
      allOf:
        - $ref: '#/components/schemas/ListEnvelope'
        - type: object
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/Tracker'
    ListEnvelope:
      type: object
      required:
        - object
        - data
        - has_more
      properties:
        object:
          type: string
          const: list
        has_more:
          type: boolean
          description: Whether another page exists.
        next_cursor:
          type:
            - string
            - 'null'
          description: Pass to `cursor` to fetch the next page. Null on the last page.
        total_count:
          type:
            - integer
            - 'null'
          description: >-
            Approximate number of matches. Null when the result set is too large
            to count exactly.
        period:
          $ref: '#/components/schemas/ResolvedPeriod'
        currency:
          type: string
    Tracker:
      type: object
      properties:
        id:
          type: string
          examples:
            - trk_01k3m9x7v2q8r4t6y0b1n5d7fa
        object:
          type: string
          const: tracker
        name:
          type: string
        schedule:
          type: string
          enum:
            - hourly
            - daily
            - weekly
        enabled:
          type: boolean
        conditions:
          type: array
          items:
            $ref: '#/components/schemas/TrackerCondition'
        webhook_id:
          type:
            - string
            - 'null'
        last_run_at:
          type:
            - string
            - 'null'
          format: date-time
        next_run_at:
          type:
            - string
            - 'null'
          format: date-time
        created_at:
          type: string
          format: date-time
    ResolvedPeriod:
      type: object
      description: >
        The concrete window a request was measured over, after any preset was
        expanded and any

        channel-specific snapping was applied. Always read this rather than
        assuming you got

        back exactly the dates you asked for.
      required:
        - start
        - end
      properties:
        start:
          type: string
          format: date
        end:
          type: string
          format: date
        granularity:
          type: string
          enum:
            - day
            - week
            - month
          description: The smallest bucket the channel reports for this market.
        adjusted:
          type: boolean
          description: >
            True when the requested dates were snapped to the nearest boundary
            the channel

            supports. See [Periods and currency](/docs/concepts/periods).
    TrackerCondition:
      type: object
      description: >
        Fires when a metric crosses a bound. `change` compares against the
        previous window;

        omit it to test the absolute value.
      required:
        - metric
      properties:
        metric:
          type: string
          examples:
            - revenue
        change:
          type: string
          enum:
            - pct
            - abs
          description: Compare the change instead of the level.
        over:
          type: string
          enum:
            - 1d
            - 7d
            - 30d
          default: 1d
        gte:
          type: number
        lte:
          type: number
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >
        Send your workspace API key as a bearer token:


        ```

        Authorization: Bearer unif_sk_live_...

        ```


        Keys are scoped to a single workspace. See
        [Authentication](/docs/authentication).

````