NetBird
whatsapp_send
Send one WhatsApp message to a single recipient, carrying exactly one kind of content: a template, or free-form text, image, video, audio, sticker, document or location. A template is the only content deliverable outside an open 24-hour customer service window. For a Bird-managed template Bird selects the sender number, so omit from; every other send requires from and it must be a number your workspace owns. `whatsapp_templates_list` carries the names a template send accepts, with the languages each template can currently resolve. The response is the accepted message with its id; delivery is asynchronous, so use whatsapp_get to check delivery status.
Remote (network-hosted)
Other tools also called whatsapp_send?
See providers with this name
Input Schema
{
"type": "object",
"properties": {
"to": {
"type": "string",
"description": "The message recipient: a phone number in E.164 format (for example +31612345678), or the recipient's business-scoped user ID (for example US.13491208655302741918), which addresses a WhatsApp user whose phone number you do not have. A value that is neither returns a 422 WhatsAppInvalidRecipient. One-time-passcode templates require a phone number and return a 422 WhatsAppRecipientNotSupportedForTemplate when sent to a business-scoped user ID."
},
"from": {
"type": "string",
"description": "The business phone number to send from, in E.164 format. Omit it for a Bird-managed template, which selects its own number from its category: setting it there returns a 422 WhatsAppSenderNotAllowed. Every other send, whether free-form content of any kind or a template your workspace authored, requires it, and the number must be one this workspace owns. Omitting it returns a 422 WhatsAppSenderRequired, and naming a number this workspace cannot send from returns a 422 WhatsAppSenderNotFound. Naming a number this workspace owns but that sits on a different WhatsApp Business Account than an authored template returns a 422 WhatsAppSenderWABAMismatch. A number this workspace holds but has not finished connecting returns a 422 WhatsAppSenderNotConnected."
},
"tags": {
"type": "object",
"description": "Structured {name, value} labels for filtering. Tags become first-class query dimensions: filter the list endpoint by tag name. Maximum 20 tags per send. Use tags for low-cardinality dimensions (category, experiment_variant). For arbitrary structured context you do not need as a filter dimension, use metadata instead.",
"additionalProperties": {
"type": "string"
}
},
"text": {
"type": [
"null",
"object"
],
"required": [
"body"
],
"properties": {
"body": {
"type": "string"
},
"preview_url": {
"type": [
"null",
"boolean"
]
}
},
"description": "Free-form text to send instead of a template. Deliverable only inside an open 24-hour customer service window, which the contact opens by messaging or calling you and resets each time they do it again. We do not track the window, so a send outside one is accepted and then fails, with service_window_expired on the message's last_error.",
"additionalProperties": false
},
"audio": {
"type": [
"null",
"object"
],
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"voice": {
"type": [
"null",
"boolean"
]
}
},
"description": "Free-form audio to send instead of a template. Deliverable only inside an open 24-hour customer service window, which the contact opens by messaging or calling you and resets each time they do it again. We do not track the window, so a send outside one is accepted and then fails, with service_window_expired on the message's last_error.",
"additionalProperties": false
},
"image": {
"type": [
"null",
"object"
],
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"caption": {
"type": [
"null",
"string"
]
}
},
"description": "A free-form image to send instead of a template. Deliverable only inside an open 24-hour customer service window, which the contact opens by messaging or calling you and resets each time they do it again. We do not track the window, so a send outside one is accepted and then fails, with service_window_expired on the message's last_error.",
"additionalProperties": false
},
"video": {
"type": [
"null",
"object"
],
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"caption": {
"type": [
"null",
"string"
]
}
},
"description": "A free-form video to send instead of a template. Deliverable only inside an open 24-hour customer service window, which the contact opens by messaging or calling you and resets each time they do it again. We do not track the window, so a send outside one is accepted and then fails, with service_window_expired on the message's last_error.",
"additionalProperties": false
},
"sticker": {
"type": [
"null",
"object"
],
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
}
},
"description": "A free-form sticker to send instead of a template. Deliverable only inside an open 24-hour customer service window, which the contact opens by messaging or calling you and resets each time they do it again. We do not track the window, so a send outside one is accepted and then fails, with service_window_expired on the message's last_error.",
"additionalProperties": false
},
"document": {
"type": [
"null",
"object"
],
"required": [
"url"
],
"properties": {
"url": {
"type": "string"
},
"caption": {
"type": [
"null",
"string"
]
},
"filename": {
"type": [
"null",
"string"
]
}
},
"description": "A free-form document to send instead of a template. Deliverable only inside an open 24-hour customer service window, which the contact opens by messaging or calling you and resets each time they do it again. We do not track the window, so a send outside one is accepted and then fails, with service_window_expired on the message's last_error.",
"additionalProperties": false
},
"location": {
"type": [
"null",
"object"
],
"required": [
"latitude",
"longitude"
],
"properties": {
"name": {
"type": [
"null",
"string"
]
},
"address": {
"type": [
"null",
"string"
]
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
},
"description": "A free-form location to send instead of a template. Deliverable only inside an open 24-hour customer service window, which the contact opens by messaging or calling you and resets each time they do it again. We do not track the window, so a send outside one is accepted and then fails, with service_window_expired on the message's last_error.",
"additionalProperties": false
},
"metadata": {
"type": "object",
"description": "Arbitrary JSON object stored on the message and returned on API reads. Maximum 2 KB serialized. Use metadata for per-send context like internal IDs and foreign keys. For low-cardinality filterable labels, use tags instead.",
"additionalProperties": true
},
"template": {
"type": [
"null",
"object"
],
"properties": {
"id": {
"type": [
"null",
"string"
]
},
"slug": {
"type": [
"null",
"string"
]
},
"language": {
"type": [
"null",
"string"
]
},
"components": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"cards": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"required": [
"components"
],
"properties": {
"components": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"parameters": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"required": [
"type"
],
"properties": {
"url": {
"type": [
"null",
"string"
]
},
"name": {
"type": [
"null",
"string"
]
},
"text": {
"type": [
"null",
"string"
]
},
"type": {
"type": "string"
},
"location": {
"type": [
"null",
"object"
],
"required": [
"latitude",
"longitude"
],
"properties": {
"name": {
"type": [
"null",
"string"
]
},
"address": {
"type": [
"null",
"string"
]
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}
},
"parameters": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"required": [
"type"
],
"properties": {
"url": {
"type": [
"null",
"string"
]
},
"name": {
"type": [
"null",
"string"
]
},
"text": {
"type": [
"null",
"string"
]
},
"type": {
"type": "string"
},
"location": {
"type": [
"null",
"object"
],
"required": [
"latitude",
"longitude"
],
"properties": {
"name": {
"type": [
"null",
"string"
]
},
"address": {
"type": [
"null",
"string"
]
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}
}
},
"description": "The template to send. A Bird-managed template selects the sender number from the template's category, so from must be omitted. A template is the only content deliverable outside a customer service window.",
"additionalProperties": false
},
"idempotency_key": {
"type": "string",
"description": "Client-supplied deduplication key; a retry with the same key replays the original result instead of acting twice."
}
}
}