Send location
curl --request POST \
--url https://api.hubmessage.io/v1/channels/{channelId}/messages \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"recipient": {
"identifier": "5544936181064",
"name": "Recipient Name",
"subject": "Title",
"picture": ""
},
"sender": {
"identifier": "5544936181064",
"name": "Sender Name",
"picture": ""
},
"content": {
"type": "LOCATION",
"attachments": [
{
"name": "Google Brasil",
"address": "Av. Brg. Faria Lima, 3477 - Itaim Bibi, São Paulo - SP, 04538-133",
"latitude": "-23.0696347",
"longitude": "-50.4357913"
}
]
}
}
'import requests
url = "https://api.hubmessage.io/v1/channels/{channelId}/messages"
payload = {
"recipient": {
"identifier": "5544936181064",
"name": "Recipient Name",
"subject": "Title",
"picture": ""
},
"sender": {
"identifier": "5544936181064",
"name": "Sender Name",
"picture": ""
},
"content": {
"type": "LOCATION",
"attachments": [
{
"name": "Google Brasil",
"address": "Av. Brg. Faria Lima, 3477 - Itaim Bibi, São Paulo - SP, 04538-133",
"latitude": "-23.0696347",
"longitude": "-50.4357913"
}
]
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
recipient: {
identifier: '5544936181064',
name: 'Recipient Name',
subject: 'Title',
picture: ''
},
sender: {identifier: '5544936181064', name: 'Sender Name', picture: ''},
content: {
type: 'LOCATION',
attachments: [
{
name: 'Google Brasil',
address: 'Av. Brg. Faria Lima, 3477 - Itaim Bibi, São Paulo - SP, 04538-133',
latitude: '-23.0696347',
longitude: '-50.4357913'
}
]
}
})
};
fetch('https://api.hubmessage.io/v1/channels/{channelId}/messages', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.hubmessage.io/v1/channels/{channelId}/messages",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'recipient' => [
'identifier' => '5544936181064',
'name' => 'Recipient Name',
'subject' => 'Title',
'picture' => ''
],
'sender' => [
'identifier' => '5544936181064',
'name' => 'Sender Name',
'picture' => ''
],
'content' => [
'type' => 'LOCATION',
'attachments' => [
[
'name' => 'Google Brasil',
'address' => 'Av. Brg. Faria Lima, 3477 - Itaim Bibi, São Paulo - SP, 04538-133',
'latitude' => '-23.0696347',
'longitude' => '-50.4357913'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.hubmessage.io/v1/channels/{channelId}/messages"
payload := strings.NewReader("{\n \"recipient\": {\n \"identifier\": \"5544936181064\",\n \"name\": \"Recipient Name\",\n \"subject\": \"Title\",\n \"picture\": \"\"\n },\n \"sender\": {\n \"identifier\": \"5544936181064\",\n \"name\": \"Sender Name\",\n \"picture\": \"\"\n },\n \"content\": {\n \"type\": \"LOCATION\",\n \"attachments\": [\n {\n \"name\": \"Google Brasil\",\n \"address\": \"Av. Brg. Faria Lima, 3477 - Itaim Bibi, São Paulo - SP, 04538-133\",\n \"latitude\": \"-23.0696347\",\n \"longitude\": \"-50.4357913\"\n }\n ]\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.hubmessage.io/v1/channels/{channelId}/messages")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"recipient\": {\n \"identifier\": \"5544936181064\",\n \"name\": \"Recipient Name\",\n \"subject\": \"Title\",\n \"picture\": \"\"\n },\n \"sender\": {\n \"identifier\": \"5544936181064\",\n \"name\": \"Sender Name\",\n \"picture\": \"\"\n },\n \"content\": {\n \"type\": \"LOCATION\",\n \"attachments\": [\n {\n \"name\": \"Google Brasil\",\n \"address\": \"Av. Brg. Faria Lima, 3477 - Itaim Bibi, São Paulo - SP, 04538-133\",\n \"latitude\": \"-23.0696347\",\n \"longitude\": \"-50.4357913\"\n }\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hubmessage.io/v1/channels/{channelId}/messages")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"recipient\": {\n \"identifier\": \"5544936181064\",\n \"name\": \"Recipient Name\",\n \"subject\": \"Title\",\n \"picture\": \"\"\n },\n \"sender\": {\n \"identifier\": \"5544936181064\",\n \"name\": \"Sender Name\",\n \"picture\": \"\"\n },\n \"content\": {\n \"type\": \"LOCATION\",\n \"attachments\": [\n {\n \"name\": \"Google Brasil\",\n \"address\": \"Av. Brg. Faria Lima, 3477 - Itaim Bibi, São Paulo - SP, 04538-133\",\n \"latitude\": \"-23.0696347\",\n \"longitude\": \"-50.4357913\"\n }\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"messageId": "wamid.HBgNNTU0NDk3MDUwNzg1FQIAERgSM0"
}{
"error": 401,
"message": "Unauthorized"
}{
"error": 422,
"message": "Conversation window is closed"
}Free messages
Send location
Send location messages
POST
/
v1
/
channels
/
{channelId}
/
messages
Send location
curl --request POST \
--url https://api.hubmessage.io/v1/channels/{channelId}/messages \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"recipient": {
"identifier": "5544936181064",
"name": "Recipient Name",
"subject": "Title",
"picture": ""
},
"sender": {
"identifier": "5544936181064",
"name": "Sender Name",
"picture": ""
},
"content": {
"type": "LOCATION",
"attachments": [
{
"name": "Google Brasil",
"address": "Av. Brg. Faria Lima, 3477 - Itaim Bibi, São Paulo - SP, 04538-133",
"latitude": "-23.0696347",
"longitude": "-50.4357913"
}
]
}
}
'import requests
url = "https://api.hubmessage.io/v1/channels/{channelId}/messages"
payload = {
"recipient": {
"identifier": "5544936181064",
"name": "Recipient Name",
"subject": "Title",
"picture": ""
},
"sender": {
"identifier": "5544936181064",
"name": "Sender Name",
"picture": ""
},
"content": {
"type": "LOCATION",
"attachments": [
{
"name": "Google Brasil",
"address": "Av. Brg. Faria Lima, 3477 - Itaim Bibi, São Paulo - SP, 04538-133",
"latitude": "-23.0696347",
"longitude": "-50.4357913"
}
]
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
recipient: {
identifier: '5544936181064',
name: 'Recipient Name',
subject: 'Title',
picture: ''
},
sender: {identifier: '5544936181064', name: 'Sender Name', picture: ''},
content: {
type: 'LOCATION',
attachments: [
{
name: 'Google Brasil',
address: 'Av. Brg. Faria Lima, 3477 - Itaim Bibi, São Paulo - SP, 04538-133',
latitude: '-23.0696347',
longitude: '-50.4357913'
}
]
}
})
};
fetch('https://api.hubmessage.io/v1/channels/{channelId}/messages', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.hubmessage.io/v1/channels/{channelId}/messages",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'recipient' => [
'identifier' => '5544936181064',
'name' => 'Recipient Name',
'subject' => 'Title',
'picture' => ''
],
'sender' => [
'identifier' => '5544936181064',
'name' => 'Sender Name',
'picture' => ''
],
'content' => [
'type' => 'LOCATION',
'attachments' => [
[
'name' => 'Google Brasil',
'address' => 'Av. Brg. Faria Lima, 3477 - Itaim Bibi, São Paulo - SP, 04538-133',
'latitude' => '-23.0696347',
'longitude' => '-50.4357913'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.hubmessage.io/v1/channels/{channelId}/messages"
payload := strings.NewReader("{\n \"recipient\": {\n \"identifier\": \"5544936181064\",\n \"name\": \"Recipient Name\",\n \"subject\": \"Title\",\n \"picture\": \"\"\n },\n \"sender\": {\n \"identifier\": \"5544936181064\",\n \"name\": \"Sender Name\",\n \"picture\": \"\"\n },\n \"content\": {\n \"type\": \"LOCATION\",\n \"attachments\": [\n {\n \"name\": \"Google Brasil\",\n \"address\": \"Av. Brg. Faria Lima, 3477 - Itaim Bibi, São Paulo - SP, 04538-133\",\n \"latitude\": \"-23.0696347\",\n \"longitude\": \"-50.4357913\"\n }\n ]\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.hubmessage.io/v1/channels/{channelId}/messages")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"recipient\": {\n \"identifier\": \"5544936181064\",\n \"name\": \"Recipient Name\",\n \"subject\": \"Title\",\n \"picture\": \"\"\n },\n \"sender\": {\n \"identifier\": \"5544936181064\",\n \"name\": \"Sender Name\",\n \"picture\": \"\"\n },\n \"content\": {\n \"type\": \"LOCATION\",\n \"attachments\": [\n {\n \"name\": \"Google Brasil\",\n \"address\": \"Av. Brg. Faria Lima, 3477 - Itaim Bibi, São Paulo - SP, 04538-133\",\n \"latitude\": \"-23.0696347\",\n \"longitude\": \"-50.4357913\"\n }\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hubmessage.io/v1/channels/{channelId}/messages")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"recipient\": {\n \"identifier\": \"5544936181064\",\n \"name\": \"Recipient Name\",\n \"subject\": \"Title\",\n \"picture\": \"\"\n },\n \"sender\": {\n \"identifier\": \"5544936181064\",\n \"name\": \"Sender Name\",\n \"picture\": \"\"\n },\n \"content\": {\n \"type\": \"LOCATION\",\n \"attachments\": [\n {\n \"name\": \"Google Brasil\",\n \"address\": \"Av. Brg. Faria Lima, 3477 - Itaim Bibi, São Paulo - SP, 04538-133\",\n \"latitude\": \"-23.0696347\",\n \"longitude\": \"-50.4357913\"\n }\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"messageId": "wamid.HBgNNTU0NDk3MDUwNzg1FQIAERgSM0"
}{
"error": 401,
"message": "Unauthorized"
}{
"error": 422,
"message": "Conversation window is closed"
}Overview
Sends a location message to a contact. Thecontent.type field must be LOCATION and the coordinates are provided in the attachments array using latitude and longitude.
The name and address fields are optional and allow displaying the place name and address directly in the message.
The API does not validate the
latitude and longitude fields. Requests without these values will be accepted, but the message will not display the location correctly on WhatsApp. Always provide both fields.This endpoint only works when the conversation window is open (24 hours).
Authorizations
Secret Key generated in the Hub Message Security panel
Path Parameters
Channel ID
Example:
"YOUR_CHANNEL_ID"
Body
application/json
Response
Message sent successfully
Sent message ID
⌘I