# API

## Buttondown has a pleasant REST API to let you supercharge your newsletter.

Everything you can do in Buttondown, you can do with the API. [Manage subscribers](https://docs.buttondown.com/api-subscribers-introduction), [send emails](https://docs.buttondown.com/api-emails-introduction), [create automations](https://docs.buttondown.com/api-automation-introduction) — all from your own code.

[Show me the damn docs](https://docs.buttondown.com/api-introduction)

Here are some common operations to get you started.

- Send broadcast email
- Send transactional email
- Create a subscriber
- Create a newsletter

### Python

```
import requests

url = "https://api.buttondown.com/v1/emails"
headers = {
    "Authorization": "Token $BUTTONDOWN_API_KEY",
    "Content-Type": "application/json"
}
data = {
    "subject": "Weekly Newsletter - Product Updates",
    "body": """# Product Updates This Week

Hey everyone! Here's what's new:

## New Features
- **Advanced Analytics**: Track subscriber engagement like never before
- **Custom Templates**: Create your own email designs
- **API Improvements**: Faster response times and better error handling

## Coming Soon
- Mobile app for iOS and Android
- Advanced automation workflows
- Integration with 50+ popular tools

Thanks for being part of our community!

Best,
The Team""",
    "status": "sent"
}

response = requests.post(url, headers=headers, json=data)
print(response.json())
```

## Build whatever you need.

The [interface](/content/features/markdown/index.html) and [integrations like Zapier](/content/features/integrations/index.html) handle most use cases. But when you need something custom, the API is there:

- **Power your SaaS.** Programmatically [send emails](https://docs.buttondown.com/scheduling-emails-via-the-api), [manage subscribers](https://docs.buttondown.com/api-subscribers-introduction), and handle [paid subscriptions](https://docs.buttondown.com/api-subscribers-stripe-subscriptions) from your own application.
- **Integrate with your stack.** Connect Buttondown to your [analytics](https://docs.buttondown.com/retrieving-analytics-data), CRM, or any internal tool.
- **Automate everything.** Sync [subscriber data](https://docs.buttondown.com/api-subscribers-automations), [trigger emails from external events](https://docs.buttondown.com/api-webhooks-event-types), or build your own dashboard.

## API-first by design.

We didn't bolt on an API after the fact. Every feature in Buttondown is built [API-first](https://docs.buttondown.com/api-introduction) — we use the same API to power our own app. Open your browser's network tab and see for yourself.

That means no second-class endpoints, no missing functionality, and no surprises. If you can click it, you can script it.

## Frequently asked questions

### Is the API available on the free plan?

Yes. The API is available on all plans, including free. Learn more about [getting started with the API](https://docs.buttondown.com/api-introduction).

### Is there a rate limit?

Yes. The API is rate-limited to prevent abuse, but the limits are generous enough for most use cases. Learn more about [rate limits](https://docs.buttondown.com/api-rate-limits).

### Where do I find my API key?

On the [API keys page](/content/keys/index.html) in your Buttondown account. You can also create multiple API keys with different permissions.

### Do you have an official SDK for my language?

No, and that's deliberate. We'd rather invest in making our [OpenAPI spec](https://docs.buttondown.com/api-introduction) as good as humanly possible — which benefits every caller regardless of language or framework — than maintain a fleet of SDKs that inevitably lag behind the API itself. If you want a typed client, generators like [openapi-typescript](https://github.com/openapi-ts/openapi-typescript) or [openapi-python-client](https://github.com/openapi-generators/openapi-python-client) will give you one in seconds.

### Do you have an MCP server?

No, for essentially the same reasons we don't ship official SDKs: an MCP server is a thin, opinionated wrapper around our API, and we'd rather keep refining the [OpenAPI spec](https://docs.buttondown.com/api-introduction) underneath so every caller benefits. If you want one, point Claude (or your LLM of choice) at our [API spec](https://docs.buttondown.com/api-introduction) and ask it to build an MCP server tailored to your workflow — you'll end up with something better-fit than anything we could ship generically.
