Manage Engage campaigns, email templates, and workspaces.
Engage commands require a workspace context. You can specify a workspace in two ways (in order of priority):
- Command option:
--workspace <name> - Session context:
tdx use engage_workspace <name>
# Set workspace for the current session
tdx use engage_workspace "Marketing Team"
# Now all engage commands use this workspace
tdx engage campaigns
tdx engage campaign create --name "Newsletter" --type email
# Override workspace for a single command
tdx engage campaigns --workspace "Sales Team"# List all campaigns (uses workspace from session context)
tdx engage campaign list
tdx engage campaigns # alias for "campaign list"
# List campaigns in a specific workspace
tdx engage campaign list --workspace "Marketing Team"
# Filter campaigns by pattern (glob pattern with * and ? wildcards)
tdx engage campaign list "test*"
tdx engage campaign list "*_production"
# Filter by campaign type
tdx engage campaign list --type email
tdx engage campaign list --type push
# Filter by status
tdx engage campaign list --status DRAFT
tdx engage campaign list --status ACTIVE
tdx engage campaign list --status PAUSED
tdx engage campaign list --status COMPLETED
# Combine filters
tdx engage campaign list --workspace "Marketing" --type email --status ACTIVE
# Limit results
tdx engage campaign list --limit 10# Show campaign by name
tdx engage campaign show "My Newsletter Campaign"
# Show campaign by UUID
tdx engage campaign show "01968a3a-ae17-7ef6-9b45-f1a0af1224b4"
# Specify workspace when using name
tdx engage campaign show "My Campaign" --workspace "Marketing Team"
# Show full JSON:API response with all fields (emailContent, pushContent, etc.)
tdx engage campaign show "My Campaign" --fullNote: Workspace is required for creating campaigns. Set it via tdx use engage_workspace or --workspace.
# Create an email campaign (workspace from session)
tdx engage campaign create --name "Monthly Newsletter" --type email
# Create with explicit workspace
tdx engage campaign create --name "Monthly Newsletter" --type email \
--workspace "Marketing Team"
# Create with description
tdx engage campaign create --name "Monthly Newsletter" --type email \
--description "Monthly newsletter for subscribers"
# Create with segment targeting (by path)
tdx engage campaign create --name "VIP Campaign" --type email \
--segment "My Audience/VIP Users"
# Create with email sender configuration
tdx engage campaign create --name "Monthly Newsletter" --type email \
--email-sender-id "sender-uuid-123" \
--json-columns "email,name,preferences"
# Create with delivery schedule
tdx engage campaign create --name "Morning Newsletter" --type email \
--start-at "2024-01-15T09:00:00" \
--timezone "Asia/Tokyo"
# Create a push notification campaign
tdx engage campaign create --name "Flash Sale Alert" --type push# Update campaign name
tdx engage campaign update "Monthly Newsletter" --name "Weekly Newsletter"
# Update campaign description
tdx engage campaign update "Monthly Newsletter" --description "Updated description"
# Update segment targeting
tdx engage campaign update "My Campaign" \
--segment "New Audience/Premium Users"
# Update delivery schedule
tdx engage campaign update "My Campaign" \
--start-at "2024-02-01T10:00:00" \
--timezone "UTC"
# Update email sender configuration
tdx engage campaign update "My Campaign" \
--email-sender-id "new-sender-uuid"
# Specify workspace when using name
tdx engage campaign update "My Campaign" --workspace "Marketing" --name "New Name"# Delete campaign by name (prompts for confirmation)
tdx engage campaign delete "Old Campaign"
# Delete campaign by UUID
tdx engage campaign delete "01968a3a-ae17-7ef6-9b45-f1a0af1224b4"
# Skip confirmation prompt
tdx engage campaign delete "Old Campaign" --yes
# Specify workspace when using name
tdx engage campaign delete "My Campaign" --workspace "Marketing"# Launch a campaign (changes status from DRAFT to ACTIVE)
tdx engage campaign launch "Monthly Newsletter"
tdx engage campaign launch "01968a3a-ae17-7ef6-9b45-f1a0af1224b4"
# Pause a running campaign (changes status from ACTIVE to PAUSED)
tdx engage campaign pause "Monthly Newsletter"
# Resume a paused campaign (changes status from PAUSED to ACTIVE)
tdx engage campaign resume "Monthly Newsletter"
# Duplicate a campaign (creates a copy in DRAFT status)
tdx engage campaign duplicate "Monthly Newsletter"Export campaigns from Engage to local YAML + HTML files. This is the starting point for the YAML-based campaign workflow.
# Pull all campaigns from a workspace
tdx engage campaign pull "Marketing Team"
tdx engage campaign pull --workspace "Marketing Team"
# Pull using session context
tdx use engage_workspace "Marketing Team"
tdx engage campaign pull
# Pull a specific campaign by name
tdx engage campaign pull "Marketing Team" --name "Monthly Newsletter"
# Pull only email campaigns
tdx engage campaign pull "Marketing Team" --type email
# Preview what would be written without writing files
tdx engage campaign pull "Marketing Team" --dry-run
# Skip confirmation prompt
tdx engage campaign pull "Marketing Team" --yes| Option | Description |
|---|---|
--workspace <name> | Workspace name |
--name <name> | Pull specific campaign by name |
--type <type> | Filter by campaign type (email, push) |
--dry-run | Show what would be written without writing |
-y, --yes | Skip confirmation prompt |
Pulled files are written to campaigns/<workspace-slug>/ under the current directory. Each campaign produces a YAML file and optionally an HTML file (if the campaign has an HTML email override).
Push local YAML campaign files to the Engage API. Matches campaigns by name — existing campaigns are updated, new ones are created.
# Push a single campaign file
tdx engage campaign push path/to/campaign.yaml
# Push all campaign files in a directory
tdx engage campaign push path/to/campaigns/
# Push all campaigns (uses tdx.json for workspace context)
tdx engage campaign push
# Push with explicit workspace
tdx engage campaign push campaign.yaml --workspace "Marketing Team"
# Validate against API without applying changes
tdx engage campaign push campaign.yaml --dry-run
# Skip confirmation prompt
tdx engage campaign push campaign.yaml --yes| Option | Description |
|---|---|
--workspace <name> | Workspace name (overrides tdx.json and session context) |
--dry-run | Show what would be applied without applying |
-y, --yes | Skip confirmation prompt |
Workspace resolution order: --workspace option > tdx.json (engage_workspace field) > session context.
Validate campaign YAML files locally without pushing to the API.
# Validate all campaign files in current directory
tdx engage campaign validate
# Validate a specific file
tdx engage campaign validate campaign.yaml
# Validate all campaigns in a directory
tdx engage campaign validate path/to/campaigns/
# Show all files including valid ones
tdx engage campaign validate --verbose| Option | Description |
|---|---|
--verbose | Show all files including valid ones |
For API-level validation (resolving references), use tdx engage campaign push --dry-run instead.
# List all email templates (uses workspace from session context)
tdx engage template list
tdx engage templates # alias for "template list"
# List templates in a specific workspace
tdx engage template list --workspace "Marketing Team"
# Filter templates by pattern
tdx engage template list "welcome*"
tdx engage template list "*_newsletter"
# Limit results
tdx engage template list --limit 20# Show template by name
tdx engage template show "Welcome Email"
# Show template by UUID
tdx engage template show "01968a3a-ae17-7ef6-9b45-f1a0af1224b4"
# Specify workspace when using name
tdx engage template show "Welcome Email" --workspace "Marketing"
# Show full JSON:API response with all fields (htmlTemplate, beefreeJson, etc.)
tdx engage template show "Welcome Email" --fullNote: Workspace is required for creating templates. Set it via tdx use engage_workspace or --workspace.
# Create an email template (workspace from session)
tdx engage template create --name "Welcome Email" \
--subject "Welcome to our service!" \
--html "<html><body><h1>Welcome!</h1></body></html>"
# Create with explicit workspace
tdx engage template create --name "Welcome Email" \
--subject "Welcome to our service!" \
--html "<html><body><h1>Welcome!</h1></body></html>" \
--workspace "Marketing Team"
# Create from an HTML file
tdx engage template create --name "Welcome Email" \
--subject "Welcome to our service!" \
--html-file ./templates/welcome.html
# Create with plaintext version
tdx engage template create --name "Welcome Email" \
--subject "Welcome to our service!" \
--html "<html><body><h1>Welcome!</h1></body></html>" \
--plaintext "Welcome to our service!"# Update template name
tdx engage template update "Welcome Email" --name "New Welcome Email"
# Update template subject
tdx engage template update "Welcome Email" --subject "New Subject Line"
# Update template HTML
tdx engage template update "Welcome Email" --html "<html><body><h1>Updated!</h1></body></html>"
# Update template HTML from file
tdx engage template update "Welcome Email" --html-file ./templates/updated.html
# Update by UUID
tdx engage template update "01968a3a-ae17-7ef6-9b45-f1a0af1224b4" --name "New Name"
# Specify workspace when using name
tdx engage template update "Welcome Email" --workspace "Marketing" --name "New Name"# Delete template by name (prompts for confirmation)
tdx engage template delete "Old Template"
# Delete template by UUID
tdx engage template delete "01968a3a-ae17-7ef6-9b45-f1a0af1224b4"
# Skip confirmation prompt
tdx engage template delete "Old Template" --yes
# Specify workspace when using name
tdx engage template delete "My Template" --workspace "Marketing"# List all workspaces
tdx engage workspace list
tdx engage workspaces # alias for "workspace list"
# Filter workspaces by pattern
tdx engage workspace list "marketing*"
tdx engage workspace list "*_production"
# Limit results
tdx engage workspace list --limit 10# Show workspace by name
tdx engage workspace show "Marketing Team"
# Show workspace by UUID
tdx engage workspace show "01968a3a-ae17-7ef6-9b45-f1a0af1224b4"
# Show full JSON:API response with all fields (workspaceConfig, ownerUser, etc.)
tdx engage workspace show "Marketing Team" --full# Create a workspace
tdx engage workspace create --name "Marketing Team"
# Create with description
tdx engage workspace create --name "Marketing Team" \
--description "Workspace for marketing campaigns"# Update workspace name
tdx engage workspace update "Marketing Team" --name "Marketing Department"
# Update workspace description
tdx engage workspace update "Marketing Team" --description "Updated description"
# Update by UUID
tdx engage workspace update "01968a3a-ae17-7ef6-9b45-f1a0af1224b4" --name "New Name"# Delete workspace by name (prompts for confirmation)
tdx engage workspace delete "Old Workspace"
# Delete workspace by UUID
tdx engage workspace delete "01968a3a-ae17-7ef6-9b45-f1a0af1224b4"
# Skip confirmation prompt
tdx engage workspace delete "Old Workspace" --yes# Set workspace for the current session (alias for "tdx use engage_workspace")
tdx engage workspace use "Marketing Team"
# This is equivalent to:
tdx use engage_workspace "Marketing Team"All Engage commands support name-based selection in addition to UUIDs:
- By Name:
tdx engage campaign show "My Campaign"- searches by exact name match - By UUID:
tdx engage campaign show "01968a3a-ae17-7ef6-9b45-f1a0af1224b4"- direct ID lookup
When multiple resources share the same name across workspaces, use --workspace to narrow the search.
All commands support standard tdx output formats:
# JSON output (default)
tdx engage campaign list
# Table format
tdx engage campaign list --format table
# TSV format for scripting
tdx engage campaign list --format tsv
# JSONL format for streaming
tdx engage campaign list --format jsonl| Status | Description |
|---|---|
DRAFT | Campaign is being prepared, not yet launched |
ACTIVE | Campaign is currently running |
PAUSED | Campaign is temporarily paused |
COMPLETED | Campaign has finished execution |
| Type | Description |
|---|---|
email | Email marketing campaigns |
push | Push notification campaigns |