---
title: "Get campaign attribution and performance analytics"
method: GET
path: "/api/campaigns/{id}/analytics"
tags: ["Campaigns"]
---

# Get campaign attribution and performance analytics

`GET /api/campaigns/{id}/analytics`

## Request

- Base URL: `https://api.setluca.com`
- URL: `https://api.setluca.com/api/campaigns/{id}/analytics`
- Auth: one of:
  - API key in cookie `luca.session_token`
  - API key in header `x-api-key`
  - HTTP bearer

Attribution and performance for one campaign over a window: what it sent, what it moved, and what it earned.

**API key scopes:** `analytics:read`.

## Path parameters

- `id` string, uuid, required

## Query parameters

- `since` string
- `until` string

## Headers

- `Luca-API-Version` '1'

## Response `200`

ok

- CampaignAnalyticsResponse
  - `campaignId` string, uuid, required
  - `campaignName` string, required
  - `truncated` boolean, required
  - `window` object, required
    - `since` string, required
    - `until` string, required
  - `attributionWindows` object, required
    - `enrollmentDays` integer, required
    - `lastTouchDays` integer, required
  - `snapshots` object, required
    - `campaignVersions` object[], required
      - `versionId` string, uuid, required
      - `versionNumber` integer, required
      - `publishedAt` string, required
      - `nodeCount` integer, required
      - `edgeCount` integer, required
      - `analyticsGoal` string, nullable, required
    - `broadcastSegments` object[], required
      - `broadcastRunId` string, uuid, required
      - `name` string, required
      - `campaignVersionId` string, uuid, nullable, required
      - `totalRecipients` integer, required
      - `segment` object, required
        - `excludedCount` integer, required
        - `generatedAt` string, nullable, required
        - `leadCount` integer, required
      - `approvedAt` string, nullable, required
  - `attribution` object, required
    - `primary` object, required
      - `model` 'campaign_enrollment_30_day', required
      - `leads` integer, required
      - `bookings` integer, required
    - `assist` object, required
      - `model` 'broadcast_last_touch_7_day', required
      - `leads` integer, required
  - `metrics` object, required
    - `enrolledLeads` integer, required
    - `qualifiedLeads` integer, required
    - `replies` integer, required
    - `bookings` integer, required
    - `bookingRate` number, required
    - `noShows` integer, required
    - `broadcastRecipients` integer, required
    - `broadcastSent` integer, required
    - `broadcastFailed` integer, required
    - `broadcastFailureRate` number, required
    - `crmWonDeals` integer, required
    - `crmRevenueCents` number, required
  - `conversionByTrigger` object[], required
    - `enrolled` integer, required
    - `qualified` integer, required
    - `replies` integer, required
    - `bookings` integer, required
    - `trigger` string, required
  - `conversionByChannel` object[], required
    - `enrolled` integer, required
    - `qualified` integer, required
    - `replies` integer, required
    - `bookings` integer, required
    - `channel` string, required
  - `broadcastProgress` object[], required
    - `broadcastRunId` string, uuid, required
    - `name` string, required
    - `status` string, required
    - `totalRecipients` integer, required
    - `sentCount` integer, required
    - `failedCount` integer, required
    - `skippedCount` integer, required
    - `progressPct` number, required
    - `failureRate` number, required
  - `nodePerformance` object[], required
    - `nodeId` string, required
    - `nodeType` string, required
    - `label` string, nullable, required
    - `entered` integer, required
    - `completed` integer, required
    - `waiting` integer, required
    - `failed` integer, required
    - `dropOff` integer, required
    - `dropOffRate` number, required
    - `lastEventAt` string, nullable, required
    - `lastFailureAt` string, nullable, required
  - `versionPerformance` object[], required
    - `versionId` string, uuid, required
    - `versionNumber` integer, required
    - `enrolled` integer, required
    - `qualified` integer, required
    - `replies` integer, required
    - `bookings` integer, required
    - `bookingRate` number, required
  - `topFailingNodes` object[], required
    - `nodeId` string, required
    - `eventType` string, required
    - `failures` integer, required

## Other responses

- `400`: bad request
- `401`: unauthorized
- `404`: not found
- `429`: rate limited
- `500`: internal error
- `503`: service unavailable

---

[API](https://skmtc.dev/setluca/apis/luca-api.md) · [All operations](https://skmtc.dev/setluca/apis/luca-api/llms.txt) · [OpenAPI document](https://skmtc.dev/setluca/apis/luca-api/revisions/90a200e4100b?raw)
