Skip to main content
GET
/
api
/
campaigns
List campaigns
curl --request GET \
  --url https://app.puffle.ai/api/campaigns \
  --header 'Authorization: Bearer <token>'
{
  "campaigns": [
    {
      "id": "8c2b2d4e-e29b-41d4-a716-446655440000",
      "user_id": "11111111-1111-1111-1111-111111111111",
      "type": "email",
      "name": "Q2 Enterprise Outreach",
      "status": "active",
      "daily_limit": 50,
      "stop_on_reply": true,
      "open_tracking": true,
      "signature": "Best,\n%first_name%",
      "skip_other_campaigns": null,
      "operating_hours": null,
      "stats": {
        "total": 120,
        "sent": 34,
        "replied": 4
      },
      "created_at": "2026-04-18T15:12:00Z",
      "updated_at": "2026-04-21T09:00:00Z",
      "sender_accounts": [
        {
          "id": "aaaa1111-1111-1111-1111-111111111111",
          "type": "email",
          "email_address": "[email protected]",
          "provider_account_id": null,
          "display_name": "Sarah",
          "first_name": "Sarah",
          "last_name": null,
          "status": "active",
          "daily_limit": 50,
          "weekly_connection_limit": null,
          "weekly_message_limit": null,
          "is_premium": null
        }
      ],
      "node_count": 3
    },
    {
      "id": "9d3c3e5f-e29b-41d4-a716-446655440001",
      "user_id": "11111111-1111-1111-1111-111111111111",
      "type": "linkedin",
      "name": "Founder intro",
      "status": "draft",
      "daily_limit": null,
      "stop_on_reply": null,
      "open_tracking": null,
      "signature": null,
      "skip_other_campaigns": true,
      "operating_hours": null,
      "stats": null,
      "created_at": "2026-04-22T08:00:00Z",
      "updated_at": "2026-04-22T08:00:00Z",
      "sender_accounts": [
        {
          "id": "aaaa2222-1111-1111-1111-111111111111",
          "type": "linkedin",
          "email_address": null,
          "provider_account_id": "unipile_acct_123",
          "display_name": "Sid",
          "first_name": "Sid",
          "last_name": null,
          "status": "active",
          "daily_limit": null,
          "weekly_connection_limit": 100,
          "weekly_message_limit": 150,
          "is_premium": true
        }
      ],
      "node_count": 2
    }
  ]
}

Overview

Returns every campaign for the authenticated user. Sort order is lifecycle-first: activepauseddraftcompleted (and then created_at descending within each group). Each item includes the full campaign row, a flattened sender_accounts array, and a node_count shortcut for list views.

AI agent notes

Agent use case. This is the usual entry point when an agent wants to operate on an existing campaign but only has the user’s intent (“resume my Q2 outreach”). Match by name — names are unique per user.No side effects. Safe to call as often as needed, but respect the 100 req/min overall rate limit.stats is nullable. Draft campaigns have stats: null — the counters are only populated once launchCampaign kicks in.node_count is a hint, not the sequence. To read or edit sequence nodes, call getCampaign — the list response strips them to keep payloads small.

Authorizations

Authorization
string
header
required

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

Response

Array of campaigns. Empty array is a valid response for new users.

campaigns
object[]
required