Your AI Connector Docs

WhatsApp Templates API

WhatsApp-berichtsjablonen zijn vooraf geschreven berichten die zijn goedgekeurd voor verzending buiten het normale 24-uurs gespreksvenster — bijvoorbeeld een welkomstbericht, een afspraakherinnering of een herinnering om opnieuw contact op te nemen. Met deze API kun je sjablonen programmatisch weergeven, aanmaken, bewerken, indienen, controleren, verwijderen en verzenden.

Alle onderstaande paden zijn relatief ten opzichte van de API-basis-URL:

https://api.youraiconnector.com/v1

Elk verzoek moet worden geauthenticeerd. Zie Authenticatie voor de vier geaccepteerde methoden. De voorbeelden op deze pagina gebruiken de X-API-Key-header (en één query-parameter-vorm voor cURL).

Let op: Sjablonen maken gebruik van het WhatsApp Business API-kanaal, dus dit onderdeel van de API vereist zowel API-toegang als een abonnement dat WhatsApp-kanalen bevat. Zonder deze worden verzoeken afgewezen met een 403.


Werken met subaccounts (bureaus)


Goedkeuringsstatussen

Omdat berichten die buiten een open gesprek worden verzonden eerst door WhatsApp moeten worden beoordeeld, heeft elk sjabloon een goedkeurings-status:

Status Betekenis
draft Aangemaakt of opgeslagen, maar nog niet ingediend voor beoordeling. Je kunt het nog bewerken.
received Ingediend en geaccepteerd in de beoordelingswachtrij.
pending In beoordeling.
approved Goedgekeurd voor verzending.
rejected Afgewezen. Het rejection_reason-veld legt uit waarom; pas het aan en dien het opnieuw in.

Alleen draft- en rejected-sjablonen kunnen worden bewerkt of (opnieuw) worden ingediend. Zodra een sjabloon approved is, is het vergrendeld — maak een nieuwe aan als je wijzigingen nodig hebt.

Automatische goedkeuring: Sommige kanalen vereisen geen externe beoordelingsstap. Sjablonen die voor een campagne op een dergelijk kanaal zijn aangemaakt of ingediend, worden onmiddellijk opgeslagen als approved, zonder inhouds-ID (sid).


Sjablonen op Meta-gekoppelde accounts

Deze eindpunten werken op dezelfde manier, ongeacht op welke WhatsApp-verbinding uw account draait, maar wat er achter de schermen gebeurt, verschilt:

  • Bij een beheerde WhatsApp-verbinding worden sjablonen geregistreerd bij de berichtprovider en is sid de content-ID van de provider (HXXXXXXXX…).
  • Bij een account waarvan het nummer op een eigen WhatsApp Business-account draait (beide Meta-verbindingsopties), worden sjablonen aangemaakt en beoordeeld in dat WhatsApp Business-account en is sid Meta’s eigen sjabloon-ID — een numerieke reeks zoals "3394843740694756". status gebruikt nog steeds de waarden in de tabel hierboven, en rejection_reason bevat nog steeds de uitleg van Meta.

Hiervoor bestaan twee extra eindpunten: één om te vragen op welke verbinding u zit, en één om uw sjabloonlijst te synchroniseren met uw WhatsApp Business-account. Sjablonen die al in het WhatsApp Business-account bestaan, worden door de synchronisatie in uw bibliotheek geïmporteerd, zodat een GET /whatsapp-templates ze daarna weergeeft zoals elk ander sjabloon.

Controleren op welke verbinding sjablonen draaien

GET /whatsapp-templates/provider

Veld Beschrijving
provider twilio wanneer sjablonen zijn geregistreerd bij de beheerde berichtprovider, meta wanneer ze in uw eigen WhatsApp Business-account staan.
lane Welke Meta-verbinding in gebruik is — meta_cloud_api (uw eigen Meta-app) of meta_embedded (gekoppeld via onze Meta-app). null bij een beheerde verbinding.
waba_id Het WhatsApp Business-account waarin de sjablonen zijn aangemaakt, of null.
templates_enabled false wanneer de Meta-verbinding nog niet voltooid is (geen WhatsApp Business-account of toegangstoken opgeslagen). Het aanmaken of indienen van sjablonen mislukt met een 400 totdat dit wel het geval is.

cURL

curl "https://api.youraiconnector.com/v1/whatsapp-templates/provider?apiKey=YOUR_API_KEY"

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates/provider", {
  headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();

Python

import requests

