Create webhook
curl --request POST \
--url https://scrapebadger.com/v1/twitter/stream/webhooks \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"monitor_id": "<string>",
"url": "https://example.com/webhooks/twitter",
"secret": "<string>"
}
'import requests
url = "https://scrapebadger.com/v1/twitter/stream/webhooks"
payload = {
"monitor_id": "<string>",
"url": "https://example.com/webhooks/twitter",
"secret": "<string>"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
monitor_id: '<string>',
url: 'https://example.com/webhooks/twitter',
secret: '<string>'
})
};
fetch('https://scrapebadger.com/v1/twitter/stream/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://scrapebadger.com/v1/twitter/stream/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([
'monitor_id' => '<string>',
'url' => 'https://example.com/webhooks/twitter',
'secret' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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://scrapebadger.com/v1/twitter/stream/webhooks"
payload := strings.NewReader("{\n \"monitor_id\": \"<string>\",\n \"url\": \"https://example.com/webhooks/twitter\",\n \"secret\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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://scrapebadger.com/v1/twitter/stream/webhooks")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"monitor_id\": \"<string>\",\n \"url\": \"https://example.com/webhooks/twitter\",\n \"secret\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://scrapebadger.com/v1/twitter/stream/webhooks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"monitor_id\": \"<string>\",\n \"url\": \"https://example.com/webhooks/twitter\",\n \"secret\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"monitor_id": "<string>",
"url": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"secret": "<string>"
}{
"error": "Invalid or missing API key"
}{
"error": "Insufficient credits"
}{
"error": "Rate limit exceeded. Please retry after a short delay."
}Stream Monitors API
Create Webhook
Create a new webhook endpoint for a stream monitor. Webhooks receive HMAC-SHA256 signed POST requests when new tweets are detected.
POST
/
v1
/
twitter
/
stream
/
webhooks
Create webhook
curl --request POST \
--url https://scrapebadger.com/v1/twitter/stream/webhooks \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"monitor_id": "<string>",
"url": "https://example.com/webhooks/twitter",
"secret": "<string>"
}
'import requests
url = "https://scrapebadger.com/v1/twitter/stream/webhooks"
payload = {
"monitor_id": "<string>",
"url": "https://example.com/webhooks/twitter",
"secret": "<string>"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
monitor_id: '<string>',
url: 'https://example.com/webhooks/twitter',
secret: '<string>'
})
};
fetch('https://scrapebadger.com/v1/twitter/stream/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://scrapebadger.com/v1/twitter/stream/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([
'monitor_id' => '<string>',
'url' => 'https://example.com/webhooks/twitter',
'secret' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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://scrapebadger.com/v1/twitter/stream/webhooks"
payload := strings.NewReader("{\n \"monitor_id\": \"<string>\",\n \"url\": \"https://example.com/webhooks/twitter\",\n \"secret\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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://scrapebadger.com/v1/twitter/stream/webhooks")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"monitor_id\": \"<string>\",\n \"url\": \"https://example.com/webhooks/twitter\",\n \"secret\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://scrapebadger.com/v1/twitter/stream/webhooks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"monitor_id\": \"<string>\",\n \"url\": \"https://example.com/webhooks/twitter\",\n \"secret\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"monitor_id": "<string>",
"url": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"secret": "<string>"
}{
"error": "Invalid or missing API key"
}{
"error": "Insufficient credits"
}{
"error": "Rate limit exceeded. Please retry after a short delay."
}Authorizations
Your ScrapeBadger API key. You can find this in your dashboard at https://scrapebadger.com/dashboard/api-keys.
Body
application/json
Webhook configuration.
Response
Webhook created successfully.
Webhook endpoint details. Only returned on creation; the secret is included in the response.
Unique webhook identifier.
ID of the associated stream monitor.
HTTPS URL of the webhook endpoint.
Timestamp when the webhook was created.
Webhook secret for HMAC-SHA256 signing. Only returned once on creation.
⌘I

