From watzon-claude-code
Use when managing SendGrid email services via CLI - sending emails, managing templates, contacts, lists, suppressions, domains, API keys, webhooks, and viewing stats. Triggers: "sendgrid send", "manage sendgrid", "sendgrid template", "sendgrid contacts", "sendgrid stats", "sendgrid domain", "sendgrid api key", "sendgrid webhook", "email bounces", "sendgrid suppressions", "verify sender", "sendgrid list", "marketing email", "transactional email". Provides comprehensive CLI for all SendGrid API operations without needing the dashboard.
npx claudepluginhub joshuarweaver/cascade-code-languages-misc-2 --plugin watzon-claude-codeThis skill uses the workspace's default tool permissions.
Complete CLI for managing SendGrid email services - send emails, manage templates, contacts, domains, and more.
cli/commands/apikey.tscli/commands/auth.tscli/commands/contact.tscli/commands/domain.tscli/commands/list.tscli/commands/mail.tscli/commands/sender.tscli/commands/stats.tscli/commands/suppression.tscli/commands/template.tscli/commands/validate.tscli/commands/webhook.tscli/deno.jsoncli/deno.lockcli/lib/client.tscli/lib/config.tscli/lib/output.tscli/mod.tsreferences/api-endpoints.mdCreates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
Complete CLI for managing SendGrid email services - send emails, manage templates, contacts, domains, and more.
| Task | Command |
|---|---|
| Send email | sendgrid mail send --to user@example.com --subject "Hello" --text "Body" |
| Send with template | sendgrid mail send --to user@example.com --template-id d-xxx --data '{"name":"John"}' |
| List templates | sendgrid template list |
| Add contact | sendgrid contact add --email user@example.com --first-name John |
| View stats | sendgrid stats global --days 7 |
| List bounces | sendgrid suppression bounces |
| Create API key | sendgrid apikey create --name "My Key" --scopes mail.send |
# Option 1: Run with Deno
deno run --allow-all ~/.claude/skills/sendgrid-management/cli/mod.ts [command]
# Option 2: Compile to binary
cd ~/.claude/skills/sendgrid-management/cli && deno task compile
./dist/sendgrid --help
# Option 3: Install globally
deno install --allow-all -n sendgrid ~/.claude/skills/sendgrid-management/cli/mod.ts
# Set API key (saves to ~/.config/sendgrid/config.json)
sendgrid auth login --api-key SG.xxx
# Or use environment variable
export SENDGRID_API_KEY="SG.xxx"
# Check auth status
sendgrid auth status
| Group | Description |
|---|---|
auth | Authentication and config management |
mail | Send emails (transactional) |
template | Manage dynamic templates |
contact | Manage contacts |
list | Manage contact lists |
segment | Manage contact segments |
suppression | View/manage bounces, blocks, spam reports |
sender | Manage verified senders |
domain | Domain authentication (DKIM, SPF) |
stats | View email statistics |
webhook | Manage event webhooks |
apikey | Manage API keys |
validate | Validate email addresses |
# Simple email
sendgrid mail send \
--to recipient@example.com \
--from sender@example.com \
--subject "Welcome!" \
--html "<h1>Hello</h1><p>Welcome to our service!</p>"
# With dynamic template
sendgrid mail send \
--to recipient@example.com \
--from sender@example.com \
--template-id d-f43daeeaef504760851f727007e0b5d0 \
--data '{"name": "John", "order_id": "12345"}'
# Multiple recipients
sendgrid mail send \
--to user1@example.com,user2@example.com \
--from sender@example.com \
--subject "Announcement" \
--text "Important update..."
# Schedule for later
sendgrid mail send \
--to recipient@example.com \
--from sender@example.com \
--subject "Scheduled" \
--text "This was scheduled" \
--send-at "2024-12-25T10:00:00Z"
# List all templates
sendgrid template list
# Get template details
sendgrid template get <template-id>
# Create template
sendgrid template create --name "Welcome Email" --generation dynamic
# Create/update version
sendgrid template version create <template-id> \
--name "v1" \
--subject "Welcome {{name}}!" \
--html-file welcome.html \
--active
# Add single contact
sendgrid contact add \
--email user@example.com \
--first-name John \
--last-name Doe \
--list-ids abc123,def456
# Import from file
sendgrid contact import --file contacts.csv
# Search contacts
sendgrid contact search --query "email LIKE '%@example.com'"
# Export contacts
sendgrid contact export --list-id abc123 --output contacts.csv
# Get contact count
sendgrid contact count
# Create list
sendgrid list create --name "Newsletter Subscribers"
# List all lists
sendgrid list all
# Add contacts to list
sendgrid list add-contacts <list-id> --emails user1@example.com,user2@example.com
# Remove contacts from list
sendgrid list remove-contacts <list-id> --contact-ids id1,id2
# Delete list
sendgrid list delete <list-id>
# View bounces
sendgrid suppression bounces [--start-time 2024-01-01] [--end-time 2024-12-31]
# View blocks
sendgrid suppression blocks
# View spam reports
sendgrid suppression spam-reports
# View unsubscribes
sendgrid suppression unsubscribes
# Delete specific bounce
sendgrid suppression delete bounce user@example.com
# Add to global unsubscribe
sendgrid suppression add unsubscribe user@example.com
# List authenticated domains
sendgrid domain list
# Authenticate new domain
sendgrid domain create --domain example.com
# Get DNS records to add
sendgrid domain get <domain-id>
# Validate domain (after adding DNS)
sendgrid domain validate <domain-id>
# Set as default
sendgrid domain set-default <domain-id>
# List verified senders
sendgrid sender list
# Create sender identity
sendgrid sender create \
--from-email noreply@example.com \
--from-name "My Company" \
--reply-to support@example.com
# Resend verification
sendgrid sender resend <sender-id>
# Delete sender
sendgrid sender delete <sender-id>
# Global stats (last 7 days)
sendgrid stats global --days 7
# Stats by category
sendgrid stats category --categories transactional,marketing --days 30
# Stats by mailbox provider
sendgrid stats mailbox-providers --days 7
# Stats by browser
sendgrid stats browsers --days 7
# Stats by device
sendgrid stats devices --days 7
# List webhooks
sendgrid webhook list
# Create webhook
sendgrid webhook create \
--url https://example.com/webhook \
--events delivered,opened,clicked,bounced
# Update webhook
sendgrid webhook update <webhook-id> --enabled false
# Test webhook
sendgrid webhook test <webhook-id>
# Delete webhook
sendgrid webhook delete <webhook-id>
# List API keys
sendgrid apikey list
# Create API key
sendgrid apikey create \
--name "Production API" \
--scopes mail.send,templates.read
# Create full access key
sendgrid apikey create --name "Admin Key" --full-access
# Update key name
sendgrid apikey update <key-id> --name "New Name"
# Delete key
sendgrid apikey delete <key-id>
All commands support --json for machine-readable output:
sendgrid template list --json | jq '.[].id'
sendgrid stats global --days 7 --json > stats.json
| Variable | Description |
|---|---|
SENDGRID_API_KEY | API key (required) |
SENDGRID_FROM_EMAIL | Default from email |
SENDGRID_FROM_NAME | Default from name |
| Category | Endpoints | Status |
|---|---|---|
| Mail Send | send, schedule, batch | Complete |
| Templates | CRUD, versions | Complete |
| Contacts | add, import, search, export | Complete |
| Lists | CRUD, add/remove contacts | Complete |
| Segments | list, get | Partial |
| Suppressions | bounces, blocks, spam, unsubs | Complete |
| Senders | CRUD, verify | Complete |
| Domain Auth | CRUD, validate | Complete |
| Stats | global, category, geo, device | Complete |
| Webhooks | CRUD, test | Complete |
| API Keys | CRUD | Complete |
| Validation | single email | Complete |
| Error | Solution |
|---|---|
401 Unauthorized | Check API key is valid and has required scopes |
403 Forbidden | API key lacks permission for this action |
429 Rate Limited | Too many requests; wait and retry |
400 Bad Request | Check request parameters |