res = requests.get(
    "https://api.youraiconnector.com/v1/whatsapp-templates/provider",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()

Antwoord

{
  "success": true,
  "provider": "meta",
  "lane": "meta_cloud_api",
  "waba_id": "2357661648036355",
  "templates_enabled": true
}

Sjablonen synchroniseren vanuit Meta

Vernieuwt de goedkeuringsstatus van elk sjabloon dat in uw WhatsApp Business-account staat, en importeert elk sjabloon dat daar wel bestaat maar nog niet in uw bibliotheek staat. Kan veilig zo vaak worden aangeroepen als u wilt. Bij een beheerde verbinding valt er niets te synchroniseren, dus de aanroep doet niets en rapporteert simpelweg hoeveel sjablonen u heeft.

POST /whatsapp-templates/meta-sync

Veld Beschrijving
imported Sjablonen gevonden in het WhatsApp Business-account die door deze aanroep aan uw bibliotheek zijn toegevoegd.
updated Bestaande sjablonen waarvan de status of details zijn gewijzigd.
total Sjablonen in uw bibliotheek na de synchronisatie.

cURL

curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/meta-sync?apiKey=YOUR_API_KEY"

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates/meta-sync", {
  method: "POST",
  headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/meta-sync",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()

Antwoord

{
  "success": true,
  "provider": "meta",
  "imported": 2,
  "updated": 5,
  "total": 12
}

Direct communiceren met Meta (geavanceerd)

Als u iets nodig heeft dat de bovenstaande eindpunten niet bieden — sjabloonheaders, voetteksten, knoppen of een volledig handmatig opgebouwd sjabloon — stuurt /v1/meta-templates uw verzoek direct door naar de eigen sjabloon-API van Meta, zonder iets op te slaan in uw sjabloonbibliotheek. Dit werkt alleen op accounts waarvan het nummer op hun eigen WhatsApp Business-account draait; bij een beheerde verbinding retourneert elke aanroep 400 met het verzoek om eerst een Meta-app te koppelen.

Eindpunt Wat het doet
GET /meta-templates Geeft de sjablonen in uw WhatsApp Business-account weer met hun laatste status. Voeg ?name= toe om te filteren op één specifieke sjabloonnaam. Retourneert { "success": true, "templates": [...] }.
POST /meta-templates Maakt een sjabloon aan en dient het in één stap in voor beoordeling door Meta. Vereist name, language en body (of een volledige components-array in plaats van body). Optioneel: variables (array van strings), category (MARKETING, UTILITY of AUTHENTICATION), header, footer, buttons. Retourneert 201 met { "success": true, "template": {...} }.
DELETE /meta-templates/{name} Verwijdert het sjabloon op basis van de Meta-naam — elke taal ervan. Voeg ?hsm_id= toe met de sjabloon-ID van Meta om slechts één taal te verwijderen. Retourneert { "success": true, "name": "..." }.

Een sjabloon dat door Meta wordt geweigerd, retourneert 400 met de eigen uitleg van Meta in error.


Sjablonen weergeven

Geeft alle sjablonen in je account terug, met een beknopte samenvatting van elk.

GET /whatsapp-templates

cURL

curl "https://api.youraiconnector.com/v1/whatsapp-templates?apiKey=YOUR_API_KEY"

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates", {
  headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();

Python

import requests

res = requests.get(
    "https://api.youraiconnector.com/v1/whatsapp-templates",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()

Antwoord

{
  "success": true,
  "data": [
    {
      "id": "template_abc123",
      "name": "welcome_message",
      "status": "approved",
      "language": "en",
      "body": "Hi {{first_name}}, thanks for reaching out!"
    },
    {
      "id": "template_def456",
      "name": "appointment_reminder",
      "status": "pending",
      "language": "en",
      "body": "Hi {{first_name}}, this is a reminder about your appointment."
    }
  ]
}

Een sjabloon ophalen

Geeft de volledige details van een enkel sjabloon terug, inclusief de variabelen, status en tijdstempels.

GET /whatsapp-templates/{templateId}

cURL

curl "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123" \
  -H "X-API-Key: YOUR_API_KEY"

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123",
  { headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();

Python

import requests

res = requests.get(
    "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()

Antwoord

{
  "success": true,
  "template": {
    "id": "template_abc123",
    "name": "welcome_message",
    "body": "Hi {{first_name}}, thanks for reaching out!",
    "language": "en",
    "variables": ["first_name"],
    "status": "approved",
    "sid": "HXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    "type": "general",
    "category": "marketing",
    "rejection_reason": null,
    "campaign_id": "campaign123",
    "date_created": "2026-06-01T10:00:00.000Z",
    "date_updated": "2026-06-02T08:30:00.000Z",
    "submitted_at": "2026-06-01T10:05:00.000Z",
    "approved_at": "2026-06-02T08:30:00.000Z"
  }
}

Een sjabloon dat niet bestaat in uw account geeft 404 terug met { "success": false, "error": "Template not found" }.


Een sjabloon maken

Maakt een sjabloon voor het openingsbericht van een campagne en dient dit in één stap in voor goedkeuring.

POST /whatsapp-templates

Veld Verplicht Beschrijving
campaign_id Ja De campagne waartoe het sjabloon behoort.
name Ja Een naam voor het sjabloon.
language Ja Taalkode, bijvoorbeeld en, es, de, pt_BR, zh_CN.
body Ja De berichttekst, tot 1024 tekens.
variables Nee Geordende lijst met variabelenamen die in de hoofdtekst worden gebruikt.

Variabele-placeholders kunnen worden geschreven als {{first_name}}, {first_name} of [first_name] — ze worden allemaal genormaliseerd naar de vorm met dubbele accolades.

Het resultaat hangt af van de kanalen van de campagne:

  • WhatsApp Business API-campagne: de inhoud wordt verzonden voor WhatsApp-beoordeling. Het antwoord bevat campaign_status (received of pending) en een template_sid.
  • Een kanaal zonder externe beoordelingsstap: het sjabloon wordt opgeslagen en automatisch goedgekeurd (campaign_status: "approved", template_sid: null).
  • Geen WhatsApp-kanaal in de campagne: er wordt niets aangemaakt en campaign_status is not_applicable.

cURL

curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "campaign_id": "campaign123",
    "name": "welcome_message",
    "language": "en",
    "body": "Hi {{first_name}}, thanks for reaching out!",
    "variables": ["first_name"]
  }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    campaign_id: "campaign123",
    name: "welcome_message",
    language: "en",
    body: "Hi {{first_name}}, thanks for reaching out!",
    variables: ["first_name"],
  }),
});
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "campaign_id": "campaign123",
        "name": "welcome_message",
        "language": "en",
        "body": "Hi {{first_name}}, thanks for reaching out!",
        "variables": ["first_name"],
    },
)
data = res.json()

