Marketing Hub API

Email campaigns, prospect management, template design, list segmentation, automations, domain verification, and tracking.

All endpoints prefixed with /api/v1/marketing

Campaigns

Create, manage, send, and analyze email campaigns.

POST /api/v1/marketing/campaigns

Create a new campaign.

Auth: Bearer token · marketing.create

Request Body
json
{
  "name": "Summer Promotion",
  "subject": "Don't miss our summer deals",
  "templateId": 1,
  "listIds": [1, 2],
  "fromName": "Marketing Team",
  "fromEmail": "marketing@company.com"
}
GET /api/v1/marketing/campaigns

List campaigns with pagination and filtering.

Auth: Bearer token · marketing.view

GET /api/v1/marketing/campaigns/:id

Get campaign by ID.

Auth: Bearer token · marketing.view

GET /api/v1/marketing/campaigns/:id/stats

Get campaign statistics (opens, clicks, bounces, unsubscribes).

Auth: Bearer token · marketing.view

PUT /api/v1/marketing/campaigns/:id

Update a campaign (draft only).

Auth: Bearer token · marketing.edit

POST /api/v1/marketing/campaigns/:id/status

Transition campaign status.

Auth: Bearer token · marketing.edit

POST /api/v1/marketing/campaigns/:id/approve

Approve a campaign.

Auth: Bearer token · marketing.approve

GET /api/v1/marketing/campaigns/:id/approval-history

Get approval history for a campaign.

Auth: Bearer token · marketing.view

POST /api/v1/marketing/campaigns/:id/reject

Reject a campaign.

Auth: Bearer token · marketing.approve

POST /api/v1/marketing/campaigns/:id/pause

Pause a running campaign.

Auth: Bearer token · marketing.edit

POST /api/v1/marketing/campaigns/:id/resume

Resume a paused campaign.

Auth: Bearer token · marketing.edit

POST /api/v1/marketing/campaigns/:id/cancel

Cancel a campaign.

Auth: Bearer token · marketing.edit

POST /api/v1/marketing/campaigns/:id/preview

Preview campaign with personalized content for sample prospects.

Auth: Bearer token · marketing.view

POST /api/v1/marketing/campaigns/:id/send-test

Send a test email for a campaign.

Auth: Bearer token · marketing.edit

POST /api/v1/marketing/campaigns/:id/duplicate

Duplicate a campaign.

Auth: Bearer token · marketing.create

DELETE /api/v1/marketing/campaigns/:id

Delete a campaign (draft only).

Auth: Bearer token · marketing.delete

Templates

Email template design and management.

POST /api/v1/marketing/templates

Create a new email template.

Auth: Bearer token · marketing.create

Request Body
json
{
  "name": "Welcome Email",
  "subject": "Welcome to {{company}}",
  "htmlContent": "...",
  "category": "onboarding"
}
GET /api/v1/marketing/templates

List templates with pagination and filtering.

Auth: Bearer token · marketing.view

GET /api/v1/marketing/templates/active

Get all active templates (for dropdowns).

Auth: Bearer token · marketing.view

GET /api/v1/marketing/templates/categories

Get all unique template categories.

Auth: Bearer token · marketing.view

GET /api/v1/marketing/templates/:id

Get template by ID.

Auth: Bearer token · marketing.view

POST /api/v1/marketing/templates/:id/preview

Preview template rendered with sample data.

Auth: Bearer token · marketing.view

POST /api/v1/marketing/templates/:id/duplicate

Duplicate a template.

Auth: Bearer token · marketing.create

PUT /api/v1/marketing/templates/:id

Update a template.

Auth: Bearer token · marketing.edit

DELETE /api/v1/marketing/templates/:id

Delete a template.

Auth: Bearer token · marketing.delete

Prospects

Marketing prospect management with list membership and conversion.

POST /api/v1/marketing/prospects

Create a new prospect.

Auth: Bearer token · marketing.create

Request Body
json
{
  "email": "prospect@company.com",
  "firstName": "John",
  "lastName": "Doe",
  "company": "Acme Corp"
}
GET /api/v1/marketing/prospects

List prospects with pagination and filtering.

Auth: Bearer token · marketing.view

GET /api/v1/marketing/prospects/stats

Get prospect statistics.

Auth: Bearer token · marketing.view

GET /api/v1/marketing/prospects/:id

Get prospect by ID.

Auth: Bearer token · marketing.view

