Créer un template

POST /v1/templates : corps, exemples, en-tête image, boutons, et soumission à Meta.

Créer et soumettre un template

POST /v1/templates — scope templates:write

Soumet un template pour revue Meta. Retourne la ligne créée au statut PENDING. Sondez GET /v1/templates jusqu'à APPROVED avant l'envoi.

Paramètres

ParamètreTypeRequisDescription
namestringOuiNom du template (minuscules, chiffres et _). Unique par langue.
languagestringOuiCode langue, ex. en, fr, en_US.
categorystringOuiUTILITY, AUTHENTICATION ou MARKETING.
body_textstringOuiLe corps, avec {{1}}, {{2}}… ou {{nom}} pour les variables.
example_valuesstring[]OuiUne valeur d'exemple par variable, dans l'ordre (requis par Meta).
footer_textstringNonPied de page court, sans variable.
buttonsobject[]NonMax 2 boutons du même type (voir plus bas).
header_media_base64stringNonÉchantillon d'en-tête encodé en base64, pour un en-tête IMAGE, DOCUMENT (ex. un PDF) ou VIDEO. Ancien nom encore accepté : header_image_base64. Exige header_media_mime.
header_media_mimestringNonType MIME de l'échantillon (voir le tableau des formats acceptés ci-dessous). OBLIGATOIRE dès que header_media_base64 est fourni — c'est lui qui détermine le format Meta (IMAGE, DOCUMENT ou VIDEO), et l'omettre renvoie 422 plutôt que de deviner. Ancien nom accepté : header_image_mime.

Requête

curl -X POST https://wa-api.geskap.com/v1/templates \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "order_update",
    "language": "en",
    "category": "UTILITY",
    "body_text": "Hi {{1}}, your order {{2}} is confirmed.",
    "example_values": ["Jean", "#8842"],
    "footer_text": "Geskap"
  }'

Réponse (201)

{
  "name": "order_update",
  "language": "en",
  "status": "PENDING",
  "category": "UTILITY",
  "variables_count": 2
}

En-tête média et boutons

Un en-tête média se fournit via header_media_base64 + header_media_mime. Les deux vont ensemble : le MIME décide du format de l'en-tête (IMAGE, DOCUMENT ou VIDEO), et chaque envoi devra ensuite fournir une URL du MÊME format — sinon Meta refuse le message avec l'erreur #132012. Les boutons (max 2) sont soit des liens URL, soit des réponses rapides — ne mélangez pas les deux types.

Format d'en-têteTypes MIME acceptésTaille max
IMAGEimage/jpeg, image/png5 Mo
VIDEOvideo/mp4, video/3gpp16 Mo
DOCUMENTapplication/pdf, text/plain, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-powerpoint, application/vnd.openxmlformats-officedocument.presentationml.presentation16 Mo (échantillon)
Attention — Le WebP n'est pas accepté en en-tête
image/webp est une image, mais WhatsApp ne l'accepte QUE dans les autocollants — jamais en en-tête de modèle. Convertissez en PNG ou JPEG. Le GIF n'est pas accepté non plus. Nous refusons ces types à la création (422) plutôt que de vous laisser attendre un rejet Meta sans explication.
Note — L'échantillon n'est pas le fichier envoyé
header_media_base64 ne transporte que l'ÉCHANTILLON soumis à Meta pour la revue du modèle — un exemple. À chaque envoi, le vrai fichier voyage par URL (header_document_url, header_image_url) et c'est Meta qui va le chercher : il doit donc être accessible publiquement. Meta accepte jusqu'à 100 Mo pour un document envoyé ; l'échantillon, lui, est plafonné à 16 Mo, car il transite encodé dans le corps de la requête.

Boutons

// bouton URL
{ "kind": "url", "text": "Suivre", "url": "https://exemple.com/suivi" }
// bouton réponse rapide
{ "kind": "quick_reply", "text": "Confirmer" }
Important — Meta interdit les liens wa.me
Un lien wa.me / WhatsApp dans un bouton URL est rejeté par Meta (code 2388081). Utilisez un bouton quick_reply à la place.