Create Template Drafts & Meta Submissions ยท WABPO Developer Documentation
Language ๐บ๐ธ English โผ WABPO-docs / Docs / Templates / Create Template Drafts & Meta Submissions Create Template Drafts & Meta Submissions Build dynamic WhatsApp templates utilizing structured elements like text, buttons, lists, links, media attachments (images/videos), and carousels. Manage your layouts locally as drafts during development or dispatch them to Meta for prompt verification.
Section: Create & Submit WhatsApp Templates Use these endpoints to build and submit WhatsApp message templates. Templates must be approved by Meta before you can send them to customers.
Integration Workflow Save Draft: Call POST /templates with submitToMeta: false to save the template configuration in WABPO. Review/Edit: (Optional) Let your users modify the draft inside your own application interface. Submit to Meta: Call Not finding what you are looking for? Chat with us or send us an email.
ยฉ 2026 WABPO-docs Help Center
Crafted with love by Spadasoft
POST /templates/:id/submit
to route the final draft to Meta for official review.
1. Create Template Draft Saves a template configuration locally in WABPO without triggering Meta's review process.
HTTP Method: POST URL: https://api.wabpo.com/api/v1/public/templates Headers: HTTP Authorization: Bearer YOUR_API_KEY Content-Type: application/json Field Type Required Description projectId String Yes The project ID returned during customer provisioning or number claiming. category String Yes Options: UTILITY, MARKETING, or AUTHENTICATION. language String Yes Two-letter language and country code (e.g., "en_US", "es_MX"). templateName String Yes Unique identifier. Use lowercase letters, numbers, and underscores only (e.g., "order_confirmation"). templateType String Yes Options: TEXT, IMAGE, VIDEO, DOCUMENT, CAROUSEL, or LOCATION. templateFormat String Yes The core body text. Use {{variable_name}} for dynamic placeholders. interactiveActionType String Yes Options: NONE, CALL_TO_ACTIONS, QUICK_REPLIES, or ALL. submitToMeta Boolean No Set to false to explicitly save as a local draft. Defaults to false. templateHeader String Conditional Text header for TEXT types. For IMAGE, VIDEO, or DOCUMENT, pass a public media URL. sampleValues Array Conditional Meta requires example key-value pairs for every placeholder used in the body or variables.
Payload Core Examples (By Template Type) Example A: Text Draft with Interactive Actions ( CALL_TO_ACTIONS & QUICK_REPLIES )
Use this configuration to add interactive buttons, tracking links, phone numbers, and quick reply buttons to a text message.
{
"projectId": "PROJECT_ID",
"category": "UTILITY",
"language": "en_US",
"templateName": "order_actions",
"templateType": "TEXT",
"templateHeader": "Order update",
"templateFormat": "Hi {{first_name}}, order {{order_number}} is ready. Track it or call us for help.",
"templateFooter": "Thanks for shopping with us.",
"interactiveActionType": "ALL",
"callToActions": [
{
"id": "track_order",
"type": "URL",
"buttonTitle": "Track Order",
"value": "https://example.com/orders/{{order_number}}"
},
{
"id": "call_support",
"type": "PHONE_NUMBER",
"buttonTitle": "Call Support",
"value": "+15551234567"
}
],
"quickReplies": [
{ "id": "need_help", "buttonTitle": "Need help" },
{ "id": "all_good", "buttonTitle": "All good" }
],
"sampleValues": [
{ "placeholder": "{{first_name}}", "value": "Saif" },
{ "placeholder": "{{order_number}}", "value": "ORD-1001" }
],
"submitToMeta": false
}
Example B: Media Draft ( IMAGE , VIDEO , or DOCUMENT )
For media layouts, templateHeader must contain a direct, publicly accessible media URL or a valid WABPO sample media key that Meta can download during verification.
{
"projectId": "PROJECT_ID",
"category": "MARKETING",
"language": "en_US",
"templateName": "summer_offer_image",
"templateType": "IMAGE",
"templateHeader": "https://cdn.example.com/samples/summer-offer.jpg",
"templateFormat": "Hi {{first_name}}, this week's offer is ready for you.",
"templateFooter": "Limited availability.",
"interactiveActionType": "CALL_TO_ACTIONS",
"callToActions": [
{
"id": "shop_now",
"type": "URL",
"buttonTitle": "Shop Now",
"value": "https://example.com/offers"
}
],
"sampleValues": [
{ "placeholder": "{{first_name}}", "value": "Saif" }
],
"submitToMeta": false
}
Example C: Carousel Draft
Carousels let you send a scrollable card index. Each item inside carouselCards supports its own media header, distinct text body, and individual button actions.
{
"projectId": "PROJECT_ID",
"category": "MARKETING",
"language": "en_US",
"templateName": "product_carousel_offer",
"templateType": "CAROUSEL",
"templateFormat": "Hi {{first_name}}, here are products you may like.",
"interactiveActionType": "ALL",
"carouselCards": [
{
"id": "card_1",
"mediaType": "IMAGE",
"mediaHeader": "https://cdn.example.com/samples/product-1.jpg",
"bodyText": "Premium bottle - {{price_1}}",
"callToActions": [
{ "id": "view_1", "type": "URL", "buttonTitle": "View", "value": "https://example.com/products/1" }
],
"quickReplies": [
{ "id": "ask_1", "buttonTitle": "Ask about this" }
]
},
{
"id": "card_2",
"mediaType": "IMAGE",
"mediaHeader": "https://cdn.example.com/samples/product-2.jpg",
"bodyText": "Travel bag - {{price_2}}",
"callToActions": [
{ "id": "view_2", "type": "URL", "buttonTitle": "View", "value": "https://example.com/products/2" }
],
"quickReplies": []
}
],
"sampleValues": [
{ "placeholder": "{{first_name}}", "value": "Saif" },
{ "placeholder": "{{price_1}}", "value": "$29" },
{ "placeholder": "{{price_2}}", "value": "$49" }
],
"submitToMeta": false
}
Example D: Authentication / OTP Draft
Authentication templates route verification codes. When submitted, Meta replaces the standard formatting with their restricted security layout. You must include expirationWarningMinutes , addSecurityDisclaimer , and a COPY_CODE action button.
{
"projectId": "PROJECT_ID",
"category": "AUTHENTICATION",
"language": "en_US",
"templateName": "otp_verification_new",
"templateType": "TEXT",
"templateFormat": "Your verification code is {{verification_code}}.",
"interactiveActionType": "CALL_TO_ACTIONS",
"addSecurityDisclaimer": true,
"expirationWarningMinutes": 10,
"callToActions": [
{
"id": "copy_code",
"type": "COPY_CODE",
"buttonTitle": "Copy Code",
"value": "{{verification_code}}"
}
],
"sampleValues": [
{ "placeholder": "{{verification_code}}", "value": "123456" }
],
"submitToMeta": false
}
Example: Success Response ( 201 Created )
{
"success": true,
"data": {
"id": "TEMPLATE_ID",
"projectId": "PROJECT_ID",
"templateName": "order_confirmation",
"category": "UTILITY",
"templateType": "TEXT",
"status": "DRAFT",
"syncStatus": "local",
"metaTemplateId": null,
"metaStatus": null,
"metaStatusReason": null,
"rejectionReason": null
}
}
Pushes a previously saved local draft directly to Meta for verification and approval.
HTTP Method: POST URL: https://api.wabpo.com/api/v1/public/templates/TEMPLATE_ID/submit Headers: HTTP Authorization: Bearer YOUR_API_KEY Content-Type: application/json This endpoint does not require a request body. Pass an empty JSON object.
Example: Success Response ( 200 OK )
{
"success": true,
"data": {
"id": "TEMPLATE_ID",
"projectId": "PROJECT_ID",
"templateName": "order_confirmation",
"category": "UTILITY",
"templateType": "TEXT",
"status": "PENDING",
"syncStatus": "synced",
"metaTemplateId": "1234567890",
"metaStatus": "PENDING",
"metaStatusReason": null,
"rejectionReason": null
}
}
๐ Note: Once submitted, the status and metaStatus switch to PENDING . Meta approval times range from a few minutes to 24 hours. Use the Template Retrieval or Webhook APIs to check for status changes before sending messages.