Sending
Newsletters API
2 endpoints under https://api.mailneo.co/api/v2. Every request carries your key in the X-API-Key header. The scope used here: newsletters:read. Each endpoint below states the one it requires. Start with the guide →
listNewslettersList newsletters
Newsletter campaigns — both one-off broadcasts and drip sequences — with their delivery and engagement counters. Cursor-paginated; pass updated_since with the synced_through value from your previous run to fetch only what changed.
The message body is not on this response: it is customer-authored HTML and frequently tens of kilobytes. Retrieve a single newsletter to get body and alt_body.
/newslettersnewsletters:readExample request
curl "https://api.mailneo.co/api/v2/newsletters?limit=25&order=desc&sort=updated_at" \ -H "X-API-Key: $MAILNEO_API_KEY"
Authorization
- Required scope
newsletters:read. A key without it is refused before the endpoint runs.- Credential
X-API-Key: mk_live_...Authorization: Bearer mk_live_...
Query parameters9
| Name | Type | Required | Notes |
|---|---|---|---|
| limit | integer | No | default 25 · 1–100 |
| cursor | string | No | max 256 chars |
| order | "asc" | "desc" | No | default "desc" |
| updated_since | string · date-time | No | ISO 8601 |
| sort | "updated_at" | "created_at" | No | default "updated_at" |
| status | "DRAFT" | "SENDING" | "SCHEDULED" | "PAUSED" | "FAILED" | "SENT" | … | No | |
| type | "REGULAR" | "OPTIN" | No | |
| campaign_mode | "broadcast" | "drip" | No | |
| name | string | No | max 200 chars |
Response · 200
Success
data[]Each element of the array.
| Field | Type | Always present | Notes |
|---|---|---|---|
| object | "newsletter" | Yes | |
| id | string | Yes | |
| name | string | Yes | |
| subject | string | Yes | |
| preheader | string · nullable | Yes | |
| from_email | string | Yes | |
| from_name | string | Yes | |
| reply_to | string · nullable | Yes | |
| content_type | string | Yes | |
| status | string | Yes | |
| type | string | Yes | |
| campaign_mode | string | Yes | |
| is_drip | boolean | Yes | |
| tags | string[] | Yes | |
| send_at | string · nullable | Yes | |
| started_at | string · nullable | Yes | |
| archive | boolean | Yes | |
| archive_slug | string · nullable | Yes | |
| recipient_count | integer | Yes | |
| sent_count | integer | Yes | |
| open_count | integer | Yes | |
| unique_open_count | integer | Yes | |
| click_count | integer | Yes | |
| unique_click_count | integer | Yes | |
| unsubscribe_count | integer | Yes | |
| created_at | string | Yes | |
| updated_at | string | Yes |
meta
| Field | Type | Always present | Notes |
|---|---|---|---|
| request_id | string | Yes | |
| has_more | boolean | Yes | |
| next_cursor | string · nullable | Yes | |
| synced_through | string | No |
getNewsletterRetrieve a newsletter
Includes body and alt_body, which the list response omits.
/newsletters/{newsletterId}newsletters:readExample request
curl "https://api.mailneo.co/api/v2/newsletters/{newsletterId}" \
-H "X-API-Key: $MAILNEO_API_KEY"Authorization
- Required scope
newsletters:read. A key without it is refused before the endpoint runs.- Credential
X-API-Key: mk_live_...Authorization: Bearer mk_live_...
Path parameters1
| Name | Type | Required | Notes |
|---|---|---|---|
| newsletterId | string | Yes | max 64 chars |
Response · 200
Success
data
| Field | Type | Always present | Notes |
|---|---|---|---|
| object | "newsletter" | Yes | |
| id | string | Yes | |
| name | string | Yes | |
| subject | string | Yes | |
| preheader | string · nullable | Yes | |
| from_email | string | Yes | |
| from_name | string | Yes | |
| reply_to | string · nullable | Yes | |
| content_type | string | Yes | |
| status | string | Yes | |
| type | string | Yes | |
| campaign_mode | string | Yes | |
| is_drip | boolean | Yes | |
| tags | string[] | Yes | |
| send_at | string · nullable | Yes | |
| started_at | string · nullable | Yes | |
| archive | boolean | Yes | |
| archive_slug | string · nullable | Yes | |
| recipient_count | integer | Yes | |
| sent_count | integer | Yes | |
| open_count | integer | Yes | |
| unique_open_count | integer | Yes | |
| click_count | integer | Yes | |
| unique_click_count | integer | Yes | |
| unsubscribe_count | integer | Yes | |
| created_at | string | Yes | |
| updated_at | string | Yes | |
| body | string | Yes | |
| alt_body | string · nullable | Yes |
meta
| Field | Type | Always present | Notes |
|---|---|---|---|
| request_id | string | Yes |