Antwoord (ingediend voor beoordeling)

{
  "success": true,
  "campaign_status": "pending",
  "template_sid": "HXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}

Een zelfstandig sjabloon maken

Hiermee maakt u een sjabloon in uw sjabloonbibliotheek zonder deze te koppelen aan het openingsbericht van een campagne. Dit is de aanmaakstap van de levenscyclus die de rest van deze pagina volgt: maak het hier aan, bewerk het, dien het in voor beoordeling, vraag de status op en verwijder het wanneer u het niet meer nodig heeft.

POST /whatsapp-templates/docs

Veld Vereist Beschrijving
name Ja Een naam voor het sjabloon.
language Ja Taalkode, bijvoorbeeld en, es, de, pt_BR, zh_CN.
body Ja De berichttekst, maximaal 1024 tekens.
variables Nee Geordende lijst met variabelenamen die in de body worden gebruikt.
status Nee draft (standaard) slaat het op zonder in te dienen; submitted plaatst het direct in de wachtrij voor WhatsApp-beoordeling.
type Nee general (standaard) of smart_followup.
category Nee marketing, utility, authentication of authentication-international.
campaign_id Nee Koppelt het sjabloon aan een van uw campagnes.

Sjablonen voor authenticatie (eenmalige code). WhatsApp accepteert geen vrije-tekst-authenticatiesjablonen: de berichtinhoud is vooraf ingesteld door WhatsApp en het sjabloon moet een “code kopiëren”-knop bevatten. Wanneer u een sjabloon maakt met category: "authentication", dienen wij deze in die vaste vorm voor u in. Uw body wordt bewaard als het voorbeeld dat in de app wordt getoond, maar de tekst die uw contactpersoon ontvangt is de eigen bewoording van WhatsApp (de code, een beveiligingsherinnering en een melding dat deze na 10 minuten verloopt). Declareer precies één variabele, bijvoorbeeld ["code"], en geef de code door wanneer u verzendt (zie het veld variables op Een sjabloon naar een contactpersoon sturen). De code moet korter zijn dan 15 tekens.

Welke ‘create’ moet ik gebruiken? Gebruik deze wanneer u een sjabloon wilt dat u zelf kunt bewerken en indienen. Gebruik POST /whatsapp-templates (hierboven) wanneer u het openingsbericht van een campagne wilt instellen — die vereist campaign_id en schrijft direct naar de campagne.

Een sjabloon dat is aangemaakt als submitted wordt op de achtergrond verzonden voor WhatsApp-beoordeling. Controleer daarom het status-eindpunt voor het resultaat in plaats van dit in het antwoord te verwachten.

cURL

curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/docs?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "welcome_message",
    "language": "en",
    "body": "Hi {{first_name}}, thanks for reaching out!",
    "variables": ["first_name"],
    "status": "draft",
    "category": "marketing"
  }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates/docs", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    name: "welcome_message",
    language: "en",
    body: "Hi {{first_name}}, thanks for reaching out!",
    variables: ["first_name"],
    status: "draft",
    category: "marketing",
  }),
});
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/docs",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "name": "welcome_message",
        "language": "en",
        "body": "Hi {{first_name}}, thanks for reaching out!",
        "variables": ["first_name"],
        "status": "draft",
        "category": "marketing",
    },
)
data = res.json()

Antwoord

{
  "success": true,
  "template_id": "template_abc123",
  "status": "draft"
}

Een ontbrekende name, language of body, een niet-ondersteunde taal, een status anders dan draft of submitted, een onbekende type of category, of een body van meer dan 1024 tekens resulteert in 400 met een verklarende error. Een campaign_id die niet een van uw campagnes is, resulteert in 404.


