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

# Get Senders for Campaign

> Sender accounts attached to the campaign, with weekly limits, rolling 7-day usage, and per-campaign attribution.

**CLI:**

```bash theme={null}
puffle campaign sender --id <id>
```

## Overview

Returns every sender account attached to the campaign plus the rate-limit context an agent needs to reason about throughput:

* Per-account weekly limits (with defaults filled in based on `is_premium`)
* Rolling 7-day usage for connections + messages, aggregated globally across all the caller's campaigns (not just this one)
* Per-campaign `sent` count — only populated as `campaign_messages_sent` for LinkedIn campaigns with exactly one sender, where attribution is unambiguous. Email and multi-sender LinkedIn expose `campaign_total_sent` at the top level instead.

The response also includes `campaign_total_sent` (total sent messages for this campaign) and `campaign_type` (channel) so a single call is enough to render a sender dashboard.

## AI agent notes

<Note>
  **Default limits.** When an account has no per-account override, the weekly limits come from `is_premium`:

  | Channel                    | Free | Premium |
  | -------------------------- | ---- | ------- |
  | Weekly connection requests | 80   | 100     |
  | Weekly messages            | 100  | 150     |

  Daily default for every account is 30 unless overridden.

  **Usage is global, not per-campaign.** `weekly_connections_sent` / `weekly_messages_sent` sum activity across every campaign this account is attached to — not just this one. That matches how the rate limiter actually decides whether to throttle a send, so it's the correct signal to surface "is this sender about to hit its cap?"

  **Attribution caveat.** `campaign_messages_sent` is deliberately null for email and multi-sender LinkedIn because there's no cheap way to map a sent message back to a specific sender when round-robin is in play. Use `campaign_total_sent` for the aggregate.

  **No mutations here.** Adding or removing senders happens via `PATCH /api/campaigns/{id}` with a `sender_account_ids` field on draft campaigns. This endpoint is read-only.
</Note>


## OpenAPI

````yaml get /api/campaigns/{id}/senders
openapi: 3.0.3
info:
  title: Puffle API
  version: 1.0.0
  description: >-
    HTTP API for the Puffle GTM platform - Feed and Lead Finder search
    preparation, campaign-backed Outbound execution, Puffle Agent runs, sender
    management, and Unibox reply workflows. Designed for operation by both
    humans and autonomous AI agents. Agents should start at the [Agent
    Playbook](/guides/agent-playbook) which prescribes a workspace-context check
    (`GET /api/context`) and core user journeys with exact call ordering.
  contact:
    name: Puffle Support
    url: https://puffle.ai
servers:
  - url: https://app.puffle.ai
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Campaigns
    description: >-
      Campaign-backed Outbound execution. These endpoints manage draft,
      launching, active, paused, and completed Outbound runs with sequence
      nodes, contacts, and sender accounts.
  - name: Accounts
    description: Signed-in user account, settings, and workspace context endpoints.
  - name: Billing
    description: Billing customer portal and account billing endpoints.
  - name: Senders
    description: >-
      Connected sender accounts, email inboxes, sending domains, DNS
      verification, warmup, and sender capacity.
  - name: Socials
    description: >-
      Read connected LinkedIn and X accounts, review current and archived posts,
      and reconcile publication status. Creating, editing, scheduling,
      publishing, OAuth connection, analytics, and mentions remain
      dashboard-managed workflows and are not part of the public Bearer-token
      API.