PUT /api/v1/marketing/prospects/:id

Update a prospect.

Auth: Bearer token · marketing.edit

DELETE /api/v1/marketing/prospects/:id

Delete a prospect.

Auth: Bearer token · marketing.delete

POST /api/v1/marketing/prospects/:id/convert

Convert a prospect to a sales lead.

Auth: Bearer token · marketing.edit

POST /api/v1/marketing/prospects/bulk/convert

Bulk convert prospects to leads.

Auth: Bearer token · marketing.edit

GET /api/v1/marketing/prospects/:id/lists

Get lists a prospect belongs to.

Auth: Bearer token · marketing.view

POST /api/v1/marketing/prospects/:id/lists/:groupId

Add prospect to a list.

Auth: Bearer token · marketing.edit

DELETE /api/v1/marketing/prospects/:id/lists/:groupId

Remove prospect from a list.

Auth: Bearer token · marketing.edit

POST /api/v1/marketing/prospects/:id/unsubscribe

Unsubscribe a prospect from emails.

Auth: Bearer token · marketing.edit

POST /api/v1/marketing/prospects/:id/resubscribe

Resubscribe a prospect.

Auth: Bearer token · marketing.edit

GET /api/v1/marketing/prospects/:id/activities

List activities for a prospect.

Auth: Bearer token · marketing.view

POST /api/v1/marketing/prospects/:id/activities

Create an activity for a prospect.

Auth: Bearer token · marketing.create

GET /api/v1/marketing/prospects/:id/activities/:activityId

Get a specific activity.

Auth: Bearer token · marketing.view

PUT /api/v1/marketing/prospects/:id/activities/:activityId

Update an activity.

Auth: Bearer token · marketing.edit

DELETE /api/v1/marketing/prospects/:id/activities/:activityId

Delete an activity.

Auth: Bearer token · marketing.delete

Lists

Recipient list management with static and dynamic lists.

POST /api/v1/marketing/lists

Create a new recipient list.

Auth: Bearer token · marketing.create

Request Body
json
{
  "name": "Newsletter Subscribers",
  "type": "static",
  "description": "Active newsletter subscribers"
}
GET /api/v1/marketing/lists

List recipient lists with pagination.

Auth: Bearer token · marketing.view

GET /api/v1/marketing/lists/active

Get all active lists (for dropdowns).

Auth: Bearer token · marketing.view

GET /api/v1/marketing/lists/prospects

Search prospects for adding to lists.

Auth: Bearer token · marketing.view

GET /api/v1/marketing/lists/:id

Get list by ID.

Auth: Bearer token · marketing.view

PUT /api/v1/marketing/lists/:id

Update a list.

Auth: Bearer token · marketing.edit

DELETE /api/v1/marketing/lists/:id

Delete a list.

Auth: Bearer token · marketing.delete

GET /api/v1/marketing/lists/:id/members

Get members (prospects) in a list with pagination.

Auth: Bearer token · marketing.view

POST /api/v1/marketing/lists/:id/members

Add prospects to a list.

Auth: Bearer token · marketing.edit

Request Body
json
{
  "prospectIds": [1, 2, 3]
}
DELETE /api/v1/marketing/lists/:id/members

Remove prospects from a list.

Auth: Bearer token · marketing.edit

POST /api/v1/marketing/lists/:id/members/remove

Remove prospects from a list (alternative endpoint).

Auth: Bearer token · marketing.edit

PUT /api/v1/marketing/lists/:id/members/:prospectId/status

Update member status in a list.

Auth: Bearer token · marketing.edit

POST /api/v1/marketing/lists/:id/refresh

Refresh a dynamic list (re-evaluate criteria).

Auth: Bearer token · marketing.edit

GET /api/v1/marketing/lists/:id/export

Export list members as CSV.

Auth: Bearer token · marketing.view

Automations

Marketing automation rules with triggers and actions.

GET /api/v1/marketing/automations/meta/triggers

List available trigger types.

Auth: Bearer token · marketing.view

GET /api/v1/marketing/automations/meta/actions

List available action types.

Auth: Bearer token · marketing.view

POST /api/v1/marketing/automations

Create a new automation rule.

Auth: Bearer token · tenant_admin

GET /api/v1/marketing/automations

List automation rules.

Auth: Bearer token · marketing.view

GET /api/v1/marketing/automations/:id

Get automation rule by ID.

Auth: Bearer token · marketing.view

