Campaigns, contacts and lists
Back to the SDK Reference.
Campaigns
| Method | Signature |
|---|---|
list | list(query: CampaignListQuery): Promise<Campaign[]> |
get | get(id: string): Promise<Campaign> |
create | create(input: CampaignCreateInput): Promise<Campaign> |
update | update(id: string, input: CampaignUpdateInput): Promise<Campaign> |
send | send(id: string): Promise<Campaign> |
pause | pause(id: string): Promise<Campaign> |
resume | resume(id: string): Promise<Campaign> |
cancel | cancel(id: string): Promise<Campaign & { note: string }> |
duplicate | duplicate(id: string): Promise<Campaign> |
delete | delete(id: string): Promise<void> |
stats | stats(id: string): Promise<CampaignStats> |
providerStats | providerStats(id: string): Promise<CampaignProviderStats[]> |
const campaign = await client.campaigns.create({
projectId: 'proj_123',
name: 'July newsletter',
subject: 'What shipped this month',
fromAddress: '[email protected]',
templateId: 'tmpl_456',
listId: 'list_789',
});
await client.campaigns.send(campaign.id);
await client.campaigns.pause(campaign.id);
await client.campaigns.resume(campaign.id);
const { note } = await client.campaigns.cancel(campaign.id);
const copy = await client.campaigns.duplicate(campaign.id);
const stats = await client.campaigns.stats(campaign.id);
const byProvider = await client.campaigns.providerStats(campaign.id);A campaign's status is one of draft, scheduled, sending, paused,
sent or cancelled. list accepts limit (at most 100) and offset.
CampaignStats includes an optional configurationBounced count for bounces
caused by recipient-side configuration rather than the address itself.
Contacts
| Method | Signature |
|---|---|
list | list(query: ContactListQuery): Promise<ContactListResponse> |
get | get(id: string): Promise<Contact> |
create | create(input: ContactCreateInput): Promise<Contact> |
update | update(id: string, input: ContactUpdateInput): Promise<Contact> |
delete | delete(id: string): Promise<void> |
bulkCreate | bulkCreate(input: ContactBulkInput): Promise<ContactBulkResponse> |
tags | tags(projectId: string): Promise<string[]> |
lists | lists(contactId: string): Promise<ContactListItem[]> |
addToList | addToList(contactId: string, listId: string): Promise<void> |
removeFromList | removeFromList(contactId: string, listId: string): Promise<void> |
addToList and removeFromList are deprecated; use lists.addContacts and
lists.removeContact instead.
const contact = await client.contacts.create({
projectId: 'proj_123',
email: '[email protected]',
tags: ['trial'],
});
const { data, total } = await client.contacts.list({
projectId: 'proj_123',
search: '[email protected]',
});
// `tagMode` defaults to 'and' when omitted
const vipOrBeta = await client.contacts.list({
projectId: 'proj_123',
tags: ['vip', 'beta'],
tagMode: 'or',
});
const { inserted, updated, skipped } = await client.contacts.bulkCreate({
projectId: 'proj_123',
contacts: [
{ email: '[email protected]', tags: ['import'] },
{ email: '[email protected]' },
],
});
const allTags = await client.contacts.tags('proj_123');
const memberships = await client.contacts.lists(contact.id);ContactUpdateInput only supports unsubscribing a contact:
client.contacts.update(id, { unsubscribe: true }). list takes limit (at
most 200) and offset.
Lists
| Method | Signature |
|---|---|
list | list(projectId: string): Promise<ListWithCount[]> |
get | get(id: string): Promise<List> |
create | create(input: ListCreateInput): Promise<List> |
update | update(id: string, input: ListUpdateInput): Promise<List> |
delete | delete(id: string): Promise<void> |
listContacts | listContacts(id: string, query?: ListMembersQuery): Promise<ListMembersResponse> |
addContacts | addContacts(id: string, contactIds: string[]): Promise<{ added: number }> |
removeContact | removeContact(id: string, contactId: string): Promise<void> |
const list = await client.lists.create({
projectId: 'proj_123',
name: 'Beta users',
});
await client.lists.addContacts(list.id, [contact.id]);
const { data: members, total } = await client.lists.listContacts(list.id, {
limit: 50,
});
await client.lists.removeContact(list.id, contact.id);listContacts takes an optional search, plus limit (at most 200) and
offset.