skills/buttondown/SKILL.md
Interact with the Buttondown newsletter API to manage tags, automations, subscribers, and emails. Use this skill whenever the user mentions Buttondown, newsletter tags, newsletter automations, email subscribers, or wants to manage any aspect of their Buttondown newsletter -- even if they just say 'my newsletter' without explicitly naming Buttondown.
npx skillsauth add dgalarza/agent-skills buttondownInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill enables you to interact with the Buttondown newsletter platform via its REST API. The API follows standard RESTful conventions, so operations are straightforward CRUD calls.
All requests require the user's API key, available from https://buttondown.com/requests.
BUTTONDOWN_API_KEY environment variableAuthorization: Token $BUTTONDOWN_API_KEYBefore making any API call, verify the env var is set. If it's missing, tell the user to set it:
export BUTTONDOWN_API_KEY="your-api-key-here"
https://api.buttondown.com/v1
All endpoint paths below are relative to this base.
Use curl for all API calls. Standard patterns:
# GET (list/retrieve)
curl -s -H "Authorization: Token $BUTTONDOWN_API_KEY" \
"https://api.buttondown.com/v1/{resource}"
# POST (create)
curl -s -X POST \
-H "Authorization: Token $BUTTONDOWN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"field": "value"}' \
"https://api.buttondown.com/v1/{resource}"
# PATCH (update)
curl -s -X PATCH \
-H "Authorization: Token $BUTTONDOWN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"field": "new_value"}' \
"https://api.buttondown.com/v1/{resource}/{id}"
# DELETE
curl -s -X DELETE \
-H "Authorization: Token $BUTTONDOWN_API_KEY" \
"https://api.buttondown.com/v1/{resource}/{id}"
Pipe responses through jq for readable output. Use jq -r when extracting specific values.
List endpoints return paginated results. The response includes:
count: total number of resultsnext: URL for next page (null if last page)previous: URL for previous page (null if first page)results: array of objectsTo fetch all results, follow next URLs until null.
Tags help organize subscribers into groups.
GET /tags
Returns all tags. Each tag has id, name, color, description, and creation_date.
POST /tags
Body: {"name": "tag-name", "color": "#hex"} (name and color are required). Optional fields: description.
GET /tags/{id}
PATCH /tags/{id}
Body: any fields to update (e.g., {"name": "new-name", "color": "#ff0000"}).
DELETE /tags/{id}
Automations perform actions automatically based on triggers. Each automation has three parts:
Automations can be active or paused. Changes to automation emails affect all future subscribers, including those waiting on a delayed action. Changes to the action list only affect subscribers who trigger the automation after the change.
GET /automations
POST /automations
Body includes trigger configuration and actions. Key fields:
name: descriptive name for the automationtrigger: the event that starts it (e.g., subscriber.tags.changed, subscriber.confirmed, subscriber.created, email.sent)status: "active" or "inactive"filters: object with filters array, groups array, and predicate ("and" or "or")actions: array of action objects with timingtags -- matches subscribers who have a specific tagspecial.tags_changed -- matches when a specific tag was just added (use this for tag-based automations to avoid re-triggering)Automation emails are defined inline in the action, not as separate email objects:
{
"type": "send_email",
"metadata": {
"subject": "Email subject",
"body": "<!-- buttondown-editor-mode: fancy -->Email body in markdown",
"email_id": "",
"template": ""
},
"timing": {
"time": "immediate",
"delay": {"value": "0", "unit": "days", "time_of_day": null}
}
}
For delayed emails, set time to "delay" and adjust the delay object (e.g., {"value": "3", "unit": "days"}).
GET /automations/{id}
PATCH /automations/{id}
DELETE /automations/{id}
Each action can be immediate or delayed (e.g., "send welcome email immediately, then add VIP tag after 7 days").
For reference, though not the primary focus of this skill, the subscriber endpoints are available:
GET /subscribers
POST /subscribers
Required: email_address. Optional: type ("regular" to skip double opt-in), tags (array), metadata (object), ip_address.
PATCH /subscribers/{id_or_email}
Accepts either subscriber ID or email address as the identifier. Note: changing type from premium to unsubscribed will cancel the subscriber's Stripe subscription.
DELETE /subscribers/{id}
For reference, email/newsletter endpoints:
GET /emails
POST /emails
The API auto-detects content type (plain text, HTML, or Markdown). You can explicitly set the format with a comment at the start of the body:
<!-- buttondown-editor-mode: plaintext --><!-- buttondown-editor-mode: fancy -->Note: the API rejects bodies starting with YAML frontmatter (---). To bypass, include the header X-Buttondown-Live-Dangerously: true.
GET /emails/{id}
development
Use this skill when writing, rewriting, or reviewing feedback comments so they follow the Conventional Comments format.
development
Interact with the CreatorSignal API: submit video ideas for AI validation, poll for scored Go/Refine/Kill verdicts, manage channels and webhooks, and check quota. Use this skill whenever the user mentions CreatorSignal API, video idea validation, cs_live_ tokens, validation polling, webhook endpoints, or programmatic idea submission.
development
This skill should be used when interfacing with the Buffer social media scheduling API. It handles scheduling social media posts, checking the queue, listing channels, creating ideas, and managing Buffer accounts.
tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.