Skip to content

CampaignsService

Automate pass updates and notifications.

Methods

MethodDescription
list(options?)List all campaigns
get(id)Get a single campaign
create(data)Create a campaign
update(id, data)Update a campaign
delete(id)Delete a campaign
schedule(id, data)Schedule campaign
startNow(id)Start immediately
complete(id)Mark as complete
cancel(id)Cancel campaign
preview(id, options?)Preview audience
count(id)Get audience count
getStatistics(id)Get campaign statistics
getActions(id)List campaign actions
addAction(id, action)Add an action
updateAction(actionId, data)Update an action
deleteAction(actionId)Delete an action
executeAction(actionId)Execute single action
executeAllActions(id)Execute all actions
duplicate(id, options?)Duplicate campaign
getCalendar(options)Get calendar view

create()

Create a new campaign.

typescript
const campaign = await client.campaigns.create({
  workspace_id: 'workspace-uuid',
  name: 'Winter Promotion',
  description: 'Double points for all purchases',
  segment_id: 'active-members-segment-uuid'
});

addAction()

Add actions to a campaign.

typescript
// Push notification
await client.campaigns.addAction(campaign.id, {
  action_type: 'push_notification',
  action_config: {
    notification_message: '❄️ Earn double points this weekend!'
  }
});

// Custom field update
await client.campaigns.addAction(campaign.id, {
  action_type: 'custom_field_update',
  action_config: {
    custom_field_updates: {
      promo_active: true,
      points_multiplier: 2
    }
  }
});

// Template switch
await client.campaigns.addAction(campaign.id, {
  action_type: 'template_switch',
  action_config: {
    target_template_id: 'promo-template-uuid',
    preserve_custom_fields: true
  }
});

preview() / count()

Preview campaign audience.

typescript
// Get sample of targeted passes
const preview = await client.campaigns.preview(campaign.id, { limit: 10 });
console.log(`Campaign will target ${preview.total} passes`);

// Get just the count
const count = await client.campaigns.count(campaign.id);

schedule() / startNow()

Control campaign execution.

typescript
// Schedule for later
await client.campaigns.schedule(campaign.id, {
  scheduled_at: '2024-01-20T09:00:00Z'
});

// Or start immediately
await client.campaigns.startNow(campaign.id);

getStatistics()

Monitor campaign progress.

typescript
const stats = await client.campaigns.getStatistics(campaign.id);

console.log(`Status: ${stats.status}`);
console.log(`Progress: ${stats.passes_completed}/${stats.total_targeted}`);
console.log(`Failed: ${stats.passes_failed}`);
console.log(`Actions: ${stats.actions_completed}/${stats.actions_total}`);

Complete Example

typescript
// Create campaign
const campaign = await client.campaigns.create({
  workspace_id: 'ws-uuid',
  name: 'Tier Upgrade',
  segment_id: 'upgrade-eligible-segment'
});

// Add actions
await client.campaigns.addAction(campaign.id, {
  action_type: 'template_switch',
  action_config: {
    target_template_id: 'gold-template-uuid',
    preserve_custom_fields: true
  }
});

await client.campaigns.addAction(campaign.id, {
  action_type: 'custom_field_update',
  action_config: {
    custom_field_updates: {
      tier: 'Gold',
      upgraded_at: new Date().toISOString()
    }
  }
});

await client.campaigns.addAction(campaign.id, {
  action_type: 'push_notification',
  action_config: {
    notification_message: '🎉 You\'ve been upgraded to Gold!'
  }
});

// Preview before executing
const preview = await client.campaigns.preview(campaign.id);
console.log(`Will upgrade ${preview.total} members`);

// Execute
await client.campaigns.startNow(campaign.id);

// Monitor
const stats = await client.campaigns.getStatistics(campaign.id);
console.log(`Completed: ${stats.passes_completed}/${stats.total_targeted}`);

WalletHero Documentation