PUT /api/v1/marketing/automations/:id

Update automation rule.

Auth: Bearer token · tenant_admin

DELETE /api/v1/marketing/automations/:id

Delete automation rule.

Auth: Bearer token · tenant_admin

POST /api/v1/marketing/automations/:id/toggle

Toggle automation rule active status.

Auth: Bearer token · tenant_admin

Campaign Runs

Campaign execution tracking and statistics.

GET /api/v1/marketing/runs/campaign/:campaignId

List runs for a campaign.

Auth: Bearer token · marketing.view

GET /api/v1/marketing/runs/campaign/:campaignId/stats

Get aggregated stats for all runs of a campaign.

Auth: Bearer token · marketing.view

GET /api/v1/marketing/runs/:id

Get run by ID.

Auth: Bearer token · marketing.view

GET /api/v1/marketing/runs/:id/stats

Get detailed stats for a specific run.

Auth: Bearer token · marketing.view

POST /api/v1/marketing/runs/:id/cancel

Cancel a run.

Auth: Bearer token · marketing.edit

Schedules

Campaign scheduling for automated sends.

POST /api/v1/marketing/schedules

Create a new schedule for a campaign.

Auth: Bearer token · marketing.edit

Request Body
json
{
  "campaignId": 1,
  "scheduledAt": "2026-07-01T10:00:00Z",
  "timezone": "America/New_York"
}
GET /api/v1/marketing/schedules/campaign/:campaignId

Get schedule(s) for a campaign.

Auth: Bearer token · marketing.view

GET /api/v1/marketing/schedules/:id

Get schedule by ID.

Auth: Bearer token · marketing.view

PUT /api/v1/marketing/schedules/:id

Update a schedule.

Auth: Bearer token · marketing.edit

DELETE /api/v1/marketing/schedules/:id

Cancel/deactivate a schedule.

Auth: Bearer token · marketing.edit

Domains

Email domain verification for improved deliverability.

POST /api/v1/marketing/domains

Add a domain for verification.

Auth: Bearer token · tenant_admin

Request Body
json
{
  "domain": "company.com"
}
GET /api/v1/marketing/domains

List all domains.

Auth: Bearer token · marketing.view

GET /api/v1/marketing/domains/verified

Get verified domains only (for dropdowns).

Auth: Bearer token · marketing.view

GET /api/v1/marketing/domains/:domain

Get domain details with DNS records.

Auth: Bearer token · marketing.view

POST /api/v1/marketing/domains/:domain/verify

Verify domain DNS records (SPF, DKIM, DMARC).

Auth: Bearer token · tenant_admin

DELETE /api/v1/marketing/domains/:domain

Delete a domain.

Auth: Bearer token · tenant_admin

Trackable URLs

Create and track shortened URLs for campaigns.

POST /api/v1/marketing/trackable-urls

Create a new trackable URL.

Auth: Bearer token · marketing.create

Request Body
json
{
  "originalUrl": "https://company.com/landing",
  "name": "Summer Campaign CTA"
}
GET /api/v1/marketing/trackable-urls

List trackable URLs.

Auth: Bearer token · marketing.view

GET /api/v1/marketing/trackable-urls/:id

Get trackable URL by ID.

Auth: Bearer token · marketing.view

GET /api/v1/marketing/trackable-urls/:id/stats

Get click statistics for a trackable URL.

Auth: Bearer token · marketing.view

PUT /api/v1/marketing/trackable-urls/:id

Update a trackable URL.

Auth: Bearer token · marketing.edit

DELETE /api/v1/marketing/trackable-urls/:id

Delete a trackable URL.

Auth: Bearer token · marketing.delete

Bulk Import

Import prospects from CSV files.

GET /api/v1/marketing/bulk-import/templates/prospects

Download a CSV template with instructions.

Auth: Bearer token · marketing.view

GET /api/v1/marketing/bulk-import/templates/prospects/simple

Download a simple CSV template (no instructions).

Auth: Bearer token · marketing.view

GET /api/v1/marketing/bulk-import/fields/prospects

Get available fields for prospect import mapping.

Auth: Bearer token · marketing.view

POST /api/v1/marketing/bulk-import/prospects

Import prospects from uploaded CSV.

Auth: Bearer token · marketing.create

POST /api/v1/marketing/bulk-import/prospects/validate

Validate a CSV file without importing (dry run).

Auth: Bearer token · marketing.view