Your AI Connector Docs

Broadcasts-API

En broadcast (utskick) är en utgående sändning: en målgrupp, ett öppningsmeddelande, en kanal och ett schema. Valfritt kan du även ange den AI-agent som hanterar svaren som kommer in. Broadcasts-API:et låter dig bygga, prissätta, starta och övervaka dessa sändningar från din egen kod istället för via kontrollpanelen. För själva produkten, se Broadcasts-guiden.

Alla exempel nedan visar frågeformuläret ?apiKey= i cURL och headern X-API-Key i JavaScript och Python — båda fungerar på alla slutpunkter.

I API-utforskaren. Varje slutpunkt på denna sida finns i den publicerade OpenAPI-specifikationen, så att du kan bläddra bland dess exakta fält och köra live-anrop i API-utforskaren.


Hur en sändning sätts samman

Att skicka en broadcast kräver fyra anrop, inte ett:

  1. Skapa broadcasten med dess målgrupp, kanal och schema — den börjar som ett Draft.
  2. Ställ in öppningsmeddelandet. På WhatsApp Business innebär det att skicka in en mall för godkännande (eller välja en som redan är godkänd). På alla andra kanaler är det vanlig text.
  3. Beräkna kostnaden om du vill kontrollera priset innan du spenderar något (valfritt).
  4. Starta den. Starten kör en fullständig kontroll — målgrupp, meddelande, mallgodkännande, ansluten avsändare — och antingen påbörjar sändningen eller talar om exakt vad som saknas.

Ingenting skickas förrän du anropar start.


Broadcast-objektet

{
  "id": "bcd123abc456",
  "name": "June promo",
  "status": "Draft",
  "channel": "whatsapp",
  "agent_id": "agt_789",
  "list_id": "lst_456",
  "list_name": "Newsletter subscribers",
  "total_contacts": 240,
  "send_to_new_list_members": false,
  "whats_app_template": {
    "body": "Hi {{first_name}}, our June offer is live.",
    "status": "approved",
    "sid": "HX0123...",
    "language": "en",
    "category": "marketing",
    "variables": ["first_name"]
  },
  "execution_date": 1781000000000,
  "drip_mode": true,
  "time_critical": false,
  "total_contacts_sent": 0,
  "credits_used": 0,
  "created_at": 1780900000000,
  "last_modified_at": 1780900000000
}

Tidsstämplar returneras som epok-millisekunder (execution_date, created_at, last_modified_at, …), och alla kontaktreferenser returneras som en sökvägssträng som contacts/uid_whatsapp_15551234567.

Fält du anger

Fält Beskrivning
name Vad broadcasten kallas i kontrollpanelen.
channel Den enda kanal som denna broadcast skickas via: whatsapp, whatsapp_web, sms, instagram, messenger, facebook, telegram, instagram_private, line, viber, imessage, email, chat_widget, custom_channel. En broadcast har exakt en kanal — för att skicka samma sak någon annanstans, duplicera den till en annan kanal. tiktok och skool är endast för svar och kan aldrig användas för utskick.
agent_id AI-agenten som svarar på inkommande meddelanden. Lämna den som null så hamnar svaren i din team-inkorg istället.
list_id Kontaktlistan som ska skickas till. Det är så här du anger målgruppen via API:et — se Kontakter för att skapa och fylla listor.
list_name Visningsnamn som visas bredvid broadcasten. Kosmetiskt.
send_to_new_list_members true håller broadcasten aktiv så att alla som läggs till i listan senare också får öppningsmeddelandet.
whats_app_template Öppningsmeddelandet. På WhatsApp Business är det en faktiskt godkänd mall; på alla andra kanaler används dess body som den vanliga öppningstexten. Ställ in det via mall-slutpunkterna, inte manuellt.
opener_media En bild eller video som skickas med öppningsmeddelandet. Skicka alltid hela objektet (eller null för att ta bort det) — att skriva enskilda nycklar inuti det avvisas. Stöds inte på SMS.
execution_date När det ska skickas. Skicka en ISO 8601-tidsstämpel eller epok-millisekunder. Ett framtida datum schemalägger sändningen; utelämna det (eller använd ett förflutet datum) för att skicka så snart du startar.
drip_mode true fördelar sändningen i omgångar över tid istället för allt på en gång.
time_critical true väljer bort den automatiska fördelningen som aktiveras över 50 kontakter — för en varm målgrupp som behöver meddelandet nu. Det höjer inte kanalens egen dagliga sändningsgräns.
batch_size Hur många kontakter per omgång vid droppmatning.
follow_up_config Uppföljningskedjan för kontakter som aldrig svarar.

