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

# Get Campaign Metrics

> 

Retrieve your LinkedIn outreach campaigns along with volume metrics, funnel counts, and acceptance/reply conversion rates.

### Scope & API Key Requirements
- **Personal / User Scope (`GET /v1/campaigns`)**: Requires a **User API key**. Returns campaigns and aggregated performance metrics for that user.
- **Organization Scope (`GET /v1/campaigns?scope=org`)**: Requires an **Organization Service API key**. Aggregates campaigns across all seats in the organization, includes a `byUser` performance breakdown, and attributes each campaign by team member name and email.

If a User API key is used with `?scope=org`, or an Organization API key is used without `?scope=org`, the endpoint returns `403 Forbidden`.

### Pagination & Rollup Behavior
- **`summary` and `byUser` are never truncated by `limit`**: They always compute the complete totals across **all** campaigns and team members matching your `status` and `startDate`/`endDate` filters.
- **`limit` and `offset` paginate the `campaigns` array**: When `scope=org`, campaigns from all team members are merged into a single chronological list sorted newest-first (`createdAt` descending), and `limit` controls how many campaign items are returned per page.



## OpenAPI

````yaml /api-reference/combined.json get /v1/campaigns
openapi: 3.1.0
info:
  title: Precept API
  description: >-
    Precept API provides powerful, programmatic access to our AI-driven B2B
    account research, company enrichment, and verified contact data
    capabilities. Use these endpoints to discover high-intent companies, map
    decision-makers, and run personalized enrichment pipelines directly
    integrating with your CRM, spreadsheets, or automated workflows like Make
    and n8n.
  version: 1.0.0
servers:
  - url: https://api.preceptai.co.uk
security:
  - bearerAuth: []
