beehiiv API integration with managed OAuth. Manage newsletter publications, subscriptions, posts, custom fields, segments, and automations. Use this skill when users want to manage newsletter subscribers, create posts, organize segments, or integrate with beehiiv publications. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway). Requires network access and valid Maton API key.
OpenClaw skills run inside an OpenClaw container. EasyClawd deploys and manages yours — no server setup needed.
beehiiv skill 1.0.0 – Initial release - Integrates with beehiiv's API for managing publications, subscriptions, posts, custom fields, segments, and automations. - Provides managed OAuth authentication and connection management via Maton. - Includes documentation for making API calls, managing OAuth connections, and using Maton API keys. - Supports newsletter subscriber management, post creation, segment organization, and more. - Offers usage samples in Python for common connection and API operations.
---
name: beehiiv
description: |
beehiiv API integration with managed OAuth. Manage newsletter publications, subscriptions, posts, custom fields, segments, and automations.
Use this skill when users want to manage newsletter subscribers, create posts, organize segments, or integrate with beehiiv publications.
For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway).
Requires network access and valid Maton API key.
metadata:
author: maton
version: "1.0"
clawdbot:
emoji: 🧠
requires:
env:
- MATON_API_KEY
---
# beehiiv
Access the beehiiv API with managed OAuth authentication. Manage newsletter publications, subscriptions, posts, custom fields, segments, tiers, and automations.
## Quick Start
```bash
# List publications
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/beehiiv/v2/publications')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
```
## Base URL
```
https://gateway.maton.ai/beehiiv/{native-api-path}
```
Replace `{native-api-path}` with the actual beehiiv API endpoint path. The gateway proxies requests to `api.beehiiv.com` and automatically injects your OAuth token.
## Authentication
All requests require the Maton API key in the Authorization header:
```
Authorization: Bearer $MATON_API_KEY
```
**Environment Variable:** Set your API key as `MATON_API_KEY`:
```bash
export MATON_API_KEY="YOUR_API_KEY"
```
### Getting Your API Key
1. Sign in or create an account at [maton.ai](https://maton.ai)
2. Go to [maton.ai/settings](https://maton.ai/settings)
3. Copy your API key
## Connection Management
Manage your beehiiv OAuth connections at `https://ctrl.maton.ai`.
### List Connections
```bash
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections?app=beehiiv&status=ACTIVE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
```
### Create Connection
```bash
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'beehiiv'}).encode()
req = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
```
### Get Connection
```bash
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
```
**Response:**
```json
{
"connection": {
"connection_id": "8bfe17f4-0038-4cbd-afb4-907b1ffa9d66",
"status": "ACTIVE",
"creation_time": "2026-02-11T00:25:10.464852Z",
"last_updated_time": "2026-02-11T00:27:00.816431Z",
"url": "https://connect.maton.ai/?session_token=...",
"app": "beehiiv",
"metadata": {}
}
}
```
Open the returned `url` in a browser to complete OAuth authorization.
### Delete Connection
```bash
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
```
### Specifying Connection
If you have multiple beehiiv connections, specify which one to use with the `Maton-Connection` header:
```bash
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/beehiiv/v2/publications')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Maton-Connection', '8bfe17f4-0038-4cbd-afb4-907b1ffa9d66')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
```
If omitted, the gateway uses the default (oldest) active connection.
## API Reference
All beehiiv API endpoints follow this pattern:
```
/beehiiv/v2/{resource}
```
---
## Publications
### List Publications
```bash
GET /beehiiv/v2/publications
```
**Query Parameters:**
| Parameter | Description |
|-----------|-------------|
| `limit` | Results per page (1-100, default: 10) |
| `page` | Page number (default: 1) |
| `expand[]` | Expand with: `stats`, `stat_active_subscriptions`, `stat_average_open_rate`, etc. |
| `order_by` | Sort by: `created` or `name` |
| `direction` | Sort direction: `asc` or `desc` |
**Response:**
```json
{
"data": [
{
"id": "pub_c6c521e4-91ac-4c14-8a52-06987b7e32f2",
"name": "My Newsletter",
"organization_name": "My Organization",
"referral_program_enabled": true,
"created": 1770767522
}
],
"page": 1,
"limit": 10,
"total_results": 1,
"total_pages": 1
}
```
### Get Publication
```bash
GET /beehiiv/v2/publications/{publication_id}
```
---
## Subscriptions
### List Subscriptions
```bash
GET /beehiiv/v2/publications/{publication_id}/subscriptions
```
**Query Parameters:**
| Parameter | Description |
|-----------|-------------|
| `limit` | Results per page (1-100, default: 10) |
| `cursor` | Cursor for pagination (recommended) |
| `page` | Page number (deprecated, max 100 pages) |
| `email` | Filter by exact email (case-insensitive) |
| `status` | Filter: `validating`, `invalid`, `pending`, `active`, `inactive`, `all` |
| `tier` | Filter: `free`, `premium`, `all` |
| `expand[]` | Expand with: `stats`, `custom_fields`, `referrals` |
| `order_by` | Sort field (default: `created`) |
| `direction` | Sort direction: `asc` or `desc` |
**Response:**
```json
{
"data": [
{
"id": "sub_c27d9640-f418-43a8-a0f9-528c20a05002",
"email": "[email protected]",
"status": "active",
"created": 1770767524,
"subscription_tier": "free",
"subscription_premium_tier_names": [],
"utm_source": "direct",
"utm_medium": "",
"utm_channel": "website",
"utm_campaign": "",
"referring_site": "",
"referral_code": "gBZbSVal1X",
"stripe_customer_id": ""
}
],
"limit": 10,
"has_more": false,
"next_cursor": null
}
```
### Get Subscription by ID
```bash
GET /beehiiv/v2/publications/{publication_id}/subscriptions/{subscription_id}
```
**Query Parameters:**
| Parameter | Description |
|-----------|-------------|
| `expand[]` | Expand with: `stats`, `custom_fields`, `referrals`, `tags` |
### Get Subscription by Email
```bash
GET /beehiiv/v2/publications/{publication_id}/subscriptions/by_email/{email}
```
### Create Subscription
```bash
POST /beehiiv/v2/publications/{publication_id}/subscriptions
Content-Type: application/json
{
"email": "[email protected]",
"utm_source": "api",
"send_welcome_email": false,
"reactivate_existing": false
}
```
**Request Body:**
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `email` | string | Yes | Subscriber email address |
| `reactivate_existing` | boolean | No | Reactivate if previously unsubscribed |
| `send_welcome_email` | boolean | No | Send welcome email |
| `utm_source` | string | No | UTM source for tracking |
| `utm_medium` | string | No | UTM medium |
| `referring_site` | string | No | Referral code of referring subscriber |
| `custom_fields` | object | No | Custom field values (fields must exist) |
| `double_opt_override` | string | No | `on` or `off` to override double opt-in |
| `tier` | string | No | Subscription tier |
| `premium_tier_names` | array | No | Premium tier names to assign |
### Update Subscription
```bash
PATCH /beehiiv/v2/publications/{publication_id}/subscriptions/{subscription_id}
Content-Type: application/json
{
"utm_source": "updated-source",
"custoRead full documentation on ClawHub