paths:
  /api/campaigns/{id}/senders:
    get:
      tags:
        - Campaigns
      summary: Get Senders for Campaign
      description: >-
        Return campaign sender accounts with weekly usage, per-campaign totals,
        and sender-level committed counts for the campaign page.
      operationId: getSendersForCampaign
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            description: Campaign UUID
      responses:
        '200':
          description: Sender list and campaign sender statistics.
          content:
            application/json:
              schema:
                type: object
                properties:
                  senders:
                    type: array
                    items:
                      type: object
                      properties:
                        account_id:
                          type: string
                          format: uuid
                        display_name:
                          type: string
                        email_address:
                          type: string
                          nullable: true
                        profile_url:
                          type: string
                          nullable: true
                        status:
                          type: string
                          nullable: true
                        type:
                          type: string
                          enum:
                            - linkedin
                            - email
                            - multi_channel
                          description: >-
                            Channel mode for this campaign. Immutable after
                            creation.
                        is_premium:
                          type: boolean
                        warmup_status:
                          type: string
                          nullable: true
                        weekly_connection_limit:
                          type: integer
                          exclusiveMinimum: true
                          maximum: 9007199254740991
                          minimum: 0
                        weekly_message_limit:
                          type: integer
                          exclusiveMinimum: true
                          maximum: 9007199254740991
                          minimum: 0
                        daily_limit:
                          type: integer
                          exclusiveMinimum: true
                          maximum: 9007199254740991
                          minimum: 0
                        weekly_connections_sent:
                          type: integer
                          minimum: 0
                          maximum: 9007199254740991
                        weekly_messages_sent:
                          type: integer
                          minimum: 0
                          maximum: 9007199254740991
                        committed_count:
                          type: integer
                          minimum: 0
                          maximum: 9007199254740991
                        campaign_messages_sent:
                          type: integer
                          minimum: 0
                          maximum: 9007199254740991
                          description: >-
                            Sent direct-message or email outbox rows attributed
                            to this sender. Legacy email rows without immutable
                            ownership use the prospect sender assignment.
                        campaign_ever_contacted:
                          type: integer
                          minimum: 0
                          maximum: 9007199254740991
                        campaign_connections_accepted:
                          type: integer
                          minimum: 0
                          maximum: 9007199254740991
                        today_sent:
                          type: integer
                          minimum: 0
                          maximum: 9007199254740991
                      required:
                        - account_id
                        - display_name
                        - email_address
                        - profile_url
                        - status
                        - type
                        - is_premium
                        - warmup_status
                        - weekly_connection_limit
                        - weekly_message_limit
                        - daily_limit
                        - weekly_connections_sent
                        - weekly_messages_sent
                        - committed_count
                        - campaign_messages_sent
                        - campaign_ever_contacted
                        - campaign_connections_accepted
                        - today_sent
                      additionalProperties: false
                  historical_sender_metrics:
                    type: object
                    properties:
                      sent:
                        type: integer
                        minimum: 0
                        maximum: 9007199254740991
                      contacted:
                        type: integer
                        minimum: 0
                        maximum: 9007199254740991
                    required:
                      - sent
                      - contacted
                    additionalProperties: false
                    description: >-
                      Sent activity owned by removed senders or with unknown
                      ownership. These counts are not assigned to any current
                      sender.
                  campaign_total_sent:
                    type: integer
                    minimum: 0
                    maximum: 9007199254740991
                    description: >-
                      Sent direct-message or email outbox rows. LinkedIn
                      connection-request notes are excluded.
                  campaign_total_replies:
                    type: integer
                    minimum: 0
                    maximum: 9007199254740991
                  campaign_total_bounced:
                    type: integer
                    minimum: 0
                    maximum: 9007199254740991
                  campaign_total_completed:
                    type: integer
                    minimum: 0
                    maximum: 9007199254740991
                  campaign_total_committed:
                    type: integer
                    minimum: 0
                    maximum: 9007199254740991
                  campaign_type:
                    type: string
                    enum:
                      - linkedin
                      - email
                      - multi_channel
                    description: Channel mode for this campaign. Immutable after creation.
                  campaignStatsByStatus:
                    type: object
                    additionalProperties:
                      type: object
                      additionalProperties:
                        type: integer
                        minimum: 0
                        maximum: 9007199254740991
                  campaignSenderStatsByStatus:
                    type: object
                    additionalProperties:
                      type: object
                      additionalProperties:
                        type: integer
                        minimum: 0
                        maximum: 9007199254740991
                  campaignSenderTodayStatsByStatus:
                    type: object
                    additionalProperties:
                      type: object
                      additionalProperties:
                        type: integer
                        minimum: 0
                        maximum: 9007199254740991
                  campaignActiveProspectsCount:
                    type: object
                    additionalProperties:
                      type: integer
                      minimum: 0
                      maximum: 9007199254740991
                required:
                  - senders
                  - historical_sender_metrics
                  - campaign_total_sent
                  - campaign_total_replies
                  - campaign_total_bounced
                  - campaign_total_completed
                  - campaign_total_committed
                  - campaign_type
                  - campaignStatsByStatus
                  - campaignSenderStatsByStatus
                  - campaignSenderTodayStatsByStatus
                  - campaignActiveProspectsCount
                additionalProperties: false
        '401':
          description: Missing or invalid authentication.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                  - error
                additionalProperties: false
        '404':
          description: Campaign doesn't exist or isn't owned by the caller.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                  - error
                additionalProperties: false
        '500':
          description: Unexpected server error.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                required:
                  - error
                additionalProperties: false
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: pk_live_...

````