Een sjabloon bijwerken

Bewerkt een sjabloon dat nog niet is goedgekeurd. Alleen sjablonen met status draft of rejected kunnen worden bewerkt. Geef een willekeurige combinatie van name, body, language en variables op — alleen de velden die u verzendt, worden gewijzigd.

PUT /whatsapp-templates/{templateId}

Bewerken zorgt er niet voor dat de sjabloon opnieuw wordt ingediend voor beoordeling. Gebruik daarna het submit-eindpunt.

cURL

curl -X PUT "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "body": "Hi {{first_name}}, here is an update for you.",
    "variables": ["first_name"]
  }'

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123",
  {
    method: "PUT",
    headers: {
      "X-API-Key": "YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      body: "Hi {{first_name}}, here is an update for you.",
      variables: ["first_name"],
    }),
  }
);
const data = await res.json();

Python

import requests

res = requests.put(
    "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "body": "Hi {{first_name}}, here is an update for you.",
        "variables": ["first_name"],
    },
)
data = res.json()

Antwoord

{
  "success": true,
  "template_id": "template_abc123"
}

Het proberen te bewerken van een sjabloon die al approved is (of anderszins niet bewerkbaar), het niet verzenden van velden of het verzenden van een ongeldige waarde resulteert in 400 met een verklarende error.


Een sjabloon indienen voor goedkeuring

Dient een draft of rejected sjabloon in voor beoordeling. Sjablonen op een kanaal waarvoor geen externe beoordeling vereist is, worden onmiddellijk goedgekeurd; alle andere worden naar WhatsApp verzonden en de geretourneerde status (meestal received of pending) wordt opgeslagen bij de sjabloon.

POST /whatsapp-templates/{templateId}/submit

Follow-up sjablonen moeten hun vereiste variabelen declareren en gebruiken voordat ze kunnen worden ingediend: een voornaam-placeholder, plus een persoonlijke-context-placeholder voor slimme follow-ups.

cURL

curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/submit" \
  -H "X-API-Key: YOUR_API_KEY"

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/submit",
  { method: "POST", headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/submit",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()

Antwoord

{
  "success": true,
  "template_id": "template_abc123",
  "status": "pending",
  "sid": "HXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}

Goedkeuringsstatus controleren

Een lichtgewicht eindpunt voor het pollen van de huidige status van een sjabloon. De status wordt gelezen uit het opgeslagen record, dat periodiek op de achtergrond wordt vernieuwd, dus een zeer recente goedkeuring of afwijzing kan even duren voordat deze zichtbaar is.

GET /whatsapp-templates/{templateId}/status

cURL

curl "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/status" \
  -H "X-API-Key: YOUR_API_KEY"

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/status",
  { headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();

Python

import requests

res = requests.get(
    "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/status",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()

Antwoord

{
  "success": true,
  "template_id": "template_abc123",
  "name": "welcome_message",
  "status": "approved",
  "sid": "HXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "rejection_reason": null,
  "date_updated": "2026-06-02T08:30:00.000Z"
}

Een sjabloon verwijderen

Verwijdert het sjabloonrecord uit uw account.

DELETE /whatsapp-templates/{templateId}

Belangrijk: Bij een beheerde verbinding wordt alleen het opgeslagen record verwijderd — inhoud die WhatsApp al heeft goedgekeurd, kan geregistreerd blijven bij de messaging-provider. Bij een account dat op een eigen WhatsApp Business-account draait, wordt de sjabloon ook uit dat account verwijderd. Hoe dan ook, als een campagne deze sjabloon nog gebruikt, wijs die campagne dan vóór het verwijderen naar een andere sjabloon, anders zullen verzendingen die ervan afhankelijk zijn mislukken.

cURL

curl -X DELETE "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123" \
  -H "X-API-Key: YOUR_API_KEY"

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123",
  { method: "DELETE", headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();

Python

import requests

res = requests.delete(
    "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()

Antwoord

{
  "success": true,
  "template_id": "template_abc123",
  "note": "The template record was removed from your account. Content already approved by WhatsApp may remain registered with the messaging provider."
}

Een sjabloon naar een contactpersoon sturen

Verstuurt een goedgekeurde sjabloon naar een contactpersoon, zelfs als er geen open gesprek is — dit heropent de chatsessie. Je kunt de contactpersoon targeten via contactId of via phoneNumber, en de sjabloon kiezen via whatsappTemplateId of via templateName.

POST /whatsapp-templates/send

Veld Vereist Beschrijving
contactId Een van deze twee Het ID van de contactpersoon.
phoneNumber Een van deze twee Het telefoonnummer van de contactpersoon (met landcode, zonder spaties). Wordt opgezocht of aangemaakt indien nodig.
whatsappTemplateId Een van deze twee Het ID van het sjabloon.
templateName Een van deze twee De naam van het sjabloon, zoals getoond in de app.
firstName Nee Wordt gebruikt om een nieuw aangemaakte contactpersoon in te vullen.
lastName Nee Wordt gebruikt om een nieuw aangemaakte contactpersoon in te vullen.
email Nee Wordt gebruikt om een nieuw aangemaakte contactpersoon in te vullen.
variables Nee Expliciete waarden voor de variabelen van het sjabloon, gesleuteld op variabelenaam, bijvoorbeeld { "code": "482913" }. Een waarde die hier wordt opgegeven, krijgt voorrang op de velden van de contactpersoon voor die variabele; variabelen die u weglaat, worden nog steeds ingevuld vanuit de contactpersoon zoals hieronder beschreven. Dit is hoe u een eenmalige code doorgeeft aan een authenticatiesjabloon.

De hoofdtekst van de sjabloon ondersteunt geavanceerde variabele-substitutie:

  • Basisvariabelen: {{first_name}}, {{email}}, {{company}}
  • Standaardwaarden: {{first_name|there}} toont there als het veld leeg is
  • Transformaties: {{company|uppercase}}, {{name|lowercase}}, {{name|capitalize}}
  • Gecombineerd: {{company|Your Company|uppercase}}

Credits: Het versturen van een sjabloon verbruikt credits. De exacte kosten hangen af van het land van de ontvanger en de categorie van de sjabloon.

cURL

curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/send?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contactId": "contact123",
    "whatsappTemplateId": "template_abc123"
  }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates/send", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    contactId: "contact123",
    whatsappTemplateId: "template_abc123",
  }),
});
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/send",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "contactId": "contact123",
        "whatsappTemplateId": "template_abc123",
    },
)
data = res.json()

