# Woodpecker Campaign

> Create and configure Woodpecker campaigns (V2) with correctly linked prospects (V1)

- Skill: `thierryteisseire/woodpecker-campaign` (Agent Skill, multi-file: 10 files)
- Install (CLI): `npx skillmds@latest add thierryteisseire/woodpecker-campaign`
- Raw SKILL.md: https://api.skillmd.com/api/skills/thierryteisseire/woodpecker-campaign/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Marketing & Growth
- Author: thierryteisseire (https://skillmd.com/u/thierryteisseire)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/thierryteisseire/woodpecker-campaign

---


# Woodpecker Campaign Setup Skill

This skill provides the definitive workflow for creating a Woodpecker campaign using the V2 API and correctly enrolling prospects using the V1 API, ensuring visual linkage and account signatures.

## Quick Start

1. **Get your API Key** from Woodpecker (Settings > Marketplace > API keys).
2. **Find your Email Account ID** (needed for campaign creation).
3. **Use the scripts** in this skill to automate the 2-step process.

## Key Findings & Gotchas

*   **API Splitting**: Campaign creation should use **V2** (`/rest/v2/campaigns`). Prospect enrollment MUST use **V1** (`/rest/v1/add_prospects_campaign`).
*   **The Linkage Secret**: To make prospects appear in the Woodpecker dashboard for a V2 campaign, you must nest the `campaign_id` inside a `campaign` object in the enrollment payload.
*   **Signature Handling**: Setting `"signature": "SENDER"` in the V2 step body uses the account's configured professional signature automatically.
*   **Status & Force**: Always set prospect status to `ACTIVE` and use `force: True` in the enrollment payload to override any prior global status.

## Workflow Patterns

### 1. Create Campaign (V2)
**Endpoint**: `POST https://api.woodpecker.co/rest/v2/campaigns`
**Header**: `X-API-KEY: YOUR_KEY`

```json
{
  "name": "Campaign Name",
  "email_account_ids": [123456],
  "settings": {
    "timezone": "Europe/Paris",
    "daily_enroll": 50
  },
  "steps": {
    "type": "START",
    "followup": {
      "type": "EMAIL",
      "body": {
        "versions": [{
          "subject": "{{SNIPPET_2}}",
          "message": "<div>Bonjour {{FIRST_NAME}},<br><br>{{SNIPPET_1}}</div>",
          "signature": "SENDER"
        }]
      }
    }
  }
}
```

### 2. Enroll Prospects (V1)
**Endpoint**: `POST https://api.woodpecker.co/rest/v1/add_prospects_campaign`
**Header**: `X-API-KEY: YOUR_KEY`

```json
{
  "campaign": {
    "campaign_id": 2418XXX
  },
  "force": true,
  "prospects": [
    {
      "email": "lead@example.com",
      "status": "ACTIVE",
      "snippet1": "Personalized Message",
      "snippet2": "Dynamic Subject"
    }
  ]
}
```

## Troubleshooting

*   **200 OK but campaign is empty**: Check your payload nesting. Ensure `campaign_id` is inside `{"campaign": {"campaign_id": ...}}`.
*   **Signature not showing**: Verify `"signature": "SENDER"` is in the step version body and that the email account has a signature set in Woodpecker.
*   **Prospects added to list but not campaign**: This happens if the `campaign` object is missing from the V1 call.

