Newsletter
Subscribe readers, list subscribers, and manage newsletter issues via the MisarBlog API.
MisarBlog includes a built-in newsletter system for creators. Readers can subscribe to a creator's newsletter, and creators can view subscribers, export lists, and send issues from the dashboard.
Subscribe to a Newsletter
api.misar.io/blog/newsletter/subscribeSubscribes an email address to a creator's newsletter. A verification email is sent — the subscription is pending until the reader confirms.
This endpoint is public — no API key required. Suitable for embedding a subscribe form on your own site.
This endpoint is rate-limited to 3 requests per 5 minutes per IP to prevent abuse.
Request body
newsletter_idstringbodyrequiredThe UUID of the creator's newsletter. Find it in your dashboard at misar.blog/dashboard/newsletter.
emailstringbodyrequiredThe reader's email address.
Response fields
successbooleantrue when the subscription was created and a verification email was sent.
{
"newsletter_id": "uuid-of-the-newsletter",
"email": "[email protected]"
}{ "success": true }{ "success": false, "error": "Invalid email address" }const res = await fetch("https://api.misar.io/blog/newsletter/subscribe", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
newsletter_id: "your-newsletter-uuid",
email: "[email protected]",
}),
});
const data = await res.json();
if (data.success) {
console.log("Check your inbox to confirm!");
}Unsubscribe
api.misar.io/blog/email/unsubscribeUnsubscribes an email from a newsletter using the signed token included in every outgoing email's unsubscribe link. No authentication required.
Request body
tokenstringbodyrequiredSigned unsubscribe token extracted from the ?token= query parameter in the email's unsubscribe link.
Response fields
successbooleantrue when the subscription was cancelled.
{
"token": "signed-unsubscribe-token"
}{ "success": true }List Subscribers
api.misar.io/blog/newsletter/subscribersReturns the authenticated creator's subscriber list. API key required.
Query parameters
limitintegerquerydefault: 50Results per page (max 200).
offsetintegerquerydefault: 0Pagination offset.
statusstringqueryFilter by status: pending, active, unsubscribed, bounced.
exportbooleanquerySet true to download a CSV file instead of JSON.
Response fields
subscribersarrayArray of subscriber objects.
totalnumberTotal number of subscribers matching the current status filter.
{
"subscribers": [
{
"email": "[email protected]",
"subscribed_at": "2026-03-10T08:00:00Z",
"status": "active"
}
],
"total": 1240,
"limit": 50,
"offset": 0
}Content-Type: text/csv
Content-Disposition: attachment; filename=subscribers.csv# List active subscribers
curl "https://api.misar.io/blog/newsletter/subscribers?status=active&limit=100" \
-H "Authorization: Bearer mbk_your_api_key"
# Export all as CSV
curl "https://api.misar.io/blog/newsletter/subscribers?export=true" \
-H "Authorization: Bearer mbk_your_api_key" \
-o subscribers.csvCSV exports are rate-limited to 3 exports per hour to prevent bulk exfiltration.
List Newsletter Issues
api.misar.io/blog/newsletter/issuesReturns the authenticated creator's sent newsletter issues. API key required.
Response fields
issuesarrayArray of sent newsletter issues, ordered by sent_at descending.
open_ratenumberOpen rate as a decimal (0–1). 0.41 = 41%.
{
"issues": [
{
"id": "uuid",
"subject": "Weekly Digest #12",
"sent_at": "2026-04-14T09:00:00Z",
"recipient_count": 984,
"open_rate": 0.41
}
]
}curl "https://api.misar.io/blog/newsletter/issues" \
-H "Authorization: Bearer mbk_your_api_key"