Misar Docs
MisarMailMisar.BlogMisarReachMisarPostMisar.DevMisar PlatformMisar IdentityMisar Posts API
Api Reference

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

POSTapi.misar.io/blog/newsletter/subscribe

Subscribes 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_idstringbodyrequired

The UUID of the creator's newsletter. Find it in your dashboard at misar.blog/dashboard/newsletter.

emailstringbodyrequired

The reader's email address.

Response fields

successboolean

true 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

POSTapi.misar.io/blog/email/unsubscribe

Unsubscribes an email from a newsletter using the signed token included in every outgoing email's unsubscribe link. No authentication required.

Request body

tokenstringbodyrequired

Signed unsubscribe token extracted from the ?token= query parameter in the email's unsubscribe link.

Response fields

successboolean

true when the subscription was cancelled.

{
  "token": "signed-unsubscribe-token"
}
{ "success": true }

List Subscribers

GETapi.misar.io/blog/newsletter/subscribers

Returns the authenticated creator's subscriber list. API key required.

Query parameters

limitintegerquerydefault: 50

Results per page (max 200).

offsetintegerquerydefault: 0

Pagination offset.

statusstringquery

Filter by status: pending, active, unsubscribed, bounced.

exportbooleanquery

Set true to download a CSV file instead of JSON.

Response fields

subscribersarray

Array of subscriber objects.

totalnumber

Total 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.csv

CSV exports are rate-limited to 3 exports per hour to prevent bulk exfiltration.

List Newsletter Issues

GETapi.misar.io/blog/newsletter/issues

Returns the authenticated creator's sent newsletter issues. API key required.

Response fields

issuesarray

Array of sent newsletter issues, ordered by sent_at descending.

open_ratenumber

Open 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"