Antwoord

{
  "success": true,
  "data": "WhatsApp template message sent successfully"
}

Een verzoek waarbij zowel een contact-ID als beide sjabloon-ID’s ontbreken, retourneert 400. Als je account niet beschikt over de messaging-inloggegevens die nodig zijn om te verzenden, is het antwoord 403.


Een live sjabloon voor een campagne maken of bijwerken

Een tweede paar eindpunten voor het openingssjabloon van een campagne, gespecificeerd via het pad in plaats van via een campaign_id in de body. Deze zijn bedoeld voor een campagne die al live is: in tegenstelling tot Een sjabloon maken hierboven, zorgt het bijwerken hier er ook voor dat de vervolgconcepten van de campagne opnieuw ter beoordeling worden ingediend, zodat het openingssjabloon en de vervolgberichten synchroon blijven.

POST /whatsapp-templates/campaign/{campaignId} maakt het openingssjabloon van de campagne aan. PUT /whatsapp-templates/campaign/{campaignId} bewerkt het — de campagne moet al een sjabloon hebben, anders wordt 400 geretourneerd.

Veld Vereist Beschrijving
name Ja Een naam voor het sjabloon.
language Ja Taalcode, bijvoorbeeld en, es, de, pt_BR, zh_CN.
body Ja De berichttekst, maximaal 1024 tekens.
variables Ja Geordende lijst met variabelenamen die in de body worden gebruikt. Geef een lege array door als het sjabloon er geen gebruikt.

cURL (maken)

curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/campaign/campaign123?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "welcome_message",
    "language": "en",
    "body": "Hi {{first_name}}, thanks for reaching out!",
    "variables": ["first_name"]
  }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates/campaign/campaign123", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    name: "welcome_message",
    language: "en",
    body: "Hi {{first_name}}, thanks for reaching out!",
    variables: ["first_name"],
  }),
});
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/campaign/campaign123",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "name": "welcome_message",
        "language": "en",
        "body": "Hi {{first_name}}, thanks for reaching out!",
        "variables": ["first_name"],
    },
)
data = res.json()

Antwoord

{
  "success": true,
  "campaign_status": "pending",
  "template_sid": "HXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "message": "WhatsApp template created and campaign updated successfully."
}

Om te bewerken, wijzigt u de methode naar PUT en gebruikt u dezelfde velden — dit dient het openingssjabloon (en de vervolgconcepten van de campagne, bij een WhatsApp API-campagne) opnieuw in voor beoordeling.

Een campagne die niet bij uw account hoort, retourneert 404; een campagne die bij een ander account hoort waarvoor u niet geautoriseerd bent, retourneert 403. Het bewerken van een campagne zonder bestaand sjabloon retourneert 400.


Een sjabloon naar een bestaande contactpersoon sturen

Een eenvoudiger, pad-gebaseerd alternatief voor Een sjabloon naar een contactpersoon sturen hierboven: zowel het sjabloon als de contactpersoon moeten al bestaan — er wordt niets op naam opgezocht of ter plekke aangemaakt.

POST /whatsapp-templates/{templateId}/send-to-contact

Veld Vereist Beschrijving
contactId Ja Het ID van de contactpersoon. Moet bij uw account horen.

cURL

curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/send-to-contact?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "contactId": "contact123" }'

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/send-to-contact",
  {
    method: "POST",
    headers: {
      "X-API-Key": "YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ contactId: "contact123" }),
  }
);
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/send-to-contact",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"contactId": "contact123"},
)
data = res.json()

Antwoord

{
  "success": true,
  "data": "WhatsApp template message sent successfully"
}

Credits: Het verzenden verbruikt credits, geprijsd op dezelfde manier als het bovenstaande eindpunt. Een contactId die ontbreekt of niet bij uw account hoort, retourneert 403; een templateId die niet bestaat, retourneert 404.


Een sjabloon in bulk verzenden

Verzend één sjabloon naar vele contactpersonen in één aanroep, met een kostenoverzicht dat u kunt tonen voordat u bevestigt.

Eerst de kosten schatten

Geeft de kosten van verzending terug, uitgesplitst per land van bestemming, zonder iets te verzenden of credits te verbruiken. De prijs voor sjablonen is per land van bestemming, dus dit moet aan de serverzijde worden berekend op basis van de werkelijke contacten in plaats van aan de clientzijde te worden geschat.

POST /whatsapp-templates/{templateId}/estimate-bulk-cost

Veld Vereist Beschrijving
contactIds Ja Contacten om te prijzen, maximaal 500 per aanroep. Duplicaten worden eenmaal geteld.

cURL

curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/estimate-bulk-cost?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "contactIds": ["contact123", "contact456"] }'

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/estimate-bulk-cost",
  {
    method: "POST",
    headers: {
      "X-API-Key": "YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ contactIds: ["contact123", "contact456"] }),
  }
);
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/estimate-bulk-cost",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"contactIds": ["contact123", "contact456"]},
)
data = res.json()

Antwoord

{
  "success": true,
  "data": {
    "countries": [
      {
        "countryCode": "1",
        "name": "United States",
        "iso": "US",
        "flag": "🇺🇸",
        "contactCount": 120,
        "costPerContact": 0.5,
        "subtotal": 60.0
      }
    ],
    "totalContacts": 120,
    "totalTemplateCost": 60.0,
    "templateCategory": "marketing",
    "skippedContacts": 2
  }
}

skippedContacts telt id’s die ontbraken, niet van jou waren of geen telefoonnummer bevatten — de schatting dekt alleen de rest, dus een waarde die niet nul is, betekent dat de werkelijke verzending minder contacten zal bereiken dan je hebt geselecteerd.

De batch verzenden

Verzendt het sjabloon naar elk contact in de lijst, waarbij eventuele slimme variabelen per contact worden opgelost en credits per verzending in rekening worden gebracht.

POST /whatsapp-templates/{templateId}/bulk-send

Veld Vereist Beschrijving
contactIds Ja Contacten om naar te verzenden, maximaal 5000 per aanroep.

cURL

curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/bulk-send?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "contactIds": ["contact123", "contact456"] }'

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/bulk-send",
  {
    method: "POST",
    headers: {
      "X-API-Key": "YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ contactIds: ["contact123", "contact456"] }),
  }
);
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/bulk-send",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"contactIds": ["contact123", "contact456"]},
)
data = res.json()

Antwoord

{
  "success": true,
  "data": { "sent": 118, "failed": 2, "total": 120 }
}

Een contact dat faalt (niet gevonden, niet op je account of een verzendfout) wordt overgeslagen en geteld in failed in plaats van de batch te stoppen. Een lege contactIds, meer dan 5000 id’s bij een verzending (500 bij een schatting) of een ontbrekende templateId retourneert 400.


Een mislukt bericht opnieuw proberen

Twee eindpunten voor het opnieuw verzenden van een mislukt bericht, zonder een nieuw berichtrecord aan te maken of opnieuw credits te verbruiken.

POST /whatsapp-templates/messages/{contactId}/{messageId}/retry-template probeert specifiek een mislukt sjabloonbericht opnieuw — het lost de sjablooninhoud opnieuw op vanuit de campagne als het mislukte bericht deze nog niet bevat. Alleen berichten met status failed en type template kunnen op deze manier opnieuw worden geprobeerd.

POST /whatsapp-templates/messages/{contactId}/{messageId}/retry is kanaalonafhankelijk en werkt voor elk mislukt niet-sjabloonbericht (bijvoorbeeld WhatsApp Web), waarbij het wordt verzonden naar het juiste verzendpad op basis van het kanaal van het bericht. Het accepteert status failed, failed_connection, limit_exceeded of queued_retry.

Geen van beide eindpunten vereist een aanvraagbody.

cURL

curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/messages/contact123/msg_abc789/retry-template?apiKey=YOUR_API_KEY"

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/messages/contact123/msg_abc789/retry-template",
  { method: "POST", headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/messages/contact123/msg_abc789/retry-template",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()

Antwoord

{
  "success": true,
  "data": "Message retry initiated successfully"
}

Voor de kanaalonafhankelijke versie, wissel het pad naar .../msg_abc789/retry. Een bericht waarvan de status niet in aanmerking komt voor een nieuwe poging, of (op het sjablooneindpunt) dat geen sjabloonbericht is, retourneert 400. Een ontbrekend contact of bericht retourneert 404.


WhatsApp Business-profiel

Beheer het WhatsApp Business-profiel (over, adres, beschrijving, e-mail, websites, bedrijfscategorie en logo) dat aan contacten op WhatsApp wordt getoond. Werkt zowel op een beheerde verbinding als op een account dat een eigen WhatsApp Business-account gebruikt.

Het profiel opslaan

PUT /whatsapp-templates/profile

Veld Vereist Beschrijving
phoneNumber Ja Het WhatsApp-nummer waar dit profiel bij hoort. Moet verbonden zijn met uw account.
about Nee Korte “Over”-tekst die op het profiel wordt getoond.
address Nee Bedrijfsadres.
description Nee Langere bedrijfsbeschrijving.
email Nee Contact-e-mailadres dat op het profiel wordt getoond.
websites Nee Array van website-URL’s. Elke URL moet geldig zijn.
vertical Nee Bedrijfscategorie, bijvoorbeeld Retail of Professional Services.
profilePictureHandle Nee De handle die wordt geretourneerd door het onderstaande endpoint voor het uploaden van afbeeldingen, om de profielfoto in te stellen.

cURL

curl -X PUT "https://api.youraiconnector.com/v1/whatsapp-templates/profile?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "phoneNumber": "+31612345678",
    "about": "We reply within a few hours",
    "email": "support@example.com",
    "websites": ["https://example.com"]
  }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates/profile", {
  method: "PUT",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    phoneNumber: "+31612345678",
    about: "We reply within a few hours",
    email: "support@example.com",
    websites: ["https://example.com"],
  }),
});
const data = await res.json();

Python

import requests

res = requests.put(
    "https://api.youraiconnector.com/v1/whatsapp-templates/profile",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "phoneNumber": "+31612345678",
        "about": "We reply within a few hours",
        "email": "support@example.com",
        "websites": ["https://example.com"],
    },
)
data = res.json()

Antwoord

{
  "success": true,
  "data": "WhatsApp Business profile updated successfully"
}

Een ontbrekende phoneNumber, een ongeldige website-URL of een phoneNumber die niet is verbonden met uw account resulteert in 400 of 404.

Een profielfoto uploaden

Downloadt een afbeelding van een URL die u opgeeft en uploadt deze naar WhatsApp, waarbij een handle wordt geretourneerd. Geef die handle door als profilePictureHandle bij de bovenstaande aanroep voor het opslaan van het profiel om deze als foto in te stellen — dit endpoint uploadt de afbeelding alleen, het stelt deze niet zelf in.

POST /whatsapp-templates/profile/picture

Veld Vereist Beschrijving
phoneNumber Ja Het WhatsApp-nummer waar dit profiel bij hoort.
fileUrl Ja Een publiek toegankelijke URL naar de afbeelding die geüpload moet worden.

cURL

curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/profile/picture?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "phoneNumber": "+31612345678",
    "fileUrl": "https://example.com/logo.png"
  }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates/profile/picture", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    phoneNumber: "+31612345678",
    fileUrl: "https://example.com/logo.png",
  }),
});
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/profile/picture",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "phoneNumber": "+31612345678",
        "fileUrl": "https://example.com/logo.png",
    },
)
data = res.json()

Antwoord

{
  "success": true,
  "data": "1234567890123456"
}

data is de handle van de geüploade afbeelding. Een ontbrekende phoneNumber of fileUrl, of een phoneNumber zonder WhatsApp-toegangstoken in het bestand, resulteert in 400; een onbereikbare of ongeldige fileUrl resulteert in een foutmelding die beschrijft waarom het downloaden is mislukt.


De status van een afzender controleren

Pollt (en ververst) de live verzendstatus van een verbonden WhatsApp-nummer bij de messaging-provider. Handig om te bevestigen dat een nummer daadwerkelijk kan verzenden voordat u erop vertrouwt.

GET /whatsapp-templates/sender-status/{phoneNumber}

cURL

