List available message templates
/v1/whatsapp/templatesfor await (const tpl of bird.whatsapp.templates.list()) {
console.log(tpl.slug, tpl.status, tpl.available_languages);
}for tpl in client.whatsapp.templates.list():
print(tpl.slug, tpl.status)for tpl, err := range client.Whatsapp.Templates.List(context.Background(), bird.WhatsappTemplatesListParams{}) {
if err != nil {
log.Fatal(err)
}
fmt.Println(tpl.Id, *tpl.Slug, *tpl.Status)
}foreach ($bird->whatsapp->templates->list() as $template) {
echo $template->getSlug(), ' ', $template->getStatus(), "\n";
}bird whatsapp templates listcurl -X GET "https://us1.platform.bird.com/v1/whatsapp/templates" \
-H "Authorization: Bearer $TOKEN" \
--url-query "limit=25"{
"data": [
{
"id": "wat_01krdgeqcxet5s7t44vh8rt9mg",
"slug": "bird_otp",
"name": "Order update",
"description": "Sent when an order ships.",
"scope": "system",
"waba": "102290129340398",
"category": "authentication",
"status": "active",
"default_language": "pt-BR",
"on_missing_language": "fallback",
"language_source_required": false,
"available_languages": [
"pt-BR"
],
"languages": {
"en": {
"status": "approved"
}
},
"draft_version_id": "wav_01krdgeqcxet5s7t44vh8rt9mg",
"live_version_id": "wav_01krdgeqcxet5s7t44vh8rt9mg",
"pending_version_id": "wav_01krdgeqcxet5s7t44vh8rt9mg",
"last_submitted_at": "2026-07-26T16:40:00Z",
"next": [
{
"kind": "operation"
}
]
}
],
"next_cursor": "eyJ2IjoxLCJzIjoiXCIyMDI2LTA1LTI1VDE0OjAzOjEwWlwiIiwiaSI6IjAxOTJmM2IxLTRjN2UtN2EyYi05ZDYxLThmM2E1YzJlN2I0MCJ9",
"prev_cursor": null,
"refresh_cursor": "eyJ2IjoxLCJzIjoiXCIyMDI2LTA1LTI1VDE2OjQyOjAxWlwiIiwiaSI6IjAxOTJmM2IxLTllMDQtN2NkMy1iODE3LTJhNmY0ZDFjOGUwOSJ9"
}
Returns the WhatsApp message templates available to your workspace: both the workspace's own templates (scope: workspace) and our built-in, Meta-approved templates (scope: system); filter to one tier with scope. Each entry carries the template's slug (the handle you reference when sending), its aggregated status, and the languages a send can currently resolve. It also summarizes where every language stands at Meta, so a list page can show an accurate row without another request. Content is not here: it lives under a version. The list is cursor-paginated. With no scope, the workspace's own templates come first, newest first, followed by our built-in templates.
Paramètres de requête
wabastringFilter to a single WhatsApp Business Account by its Meta WABA ID: the same value each template reports in its own waba field. Our built-in templates belong to no account and are never returned when this is set, and an account your workspace does not hold returns an empty page.
statusarrayFilter by lifecycle status. Repeat the parameter to match any of several. Our built-in templates are always active.
scopestringFilter by ownership tier: system for the built-in, Meta-approved template catalog, or workspace for the workspace's own templates. Omit to return both.
Possible values: system, workspace
categorystringFilter by template category.
Possible values (may grow over time): authentication, utility, marketing
qstringA case-insensitive substring search across the template's slug, name, and description.
limitintegerMaximum number of items to return per page.
starting_afterstringCursor from the next_cursor field of a previous list response. Returns items immediately after the cursor position in the current sort order.
ending_beforestringCursor from the prev_cursor or refresh_cursor field of a previous list response. Returns items immediately before the cursor position in the current sort order. prev_cursor returns the preceding page. refresh_cursor anchors at the first row of that response, which on a newest-first sort is how to fetch the items that have appeared since.
Contenu de la réponse
dataPage of templates available to your workspace.
next_cursorCursor for the next page. Pass back as starting_after to advance forward. null when no next page exists.
prev_cursorCursor for the previous page. Pass back as ending_before to step backward. null when no previous page exists.
refresh_cursorRefresh anchor, the first row of this response. Pass back as ending_before to fetch what precedes it in the current sort order. On a newest-first sort those are the items that have appeared since; on any other sort they are the items that sort earlier, so refreshing such a list means re-fetching it instead. Non-null whenever data is non-empty; null only on an empty page. Distinct from prev_cursor.
Ressources associées
Poursuivez avec la documentation, les guides et les exemples sur ce sujet.