WhatsApp Business numbers: templates Meta reviews, writing first with an approved template (POST /inbox/conversations) and broadcasts to many numbers. Replies inside 24 hours go through the inbox. These accounts take no posts.
List templates
Section titled “List templates”/v1/accounts/{id}/whatsapp/templatesRead live from Meta, one entry per name and language.
Parameters
idstringrequired
Response 200
data []
idstringrequirednamestringrequiredlanguagestringrequiredcategorystringrequiredMARKETING, UTILITY or AUTHENTICATION.
statusstringrequiredMeta's verdict: PENDING, APPROVED, REJECTED, IN_APPEAL, PAUSED, DISABLED or PENDING_DELETION. Only APPROVED can be sent.
componentsobject[]required
curl "https://api.marsial.dev/v1/accounts/acc_3k9x2m/whatsapp/templates" \ -H "Authorization: Bearer $MARSIAL_API_KEY"const res = await fetch('https://api.marsial.dev/v1/accounts/acc_3k9x2m/whatsapp/templates', { headers: { Authorization: `Bearer ${process.env.MARSIAL_API_KEY}`, },});const { data } = await res.json();import os, requests
res = requests.get( "https://api.marsial.dev/v1/accounts/acc_3k9x2m/whatsapp/templates", headers={"Authorization": f"Bearer {os.environ['MARSIAL_API_KEY']}"},)data = res.json()["data"]Create a template
Section titled “Create a template”/v1/accounts/{id}/whatsapp/templatesMeta reviews it (up to 24 hours): it starts as PENDING and can only be sent once APPROVED. The category decides what Meta charges for each message.
Parameters
idstringrequired
Body
namestringrequiredcategorystringrequiredlanguagestringrequiredMeta language code, e.g. es, en_US, pt_BR.
componentsobject[]requiredMeta's components: a BODY with its text ({{1}}, {{2}}…) and an example for each placeholder, plus optional HEADER, FOOTER and BUTTONS.
Response 201
data
idstringrequirednamestringrequiredlanguagestringrequiredcategorystringrequiredMARKETING, UTILITY or AUTHENTICATION.
statusstringrequiredMeta's verdict: PENDING, APPROVED, REJECTED, IN_APPEAL, PAUSED, DISABLED or PENDING_DELETION. Only APPROVED can be sent.
componentsobject[]required
curl -X POST "https://api.marsial.dev/v1/accounts/acc_3k9x2m/whatsapp/templates" \ -H "Authorization: Bearer $MARSIAL_API_KEY"const res = await fetch('https://api.marsial.dev/v1/accounts/acc_3k9x2m/whatsapp/templates', { method: 'POST', headers: { Authorization: `Bearer ${process.env.MARSIAL_API_KEY}`, },});const { data } = await res.json();import os, requests
res = requests.post( "https://api.marsial.dev/v1/accounts/acc_3k9x2m/whatsapp/templates", headers={"Authorization": f"Bearer {os.environ['MARSIAL_API_KEY']}"},)data = res.json()["data"]Delete a template
Section titled “Delete a template”/v1/accounts/{id}/whatsapp/templates/{name}Every language of the name, or only language.
Parameters
idstringrequirednamestringrequiredlanguagestring
Response 204
No content
curl -X DELETE "https://api.marsial.dev/v1/accounts/acc_3k9x2m/whatsapp/templates/pedido_listo" \ -H "Authorization: Bearer $MARSIAL_API_KEY"await fetch('https://api.marsial.dev/v1/accounts/acc_3k9x2m/whatsapp/templates/pedido_listo', { method: 'DELETE', headers: { Authorization: `Bearer ${process.env.MARSIAL_API_KEY}`, },});import os, requests
requests.delete( "https://api.marsial.dev/v1/accounts/acc_3k9x2m/whatsapp/templates/pedido_listo", headers={"Authorization": f"Bearer {os.environ['MARSIAL_API_KEY']}"},)Write first with a template
Section titled “Write first with a template”/v1/inbox/conversationsOpens a WhatsApp conversation (or continues one after 24 hours of silence) with an APPROVED template. Their answer arrives in the inbox and as message.received; from then on reply with POST /inbox/conversations/{id}/messages for 24 hours.
Body
accountIdstringrequiredThe WhatsApp account to write from.
phonestringrequiredWho to write to.
templateobjectrequiredAn APPROVED template: the only way to write first, or after 24 hours of silence.
template
namestringrequiredlanguagestringrequiredparamsstring[]Values for the placeholders, in order: header, body, then URL buttons.
Response 201
data
conversationIdstring | nullrequiredThe conversation in the inbox (cnv_…): replies arrive there.
curl -X POST "https://api.marsial.dev/v1/inbox/conversations" \ -H "Authorization: Bearer $MARSIAL_API_KEY"const res = await fetch('https://api.marsial.dev/v1/inbox/conversations', { method: 'POST', headers: { Authorization: `Bearer ${process.env.MARSIAL_API_KEY}`, },});const { data } = await res.json();import os, requests
res = requests.post( "https://api.marsial.dev/v1/inbox/conversations", headers={"Authorization": f"Bearer {os.environ['MARSIAL_API_KEY']}"},)data = res.json()["data"]List broadcasts
Section titled “List broadcasts”/v1/accounts/{id}/whatsapp/broadcastsWith how many recipients each reached, read and failed.
Parameters
idstringrequired
Response 200
data []
idstringrequiredOpaque broadcast id (bcs_…).
accountIdstringrequirednamestringrequiredstatusstringrequireddraft, scheduled, sending, completed, failed or cancelled.
templatestringscheduledAtstringrecipientCountintegerrequiredsentCountintegerrequireddeliveredCountintegerrequiredreadCountintegerrequiredfailedCountintegerrequiredcreatedAtstring
curl "https://api.marsial.dev/v1/accounts/acc_3k9x2m/whatsapp/broadcasts" \ -H "Authorization: Bearer $MARSIAL_API_KEY"const res = await fetch('https://api.marsial.dev/v1/accounts/acc_3k9x2m/whatsapp/broadcasts', { headers: { Authorization: `Bearer ${process.env.MARSIAL_API_KEY}`, },});const { data } = await res.json();import os, requests
res = requests.get( "https://api.marsial.dev/v1/accounts/acc_3k9x2m/whatsapp/broadcasts", headers={"Authorization": f"Bearer {os.environ['MARSIAL_API_KEY']}"},)data = res.json()["data"]Send or schedule a broadcast
Section titled “Send or schedule a broadcast”/v1/accounts/{id}/whatsapp/broadcastsAn APPROVED template to a list of numbers, now or at scheduledFor. Each recipient is one outbound message; Meta charges its template fee to your WhatsApp Business account. A new number reaches at most 250 people a day until Meta raises its tier.
Parameters
idstringrequired
Body
namestringrequiredtemplateobjectrequiredtemplate
namestringrequiredlanguagestringrequiredvariablesobject | object[]What fills {{1}}, {{2}}… for each recipient: one of their fields, or the same value for all.
variables
fieldstringrequired
phonesstring[]requiredRecipients with their country code.
scheduledForstring (date-time)Send at this time; now when omitted.
Response 201
data
idstringrequiredOpaque broadcast id (bcs_…).
accountIdstringrequirednamestringrequiredstatusstringrequireddraft, scheduled, sending, completed, failed or cancelled.
templatestringscheduledAtstringrecipientCountintegerrequiredsentCountintegerrequireddeliveredCountintegerrequiredreadCountintegerrequiredfailedCountintegerrequiredcreatedAtstring
curl -X POST "https://api.marsial.dev/v1/accounts/acc_3k9x2m/whatsapp/broadcasts" \ -H "Authorization: Bearer $MARSIAL_API_KEY"const res = await fetch('https://api.marsial.dev/v1/accounts/acc_3k9x2m/whatsapp/broadcasts', { method: 'POST', headers: { Authorization: `Bearer ${process.env.MARSIAL_API_KEY}`, },});const { data } = await res.json();import os, requests
res = requests.post( "https://api.marsial.dev/v1/accounts/acc_3k9x2m/whatsapp/broadcasts", headers={"Authorization": f"Bearer {os.environ['MARSIAL_API_KEY']}"},)data = res.json()["data"]Cancel a broadcast
Section titled “Cancel a broadcast”/v1/accounts/{id}/whatsapp/broadcasts/{broadcastId}/cancelA scheduled one, or what is left of one being sent. Messages already sent stay sent.
Parameters
idstringrequiredbroadcastIdstringrequired
Response 204
No content
curl -X POST "https://api.marsial.dev/v1/accounts/acc_3k9x2m/whatsapp/broadcasts/bcs_…/cancel" \ -H "Authorization: Bearer $MARSIAL_API_KEY"const res = await fetch('https://api.marsial.dev/v1/accounts/acc_3k9x2m/whatsapp/broadcasts/bcs_…/cancel', { method: 'POST', headers: { Authorization: `Bearer ${process.env.MARSIAL_API_KEY}`, },});const { data } = await res.json();import os, requests
res = requests.post( "https://api.marsial.dev/v1/accounts/acc_3k9x2m/whatsapp/broadcasts/bcs_…/cancel", headers={"Authorization": f"Bearer {os.environ['MARSIAL_API_KEY']}"},)data = res.json()["data"]© 2026 Marsial by TWOFACES ·marsial.dev ·Dashboard ·soporte@twofacesco.com