curl "https://api.youraiconnector.com/v1/whatsapp-templates/sender-status/+31612345678" \
  -H "X-API-Key: YOUR_API_KEY"

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/sender-status/+31612345678",
  { headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();

Python

import requests

res = requests.get(
    "https://api.youraiconnector.com/v1/whatsapp-templates/sender-status/+31612345678",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()

Antwoord

{
  "success": true,
  "data": "ONLINE"
}

data is een van ONLINE (verzendt normaal), PENDING (wordt nog geverifieerd) of DELETED (de provider herkent deze afzender niet langer — verbind het nummer opnieuw). Een phoneNumber zonder WhatsApp-bedrijfsinformatie in het bestand resulteert in 404.


Genereer follow-up-sjablonen met AI

Het platform kan de WhatsApp follow-up-sjablonen van een campagne voor je schrijven — de herinneringen die worden verstuurd wanneer een gesprek stilvalt — op basis van de instructies en het doel van de campagne zelf. Er is één taak-endpoint dat op de achtergrond draait, plus drie oudere endpoints die behouden zijn voor bestaande integraties. Ze verbruiken allemaal AI-credits.

Start een generatietaak

POST /campaigns/{campaignId}/template-generation

Veld Vereist Beschrijving
type Nee all (de standaard) schrijft de volledige set follow-ups. cold_only schrijft alleen de berichten voor contacten die nooit hebben gereageerd.

cURL

curl -X POST "https://api.youraiconnector.com/v1/campaigns/campaign_abc123/template-generation?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "type": "all" }'

JavaScript

const res = await fetch(
  "https://api.youraiconnector.com/v1/campaigns/campaign_abc123/template-generation",
  {
    method: "POST",
    headers: {
      "X-API-Key": "YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ type: "all" }),
  }
);
const data = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/campaigns/campaign_abc123/template-generation",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"type": "all"},
)
data = res.json()

Antwoord (202)

{ "success": true, "campaign_id": "campaign_abc123", "type": "all" }

De aanroep keert terug zodra de taak in de wachtrij staat. Lees de campagne (GET /campaigns/{campaignId}, zie de Campaigns API) en houd het template_generation_status-object in de gaten totdat deze is voltooid:

Veld Beschrijving
status processing terwijl de taak draait, daarna completed of failed.
progress 0 tot 100.
current_template, total_templates Hoeveel sjablonen er tot nu toe zijn geschreven, van het totaal aantal dat de taak zal schrijven — 11 voor een uitgaande of gecombineerde campagne, anders 9.
error Waarom een failed-taak is gestopt, bijvoorbeeld door onvoldoende credits.
started_at, completed_at Wanneer de taak begon en eindigde.

De gegenereerde sjablonen komen net als alle andere op de campagne terecht, dus ze verschijnen in Sjablonen weergeven en moeten nog steeds door WhatsApp-goedkeuring voordat ze kunnen worden verzonden. Een 400 betekent dat type iets anders was dan all of cold_only; een 404 betekent dat de campagne niet bestaat of bij een ander account hoort.

Agents hebben een tegenhanger van deze aanroep, POST /agents/{agentId}/template-generation, die de follow-ups voor een Agent schrijft en in het normale geval tijdens de aanroep wordt voltooid — zie Follow-up-berichten genereren in de AI Agents API.

De oudere generatie-endpoints

Drie eerdere endpoints doen hetzelfde werk en worden behouden zodat bestaande integraties blijven werken. Nieuwe code moet het bovenstaande taak-endpoint gebruiken.

Endpoint Wat het doet
POST /whatsapp-templates/campaign/{campaignId}/generate-async Start de follow-up-generatie voor de campagne op de achtergrond en retourneert 202 met { "success": true, "data": { "result": "success", "message": "..." } }. Credits worden vooraf in rekening gebracht (overgeslagen bij een account dat een eigen AI-sleutel meebrengt) en het template_generation_status van de campagne rapporteert de voortgang precies zoals hierboven.
POST /whatsapp-templates/campaign/{campaignId}/generate-followups Genereert alle negen follow-up-sjablonen tijdens de aanroep — voor een campagne die is aangemaakt voordat automatische follow-ups bestonden, of een campagne die opnieuw moet worden geschreven — en retourneert 200 met templatesGenerated in data.
POST /whatsapp-templates/agent/{agentId}/generate-followups Dezelfde synchrone generatie als geadresseerd door Agent. Het antwoord voegt agent_id, campaign_id en target toe: "campaign" wanneer de sjablonen op de campagne van de Agent zijn geschreven, "agent" (met campaign_id: null) wanneer de Agent geen campagne heeft en ze op de Agent zelf zijn opgeslagen. Een ontbrekende of vreemde Agent is een 404.

Alle drie vereisen automatische follow-ups op het account en voldoende credits — een 400 benoemt welke ontbreekt — en het paar dat op de campagne is gericht, retourneert 403 wanneer de campagne bij een ander account hoort.


Fouten in de Templates API

Template-endpoints retourneren de standaard fouten-envelop:

{
  "success": false,
  "error": "Template not found"
}

Een 404 op deze eindpunten betekent meestal dat de resource niet is gevonden — ofwel deze bestaat niet, ofwel deze behoort tot een ander account. Een paar eindpunten (het aanmaken/bijwerken met campagne-scope, en verzendingen naar een bestaand contact) retourneren in plaats daarvan 403 wanneer de campagne of het contact toebehoort aan iemand anders in plaats van helemaal niet te bestaan. Sommige eindpunten bevatten ook een error_code-veld dat de HTTP-status weerspiegelt. De gedeelde codes die elk eindpunt kan retourneren — 400, 401, 403 (uw abonnement bevat geen API-toegang), 429 (snelheidslimiet) en 500 — worden vermeld met richtlijnen voor opnieuw proberen in Fouten & Paginering.


Volgende stappen