Search Documentation
Search for a documentation page...
Subscribers API
REST API endpoints for newsletter subscriber management.
List Subscribers
Returns a paginated subscriber list with per-subscriber purchase stats (orderCount, totalSpent, lastOrderAt) for audience segmentation. The sensitive unsubscribe token is never returned.
Query Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
limit | number | 50 | Subscribers per page (1-100) |
offset | number | 0 | Subscribers to skip |
status | string | all | Filter by status: all, active, or unsubscribed |
query | string | — | Search by email or name |
Response
Create Subscriber
Adds an email address to the store's subscriber list. If the email is already subscribed, returns a 200 with { status: "already_subscribed" } instead of creating a duplicate.
When double opt-in is enabled in your store's newsletter settings (settings.newsletter.doubleOptIn), new subscribers are created with pending: true and receive a confirmation email. The welcome offer is only triggered after the subscriber confirms. If the email already exists and is still pending, the confirmation email is re-sent (at most once per day).
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
email | string | Yes | Subscriber email address |
name | string | No | Subscriber display name |
placement | string | No | Storefront form or page that drove the signup, max 120 chars (e.g. "footer", "hero-banner") |
Response (201)
The welcomeOffer.status field indicates whether a welcome discount email was triggered for this subscriber:
| Status | Description |
|---|---|
"queued" | A welcome offer is configured and the discount email has been queued for delivery |
"pending_confirmation" | Double opt-in is enabled; the welcome offer will fire after the subscriber confirms |
"off" | No welcome offer is configured for this store |
Already Subscribed (200)
Import Subscribers
Bulk-adds subscribers — the programmatic equivalent of the dashboard CSV import. Up to 1000 subscribers per request. The mode field controls handling of emails that already exist.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
subscribers | array | Yes | Subscribers to import (1-1000) |
subscribers[].email | string | Yes | Subscriber email address |
subscribers[].name | string | No | Subscriber display name |
subscribers[].location | string | No | Free-text location |
mode | string | No | How to handle existing emails: skip (default) or update (refresh name/location) |
Response (200)
A 403 is returned with { error, limit, count } when the subscriber limit for your plan is reached.
Delete Subscriber
Unsubscribes an email address.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
email | string | Yes | Email to unsubscribe |