Create campaign
Create a new campaign. Message content is not set here: define it with workflow_definition or template_id, or attach per-node content with PUT /workspaces/{workspace_id}/campaigns/{campaign_id}/node-messages/{node_id} after the campaign exists.
curl -X POST "https://api.flameup.ai/api/v1/campaigns" \
-H "Content-Type: application/json" \
-H "X-Workspace-ID: example_string" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{
"name": "John Doe",
"trigger_type": "event",
"trigger_config": {
"event_names": [
"John Doe"
],
"filters": [
{
"field": "example_string",
"operator": "eq",
"value": "null"
}
],
"properties": {},
"debounce": 3.14,
"delay_minutes": 3.14,
"max_per_user": 42,
"first_occurrence": true
}
}'
import requests
import json
url = "https://api.flameup.ai/api/v1/campaigns"
headers = {
"Content-Type": "application/json",
"X-Workspace-ID": "example_string",
"Authorization": "Bearer YOUR_API_TOKEN"
}
data = {
"name": "John Doe",
"trigger_type": "event",
"trigger_config": {
"event_names": [
"John Doe"
],
"filters": [
{
"field": "example_string",
"operator": "eq",
"value": "null"
}
],
"properties": {},
"debounce": 3.14,
"delay_minutes": 3.14,
"max_per_user": 42,
"first_occurrence": true
}
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
const response = await fetch("https://api.flameup.ai/api/v1/campaigns", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-Workspace-ID": "example_string",
"Authorization": "Bearer YOUR_API_TOKEN"
},
body: JSON.stringify({
"name": "John Doe",
"trigger_type": "event",
"trigger_config": {
"event_names": [
"John Doe"
],
"filters": [
{
"field": "example_string",
"operator": "eq",
"value": "null"
}
],
"properties": {},
"debounce": 3.14,
"delay_minutes": 3.14,
"max_per_user": 42,
"first_occurrence": true
}
})
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
"bytes"
"encoding/json"
)
func main() {
data := []byte(`{
"name": "John Doe",
"trigger_type": "event",
"trigger_config": {
"event_names": [
"John Doe"
],
"filters": [
{
"field": "example_string",
"operator": "eq",
"value": "null"
}
],
"properties": {},
"debounce": 3.14,
"delay_minutes": 3.14,
"max_per_user": 42,
"first_occurrence": true
}
}`)
req, err := http.NewRequest("POST", "https://api.flameup.ai/api/v1/campaigns", bytes.NewBuffer(data))
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-Workspace-ID", "example_string")
req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('https://api.flameup.ai/api/v1/campaigns')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request['X-Workspace-ID'] = 'example_string'
request['Authorization'] = 'Bearer YOUR_API_TOKEN'
request.body = '{
"name": "John Doe",
"trigger_type": "event",
"trigger_config": {
"event_names": [
"John Doe"
],
"filters": [
{
"field": "example_string",
"operator": "eq",
"value": "null"
}
],
"properties": {},
"debounce": 3.14,
"delay_minutes": 3.14,
"max_per_user": 42,
"first_occurrence": true
}
}'
response = http.request(request)
puts response.body
{
"success": true,
"data": {
"campaign": {
"id": "example_string",
"workspace_id": "example_string",
"name": "John Doe",
"status": "draft",
"trigger_type": "event",
"trigger_config": {
"event_names": [
"John Doe"
],
"filters": [
{
"field": "example_string",
"operator": "eq",
"value": "null"
}
],
"properties": {},
"debounce": 3.14,
"delay_minutes": 3.14,
"max_per_user": 42,
"first_occurrence": true
},
"audience_config": {},
"created_at": "2024-12-25T10:00:00Z",
"updated_at": "2024-12-25T10:00:00Z"
},
"message": "example_string",
"warnings": [
{}
]
}
}
/campaigns
Target server for requests. Edit to use your own host.
A Firebase ID token from a signed-in dashboard session. Endpoints using this scheme are NOT callable with an API key and will reject one.
The media type of the request body
The workspace to operate on, for dashboard routes that carry no workspace_id path segment. A workspace_id query parameter is accepted as an alternative; either way the value is checked against the signed-in user's workspace membership before it is trusted.
Shape depends on trigger_type — see EventTriggerConfig, WebhookTriggerConfig and ScheduleTriggerConfig. Validation is lenient at creation (per-type required fields are enforced at activation), but known-bad keys such as event_name are rejected immediately.
The key itself is required: a body without trigger_config is rejected with 400 before any per-type validation runs. An empty object {} satisfies the binding.
Request Preview
Response
Response will appear here after sending the request
Authentication
Bearer token. A Firebase ID token from a signed-in dashboard session. Endpoints using this scheme are NOT callable with an API key and will reject one.
Headers
The workspace to operate on, for dashboard routes that carry no workspace_id path segment. A workspace_id query parameter is accepted as an alternative; either way the value is checked against the signed-in user's workspace membership before it is trusted.
Body
eventwebhookscheduledynamic_scheduleShape depends on trigger_type — see EventTriggerConfig, WebhookTriggerConfig and ScheduleTriggerConfig. Validation is lenient at creation (per-type required fields are enforced at activation), but known-bad keys such as event_name are rejected immediately.
The key itself is required: a body without trigger_config is rejected with 400 before any per-type validation runs. An empty object \\{\\} satisfies the binding.