Allt du skickar som user_id, id, status eller source_campaign_id ignoreras vid skapande och tas bort vid uppdatering — statusen ändras endast via slutpunkterna för start, paus och återuppta nedan.

Fält som plattformen underhåller

status, total_contacts_sent, unique_contacts_replied, overall_reply_rate, credits_used, paused_reason, completion_summary, omgångsräknarna och contacts (de enskilda kontakterna som bifogats från kontrollpanelen, läses tillbaka som sökvägssträngar). Läs dem, skriv inte till dem.

Statusar

Status Betydelse
Draft Byggs. Inget är schemalagt.
Pending Approval Lanserad, men dess WhatsApp-mall väntar fortfarande på beslut. Den börjar skicka automatiskt när mallen har godkänts — du behöver inte lansera igen.
Scheduled Lanserad med ett framtida execution_date.
Sending Skickar aktivt (en sändning som är förberedd för nya listmedlemmar stannar här medan den väntar på dem).
Paused Pausad — av dig, eller automatiskt av en säkerhetskontroll.
Sent Slutförd.
Failed Slutförd med mer än hälften av sändningarna misslyckade.

Skapa en sändning

POST /broadcasts — skapar en Draft.

cURL

curl -X POST "https://api.youraiconnector.com/v1/broadcasts?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "June promo",
    "channel": "whatsapp",
    "list_id": "lst_456",
    "agent_id": "agt_789",
    "drip_mode": true,
    "execution_date": "2026-06-15T09:00:00.000Z"
  }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/broadcasts", {
  method: "POST",
  headers: { "X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({
    name: "June promo",
    channel: "whatsapp",
    list_id: "lst_456",
    agent_id: "agt_789",
    drip_mode: true,
    execution_date: "2026-06-15T09:00:00.000Z",
  }),
});
const { broadcast_id } = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/broadcasts",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "name": "June promo",
        "channel": "whatsapp",
        "list_id": "lst_456",
        "agent_id": "agt_789",
        "drip_mode": True,
        "execution_date": "2026-06-15T09:00:00.000Z",
    },
)
print(res.json()["broadcast_id"])

Svar (201)

{ "success": true, "broadcast_id": "bcd123abc456" }

Lista sändningar

GET /broadcasts — varje sändning på kontot, den nyaste först.

Frågeparametrar

Parameter Krävs Beskrivning
status Nej Returnera endast sändningar med en viss status, t.ex. Sending. Matcha stavningen i statustabellen exakt.
curl "https://api.youraiconnector.com/v1/broadcasts?apiKey=YOUR_API_KEY&status=Sending"
const res = await fetch("https://api.youraiconnector.com/v1/broadcasts?status=Sending", {
  headers: { "X-API-Key": "YOUR_API_KEY" },
});
const { broadcasts } = await res.json();
res = requests.get(
    "https://api.youraiconnector.com/v1/broadcasts",
    headers={"X-API-Key": "YOUR_API_KEY"},
    params={"status": "Sending"},
)
broadcasts = res.json()["broadcasts"]

Svar (200)

{ "success": true, "broadcasts": [{ "id": "bcd123abc456", "name": "June promo", "status": "Sending", "...": "..." }] }

Hämta en sändning

