curl --request POST \
--url https://api.birdeye.com/resources/v1/insight/sentiment/category \
--header 'Content-Type: application/json' \
--data '
{
"reviewSources": [
"Google",
"Facebook",
"CitySearch"
],
"ratings": [
"0",
"1",
"3",
"4",
"5"
],
"businessNumbers": [
172957184851864,
174436684666401
],
"startDate": "02/25/2025",
"endDate": "02/01/2026",
"hierarchyNodeData": [
{
"levelId": "Region",
"levelNames": [
"Region1",
"Region2"
]
}
],
"userEmail": "example@birdeye.com"
}
'import requests
url = "https://api.birdeye.com/resources/v1/insight/sentiment/category"
payload = {
"reviewSources": ["Google", "Facebook", "CitySearch"],
"ratings": ["0", "1", "3", "4", "5"],
"businessNumbers": [172957184851864, 174436684666401],
"startDate": "02/25/2025",
"endDate": "02/01/2026",
"hierarchyNodeData": [
{
"levelId": "Region",
"levelNames": ["Region1", "Region2"]
}
],
"userEmail": "example@birdeye.com"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
reviewSources: ['Google', 'Facebook', 'CitySearch'],
ratings: ['0', '1', '3', '4', '5'],
businessNumbers: [172957184851864, 174436684666401],
startDate: '02/25/2025',
endDate: '02/01/2026',
hierarchyNodeData: [{levelId: 'Region', levelNames: ['Region1', 'Region2']}],
userEmail: 'example@birdeye.com'
})
};
fetch('https://api.birdeye.com/resources/v1/insight/sentiment/category', 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.birdeye.com/resources/v1/insight/sentiment/category",
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([
'reviewSources' => [
'Google',
'Facebook',
'CitySearch'
],
'ratings' => [
'0',
'1',
'3',
'4',
'5'
],
'businessNumbers' => [
172957184851864,
174436684666401
],
'startDate' => '02/25/2025',
'endDate' => '02/01/2026',
'hierarchyNodeData' => [
[
'levelId' => 'Region',
'levelNames' => [
'Region1',
'Region2'
]
]
],
'userEmail' => 'example@birdeye.com'
]),
CURLOPT_HTTPHEADER => [
"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.birdeye.com/resources/v1/insight/sentiment/category"
payload := strings.NewReader("{\n \"reviewSources\": [\n \"Google\",\n \"Facebook\",\n \"CitySearch\"\n ],\n \"ratings\": [\n \"0\",\n \"1\",\n \"3\",\n \"4\",\n \"5\"\n ],\n \"businessNumbers\": [\n 172957184851864,\n 174436684666401\n ],\n \"startDate\": \"02/25/2025\",\n \"endDate\": \"02/01/2026\",\n \"hierarchyNodeData\": [\n {\n \"levelId\": \"Region\",\n \"levelNames\": [\n \"Region1\",\n \"Region2\"\n ]\n }\n ],\n \"userEmail\": \"example@birdeye.com\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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.birdeye.com/resources/v1/insight/sentiment/category")
.header("Content-Type", "application/json")
.body("{\n \"reviewSources\": [\n \"Google\",\n \"Facebook\",\n \"CitySearch\"\n ],\n \"ratings\": [\n \"0\",\n \"1\",\n \"3\",\n \"4\",\n \"5\"\n ],\n \"businessNumbers\": [\n 172957184851864,\n 174436684666401\n ],\n \"startDate\": \"02/25/2025\",\n \"endDate\": \"02/01/2026\",\n \"hierarchyNodeData\": [\n {\n \"levelId\": \"Region\",\n \"levelNames\": [\n \"Region1\",\n \"Region2\"\n ]\n }\n ],\n \"userEmail\": \"example@birdeye.com\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.birdeye.com/resources/v1/insight/sentiment/category")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"reviewSources\": [\n \"Google\",\n \"Facebook\",\n \"CitySearch\"\n ],\n \"ratings\": [\n \"0\",\n \"1\",\n \"3\",\n \"4\",\n \"5\"\n ],\n \"businessNumbers\": [\n 172957184851864,\n 174436684666401\n ],\n \"startDate\": \"02/25/2025\",\n \"endDate\": \"02/01/2026\",\n \"hierarchyNodeData\": [\n {\n \"levelId\": \"Region\",\n \"levelNames\": [\n \"Region1\",\n \"Region2\"\n ]\n }\n ],\n \"userEmail\": \"example@birdeye.com\"\n}"
response = http.request(request)
puts response.read_body{
"totalCount": 2,
"dataPoints": [
{
"name": "Customer Service",
"score": 58.4,
"mentions": 87
},
{
"name": "Wait Time",
"score": 42.1,
"mentions": 53
}
]
}{
"code": 2003,
"message": "userEmail is mandatory"
}{
"code": 1167,
"message": "API key is missing"
}{
"code": 2151,
"message": "Not a valid reseller/enterprise id."
}{
"code": 1027,
"message": "Invalid business number."
}Insight Sentiment Category
Insight Sentiment Category API retrieves sentiment scores and mention counts broken down by review category (e.g. Customer Service, Wait Time) for specified business locations and date ranges.
curl --request POST \
--url https://api.birdeye.com/resources/v1/insight/sentiment/category \
--header 'Content-Type: application/json' \
--data '
{
"reviewSources": [
"Google",
"Facebook",
"CitySearch"
],
"ratings": [
"0",
"1",
"3",
"4",
"5"
],
"businessNumbers": [
172957184851864,
174436684666401
],
"startDate": "02/25/2025",
"endDate": "02/01/2026",
"hierarchyNodeData": [
{
"levelId": "Region",
"levelNames": [
"Region1",
"Region2"
]
}
],
"userEmail": "example@birdeye.com"
}
'import requests
url = "https://api.birdeye.com/resources/v1/insight/sentiment/category"
payload = {
"reviewSources": ["Google", "Facebook", "CitySearch"],
"ratings": ["0", "1", "3", "4", "5"],
"businessNumbers": [172957184851864, 174436684666401],
"startDate": "02/25/2025",
"endDate": "02/01/2026",
"hierarchyNodeData": [
{
"levelId": "Region",
"levelNames": ["Region1", "Region2"]
}
],
"userEmail": "example@birdeye.com"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
reviewSources: ['Google', 'Facebook', 'CitySearch'],
ratings: ['0', '1', '3', '4', '5'],
businessNumbers: [172957184851864, 174436684666401],
startDate: '02/25/2025',
endDate: '02/01/2026',
hierarchyNodeData: [{levelId: 'Region', levelNames: ['Region1', 'Region2']}],
userEmail: 'example@birdeye.com'
})
};
fetch('https://api.birdeye.com/resources/v1/insight/sentiment/category', 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.birdeye.com/resources/v1/insight/sentiment/category",
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([
'reviewSources' => [
'Google',
'Facebook',
'CitySearch'
],
'ratings' => [
'0',
'1',
'3',
'4',
'5'
],
'businessNumbers' => [
172957184851864,
174436684666401
],
'startDate' => '02/25/2025',
'endDate' => '02/01/2026',
'hierarchyNodeData' => [
[
'levelId' => 'Region',
'levelNames' => [
'Region1',
'Region2'
]
]
],
'userEmail' => 'example@birdeye.com'
]),
CURLOPT_HTTPHEADER => [
"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.birdeye.com/resources/v1/insight/sentiment/category"
payload := strings.NewReader("{\n \"reviewSources\": [\n \"Google\",\n \"Facebook\",\n \"CitySearch\"\n ],\n \"ratings\": [\n \"0\",\n \"1\",\n \"3\",\n \"4\",\n \"5\"\n ],\n \"businessNumbers\": [\n 172957184851864,\n 174436684666401\n ],\n \"startDate\": \"02/25/2025\",\n \"endDate\": \"02/01/2026\",\n \"hierarchyNodeData\": [\n {\n \"levelId\": \"Region\",\n \"levelNames\": [\n \"Region1\",\n \"Region2\"\n ]\n }\n ],\n \"userEmail\": \"example@birdeye.com\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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.birdeye.com/resources/v1/insight/sentiment/category")
.header("Content-Type", "application/json")
.body("{\n \"reviewSources\": [\n \"Google\",\n \"Facebook\",\n \"CitySearch\"\n ],\n \"ratings\": [\n \"0\",\n \"1\",\n \"3\",\n \"4\",\n \"5\"\n ],\n \"businessNumbers\": [\n 172957184851864,\n 174436684666401\n ],\n \"startDate\": \"02/25/2025\",\n \"endDate\": \"02/01/2026\",\n \"hierarchyNodeData\": [\n {\n \"levelId\": \"Region\",\n \"levelNames\": [\n \"Region1\",\n \"Region2\"\n ]\n }\n ],\n \"userEmail\": \"example@birdeye.com\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.birdeye.com/resources/v1/insight/sentiment/category")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"reviewSources\": [\n \"Google\",\n \"Facebook\",\n \"CitySearch\"\n ],\n \"ratings\": [\n \"0\",\n \"1\",\n \"3\",\n \"4\",\n \"5\"\n ],\n \"businessNumbers\": [\n 172957184851864,\n 174436684666401\n ],\n \"startDate\": \"02/25/2025\",\n \"endDate\": \"02/01/2026\",\n \"hierarchyNodeData\": [\n {\n \"levelId\": \"Region\",\n \"levelNames\": [\n \"Region1\",\n \"Region2\"\n ]\n }\n ],\n \"userEmail\": \"example@birdeye.com\"\n}"
response = http.request(request)
puts response.read_body{
"totalCount": 2,
"dataPoints": [
{
"name": "Customer Service",
"score": 58.4,
"mentions": 87
},
{
"name": "Wait Time",
"score": 42.1,
"mentions": 53
}
]
}{
"code": 2003,
"message": "userEmail is mandatory"
}{
"code": 1167,
"message": "API key is missing"
}{
"code": 2151,
"message": "Not a valid reseller/enterprise id."
}{
"code": 1027,
"message": "Invalid business number."
}Headers
e.g. application/json
e.g. [Required] Partner specific API key provided by Birdeye for data exchange.
e.g. [Required] User associated businessNumber.
Media type of the JSON request body.
Query Parameters
Zero-based index of the first record to return.
Number of records to return. Must be between 1 and 100 (default 10).
Field to sort results by.
name, sentiment-score Sort order. 0 = ascending, 1 = descending.
0, 1 Body
List of business numbers (max 100).
Start date in MM/DD/YYYY format.
End date in MM/DD/YYYY format.
Email of the user performing the request.
Review sources to include (e.g. Google, Facebook).
Rating values to filter (e.g. "1", "2", "3", "4", "5").
List of hierarchy nodes to filter by level.
Show child attributes
Show child attributes