Create a campaign
Create a campaign as a draft. It sends nothing until you launch it. Add contacts and launch it in the next calls. Only an approved template can be used, so every campaign starts with one. Scheduling is not offered.
Set up WhatsApp first. Connect a WhatsApp number in the dashboard or with Connect numbers. Included on every paid plan. See plans.
An approved template on that number.
broadcast_reply lets the agent answer replies. It needs an agent.
The agent that answers replies.
curl -X POST 'https://backend.omnidim.io/api/v1/whatsapp/campaigns' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{ "name": "October promo", "phone_number_id": 412, "template_id": 3676, "campaign_mode": "broadcast" }'
{ "id": 0, "name": "string", "status": "draft", "pause_reason": "human", "campaign_mode": "broadcast", "send_mode": "review", "data_source": "csv", "is_dynamic": false, "phone_number_id": 0, "template": { "id": 0, "name": "string" }, "agent_id": 0, "variable_mapping": "string", "counts": { "total": 0, "sent": 0, "delivered": 0, "read": 0, "replied": 0, "failed": 0, "skipped": 0, "opted_out": 0 }, "receipts_reported": false, "delivery_rate": 0, "read_rate": 0, "reply_rate": 0, "spend": { "amount": 0, "currency": "USD" }, "created_at": "string" }
BearerAuthAuthorizationBearer <token>Bearer token authentication. Obtain your API key from the OmniDimension dashboard.
application/jsonname*stringlength <= 255phone_number_id*integertemplate_id*integerAn approved template on that number.
campaign_mode?stringbroadcast_reply lets the agent answer replies. It needs an agent.
"broadcast""broadcast""broadcast_reply"agent_id?integerThe agent that answers replies.
data_source?string"csv""csv""webhook"is_dynamic?booleanfalsevariable_mapping?Template field to contact field or static text.
Response body
application/jsonThe draft campaign.
application/jsonid?integername?stringstatus?string"draft""scheduled""in_progress""paused""completed""failed""cancelled"pause_reason?stringWhy it paused, or null. Only human waits for you; the rest resume on their own.
"human""balance""channel_down""monthly_limit"campaign_mode?string"broadcast""broadcast_reply"send_mode?string"review""on_arrival"data_source?string"csv""webhook"is_dynamic?booleanphone_number_id?integertemplate?agent_id?integerThe agent that answers replies, when one is attached.
variable_mapping?Template field to contact field or static text.
counts?receipts_reported?booleanThis number reports delivery and read receipts, so the rates are real.
delivery_rate?numberDelivered as a percentage of sent. Null when receipts are not reported.
read_rate?numberRead as a percentage of delivered. Null when receipts are not reported.
reply_rate?numberReplied as a percentage of sent.
spend?What the campaign cost so far. Null without billing access.
created_at?string