GET /broadcasts/{broadcastId} — returnerar { "success": true, "broadcast": { ... } }. Använd den för att avläsa en pågående sändning: total_contacts_sent, unique_contacts_replied, overall_reply_rate och credits_used uppdateras allt eftersom. |

curl "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456?apiKey=YOUR_API_KEY"

En sändning som inte finns på ditt konto returnerar 404.


Uppdatera en sändning

PUT /broadcasts/{broadcastId} — skicka endast de fält du vill ändra. Du kan också adressera en enskild nyckel inuti ett nästlat objekt med en punktnotation, t.ex. "whats_app_template.body".

curl -X PUT "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "June promo (v2)", "execution_date": "2026-06-16T09:00:00.000Z" }'
await fetch("https://api.youraiconnector.com/v1/broadcasts/bcd123abc456", {
  method: "PUT",
  headers: { "X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({ name: "June promo (v2)", execution_date: "2026-06-16T09:00:00.000Z" }),
});

En tom brödtext returnerar 400. Två regler som är värda att känna till:

  • opener_media är allt-eller-inget. Skicka det fullständiga objektet, eller null för att ta bort bilagan. En punktnotation in i den (opener_media.name) avvisas med 400, eftersom en delvis uppdaterad bilaga skulle beskriva en fil som inte finns.
  • Status kan inte redigeras. Använd lansera, pausa och återuppta.

Öppningsmeddelandet

Varje sändning bär sin inledning i whats_app_template. Vad det innebär beror på kanalen:

  • WhatsApp Business — det måste vara en mall som WhatsApp har godkänt. Använd en av de två slutpunkterna nedan.
  • Alla andra kanaler (WhatsApp Web, SMS, Instagram, Messenger, Telegram, …) — samma fälts body är helt enkelt texten som skickas. Att skicka in den via slutpunkten nedan lagrar den och markerar den som klar utan att involvera WhatsApp överhuvudtaget.

Skicka in en mall för godkännande

POST /broadcasts/{broadcastId}/template

Fält Krävs Beskrivning
body Ja Meddelandetexten, upp till 1024 tecken. Använd {{variable}} platshållare för anpassning.
name Nej Mallnamn. Standard är sändningens namn.
language Nej Språkkod. Standard är en.
category Nej marketing (standard), utility, authentication eller authentication-international. Det är detta sändningen prissätts efter, så var ärlig.
variables Nej Platshållarnamnen, i den ordning de visas. Lämna tomt så läses de från brödtexten — vilket oftast är vad du vill, eftersom sändningen fyller i dem från varje kontakt.
curl -X POST "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/template?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "body": "Hi {{first_name}}, our June offer is live until Friday.",
    "language": "en",
    "category": "marketing"
  }'

Svar (200)

{ "success": true, "broadcast_id": "bcd123abc456", "template_status": "pending", "template_sid": "HX0123..." }

template_status är vad WhatsApp säger: pending medan den granskas, approved när den är användbar, rejected om den nekades. På en kanal som inte är WhatsApp kommer den direkt tillbaka som approved med template_sid: null — ingenting att granska.

Saker som kommer att stoppa dig:

  • Att skicka in medan en tidigare mall fortfarande granskas returnerar 400. Vänta på beslutet först.
  • Att redigera en mall som för närvarande är godkänd håller den godkända versionen aktiv tills den nya kommer tillbaka, så en pågående sändning förlorar aldrig sin inledning.
  • På ett WhatsApp-nummer som är anslutet direkt via Meta kan en sändning med en bifogad bild eller video inte skickas in (400) — bilagor stöds på den hanterade WhatsApp Business-kanalen och på WhatsApp Web.

Använd en mall som du redan har fått godkänd

POST /broadcasts/{broadcastId}/template/select — kopierar en redan godkänd mall från ditt mallbibliotek till sändningen, så det finns inget att vänta på.

