Campaigns.
Create, schedule, pause and resume marketing campaigns. Every request needs an API key in the Authorization header; the reference overview covers keys, errors and rate limits.
Create a campaign
POST/v1/campaignsFull access key
Create a campaign. A team's first campaign is created but held for review before it can send, and answers 202. Pass segmentId to send only to the subscribed contacts of the book who match that segment when the send starts; the segment must belong to contactBookId.
| Field | Type | About |
|---|---|---|
namerequired | string | |
fromrequired | string | |
subjectrequired | string | At most 998 characters. |
previewText | string | |
contactBookIdrequired | string | |
segmentId | string | Send only to this segment of the contact book. At most 64 characters. |
content | string | |
html | string | |
replyTo | string or string[] | |
cc | string or string[] | |
bcc | string or string[] | |
sendNow | boolean | |
scheduledAt | string | Timestamp in ISO 8601 format or natural language (e.g., 'tomorrow 9am', 'next monday 10:30') |
batchSize | integer | Minimum 1. Maximum 100000. |
curl -X POST "https://app.usenotix.dev/api/v1/campaigns" \
-H "Authorization: Bearer $NOTIX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme",
"from": "Acme <receipts@acme.com>",
"subject": "Your receipt for order 4471",
"contactBookId": "string"
}'
import { Notix } from "notix-js";
const notix = new Notix(process.env.NOTIX_API_KEY);
const { data, error } = await notix.campaigns.create({
name: "October newsletter",
from: "Acme <news@acme.com>",
subject: "What's new at {{company}}",
contactBookId: "cb_123",
html: '<p>Hi {{firstName,fallback=there}}</p><p><a href="{{notix_unsubscribe_url}}">Unsubscribe</a></p>',
});
from notix import Notix
notix = Notix() # reads NOTIX_API_KEY
campaign, _ = notix.campaigns.create({
"name": "October newsletter",
"from": "Acme <news@acme.com>",
"subject": "What's new at {{company}}",
"contactBookId": "cb_123",
"html": '<p>Hi {{firstName,fallback=there}}</p><p><a href="{{notix_unsubscribe_url}}">Unsubscribe</a></p>',
})
use Notix\Notix;
$notix = new Notix(getenv('NOTIX_API_KEY'));
$campaign = $notix->campaigns->create([
'name' => 'October newsletter',
'from' => 'Acme <news@acme.com>',
'subject' => "What's new at {{company}}",
'contactBookId' => 'cb_123',
'html' => '<p>Hi {{firstName,fallback=there}}</p><p><a href="{{notix_unsubscribe_url}}">Unsubscribe</a></p>',
]);
Responses
200Create a campaign
| Field | Type | About |
|---|---|---|
idrequired | string | |
namerequired | string | |
fromrequired | string | |
subjectrequired | string | At most 998 characters. |
previewTextrequired | string | Can be null. |
contactBookIdrequired | string | Can be null. |
segmentIdrequired | string | Can be null. |
htmlrequired | string | Can be null. |
contentrequired | string | Can be null. |
statusrequired | string | |
scheduledAtrequired | string (date-time) | Can be null. |
batchSizerequired | integer | |
batchWindowMinutesrequired | integer | |
totalrequired | integer | |
sentrequired | integer | |
deliveredrequired | integer | |
openedrequired | integer | |
clickedrequired | integer | |
unsubscribedrequired | integer | |
bouncedrequired | integer | |
hardBouncedrequired | integer | |
complainedrequired | integer | |
replyTorequired | string[] | |
ccrequired | string[] | |
bccrequired | string[] | |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) |
202The team's first campaign, created but held for review before it can send
| Field | Type | About |
|---|---|---|
statusrequired | string | One of |
messagerequired | string |
List campaigns
GET/v1/campaignsFull access key
List the team's campaigns, paged and optionally filtered by status.
| Field | Type | About |
|---|---|---|
page | integer | 1-based page number, at most 10000. Defaults to 1. Default |
status | string | Filter campaigns by status One of |
search | string | Search campaigns by name or subject |
curl -X GET "https://app.usenotix.dev/api/v1/campaigns" \
-H "Authorization: Bearer $NOTIX_API_KEY"
import { Notix } from "notix-js";
const notix = new Notix(process.env.NOTIX_API_KEY);
const { data, error } = await notix.campaigns.getAll({ page: "1" });
use Notix\Notix;
$notix = new Notix(getenv('NOTIX_API_KEY'));
$campaigns = $notix->campaigns->getAll(['page' => '1']);
Responses
200Get list of campaigns
| Field | Type | About |
|---|---|---|
campaignsrequired | object[] | |
campaigns[].idrequired | string | |
campaigns[].namerequired | string | |
campaigns[].fromrequired | string | |
campaigns[].subjectrequired | string | |
campaigns[].createdAtrequired | string (date-time) | |
campaigns[].updatedAtrequired | string (date-time) | |
campaigns[].statusrequired | string | |
campaigns[].scheduledAtrequired | string (date-time) | Can be null. |
campaigns[].totalrequired | integer | |
campaigns[].sentrequired | integer | |
campaigns[].deliveredrequired | integer | |
campaigns[].unsubscribedrequired | integer | |
totalPagerequired | integer |
Get a campaign
GET/v1/campaigns/{campaignId}Full access key
Retrieve one campaign.
| Field | Type | About |
|---|---|---|
campaignIdrequired | string |
curl -X GET "https://app.usenotix.dev/api/v1/campaigns/<campaignId>" \
-H "Authorization: Bearer $NOTIX_API_KEY"
import { Notix } from "notix-js";
const notix = new Notix(process.env.NOTIX_API_KEY);
const { data, error } = await notix.campaigns.get("cmp_123");
from notix import Notix
notix = Notix() # reads NOTIX_API_KEY
campaign, _ = notix.campaigns.get("cmp_123")
use Notix\Notix;
$notix = new Notix(getenv('NOTIX_API_KEY'));
$campaign = $notix->campaigns->get('cmp_123');
Responses
200Get campaign details
| Field | Type | About |
|---|---|---|
idrequired | string | |
namerequired | string | |
fromrequired | string | |
subjectrequired | string | At most 998 characters. |
previewTextrequired | string | Can be null. |
contactBookIdrequired | string | Can be null. |
segmentIdrequired | string | Can be null. |
htmlrequired | string | Can be null. |
contentrequired | string | Can be null. |
statusrequired | string | |
scheduledAtrequired | string (date-time) | Can be null. |
batchSizerequired | integer | |
batchWindowMinutesrequired | integer | |
totalrequired | integer | |
sentrequired | integer | |
deliveredrequired | integer | |
openedrequired | integer | |
clickedrequired | integer | |
unsubscribedrequired | integer | |
bouncedrequired | integer | |
hardBouncedrequired | integer | |
complainedrequired | integer | |
replyTorequired | string[] | |
ccrequired | string[] | |
bccrequired | string[] | |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) |
Delete a campaign
DELETE/v1/campaigns/{campaignId}Full access key
Delete a campaign.
| Field | Type | About |
|---|---|---|
campaignIdrequired | string |
curl -X DELETE "https://app.usenotix.dev/api/v1/campaigns/<campaignId>" \
-H "Authorization: Bearer $NOTIX_API_KEY"
import { Notix } from "notix-js";
const notix = new Notix(process.env.NOTIX_API_KEY);
const { data, error } = await notix.campaigns.delete("cmp_123");
use Notix\Notix;
$notix = new Notix(getenv('NOTIX_API_KEY'));
$result = $notix->campaigns->delete('cmp_123');
Responses
200Delete campaign
| Field | Type | About |
|---|---|---|
idrequired | string | |
namerequired | string | |
fromrequired | string | |
subjectrequired | string | At most 998 characters. |
previewTextrequired | string | Can be null. |
contactBookIdrequired | string | Can be null. |
segmentIdrequired | string | Can be null. |
htmlrequired | string | Can be null. |
contentrequired | string | Can be null. |
statusrequired | string | |
scheduledAtrequired | string (date-time) | Can be null. |
batchSizerequired | integer | |
batchWindowMinutesrequired | integer | |
totalrequired | integer | |
sentrequired | integer | |
deliveredrequired | integer | |
openedrequired | integer | |
clickedrequired | integer | |
unsubscribedrequired | integer | |
bouncedrequired | integer | |
hardBouncedrequired | integer | |
complainedrequired | integer | |
replyTorequired | string[] | |
ccrequired | string[] | |
bccrequired | string[] | |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) |
Schedule a campaign
POST/v1/campaigns/{campaignId}/scheduleFull access key
Schedule a campaign to send at a time, or now. A campaign still held for review answers 202.
| Field | Type | About |
|---|---|---|
campaignIdrequired | string |
| Field | Type | About |
|---|---|---|
scheduledAt | string | Timestamp in ISO 8601 format or natural language (e.g., 'tomorrow 9am', 'next monday 10:30') |
batchSize | integer | Minimum 1. Maximum 100000. |
curl -X POST "https://app.usenotix.dev/api/v1/campaigns/<campaignId>/schedule" \
-H "Authorization: Bearer $NOTIX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"scheduledAt": "string",
"batchSize": 1
}'
import { Notix } from "notix-js";
const notix = new Notix(process.env.NOTIX_API_KEY);
const { data, error } = await notix.campaigns.schedule("cmp_123", {
scheduledAt: "2026-10-01T09:00:00Z",
batchSize: 1000,
});
from notix import Notix
notix = Notix() # reads NOTIX_API_KEY
result, _ = notix.campaigns.schedule("cmp_123", {"scheduledAt": "2026-10-01T09:00:00Z", "batchSize": 1000})
use Notix\Notix;
$notix = new Notix(getenv('NOTIX_API_KEY'));
$result = $notix->campaigns->schedule('cmp_123', ['scheduledAt' => '2026-10-01T09:00:00Z', 'batchSize' => 1000]);
Responses
200Schedule a campaign
| Field | Type | About |
|---|---|---|
successrequired | boolean |
202The team's first campaign, held for review before it can send
| Field | Type | About |
|---|---|---|
statusrequired | string | One of |
messagerequired | string |
Pause a campaign
POST/v1/campaigns/{campaignId}/pauseFull access key
Stop a sending campaign. Emails already sent stay sent.
| Field | Type | About |
|---|---|---|
campaignIdrequired | string |
curl -X POST "https://app.usenotix.dev/api/v1/campaigns/<campaignId>/pause" \
-H "Authorization: Bearer $NOTIX_API_KEY"
import { Notix } from "notix-js";
const notix = new Notix(process.env.NOTIX_API_KEY);
const { data, error } = await notix.campaigns.pause("cmp_123");
from notix import Notix
notix = Notix() # reads NOTIX_API_KEY
result, _ = notix.campaigns.pause("cmp_123")
use Notix\Notix;
$notix = new Notix(getenv('NOTIX_API_KEY'));
$result = $notix->campaigns->pause('cmp_123');
Responses
200Pause a campaign
| Field | Type | About |
|---|---|---|
successrequired | boolean |
Resume a campaign
POST/v1/campaigns/{campaignId}/resumeFull access key
Continue a paused campaign. A campaign still held for review answers 202.
| Field | Type | About |
|---|---|---|
campaignIdrequired | string |
curl -X POST "https://app.usenotix.dev/api/v1/campaigns/<campaignId>/resume" \
-H "Authorization: Bearer $NOTIX_API_KEY"
import { Notix } from "notix-js";
const notix = new Notix(process.env.NOTIX_API_KEY);
const { data, error } = await notix.campaigns.resume("cmp_123");
from notix import Notix
notix = Notix() # reads NOTIX_API_KEY
result, _ = notix.campaigns.resume("cmp_123")
use Notix\Notix;
$notix = new Notix(getenv('NOTIX_API_KEY'));
$result = $notix->campaigns->resume('cmp_123');
Responses
200Resume a campaign
| Field | Type | About |
|---|---|---|
successrequired | boolean |
202The team's held campaign, still waiting for review before it can resume
| Field | Type | About |
|---|---|---|
statusrequired | string | One of |
messagerequired | string |