paths:
  /v1/campaigns:
    get:
      tags:
        - Campaigns
      summary: Get Campaign Metrics
      description: >-


        Retrieve your LinkedIn outreach campaigns along with volume metrics,
        funnel counts, and acceptance/reply conversion rates.


        ### Scope & API Key Requirements

        - **Personal / User Scope (`GET /v1/campaigns`)**: Requires a **User API
        key**. Returns campaigns and aggregated performance metrics for that
        user.

        - **Organization Scope (`GET /v1/campaigns?scope=org`)**: Requires an
        **Organization Service API key**. Aggregates campaigns across all seats
        in the organization, includes a `byUser` performance breakdown, and
        attributes each campaign by team member name and email.


        If a User API key is used with `?scope=org`, or an Organization API key
        is used without `?scope=org`, the endpoint returns `403 Forbidden`.


        ### Pagination & Rollup Behavior

        - **`summary` and `byUser` are never truncated by `limit`**: They always
        compute the complete totals across **all** campaigns and team members
        matching your `status` and `startDate`/`endDate` filters.

        - **`limit` and `offset` paginate the `campaigns` array**: When
        `scope=org`, campaigns from all team members are merged into a single
        chronological list sorted newest-first (`createdAt` descending), and
        `limit` controls how many campaign items are returned per page.
      parameters:
        - name: scope
          in: query
          required: false
          description: >-
            Reporting scope. Defaults to `user` (requires a personal User API
            key). Set to `org` to aggregate across all team members in the
            organization (requires an Organization API key).
          schema:
            type: string
            enum:
              - user
              - org
            default: user
        - name: status
          in: query
          required: false
          description: >-
            Filter campaigns by status (`all`, `running`, `paused`, `queued`,
            `completed`, `stopped`, `archived`). Supports comma-separated values
            (e.g. `running,completed`).
          schema:
            type: string
            default: all
        - name: startDate
          in: query
          required: false
          description: >-
            Filter campaigns created on or after this date (ISO 8601 timestamp
            or `YYYY-MM-DD`).
          schema:
            type: string
            example: '2026-10-01'
        - name: endDate
          in: query
          required: false
          description: >-
            Filter campaigns created on or before this date (ISO 8601 timestamp
            or `YYYY-MM-DD`).
          schema:
            type: string
            example: '2026-11-09'
        - name: limit
          in: query
          required: false
          description: >-
            Number of campaign items to return per page in the `campaigns` array
            (1 to 100, sorted newest-first). Does not limit `summary` or
            `byUser` totals.
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 25
        - name: offset
          in: query
          required: false
          description: Pagination offset for the `campaigns` array (0 or greater).
          schema:
            type: integer
            minimum: 0
            default: 0
      responses:
        '200':
          description: Campaign list, aggregate summary metrics, and conversion rates.
          content:
            application/json:
              schema:
                type: object
                properties:
                  scope:
                    type: string
                    enum:
                      - user
                      - organization
                    description: The resolved reporting scope.
                  timeframe:
                    type: object
                    properties:
                      startDate:
                        type: string
                        nullable: true
                        description: Resolved ISO start date filter, or null for all-time.
                      endDate:
                        type: string
                        nullable: true
                        description: Resolved ISO end date filter, or null for all-time.
                  summary:
                    type: object
                    properties:
                      totalCampaigns:
                        type: integer
                        description: Total number of campaigns matching the filter.
                      activeUsers:
                        type: integer
                        description: >-
                          Number of team members with campaigns in the filtered
                          period (only present when scope is `organization`).
                      totalLeads:
                        type: integer
                        description: Total leads targeted across all matching campaigns.
                      totalInvited:
                        type: integer
                        description: Total connection requests sent.
                      totalAccepted:
                        type: integer
                        description: Total connection requests accepted.
                      overallAcceptanceRate:
                        type: number
                        description: Overall acceptance rate percentage (0 to 100).
                      totalMessagesSent:
                        type: integer
                        description: Total follow-up messages sent.
                      totalReplies:
                        type: integer
                        description: Total replies received.
                      overallReplyRate:
                        type: number
                        description: Overall reply rate percentage (0 to 100).
                  byUser:
                    type: array
                    description: >-
                      Per-seat campaign performance breakdown (only included
                      when `scope=org`).
                    items:
                      type: object
                      properties:
                        name:
                          type: string
                        email:
                          type: string
                        campaignCount:
                          type: integer
                        totalLeads:
                          type: integer
                        invitedCount:
                          type: integer
                        acceptedCount:
                          type: integer
                        acceptanceRate:
                          type: number
                        messagesSentCount:
                          type: integer
                        repliedCount:
                          type: integer
                        replyRate:
                          type: number
                  campaigns:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                        name:
                          type: string
                        status:
                          type: string
                          enum:
                            - running
                            - paused
                            - queued
                            - completed
                            - stopped
                            - archived
                        userName:
                          type: string
                          description: Team member name (included when `scope=org`).
                        userEmail:
                          type: string
                          description: Team member email (included when `scope=org`).
                        currentIndex:
                          type: integer
                        totalLeads:
                          type: integer
                        progressPct:
                          type: integer
                        invitedCount:
                          type: integer
                        acceptedCount:
                          type: integer
                        acceptanceRate:
                          type: number
                          description: >-
                            Percentage of invited leads who accepted the
                            connection request.
                        messageSentCount:
                          type: integer
                        repliedCount:
                          type: integer
                        replyRate:
                          type: number
                          description: Percentage of messaged leads who replied.
                        createdAt:
                          type: string
                          nullable: true
                        updatedAt:
                          type: string
                          nullable: true
                        finishedAt:
                          type: integer
                          nullable: true
                  pagination:
                    type: object
                    properties:
                      total:
                        type: integer
                      limit:
                        type: integer
                      offset:
                        type: integer
                      hasMore:
                        type: boolean
              examples:
                user_scope:
                  summary: User Scope Response (GET /v1/campaigns)
                  value:
                    scope: user
                    timeframe:
                      startDate: '2026-10-01T00:00:00.000Z'
                      endDate: '2026-11-09T23:59:59.999Z'
                    summary:
                      totalCampaigns: 8
                      totalLeads: 400
                      totalInvited: 350
                      totalAccepted: 112
                      overallAcceptanceRate: 32
                      totalMessagesSent: 100
                      totalReplies: 22
                      overallReplyRate: 22
                    campaigns:
                      - id: camp_abc123
                        name: Fintech Decision Makers Q4
                        status: completed
                        currentIndex: 50
                        totalLeads: 50
                        progressPct: 100
                        invitedCount: 50
                        acceptedCount: 18
                        acceptanceRate: 36
                        messageSentCount: 18
                        repliedCount: 5
                        replyRate: 27.8
                        createdAt: '2026-11-02T14:30:00.000Z'
                        updatedAt: '2026-11-04T18:00:00.000Z'
                        finishedAt: 1793740200000
                    pagination:
                      total: 8
                      limit: 25
                      offset: 0
                      hasMore: false
                organization_scope:
                  summary: Organization Scope Response (GET /v1/campaigns?scope=org)
                  value:
                    scope: organization
                    timeframe:
                      startDate: '2026-10-01T00:00:00.000Z'
                      endDate: '2026-11-09T23:59:59.999Z'
                    summary:
                      totalCampaigns: 14
                      activeUsers: 2
                      totalLeads: 700
                      totalInvited: 580
                      totalAccepted: 174
                      overallAcceptanceRate: 30
                      totalMessagesSent: 160
                      totalReplies: 32
                      overallReplyRate: 20
                    byUser:
                      - name: Alex Morgan
                        email: alex@acme.com
                        campaignCount: 8
                        totalLeads: 400
                        invitedCount: 350
                        acceptedCount: 112
                        acceptanceRate: 32
                        messagesSentCount: 100
                        repliedCount: 22
                        replyRate: 22
                      - name: Sarah Jenkins
                        email: sarah@acme.com
                        campaignCount: 6
                        totalLeads: 300
                        invitedCount: 230
                        acceptedCount: 62
                        acceptanceRate: 27
                        messagesSentCount: 60
                        repliedCount: 10
                        replyRate: 16.7
                    campaigns:
                      - id: camp_9921
                        name: Fintech Decision Makers Q4
                        status: completed
                        userName: Alex Morgan
                        userEmail: alex@acme.com
                        currentIndex: 50
                        totalLeads: 50
                        progressPct: 100
                        invitedCount: 50
                        acceptedCount: 18
                        acceptanceRate: 36
                        messageSentCount: 18
                        repliedCount: 5
                        replyRate: 27.8
                        createdAt: '2026-11-02T14:30:00.000Z'
                        updatedAt: '2026-11-04T18:00:00.000Z'
                        finishedAt: 1793740200000
                      - id: camp_8840
                        name: Enterprise VP Sales UK
                        status: running
                        userName: Sarah Jenkins
                        userEmail: sarah@acme.com
                        currentIndex: 20
                        totalLeads: 50
                        progressPct: 40
                        invitedCount: 20
                        acceptedCount: 7
                        acceptanceRate: 35
                        messageSentCount: 5
                        repliedCount: 1
                        replyRate: 20
                        createdAt: '2026-11-01T09:15:00.000Z'
                        updatedAt: '2026-11-09T12:00:00.000Z'
                        finishedAt: null
                    pagination:
                      total: 14
                      limit: 25
                      offset: 0
                      hasMore: false
        '400':
          description: >-
            Invalid query parameter (`scope`, `status`, `startDate`, `endDate`,
            `limit`, or `offset`).
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
        '401':
          description: 'Unauthorized: Missing or invalid authorization header.'
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
        '403':
          description: >-
            Forbidden: Invalid API key, or API key type does not match the
            requested `scope`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
              examples:
                user_key_on_org_scope:
                  summary: User key used with ?scope=org
                  value:
                    error: >-
                      Forbidden: An organization API key is required to access
                      organization-level campaigns. Your API key type is 'user'.
                org_key_on_user_scope:
                  summary: Org key used without ?scope=org
                  value:
                    error: >-
                      Forbidden: An organization API key cannot query personal
                      user scope. Please provide a user API key, or add
                      '?scope=org' to access organization campaigns.
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.