Integration

Buttondown integration

Buttondown is a newsletter platform. With this API an agent can manage subscribers (add, update, tag, unsubscribe, delete, send a confirmation reminder or a login link), draft, schedule, publish and send emails, read email and automation analytics and the event stream (deliveries, opens, clicks), manage tags, segments, snippets, surveys and their responses, comments, notes, automations, RSS-to-email feeds, signup forms, attachments and images, sponsorship units and slots, Stripe prices and coupons, bulk actions, subscriber imports and data exports, and read or update newsletter settings. Several tools send real emails or act on subscribers in bulk, and each says so. Left out on purpose: creating or deleting a whole newsletter (a new newsletter answers with its API key), inviting, changing or removing team members, the API request log (it stores request headers and bodies), the ping route, and updating a webhook (the vendor's update replaces the whole webhook, signing key included, and the key is never read back: delete and recreate it instead). Newsletter API keys, webhook URLs and signing keys, automation action settings (a POST-request action stores its URL and signing key there), sponsor submission and invoice links and expanded raw Stripe objects are not returned. Every call is pinned to API version 2026-04-01 with the X-API-Version header. Rate limits: 600 requests a minute, and 100 new subscribers a day through create_subscriber (use create_import for bulk). Authentication: an API key from API, Keys in Buttondown (buttondown.com/keys), sent as 'Authorization: Token <key>'; a key can be limited per area (subscribers, emails, sending, automations, forms, surveys, newsletter settings), and a call outside its permissions answers 403.

Ask it in chat

Say what should happen.
The workflow builds itself.

When this happens, do that in Buttondown.Built from the 124 Buttondown tools below, on the connection you add once.

What you can do with Buttondown

Each of these is one operation on one endpoint, available both as a workflow step and as a tool an AI agent can call on its own. Nothing bundles several operations into one action, so what a run did stays readable afterwards.

Most endpoints run on the free plan. A few, mainly the ones that publish on your behalf, need a paid plan.

Email, 9 operations

  • create_emailCreate emailPOSTCreates an email. status is required: draft saves it, scheduled sends at publish_date, about_to_send SENDS it to the audience in filters (all subscribers by default) within minutes. Body is Markdown or HTML.
  • delete_emailDelete emailDELETEDeletes an email. Cannot be undone.
  • get_email_renderGet email renderGETReturns the rendered HTML of an email in content: target email for the HTML sent to inboxes, html for the web archive version.
  • list_emailsList emailsGETLists emails (drafts, scheduled, sent, imported) with subject, body, status, dates, audience filters and analytics. Filter by status, dates, subject, source or rates; excluded_fields can drop body. Paginated: pass page; next is null on the last page.
  • publish_emailPublish emailPOSTPUBLISHES and SENDS an email to its audience: now, or at publish_date when given. Any other fields sent are applied first (same fields as update_email). Returns the email.
  • retrieve_emailRetrieve emailGETReturns one email: subject, body, status, publish date, archive URL, audience filters, template and analytics.
  • send_draftSend draftPOSTSENDS a test copy of an email to the given subscribers (ids) and/or email addresses (recipients), for review. Does not publish it to the audience.
  • send_email_to_subscriberSend email to subscriberPOSTSENDS one finalized email to one subscriber. For review copies of a draft use send_draft. Answers with no body.
  • update_emailUpdate emailPATCHUpdates an email. Setting status to about_to_send SENDS it, scheduled sends it at publish_date. Fields left out are kept.

Subscriber, 7 operations

  • create_subscriberCreate subscriberPOSTAdds a subscriber. type is required: regular adds them at once with no email; unactivated SENDS a double opt-in confirmation email. An existing address answers 400 unless the collision header says otherwise.
  • delete_subscriberDelete subscriberDELETEDeletes a subscriber outright. Does not cancel their Stripe subscription: set type unsubscribed with update_subscriber first for that. Cannot be undone.
  • list_subscriber_referralsList subscriber referralsGETLists the subscribers referred by one subscriber (personal data), with the same fields as list_subscribers. Paginated: pass page; next is null on the last page.
  • list_subscribersList subscribersGETLists subscribers (personal data: email, IP, country, notes) with type, tags, dates, engagement and source. Filters: tag, type, email_address, dates, rates, UTM, form; a leading minus excludes. Paginated: pass page; next is null on the last page.
  • retrieve_subscriberRetrieve subscriberGETReturns one subscriber by ID or email address: type, tags, metadata, notes, dates, engagement counts and rates, source, UTM fields, referral code, IP and country (personal data).
  • send_confirmation_reminderSend confirmation reminderPOSTSENDS a reminder email asking an unactivated subscriber to confirm their subscription. Answers with no body.
  • send_magic_linkSend magic linkPOSTSENDS the subscriber an email with a login link to their subscription portal, valid 24 hours. Answers with no body.

Automation, 6 operations

  • create_automationCreate automationPOSTCreates an automation: when trigger fires (for example subscriber.confirmed), run the actions (send an email, add tags, POST to a URL...) for subscribers matching filters. Check status in the answer: update_automation with status active turns it on.
  • delete_automationDelete automationDELETEDeletes an automation. Cannot be undone.
  • invoke_automationInvoke automationPOSTRuns an automation now (manual invocation, the automation.invoked event), so its actions run: they can send emails or change subscribers.
  • list_automationsList automationsGETLists automations (rules that act when an event fires): name, status, trigger event, filters and each action's type and timing. Action settings are not returned. Paginated: pass page; next is null on the last page.
  • retrieve_automationRetrieve automationGETReturns one automation: name, status, trigger, filters and each action's type and timing. Action settings (an email id, a POST URL and signing key) are not returned.
  • update_automationUpdate automationPATCHUpdates an automation: name, status (active turns it on, inactive off), trigger, actions, filters or metadata. actions replaces the whole list. Fields left out are kept.

External feed, 6 operations

  • create_external_feedCreate external feedPOSTCreates an RSS-to-email feed. behavior draft only drafts an email per new item; emails SENDS each one to the audience in filters automatically on the cadence. Items published before it was added are ignored.
  • delete_external_feedDelete external feedDELETEDeletes an RSS-to-email feed. Cannot be undone.
  • list_external_feedsList external feedsGETLists RSS-to-email feeds: feed URL, behavior (draft or send emails), cadence, status, subject and body templates and audience filters. Paginated: pass page; next is null on the last page.
  • poll_external_feedPoll external feedPOSTChecks an RSS feed for new items now. New items are queued and turned into emails on the feed's next run, drafted or sent according to its behavior. Answers with no body.
  • retrieve_external_feedRetrieve external feedGETReturns one RSS-to-email feed: URL, behavior, cadence, status, last check date and error, templates and filters.
  • update_external_feedUpdate external feedPATCHUpdates an RSS-to-email feed: behavior, cadence, templates, filters, label, status (inactive pauses it). Fields left out are kept.

Book, 5 operations

  • create_bookCreate bookPOSTAdds a book to the newsletter's bookshelf. With shared true (the default) it is shown publicly on the archive.
  • delete_bookDelete bookDELETERemoves a book from the bookshelf. Cannot be undone.
  • list_booksList booksGETLists the books on the newsletter's bookshelf: title, URL, cover image, description, year, ISBN and whether it is shown publicly on the archive. Paginated: pass page; next is null on the last page.
  • retrieve_bookRetrieve bookGETReturns one book: title, URL, cover image, description, year, ISBN and whether it is shown publicly.
  • update_bookUpdate bookPATCHUpdates a book on the bookshelf. Fields left out are kept.

Comment, 5 operations

  • create_commentCreate commentPOSTPosts a public comment on an email, or a reply with parent_id, attributed to the newsletter author, or to the subscriber given in subscriber_id. Readers of the email see it.
  • delete_commentDelete commentDELETEDeletes a comment. Only its author (the subscriber) or the newsletter author can delete it. Cannot be undone.
  • list_commentsList commentsGETLists comments left on emails, newest first by default: text, status, the email and subscriber ids and the parent comment for replies. Only active ones unless status is given. Paginated: pass page; next is null on the last page.
  • retrieve_commentRetrieve commentGETReturns one comment: text, status, email and subscriber ids and parent comment.
  • update_commentUpdate commentPATCHModerates a comment: status active approves it, spammy marks it as spam. Newsletter owner only.

Form, 5 operations

  • create_formCreate formPOSTCreates a signup form with a hosted page at its slug. Subscribers who sign up get its tags. An active form (the default) accepts submissions from anyone with the link.
  • delete_formDelete formDELETEDeletes a signup form. Cannot be undone.
  • list_formsList formsGETLists signup forms: title, slug of the hosted page, status, tags and surveys applied on signup, and subscriber and page view counts. Paginated: pass page; next is null on the last page.
  • retrieve_formRetrieve formGETReturns one signup form: title, slug, body, CSS, success message, tags, surveys, status and counts.
  • update_formUpdate formPATCHUpdates a signup form; status inactive stops it accepting submissions. Fields left out are kept.

Import, 5 operations

  • create_importCreate importPOSTUploads a CSV of subscribers. A single column of addresses starts importing at once; otherwise the source and columns are detected and it waits for update_import with status in_progress. Poll retrieve_import.
  • delete_importDelete importDELETEDeletes an import record. Cannot be undone.
  • list_importsList importsGETLists subscriber imports: status, detected source, label, column mapping and results (new, updated, existing and rejected addresses). Paginated: pass page; next is null on the last page.
  • retrieve_importRetrieve importGETReturns one subscriber import: status (validating, not_started, in_progress, succeeded, failed, no_op), source, column mapping and results, including rejected addresses by reason.
  • update_importUpdate importPATCHUpdates an import before it runs (label, column mapping in metadata, source custom). Setting status to in_progress STARTS importing the subscribers. Fields left out are kept.

Segment, 5 operations

  • create_segmentCreate segmentPOSTCreates a segment, a saved audience of tag and metadata filter rules. Copy its filters into an email to send to that audience.
  • delete_segmentDelete segmentDELETEDeletes a segment; emails that used it keep their filters. Cannot be undone.
  • list_segmentsList segmentsGETLists segments: saved audiences defined by tag and metadata filters, usable as the filters of an email. Paginated: pass page; next is null on the last page.
  • retrieve_segmentRetrieve segmentGETReturns one segment: name, description and its filter rules.
  • update_segmentUpdate segmentPATCHUpdates a segment. Emails already sent or scheduled keep the filters they copied. Fields left out are kept.

Snippet, 5 operations

  • create_snippetCreate snippetPOSTCreates a reusable snippet that emails insert by its identifier.
  • delete_snippetDelete snippetDELETEDeletes a snippet. Cannot be undone.
  • list_snippetsList snippetsGETLists snippets, reusable content blocks inserted into emails with {{ snippets.<identifier> }}: name, identifier, content, mode and how many emails use each. Paginated: pass page; next is null on the last page.
  • retrieve_snippetRetrieve snippetGETReturns one snippet: identifier, name, content, mode and reference count.
  • update_snippetUpdate snippetPATCHUpdates a snippet; emails that insert it pick up the new content. Fields left out are kept.

Webhook, 5 operations

  • create_webhookCreate webhookPOSTCreates a webhook that POSTs the chosen events to url. The signing key, if set, signs each delivery (X-Buttondown-Signature, HMAC-SHA256) and is never returned: keep it. The URL is not returned either.
  • delete_webhookDelete webhookDELETEDeletes a webhook; Buttondown stops sending it events. Cannot be undone.
  • list_webhooksList webhooksGETLists webhooks: id, status, event types and description. The target URL and signing key are not returned. Paginated: pass page; next is null on the last page.
  • retrieve_webhookRetrieve webhookGETReturns one webhook: status, event types, description and creation date. Its URL and signing key are not returned.
  • test_webhookTest webhookPOSTSENDS a test event to the webhook's URL (event_type, or its first configured event type).

Advertising unit, 4 operations

  • create_advertising_unitCreate advertising unitPOSTCreates an advertising unit, a sponsorship offering with its title, landing page URL, price in cents per slot and content rules (HTML, image, character limit, submission deadline). Add dates later with update_advertising_unit.
  • delete_advertising_unitDelete advertising unitDELETEDeletes an advertising unit and its slots. Cannot be undone.
  • list_advertising_unitsList advertising unitsGETLists the advertising units (sponsorship offerings sold to sponsors): title, price in cents per slot, content rules, status and the slots (one per date) with their booking status. Paginated: pass page; next is null on the last page.
  • update_advertising_unitUpdate advertising unitPATCHUpdates an advertising unit. dates is required and REPLACES its dates: a date left out deletes that slot, a new date opens one. Read the current slot dates with list_advertising_units first. Other fields left out are kept.

Attachment, 4 operations

  • create_attachmentCreate attachmentPOSTUploads a file (under 1 MB; pdf, doc, docx, txt, md, images, zip, mp3, mp4, csv, epub or ics) to attach to emails. Pass the returned id in the attachments list of create_email or update_email. Paid plans only.
  • delete_attachmentDelete attachmentDELETEDeletes an uploaded attachment. Cannot be undone.
  • list_attachmentsList attachmentsGETLists the file attachments uploaded for emails: id, name, file URL and size in bytes. Filter with ids. Paginated: pass page; next is null on the last page.
  • retrieve_attachmentRetrieve attachmentGETReturns one attachment: name, file URL, size in bytes and upload date.

Image, 4 operations

  • create_imageCreate imagePOSTUploads an image to Buttondown and returns its public URL (image), to use in an email body.
  • delete_imageDelete imageDELETEDeletes an uploaded image. Cannot be undone.
  • list_imagesList imagesGETLists images uploaded to Buttondown: id, public image URL and metadata. Filter with ids. Paginated: pass page; next is null on the last page.
  • update_imageUpdate imagePATCHReplaces an image's metadata object.

Survey, 4 operations

  • create_surveyCreate surveyPOSTCreates a survey (a question with answer choices) that emails embed by its identifier; responses then come back through list_survey_responses.
  • delete_surveyDelete surveyDELETEDeletes a survey. Cannot be undone.
  • list_surveysList surveysGETLists surveys: identifier, question, answers, status, input type, response cadence and response count. Paginated: pass page; next is null on the last page.
  • retrieve_surveyRetrieve surveyGETReturns one survey: identifier, question, answers, notes, status, input type, cadence and response count.

Tag, 4 operations

  • create_tagCreate tagPOSTCreates a subscriber tag with a name and hex color. An existing name answers 400 unless the collision header is overwrite.
  • delete_tagDelete tagDELETEDeletes a tag. Cannot be undone.
  • list_tagsList tagsGETLists subscriber tags: id, name, color, internal and public descriptions and whether subscribers can set it themselves. Filter with ids. Paginated: pass page; next is null on the last page.
  • retrieve_tagRetrieve tagGETReturns one tag: name, color, descriptions, numeric secondary id and subscriber_editable.

Export, 3 operations

  • create_exportCreate exportPOSTStarts a data export of one or more collections (subscribers, emails, events, comments, surveys...) as csv or json. It runs in the background: poll retrieve_export until status is ready, then read url.
  • list_exportsList exportsGETLists data exports: collections, format, status and, once ready, the download URL of the file. Paginated: pass page; next is null on the last page.
  • retrieve_exportRetrieve exportGETReturns one export: status (not_started, in_progress, ready, error) and, once ready, url, the link to download the file.

Newsletter, 3 operations

  • list_newslettersList newslettersGETLists the newsletters the API key can reach, with their settings (name, username, sender, domains, templates, locale, timezone, enabled features). API keys are not returned. Paginated: pass page; next is null on the last page.
  • retrieve_newsletterRetrieve newsletterGETReturns one newsletter's settings: name, username, description, sender name and address, domains, templates, custom transactional emails, locale, timezone, features. Its API key is not returned.
  • update_newsletterUpdate newsletterPATCHUpdates newsletter settings: name, description, sender, domains, templates, custom emails, archive look, locale, timezone, test mode... Changing username or domain changes public URLs. Fields left out are kept.

Note, 3 operations

  • create_noteCreate notePOSTAttaches an internal note to an object (model_type and model_id, for example a subscriber). Notes cannot be edited, and automations listening to note.created run on it.
  • delete_noteDelete noteDELETEDeletes a note. Cannot be undone.
  • list_notesList notesGETLists internal notes attached to objects (subscribers, emails, comments, tags...): text, the object type and id, source and author. Filter with model_type and model_id. Paginated: pass page; next is null on the last page.

Price, 3 operations

  • archive_priceArchive priceDELETEArchives a Stripe price so new subscribers cannot choose it; existing subscriptions on it continue. Stripe prices cannot be deleted, and a product's default price cannot be archived.
  • create_priceCreate pricePOSTCreates a paid-subscription price directly in the newsletter's connected Stripe account (amount in the smallest currency unit, currency, cadence, style).
  • list_pricesList pricesGETLists the paid-subscription prices of the connected Stripe account: amount, currency, cadence, style (fixed, pay-what-you-want, usage-based) and product. Paginated: pass page; next is null on the last page.

Advertising slot, 2 operations

  • list_advertising_slotsList advertising slotsGETLists advertising slots (one sponsorship date of a unit): date, status (open, held, sold, finalized, executed, expired), sponsor name, company and email, and the submitted ad content. Paginated: pass page; next is null on the last page.
  • update_advertising_slotUpdate advertising slotPATCHReviews or edits a sponsor's slot: approve content (content_approved_at), reject it (content_rejection_reason), change its booking status (approve, reject, hold_accept, hold_decline) or the sponsor details. Fields left out are kept.

Automation attempt, 2 operations

  • list_subscriber_automation_attemptsList subscriber automation attemptsGETLists one subscriber's automation runs: automation name and id, status (pending, processed, failed, skipped...), execution date and error code. Skip a pending one with skip_automation_attempt. Paginated: pass page; next is null on the last page.
  • skip_automation_attemptSkip automation attemptPATCHMarks a pending automation run for one subscriber as skipped (the only status accepted), so it does not run for them.

Bulk action, 2 operations

  • create_bulk_actionCreate bulk actionPOSTRuns one action on many records (delete, unsubscribe, tag, send emails or reminders, cancel Stripe subscriptions...). metadata.ids picks them; for most types an empty ids acts on ALL. Poll retrieve_bulk_action for the result.
  • retrieve_bulk_actionRetrieve bulk actionGETReturns a bulk action and its status (not_started, in_progress, processed, failed) with its completion date. Poll it after create_bulk_action.

Email history, 2 operations

  • get_email_body_versionGet email body versionGETReturns one past version of an email's body (value) with its date and author, by its history_id from list_email_history.
  • list_email_historyList email historyGETLists the edit history of one field of an email (field is required, for example body or subject): each version with its date and author. Read a past body with get_email_body_version. Paginated: pass page; next is null on the last page.

Event, 2 operations

  • get_eventGet eventGETReturns one email event: type, date, subscriber, email and automation ids and its metadata (for example the clicked URL or bounce reason).
  • list_eventsList eventsGETLists email events, newest first (deliveries, opens, clicks, bounces, unsubscriptions...) with subscriber, email and automation ids. Filter by event_type, email_id, subscriber_id, automation_id. Paginated: pass page; next is null on the last page.

Survey response, 2 operations

  • create_survey_responseCreate survey responsePOSTRecords a subscriber's answer to a survey (answer: 1-based position in its answers; email_id: the email, automation or source). Can fire automations and webhooks listening to subscriber.responded_to_survey.
  • list_survey_responsesList survey responsesGETLists survey responses: the chosen answer, optional text, survey, subscriber, email or automation ids and source. Filter by survey_id, subscriber_id, email_id, automation_id, source or dates. Paginated: pass page; next is null on the last page.

User, 2 operations

  • list_usersList usersGETLists the team members invited to the newsletter: email address, permissions, invitation status and last login. Paginated: pass page; next is null on the last page.
  • retrieve_userRetrieve userGETReturns one team member: email address, permissions per area, invitation status and last login.

Account, 1 operation

  • get_accountGet accountGETReturns the Buttondown account that owns the API key: its username and email address. Useful to check that the connection works.

Automation analytics, 1 operation

  • retrieve_automation_analyticsRetrieve automation analyticsGETReturns counts for the emails an automation sent: recipients, deliveries, opens, clicks, failures, unsubscriptions, complaints, survey responses, replies, comments, page views and the subscriptions it brought.

Coupon, 1 operation

  • list_couponsList couponsGETLists the Stripe coupons of the newsletter's connected Stripe account: coupon id, name and percent or amount off. Paginated: pass page; next is null on the last page.

Email analytics, 1 operation

  • retrieve_email_analyticsRetrieve email analyticsGETReturns counts for one email: recipients, deliveries, opens, clicks, temporary and permanent failures (with breakdowns), unsubscriptions, complaints, survey responses, replies, comments, page views, subscriptions.

External feed item, 1 operation

  • list_external_feed_itemsList external feed itemsGETLists the items found in an RSS feed: title, URL, publish date, author, processing status and the id of the email created from it. Paginated: pass page; next is null on the last page.

Hosting domain, 1 operation

  • retrieve_hosting_domainRetrieve hosting domainGETRe-checks and returns the DNS status of the newsletter's custom archive domain: the record type and values expected, the values seen and the nameservers.

Public email, 1 operation

  • list_public_emailsList public emailsGETSearches the public archive of any newsletter by its username: subject, slug, publish date, description and archive URL of each public email. Pages of 50: pass page. next stays null on this route, so use count for the total.

Sending domain, 1 operation

  • retrieve_sending_domainRetrieve sending domainGETReturns the DNS status of the newsletter's custom sending domain and the records to add. While is_checking is true a re-check is running: call again until false. force true starts a fresh check.

Stripe subscription, 1 operation

  • list_subscriber_stripe_subscriptionsList subscriber stripe subscriptionsGETLists one subscriber's Stripe subscriptions: subscription id, Stripe dashboard link, amount, currency, cadence, status, product, source and start and end dates. Paginated: pass page; next is null on the last page.

Tag analytics, 1 operation

  • retrieve_tag_analyticsRetrieve tag analyticsGETReturns the subscribers created with a tag and their open and click rates.

Webhook attempt, 1 operation

  • list_webhook_attemptsList webhook attemptsGETLists the delivery attempts of a webhook: event type, status (unattempted, successful, failed), error message, retry count, duration and dates. Paginated: pass page; next is null on the last page.

Showing the first 120 of 124 endpoints. The rest are in the product, searchable from the workflow builder and from chat.

Use Buttondown from Claude Code, Cursor or Codex

Connect Buttondown in LiveContext, create an API key in Settings, then add the LiveContext MCP server to your client. Its Buttondown operations become tools the client can call, next to every other integration you connected.

Claude Code
claude mcp add --transport http livecontext https://livecontext.ai/mcp --header "X-API-Key: YOUR_API_KEY"
Codex (~/.codex/config.toml)
[mcp_servers.livecontext]
url = "https://livecontext.ai/mcp"

[mcp_servers.livecontext.http_headers]
"X-API-Key" = "YOUR_API_KEY"
Cursor, Claude Desktop and other JSON configs
{
  "mcpServers": {
    "livecontext": {
      "type": "http",
      "url": "https://livecontext.ai/mcp",
      "headers": {
        "X-API-Key": "YOUR_API_KEY"
      }
    }
  }
}

Set up the MCP server step by step

How to connect Buttondown

  1. Create your workspace

    Sign up free. Nothing to install.

  2. Connect Buttondown once

    Add your Buttondown connection in Settings. Every tool from this integration reuses it, and secrets are encrypted at rest and visible only to you.

  3. Describe the job in chat

    The workflow builds itself in front of you and picks the endpoints it needs. Drag the steps yourself on the canvas whenever you would rather be explicit.

Buttondown integration FAQ

What can you do with the Buttondown integration?

LiveContext exposes 124 operations on Buttondown, covering email, subscriber, automation and external feed.

Popular integrations

Browse the whole catalog