Fält Krävs Beskrivning
template_id Ja ID för en godkänd mall på ditt konto.
curl -X POST "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/template/select?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "template_id": "tpl_abc123" }'

Svar (200)

{
  "success": true,
  "broadcast_id": "bcd123abc456",
  "template_status": "approved",
  "template_sid": "HX0123...",
  "body": "Hi {{first_name}}, our June offer is live until Friday.",
  "name": "june_promo",
  "language": "en",
  "variables": ["first_name"],
  "category": "marketing"
}

Godkännandet verifieras på vår sida från biblioteksposten — du skickar bara ID:t. Du får ett 400 om sändningen inte är ett WhatsApp-utkast, om mallen inte är godkänd, om det är en uppföljningsmall snarare än en inledning, eller om sändningen har en bilaga (biblioteksmallar är endast text). Ett mall-ID som inte finns på ditt konto returnerar 404.


Beräkna kostnaden

POST /broadcasts/{broadcastId}/estimate-cost — prissätter sändningen innan du förbinder dig till den. Tillgängligt på whatsapp och sms sändningar; alla andra kanaler returnerar 400. Sändningen behöver en list_id, eftersom uppskattningen räknar målgruppen.

curl -X POST "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/estimate-cost?apiKey=YOUR_API_KEY"

WhatsApp-svar (200) — krediter, uppdelat per destinationsland:

{
  "success": true,
  "channel": "whatsapp",
  "billing_mode": "credits",
  "data": {
    "countries": [
      { "countryCode": "31", "name": "Netherlands", "iso": "NL", "flag": "🇳🇱", "contactCount": 180, "costPerContact": 1.2, "subtotal": 216 },
      { "countryCode": "1", "name": "United States", "iso": "US", "flag": "🇺🇸", "contactCount": 60, "costPerContact": 0.9, "subtotal": 54 }
    ],
    "totalContacts": 240,
    "totalTemplateCost": 270,
    "templateCategory": "marketing",
    "billing_mode": "credits",
    "service_messages_billable_soon": false
  }
}

SMS-svar (200) — amerikanska dollar, baserat på aktuell Twilio-prissättning för ditt eget Twilio-konto:

{
  "success": true,
  "channel": "sms",
  "billing_mode": "twilio_direct",
  "data": {
    "totalContacts": 240,
    "messageLength": 118,
    "segmentsPerMessage": 1,
    "totalSegments": 240,
    "estimatedCostUsd": 1.788,
    "priceUnit": "USD",
    "billedByTwilio": true,
    "billing_mode": "twilio_direct",
    "service_messages_billable_soon": false
  }
}

Läs billing_mode innan du visar ett nummer. Den talar om för dig vem som faktureras:

billing_mode Vem betalar Vad siffrorna betyder
credits Ditt Your AI Connector-konto totalTemplateCost och siffrorna per land är krediter.
twilio_direct Ditt eget Twilio-konto estimatedCostUsd är vad Twilio kommer att debitera dig.
meta_waba_direct Ditt eget WhatsApp Business-konto, faktureras av Meta Varje kreditsiffra visas som null — medvetet, så att det aldrig misstas för “gratis”. Land- och kontaktantalet är fortfarande korrekt.

SMS utan anslutna Twilio-uppgifter returnerar fortfarande segmentantalet, med estimatedCostUsd: 0 — det finns ingen prissättning att slå upp.


Starta en sändning

POST /broadcasts/{broadcastId}/launch

Starten kontrollerar allt först och går sedan vidare med sändningen. Det finns ingen partiell start: antingen startar den, eller så ändras ingenting och du får ett felmeddelande som förklarar varför.

cURL

curl -X POST "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/launch?apiKey=YOUR_API_KEY"

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/launch", {
  method: "POST",
  headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
if (!data.success) console.error(data.error);

Python

