OMX Logo
Documentation
Campaign SDK

Managing Campaigns

Learn how to list, update, delete, and manage your campaigns effectively with the Campaign SDK.

Listing Campaigns

List All Campaigns
Retrieve all campaigns for your team
// List all campaigns
const campaigns = await campaignClient.listCampaigns();

console.log(`Found ${campaigns.length} campaigns`);
campaigns.forEach(campaign => {
  console.log(`${campaign.name} - ${campaign.status}`);
});
Filtered Campaigns
Use filters to find specific campaigns
// Filter by status
const activeCampaigns = await campaignClient.listCampaigns({
  status: "active"
});

// Filter by industry
const ecommerceCampaigns = await campaignClient.listCampaigns({
  industry: "ecommerce"
});

// Multiple filters
const filteredCampaigns = await campaignClient.listCampaigns({
  status: "active",
  industry: "retail",
  tags: ["holiday", "promotion"]
});

Getting Campaign Details

getCampaign() Method
Retrieve detailed information about a specific campaign
// Get campaign by ID
const campaignId = "camp_1234567890";
const campaign = await campaignClient.getCampaign(campaignId);

console.log("Campaign details:", {
  id: campaign.id,
  name: campaign.name,
  status: campaign.status,
  createdAt: campaign.createdAt,
  updatedAt: campaign.updatedAt,
  budget: campaign.budget,
  industry: campaign.industry,
  tags: campaign.tags
});

Updating Campaigns

Update Campaign Information
Modify campaign details, budget, dates, and more
// Update campaign details
const updatedCampaign = await campaignClient.updateCampaign(campaignId, {
  name: "Updated Campaign Name",
  description: "New campaign description",
  budget: 75000,
  endDate: "2024-12-31T23:59:59Z",
  tags: ["updated", "extended", "promotion"]
});

console.log("Campaign updated:", updatedCampaign.name);
Update Campaign Status
Change campaign status (draft, active, paused, completed)
// Activate a campaign
await campaignClient.updateCampaignStatus(campaignId, "active");

// Pause a campaign
await campaignClient.updateCampaignStatus(campaignId, "paused");

// Complete a campaign
await campaignClient.updateCampaignStatus(campaignId, "completed");

// Get updated campaign
const updatedCampaign = await campaignClient.getCampaign(campaignId);
console.log("New status:", updatedCampaign.status);

Campaign Operations

Duplicate Campaign
Create a copy of an existing campaign
// Duplicate with auto-generated name
const duplicatedCampaign = await campaignClient.duplicateCampaign(campaignId);

// Duplicate with custom name
const namedDuplicate = await campaignClient.duplicateCampaign(
  campaignId, 
  "Winter Sale 2024 - Copy"
);

console.log("Duplicated campaign:", {
  original: campaignId,
  duplicate: duplicatedCampaign.id,
  name: duplicatedCampaign.name
});
Execute Campaign
Manually trigger campaign execution (development feature)
// Basic execution
const execution = await campaignClient.executeCampaign(campaignId);

// Execute with trigger data
const executionWithData = await campaignClient.executeCampaign(campaignId, {
  userId: "user_123",
  location: { lat: 40.7128, lng: -74.0060 },
  eventType: "store_visit"
});

console.log("Campaign executed:", {
  campaignId: execution.campaignId,
  executionId: execution.executionId,
  timestamp: execution.timestamp
});

Deleting Campaigns

Delete Campaign
Permanently remove a campaign (use with caution)
// Delete a campaign
try {
  await campaignClient.deleteCampaign(campaignId);
  console.log("Campaign deleted successfully");
} catch (error) {
  console.error("Failed to delete campaign:", error.message);
}

// Verify deletion
try {
  const deletedCampaign = await campaignClient.getCampaign(campaignId);
} catch (error) {
  console.log("Campaign no longer exists");
}

Warning: Deleting a campaign is permanent and cannot be undone. Consider pausing the campaign instead if you may need it later.

Team-Based Campaign Management

Team Isolation
How campaigns are isolated by team for security and organization

Automatic Team Isolation

All campaigns are automatically associated with your team ID. You can only access campaigns that belong to your team, ensuring data security and privacy.

// Initialize client with team ID
const campaignClient = createCampaignClient({
  clientId: "your-client-id",
  secretKey: "your-secret-key",
  teamId: "team_xyz123" // All operations scoped to this team
});

// All operations are automatically team-scoped
const teamCampaigns = await campaignClient.listCampaigns();
// Only returns campaigns for team_xyz123

Error Handling

Handling Common Errors
Best practices for error handling in campaign management
try {
  const campaign = await campaignClient.getCampaign(campaignId);
  console.log("Campaign found:", campaign.name);
} catch (error) {
  if (error.status === 404) {
    console.log("Campaign not found");
  } else if (error.status === 403) {
    console.log("Access denied - check team permissions");
  } else if (error.status === 401) {
    console.log("Authentication failed - check credentials");
  } else {
    console.error("Unexpected error:", error.message);
  }
}

// Batch operations with error handling
const campaignIds = ["camp_1", "camp_2", "camp_3"];
const results = await Promise.allSettled(
  campaignIds.map(id => campaignClient.getCampaign(id))
);

results.forEach((result, index) => {
  if (result.status === "fulfilled") {
    console.log(`Campaign ${index + 1}:`, result.value.name);
  } else {
    console.error(`Campaign ${index + 1} failed:`, result.reason.message);
  }
});