Create webhook
curl --request POST \
--url https://api.sendo.dev/v1/campaign/{id}/webhooks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"url": "<string>",
"eventTypes": [
"<string>"
],
"numbers": [
"<string>"
]
}
'import requests
url = "https://api.sendo.dev/v1/campaign/{id}/webhooks"
payload = {
"name": "<string>",
"url": "<string>",
"eventTypes": ["<string>"],
"numbers": ["<string>"]
}
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({
name: '<string>',
url: '<string>',
eventTypes: ['<string>'],
numbers: ['<string>']
})
};
fetch('https://api.sendo.dev/v1/campaign/{id}/webhooks', 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.sendo.dev/v1/campaign/{id}/webhooks",
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([
'name' => '<string>',
'url' => '<string>',
'eventTypes' => [
'<string>'
],
'numbers' => [
'<string>'
]
]),
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.sendo.dev/v1/campaign/{id}/webhooks"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"url\": \"<string>\",\n \"eventTypes\": [\n \"<string>\"\n ],\n \"numbers\": [\n \"<string>\"\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.sendo.dev/v1/campaign/{id}/webhooks")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"url\": \"<string>\",\n \"eventTypes\": [\n \"<string>\"\n ],\n \"numbers\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sendo.dev/v1/campaign/{id}/webhooks")
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 \"name\": \"<string>\",\n \"url\": \"<string>\",\n \"eventTypes\": [\n \"<string>\"\n ],\n \"numbers\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"webhook": {
"id": "d3392dbf-ae4b-43b9-9b50-dcafa5c7h4mn",
"createdAt": "2023-12-31T03:07:35.826Z",
"name": "Event Service",
"url": "https://website.com/webhook",
"campaignId": "g1tkV7Eq",
"signature": "aVWS7HTLR9xxMkdE",
"eventTypes": [
"message.incoming",
"message.status"
],
"numbers": [
"+14159436397"
]
}
}
{
"success": false,
"error": "Phone number is invalid: +14155552670"
}
Campaign
Create webhook
Create webhook for a campaign.
POST
/
v1
/
campaign
/
{id}
/
webhooks
Create webhook
curl --request POST \
--url https://api.sendo.dev/v1/campaign/{id}/webhooks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"url": "<string>",
"eventTypes": [
"<string>"
],
"numbers": [
"<string>"
]
}
'import requests
url = "https://api.sendo.dev/v1/campaign/{id}/webhooks"
payload = {
"name": "<string>",
"url": "<string>",
"eventTypes": ["<string>"],
"numbers": ["<string>"]
}
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({
name: '<string>',
url: '<string>',
eventTypes: ['<string>'],
numbers: ['<string>']
})
};
fetch('https://api.sendo.dev/v1/campaign/{id}/webhooks', 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.sendo.dev/v1/campaign/{id}/webhooks",
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([
'name' => '<string>',
'url' => '<string>',
'eventTypes' => [
'<string>'
],
'numbers' => [
'<string>'
]
]),
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.sendo.dev/v1/campaign/{id}/webhooks"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"url\": \"<string>\",\n \"eventTypes\": [\n \"<string>\"\n ],\n \"numbers\": [\n \"<string>\"\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.sendo.dev/v1/campaign/{id}/webhooks")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"url\": \"<string>\",\n \"eventTypes\": [\n \"<string>\"\n ],\n \"numbers\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sendo.dev/v1/campaign/{id}/webhooks")
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 \"name\": \"<string>\",\n \"url\": \"<string>\",\n \"eventTypes\": [\n \"<string>\"\n ],\n \"numbers\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"webhook": {
"id": "d3392dbf-ae4b-43b9-9b50-dcafa5c7h4mn",
"createdAt": "2023-12-31T03:07:35.826Z",
"name": "Event Service",
"url": "https://website.com/webhook",
"campaignId": "g1tkV7Eq",
"signature": "aVWS7HTLR9xxMkdE",
"eventTypes": [
"message.incoming",
"message.status"
],
"numbers": [
"+14159436397"
]
}
}
{
"success": false,
"error": "Phone number is invalid: +14155552670"
}
Parameters
string
required
The ID of the campaign for the webhook.
Body
string
The name for the webhook.
string
required
The URL for the webhook.
string[]
required
The webhook events that you want to receive. Options are
message.incoming, message.status, or recipient.optout (read more).string[]
Array of phone numbers to receive events for in . If none are provided, webhook will default to all numbers assigned to the campaign.
Response
boolean
Whether the webhook was created successfully.
object
The details of the new webhook.
Show webhook fields
Show webhook fields
string
The ID of the webhook.
timestamp
The time the webhook was created
string
The name of the webhook (optional).
string
The URL of the webhook.
string
The campaign ID for the webhook.
string
The signature sent with events. (read more)
string
The events the webhook will receive. (read more)
string[]
The phone numbers the webhook is subscribed to.
{
"success": true,
"webhook": {
"id": "d3392dbf-ae4b-43b9-9b50-dcafa5c7h4mn",
"createdAt": "2023-12-31T03:07:35.826Z",
"name": "Event Service",
"url": "https://website.com/webhook",
"campaignId": "g1tkV7Eq",
"signature": "aVWS7HTLR9xxMkdE",
"eventTypes": [
"message.incoming",
"message.status"
],
"numbers": [
"+14159436397"
]
}
}
{
"success": false,
"error": "Phone number is invalid: +14155552670"
}
⌘I