res = requests.post(
    "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/launch",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
print(res.json())

Svar (200)

{ "success": true, "broadcast_id": "bcd123abc456", "status": "Scheduled" }

status är där sändningen hamnade:

  • Scheduledexecution_date ligger i framtiden.
  • Sending — den startade nu.
  • Pending Approval — WhatsApp-mallen granskas fortfarande. Den skickas automatiskt så snart mallen har godkänts; anropa inte start igen.

Endast en Draft (eller en Pending Approval-sändning vars mall har godkänts sedan dess) kan startas — allt annat returnerar 400.

Varför en start nekas

Var och en av dessa returneras som 400 med ett error-meddelande på vanligt språk:

Problem Vad som behöver åtgärdas
Ingen målgrupp Ställ in list_id (eller bifoga kontakter) innan du startar.
Inget öppningsmeddelande Ställ in öppningsmeddelandet — se Öppningsmeddelandet.
Bilaga i SMS SMS kan inte innehålla bild eller video. Ta bort bilagan eller flytta sändningen till WhatsApp.
Bilagan matchar inte den godkända mallen På WhatsApp finns media inuti den godkända mallen, så att byta bilaga i efterhand innebär att mallen måste skickas in på nytt.
Mallen avvisad Skriv om meddelandet och skicka in det igen.
Mallen har aldrig skickats in Skicka in den (eller välj en godkänd) först.
Mallen är godkänd men saknas i ditt WhatsApp-konto Vanligtvis en mall som godkändes innan numret var helt anslutet. Skicka in den igen.
Ingen ansluten avsändare för kanalen Anslut kanalen först — se Kanaler.
Endast svar-kanal TikTok och Skool tillåter inte att ett företag startar en konversation, så de kan inte användas för sändningar.
Redan aktiverad Sändningen har redan en schemalagd sändning. Pausa den innan du startar igen.
Väntar fortfarande på godkännande Den skickas automatiskt när mallen har godkänts.
WhatsApp Business-konto blockerat av Meta Meta har stoppat företagsinitierade konversationer på ditt eget WhatsApp Business-konto — vanligtvis ett problem med betalningsmetoden. Åtgärda det i Metas Business Manager.
Startad från en klassisk kampanj Starta den från kampanjredigeraren istället. Se klassiska kampanjer i Sändningar.

Pausa och återuppta

POST /broadcasts/{broadcastId}/pause stoppar en Sending- eller Scheduled-sändning och rensar allt som ligger i kö.

curl -X POST "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/pause?apiKey=YOUR_API_KEY"

Att pausa en Pending Approval-sändning återställer den till Draft istället — ingenting var schemalagt ännu, så det finns inget att återuppta till. Alla andra statusar returnerar 400.

POST /broadcasts/{broadcastId}/resume startar om en Paused-sändning:

curl -X POST "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/resume?apiKey=YOUR_API_KEY"

Svar (200)

{ "success": true, "broadcast_id": "bcd123abc456" }

Den återupptas till Sending, eller tillbaka till Scheduled om dess execution_date fortfarande ligger i framtiden. Endast en Paused-sändning kan återupptas.


Fortsätt skicka efter en paus på grund av lågt engagemang

POST /broadcasts/{broadcastId}/override-engagement-guard

Medan en sändning skickas i omgångar mäter vi hur många som svarade på varje omgång innan nästa påbörjas. Om nästan ingen svarar pausas sändningen automatiskt — en sändning som fortsätter att skicka ut i tystnad är det snabbaste sättet att få ett nummer filtrerat eller blockerat. Det är knappen Fortsätt ändå i kontrollpanelen.

Eftersom svarsfrekvensen som orsakade pausen inte kan ändras medan sändningen är stoppad, skulle en vanlig återuppta bara pausas igen vid nästa kontroll. Denna slutpunkt är beslutet att fortsätta ändå: den registrerar åsidosättandet för den specifika sändningen och häver pausen i samma anrop om sändningen pausades på grund av lågt engagemang.

curl -X POST "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/override-engagement-guard?apiKey=YOUR_API_KEY"

Svar (200)

{ "success": true, "broadcast_id": "bcd123abc456", "status": "Sending", "resumed": true }
  • resumed: true — sändningen pausades på grund av lågt engagemang och körs nu igen; status är där den återupptogs till.
  • resumed: false — ingenting hävdes, åsidosättandet registreras helt enkelt för framtida kontroller. Det är vad du får om sändningen aldrig pausades, eller pausades av en annan anledning (du pausade den manuellt, en sändningsgräns nåddes eller för många sändningar gav fel). Dessa pauser hävs inte här — återuppta den själv när du har hanterat orsaken.

Åsidosättandet gäller endast för denna sändning. Det är inte en kontoinställning, och det är säkert att anropa två gånger.


Duplicera en sändning

POST /broadcasts/{broadcastId}/duplicate — kopierar målgrupp, meddelande och inställningar till en ny Draft. Allt som rör den tidigare körningen (räknare, omgångar, schema, svarsstatistik) börjar om från början.

Fält Krävs Beskrivning
to_channel Nej Skapa kopian på en annan kanal. Det är så här du skickar samma sak på två kanaler — en sändning har alltid bara en.
curl -X POST "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/duplicate?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "to_channel": "sms" }'

Svar (201)

{ "success": true, "broadcast_id": "bcd999new111", "source_broadcast_id": "bcd123abc456" }

En kopia ärver aldrig ett aktivt WhatsApp-godkännande: på en WhatsApp-kopia kommer mallen över och kräver din bekräftelse, och vid en kopia till en annan kanal tas den bort och texten blir den vanliga inledningen. Kopiering till SMS tar även bort eventuella bilagor, eftersom SMS inte kan skicka sådana.


Ta bort en sändning

DELETE /broadcasts/{broadcastId}

curl -X DELETE "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456?apiKey=YOUR_API_KEY"

En Sending eller Scheduled-sändning nekas med 400 — pausa den först.


Sändningar som speglar en klassisk kampanj

Klassiska kampanjer som skickar meddelanden visas även i Sändningar, och API:et returnerar dem tillsammans med inbyggda sändningar (de har en source_campaign_id). De fungerar lite annorlunda eftersom kampanjen fortfarande har kontrollen:

  • Redigering av målgrupp, meddelande eller schema fungerar och skrivs över till kampanjen.
  • Kanal, svarsagent, bilaga och alla körningsräknare är skrivskyddade här — 400 om du försöker ändra dem. Ändra dem i kampanjen.
  • Starta returnerar 400 som hänvisar dig till kampanjredigeraren.
  • Pausa och återuppta fungerar och påverkar kampanjen.
  • Ta bort returnerar 400 — ta bort kampanjen istället, så försvinner även dess sändningspost.
  • Duplicera ger dig en oberoende inbyggd sändning, vilket är det rekommenderade sättet att flytta en beprövad kampanj.

Fel

Misslyckade förfrågningar returnerar {"success": false, "error": "<message>"} med dessa statusar:

Status Betydelse
400 Något med förfrågan eller sändningens status är felaktigt — ett saknat fält, en ogiltig bilaga eller en start/paus/återuppta/ta bort-åtgärd som inte är tillåten i sändningens nuvarande status. Meddelandet error anger orsaken.
401 Saknad eller ogiltig API-nyckel.
403 Din plan inkluderar inte API-åtkomst.
404 Ingen sådan sändning finns på ditt konto (eller, vid val av mall, ingen sådan mall).
429 Hastighetsbegränsad. Vänta och försök igen.
500 Något gick fel på vår sida. Försök igen efter en kort väntan.

Nästa steg

  • Guide för sändningar — produkten bakom dessa slutpunkter, inklusive takt och säkerhetsbeteende
  • Kontakter-API — bygg listan som en sändning skickas till
  • Mallar-API — hantera de godkända WhatsApp-mallar du kan välja mellan
  • Webhooks-API — prenumerera på Broadcast Started och Broadcast Completed istället för att polla