npm package: @sendkit-ai/cli
Description: SendKit CLI — interact with the SendKit platform from your terminal
Latest version: 1.0.1

# @sendkit-ai/cli

The official command-line interface for [SendKit](https://sendkit.ai) — a complete email outreach platform. Manage campaigns, leads, mailboxes, inbox, analytics, and more — all from your terminal.

## Installation

```bash
npm install -g @sendkit-ai/cli
```

Or run without installing:

```bash
npx @sendkit-ai/cli --help
```

## Quick Start

```bash
# 1. Authenticate with your API key
sendkit auth login

# 2. Select a workspace
sendkit workspaces list
sendkit workspaces use <workspace-id>

# 3. Start working
sendkit campaigns list
sendkit leads list
sendkit analytics overview
```

## Authentication

SendKit supports two types of API keys:

- **Platform keys** (`sk_user_...`) — access all workspaces, required for workspace management
- **Workspace keys** (`sk_...`) — scoped to a single workspace, no header needed

Get your API key from [app.sendkit.ai](https://app.sendkit.ai) under **Settings > API Keys**.

```bash
# Interactive login (prompts for key)
sendkit auth login

# Direct login
sendkit auth login --key sk_user_your_key_here

# Check current session
sendkit auth whoami

# Logout
sendkit auth logout
```

## Global Options

These flags work with any command:

| Flag | Description |
|------|-------------|
| `--json` | Output raw JSON instead of formatted tables |
| `--api-key <key>` | Override stored API key for this command |
| `--workspace <id>` | Override the active workspace |
| `-V, --version` | Show CLI version |
| `-h, --help` | Show help for any command |

```bash
sendkit --json campaigns list               # JSON output for scripting
sendkit --api-key sk_user_xxx leads list    # Use a different API key
sendkit --workspace <id> inbox list         # Target a specific workspace
```

## Commands Overview

| Command Group | Description | Subcommands |
|---------------|-------------|-------------|
| `auth` | Authentication | login, logout, whoami |
| `workspaces` | Workspace management | list, use, get, create, update, delete, members, add-member, remove-member |
| `campaigns` | Campaign lifecycle | list, get, create, update, start, pause, resume, delete, duplicate, analytics, preview-email, send-test-email |
| `campaign-leads` | Leads within campaigns | list, get, add, add-filter, import, action, update |
| `leads` | Global lead database | list, get, create, update, delete, bulk-create, import, export, search |
| `mailboxes` | Email mailboxes | list, get, create, update, delete, health, import, import-outlook, bulk, connect-google, connect-outlook |
| `inbox` | Conversations & replies | list, get, update, reply, scheduled, cancel-scheduled, tag, mark-read, dnc, delete, unread-count |
| `analytics` | Performance metrics | overview, campaign, mailboxes, daily |
| `templates` | Email templates | list, get, create, update, delete |
| `webhooks` | Webhook subscriptions | list, get, create, update, delete, test |
| `dnc` | Do Not Contact list | list, add, remove, import |
| `enrichment` | Lead enrichment | enrich, jobs, job, cancel, settings, settings-get, settings-configure, settings-remove, settings-update |
| `tags` | AI tagging labels | list, create, update, delete |
| `warmup` | Email warmup metrics | stats, mailbox |
| `agents` | AI reply agents | list, get, create, update, delete, generate-reply |
| `integrations` | CRM integrations | list, crm-status, crm-get, crm-connect, crm-disconnect, crm-pull, crm-push, crm-jobs |
| `testing` | Deliverability tests | inbox-placement-list, inbox-placement-create, inbox-placement-get, blacklist-list, blacklist-create, blacklist-get |

Run `sendkit <command> --help` for detailed usage of any command.

---

## Campaigns

Create and manage email outreach campaigns with multi-step sequences, scheduling, and tracking.

```bash
# List and filter campaigns
sendkit campaigns list
sendkit campaigns list --status active --search "Q2"

# Get full campaign details with sequence breakdown
sendkit campaigns get <id>

# Create a campaign (minimal)
sendkit campaigns create --name "Q2 Outreach"

# Create with full configuration
sendkit campaigns create --name "Q2 Outreach" \
  --mailbox-ids id1,id2 \
  --timezone "Asia/Kolkata" \
  --start-time "10:00" \
  --end-time "18:00" \
  --working-days "1,2,3,4,5" \
  --track-opens --track-clicks --stop-on-reply \
  --daily-send-limit 50

# Create with a sequence from a JSON file
sendkit campaigns create --name "Q2 Outreach" --sequence-file sequence.json

# Assign mailboxes by tag or provider
sendkit campaigns create --name "Outreach" --mailbox-tags "outreach" --mailbox-provider gmail

# Campaign lifecycle
sendkit campaigns start <id>
sendkit campaigns pause <id>
sendkit campaigns resume <id>
sendkit campaigns delete <id>
sendkit campaigns duplicate <id>

# Analytics with step-by-step breakdown
sendkit campaigns analytics <id>

# Preview personalized email before sending
sendkit campaigns preview-email <id> --step 0 --lead <leadId> --mailbox <mailboxId>

# Send a test email
sendkit campaigns send-test-email <id> --step 0 --mailbox <mailboxId> --email test@example.com
```

### Sequence Format

Sequences are defined as JSON arrays with `email` and `wait` steps. Names are auto-assigned ("Initial Email" → "Follow-up 1" → "Follow-up 2", etc.).

```json
[
  {
    "type": "email",
    "order": 0,
    "subject": "Hi {{firstName}}, quick question",
    "body": "<p>Hi {{firstName}},</p><p>Your email body here...</p>"
  },
  {
    "type": "wait",
    "order": 1,
    "waitDays": 3
  },
  {
    "type": "email",
    "order": 2,
    "subject": "Re: quick question",
    "body": "<p>Just following up...</p>"
  }
]
```

**Rules:**
- Sequence must start with an `email` step
- Sequence must end with an `email` step (not a `wait`)
- A `wait` step (with `waitDays` >= 1) is required between consecutive email steps
- Step names are auto-assigned — do not set them manually
- Supports `{{firstName}}`, `{{lastName}}`, `{{companyName}}`, `{{senderName}}`, and custom variables

Save to a file and use `--sequence-file`:

```bash
sendkit campaigns create --name "Outreach" --sequence-file sequence.json
sendkit campaigns update <id> --sequence-file updated-sequence.json
```

---

## Campaign Leads

Manage leads within a specific campaign.

```bash
# List leads in a campaign
sendkit campaign-leads list <campaignId>
sendkit campaign-leads list <campaignId> --status active

# Get lead detail with email history
sendkit campaign-leads get <campaignId> <leadId>

# Add leads by ID
sendkit campaign-leads add <campaignId> --lead-ids id1,id2,id3

# Add leads by filter
sendkit campaign-leads add-filter <campaignId> --tags outreach --search "acme"
sendkit campaign-leads add-filter <campaignId> --select-all

# Import from CSV
sendkit campaign-leads import <campaignId> leads.csv

# Bulk actions (pause, resume, remove)
sendkit campaign-leads action <campaignId> --action pause --lead-ids id1,id2
sendkit campaign-leads action <campaignId> --action remove --select-all

# Update a specific lead's status or tags
sendkit campaign-leads update <campaignId> <leadId> --status paused --tags "follow-up"
```

---

## Leads

Manage your global lead database.

```bash
# List with filters
sendkit leads list
sendkit leads list --search "john" --tags outreach --limit 50
sendkit leads list --email-status valid --email-type business
sendkit leads list --email-verified true --has-company --has-phone
sendkit leads list --seg-protected false

# Get lead details
sendkit leads get <id>

# Create a lead
sendkit leads create --email john@co.com --first-name John --last-name Doe \
  --company Acme --title CEO --phone +1234567890 --tags "outreach,q2"

# Update a lead
sendkit leads update <id> --first-name Jane --company "New Corp" --tags "updated"

# Bulk create from JSON file (max 5,000)
sendkit leads bulk-create leads.json --tag "batch-q2"

# Import from CSV
sendkit leads import leads.csv --tag "import-q2" --skip-duplicates

# Export to CSV
sendkit leads export --output leads.csv --search "acme" --tags "outreach"
sendkit leads export --email-verified true --country "US"

# Advanced search
sendkit leads search --email "@acme.com" --company "Acme" --country "US"

# Delete
sendkit leads delete --ids id1,id2,id3
sendkit leads delete --all --force
```

---

## Mailboxes

Manage email sending accounts with health monitoring and warmup tracking.

```bash
# List with advanced filters
sendkit mailboxes list
sendkit mailboxes list --status active --provider gmail --tags "outreach"
sendkit mailboxes list --warmup-enabled true --warmup-health good
sendkit mailboxes list --high-bounce-rate --min-health-score 80
sendkit mailboxes list --not-in-campaign --connection-type oauth
sendkit mailboxes list --untagged --in-active-campaign

# Get details and health check
sendkit mailboxes get <id>
sendkit mailboxes health <id>

# Create SMTP mailbox
sendkit mailboxes create --email me@co.com --smtp-host smtp.co.com \
  --smtp-port 587 --smtp-user me@co.com --smtp-pass xxx \
  --display-name "My Mailbox" --daily-limit 30

# Import mailboxes from CSV
sendkit mailboxes import mailboxes.csv --tag "batch-1"
sendkit mailboxes import-outlook outlook.csv

# Bulk operations
sendkit mailboxes bulk --operation enableSending --mailbox-ids id1,id2
sendkit mailboxes bulk --operation checkDNS --select-all
sendkit mailboxes bulk --operation startWarmup --mailbox-ids id1,id2
sendkit mailboxes bulk --operation addTags --select-all --tags "new-tag"
sendkit mailboxes bulk --operation updateDailyLimit --select-all --daily-limit 30

# OAuth connect
sendkit mailboxes connect-google
sendkit mailboxes connect-outlook
```

---

## Inbox

Manage conversation threads with leads — reply, tag, schedule, and track.

```bash
# List conversations
sendkit inbox list
sendkit inbox list --status unread --tag interested --campaign <id>

# Get full conversation thread with messages and scheduled replies
sendkit inbox get <id>

# Update conversation
sendkit inbox update <id> --mark-read
sendkit inbox update <id> --ai-tag interested
sendkit inbox update <id> --tags "vip,priority"

# Reply (immediate or scheduled)
sendkit inbox reply <id> --body "Thanks for reaching out!" --mailbox <mailboxId>
sendkit inbox reply <id> --body "Follow up" --schedule "2025-01-15T10:00:00Z"
sendkit inbox reply <id> --body "See attached" --cc "manager@co.com" --bcc "log@co.com"

# Manage scheduled replies
sendkit inbox scheduled <id>
sendkit inbox cancel-scheduled <id> <replyId>

# Bulk operations
sendkit inbox tag --ids id1,id2 --tag "interested"
sendkit inbox mark-read --ids id1,id2,id3
sendkit inbox dnc --ids id1,id2
sendkit inbox dnc --select-all --campaigns id1 --tags interested
sendkit inbox delete --ids id1,id2
sendkit inbox delete --select-all --campaigns id1

# Unread count
sendkit inbox unread-count
sendkit inbox unread-count --campaign <id>
```

---

## Analytics

View performance metrics across your workspace, campaigns, mailboxes, and daily trends.

```bash
# Workspace-wide overview
sendkit analytics overview

# Per-campaign breakdown with step analytics
sendkit analytics campaign <id>

# Mailbox performance
sendkit analytics mailboxes

# Daily trends
sendkit analytics daily
sendkit analytics daily --from 2025-01-01 --to 2025-01-31
```

Stats display as `number (percentage%)` — e.g. `72 (48.0%)` for opened emails.

---

## Templates

Manage reusable email templates with single-letter shortcuts.

```bash
sendkit templates list
sendkit templates get <id>
sendkit templates create --name "Follow Up" --content "Hi {{firstName}}..." --shortcut "A"
sendkit templates update <id> --name "New Name" --content "Updated content"
sendkit templates delete <id>
```

> Shortcuts must be a single uppercase letter (A-Z).

---

## Webhooks

Subscribe to events and receive real-time notifications.

```bash
sendkit webhooks list
sendkit webhooks get <id>
sendkit webhooks create --name "Reply Hook" --url "https://myapp.com/hook" --events "email.replied,email.bounced"
sendkit webhooks update <id> --events "email.replied,email.opened" --status active
sendkit webhooks delete <id>
sendkit webhooks test <id>
```

---

## DNC — Do Not Contact

Manage your suppression list to prevent sending to specific emails or domains.

```bash
sendkit dnc list
sendkit dnc list --type email --limit 50
sendkit dnc add --emails "bad@co.com,spam@co.com" --type email --reason "complaint"
sendkit dnc remove --emails "good@co.com"
sendkit dnc import --emails "a@b.com,c@d.com" --type email --reason "complaint"
```

---

## Enrichment

Enrich leads with email verification, phone numbers, and SEG detection.

```bash
# Enrich leads
sendkit enrichment enrich --lead-ids id1,id2 --types email --provider enrich
sendkit enrichment enrich --lead-ids id1,id2 --types email,phoneEnrichment --provider leadmagic

# Manage enrichment jobs
sendkit enrichment jobs
sendkit enrichment job <jobId>
sendkit enrichment cancel <jobId>

# Provider settings
sendkit enrichment settings
sendkit enrichment settings-get leadmagic
sendkit enrichment settings-configure leadmagic --provider-key "lm_xxx"
sendkit enrichment settings-remove leadmagic
```

---

## Tags

Manage AI tagging labels used for automatic conversation classification.

```bash
sendkit tags list
sendkit tags create --name "Interested" --description "Lead showed interest" --color "#22c55e"
sendkit tags update "Interested" --description "Updated desc" --color "#ef4444"
sendkit tags delete "Interested"
```

---

## Warmup

Monitor email warmup progress and deliverability metrics.

```bash
sendkit warmup stats
sendkit warmup stats --days 14 --search "gmail"
sendkit warmup mailbox <mailboxId>
sendkit warmup mailbox <mailboxId> --days 60
```

---

## Agents — AI Reply

Create AI agents that generate contextual replies to lead conversations.

```bash
sendkit agents list
sendkit agents get <id>
sendkit agents create --name "Sales Bot" --company-name "Acme Inc" --tone "professional" --role "SDR"
sendkit agents update <id> --name "Updated Bot" --tone "friendly"
sendkit agents delete <id>
sendkit agents generate-reply <agentId> --conversation <conversationId> --context "They asked about pricing"
```

---

## Integrations — CRM

Connect and sync with CRM platforms like HubSpot, Pipedrive, and more.

```bash
# Overview
sendkit integrations list
sendkit integrations crm-status

# Connect / disconnect
sendkit integrations crm-connect hubspot --crm-key "hk_xxx"
sendkit integrations crm-disconnect hubspot

# Sync leads
sendkit integrations crm-pull hubspot
sendkit integrations crm-pull hubspot --entity-type people --campaign <id>
sendkit integrations crm-push hubspot --lead-ids id1,id2 --fields "email,firstName,lastName"
sendkit integrations crm-push hubspot --select-all --include-engagement

# Monitor sync jobs
sendkit integrations crm-jobs
sendkit integrations crm-jobs --status pending --crm-type hubspot
```

---

## Testing — Inbox Placement & Blacklist

Test email deliverability and monitor blacklist status.

```bash
# Inbox placement tests
sendkit testing inbox-placement-list
sendkit testing inbox-placement-create --name "Q2 Test" --mailbox-ids id1,id2
sendkit testing inbox-placement-create --name "All Test" --select-all --subject "Test" --body "Hello"
sendkit testing inbox-placement-get <id>

# Blacklist tests
sendkit testing blacklist-list
sendkit testing blacklist-create --name "IP Check" --mailbox-ids id1,id2
sendkit testing blacklist-create --name "All Check" --select-all
sendkit testing blacklist-get <id>
```

---

## JSON Output & Scripting

All commands support `--json` for machine-readable output, making it easy to integrate with scripts and pipelines.

```bash
# Get campaign IDs
sendkit --json campaigns list | jq '.[].id'

# Export unread conversation count
sendkit --json inbox unread-count | jq '.unread'

# Pipe lead emails to a file
sendkit --json leads list --limit 100 | jq -r '.[].email' > emails.txt
```

---

## Requirements

- Node.js >= 18.0.0

## License

MIT