Get an SMS template version
/v1/sms/templates/{template_ref}/versions/{version_id}const version = await bird.smsTemplates.versions.get(
"bird_otp_verification",
"smv_01ky4x8e4genzb7way45txfkm1",
);
console.log(version.id, Object.keys(version.languages));version = client.sms_templates.versions.get(
"bird_otp_verification", "smv_01ky4x8e4genzb7way45txfkm1"
)
print(version.id, list(version.languages))version, err := client.SmsTemplates.Versions.Get(context.Background(), "bird_otp_verification", "smv_01ky4x8e4genzb7way45txfkm1")
if err != nil {
log.Fatal(err)
}
if version.Languages == nil {
log.Fatal("version has no languages")
}
fmt.Println(version.Id, len(*version.Languages))$version = $bird->smsTemplates->versions->get(
'bird_otp_verification',
'smv_01ky4x8e4genzb7way45txfkm1',
);
echo $version->getId(), ' ', count($version->getLanguages() ?? []);bird sms templates versions get <template-ref> <version-id>curl -X GET "https://us1.platform.bird.com/v1/sms/templates/{template_ref}/versions/{version_id}" \
-H "Authorization: Bearer $TOKEN"{
"id": "smv_01krdgeqcxet5s7t44vh8rt9mg",
"template_id": "smt_01krdgeqcxet5s7t44vh8rt9mg",
"version_number": 1,
"status": "published",
"revision": 1,
"variables": [
{
"key": "order_number",
"type": "text",
"required": true,
"constraint": "A string, number, or boolean."
}
],
"languages": {
"en": {
"text": "Your order {{ order_number }} is on its way.",
"revision": 1,
"content_hash": "sha256:3d948846f5f773fb7bed8ab81b57f3d0ff2cbff24cb549718f4d389f1ab0300a",
"updated_at": "2026-09-10T09:00:00Z"
}
},
"default_language": "en",
"created_at": "2026-09-10T09:00:00Z",
"published_at": "2026-09-10T09:00:00Z"
}
Returns one version with its variables and text in every language. A workspace draft is editable, while published workspace versions are immutable. A built-in template exposes its current catalogue content through a synthetic published version.
Parameters
template_refstringThe template's ID (smt_…) or slug.
version_idstringThe version to read or reset.
Response Payload
idTemplate version ID.
template_idThe template this version belongs to.
version_numberSequential publication number. Null for the draft; a built-in template reports 1.
statusWhether the version is the editable draft or published. Published workspace versions are immutable and remain published after a later version goes live. A built-in template's synthetic published version projects the current catalogue entry.
Possible values: draft, published
revisionThe version revision. A draft revision advances with each metadata or content change. Published workspace versions are frozen; a built-in template's synthetic version reports 0.
variablesVariables inferred from the version's text. Every language in a publishable SMS version uses the same set. Built-in templates may apply additional typed constraints described by each variable.
Show child attributes
variables.keyThe key this slot is filled by. When system is true it is the reserved bird key or a dotted path beneath it, such as bird.contact.first_name, and naming it in a send is rejected. Otherwise, on email and SMS it is the key you set in the send's parameters object, and on WhatsApp the name on the matching parameter inside components, or, in the template parameters preview, the key in the send's template.parameters. A WhatsApp template whose placeholders are positional uses the position itself as 1, 2 and so on, and values with no placeholder use fixed keys: header_url, header_filename, header_location and code, plus button_url (or button_url_1, button_url_2 for a carousel card) for a url button whose suffix is numbered.
variables.typeThe value type this slot accepts. Each typed slot rejects a value that does not match its constraint. Built-in SMS templates use typed slots (code, amount and the rest); domain is a lowercase DNS domain name such as example.com, which the verification templates fill to bind a passcode to a website, and app_hash is an 11-character Android SMS Retriever app hash such as FA+9qCX9VSu, which they fill to bind it to an Android app. Apple Messages templates type a variable from its content: the field it fills (url, image, timestamp, location, timezone) or the formatting filter applied to it (date, date_time, amount, currency). Email and workspace SMS templates use text. WhatsApp templates use text, plus url for a media header's file and location for a location header. A location value is an object with latitude and longitude, and optionally name and address. On Apple Messages, name becomes the location's title and address is not shown. Workspace SMS parameters must be scalar values.
Possible values (may grow over time): code, ttl, count, ref, date, date_time, amount, currency, domain, app_hash, url, image, timestamp, timezone, location, text
variables.requiredWhether the send must supply this variable. Omitting a required value returns 422 on every channel. On Apple Messages, a later time slot's start that is used nowhere else is optional: a send that omits it drops that slot. Always false when system is true, because you do not supply that slot's value.
variables.constraintA plain-language description of what values this variable accepts. When system is true it names where Bird takes the value from instead, because there is no value for you to send.
variables.sensitiveWhether this slot's value is redacted from stored message content. A placeholder replaces the sensitive value in message history; transport queues can still carry the text needed for delivery.
variables.systemWhether the value comes from Bird rather than from the send. Absent means false. System slots are identified by the reserved bird key or a dotted path beneath it. They appear on email templates, and, in the template parameters preview, on WhatsApp templates whose parameter bindings read contact data; every SMS slot is yours to fill. A draft can also name a reserved key no Bird value fills, including bird itself: constraint says so, and publishing that draft is rejected.
languagesFull content for each language, keyed by canonical BCP-47 tag.
default_languageThe language this version treats as its default.
created_atWhen the version was created. Null for a built-in template's synthetic version.
published_atWhen the version was published. Null for the draft and for a built-in template's synthetic version.
Related resources
Continue with the documentation, guides and examples for this topic.