Skip to main content
GET
/
api
/
campaigns
/
{id}
/
senders
Get Senders for Campaign
curl --request GET \
  --url https://app.puffle.ai/api/campaigns/{id}/senders \
  --header 'Authorization: Bearer <token>'
{
  "senders": [
    {
      "account_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "display_name": "<string>",
      "email_address": "<string>",
      "profile_url": "<string>",
      "status": "<string>",
      "is_premium": true,
      "warmup_status": "<string>",
      "weekly_connection_limit": 4503599627370495,
      "weekly_message_limit": 4503599627370495,
      "daily_limit": 4503599627370495,
      "weekly_connections_sent": 4503599627370495,
      "weekly_messages_sent": 4503599627370495,
      "committed_count": 4503599627370495,
      "campaign_messages_sent": 4503599627370495,
      "today_sent": 4503599627370495
    }
  ],
  "campaign_total_sent": 4503599627370495,
  "campaign_total_replies": 4503599627370495,
  "campaign_total_bounced": 4503599627370495,
  "campaign_total_completed": 4503599627370495,
  "campaign_total_committed": 4503599627370495,
  "campaignStatsByStatus": {},
  "campaignSenderStatsByStatus": {},
  "campaignSenderTodayStatsByStatus": {},
  "campaignActiveProspectsCount": {}
}
CLI:
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

Default limits. When an account has no per-account override, the weekly limits come from is_premium:
ChannelFreePremium
Weekly connection requests80100
Weekly messages100150
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.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Path Parameters

id
string
required

Campaign UUID

Response

Sender list and campaign sender statistics.

senders
object[]
required
campaign_total_sent
integer
required
Required range: 0 <= x <= 9007199254740991
campaign_total_replies
integer
required
Required range: 0 <= x <= 9007199254740991
campaign_total_bounced
integer
required
Required range: 0 <= x <= 9007199254740991
campaign_total_completed
integer
required
Required range: 0 <= x <= 9007199254740991
campaign_total_committed
integer
required
Required range: 0 <= x <= 9007199254740991
campaign_type
enum<string>
required

Channel for this campaign. Immutable after creation.

Available options:
linkedin,
email
campaignStatsByStatus
object
required
campaignSenderStatsByStatus
object
required
campaignSenderTodayStatsByStatus
object
required
campaignActiveProspectsCount
object
required