curl --request POST \
--url https://api.birdeye.com/resources/v1/listing/searchAi/public/citations \
--header 'Content-Type: application/json' \
--data '
{
"businessNumbers": [
67348934989,
327349434334,
278237892323
],
"aiModel": "CHATGPT",
"theme": "Dental implants",
"pageNo": 1,
"pageSize": 25,
"startDate": "03/01/2026",
"endDate": "03/31/2026",
"viewReportType": "LOCATION_LEVEL"
}
'import requests
url = "https://api.birdeye.com/resources/v1/listing/searchAi/public/citations"
payload = {
"businessNumbers": [67348934989, 327349434334, 278237892323],
"aiModel": "CHATGPT",
"theme": "Dental implants",
"pageNo": 1,
"pageSize": 25,
"startDate": "03/01/2026",
"endDate": "03/31/2026",
"viewReportType": "LOCATION_LEVEL"
}
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({
businessNumbers: [67348934989, 327349434334, 278237892323],
aiModel: 'CHATGPT',
theme: 'Dental implants',
pageNo: 1,
pageSize: 25,
startDate: '03/01/2026',
endDate: '03/31/2026',
viewReportType: 'LOCATION_LEVEL'
})
};
fetch('https://api.birdeye.com/resources/v1/listing/searchAi/public/citations', 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/listing/searchAi/public/citations",
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([
'businessNumbers' => [
67348934989,
327349434334,
278237892323
],
'aiModel' => 'CHATGPT',
'theme' => 'Dental implants',
'pageNo' => 1,
'pageSize' => 25,
'startDate' => '03/01/2026',
'endDate' => '03/31/2026',
'viewReportType' => 'LOCATION_LEVEL'
]),
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/listing/searchAi/public/citations"
payload := strings.NewReader("{\n \"businessNumbers\": [\n 67348934989,\n 327349434334,\n 278237892323\n ],\n \"aiModel\": \"CHATGPT\",\n \"theme\": \"Dental implants\",\n \"pageNo\": 1,\n \"pageSize\": 25,\n \"startDate\": \"03/01/2026\",\n \"endDate\": \"03/31/2026\",\n \"viewReportType\": \"LOCATION_LEVEL\"\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/listing/searchAi/public/citations")
.header("Content-Type", "application/json")
.body("{\n \"businessNumbers\": [\n 67348934989,\n 327349434334,\n 278237892323\n ],\n \"aiModel\": \"CHATGPT\",\n \"theme\": \"Dental implants\",\n \"pageNo\": 1,\n \"pageSize\": 25,\n \"startDate\": \"03/01/2026\",\n \"endDate\": \"03/31/2026\",\n \"viewReportType\": \"LOCATION_LEVEL\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.birdeye.com/resources/v1/listing/searchAi/public/citations")
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 \"businessNumbers\": [\n 67348934989,\n 327349434334,\n 278237892323\n ],\n \"aiModel\": \"CHATGPT\",\n \"theme\": \"Dental implants\",\n \"pageNo\": 1,\n \"pageSize\": 25,\n \"startDate\": \"03/01/2026\",\n \"endDate\": \"03/31/2026\",\n \"viewReportType\": \"LOCATION_LEVEL\"\n}"
response = http.request(request)
puts response.read_body{
"citations": [
{
"theme": "Dental implants",
"prompt": "Best dental implants near me",
"aiModel": "CHATGPT",
"businessNumber": 67348934989,
"processedDate": "10-Mar-2026",
"citations": [
{
"url": "https://www.healthline.com/health/dental-and-oral-health/dental-implants",
"title": "Dental Implants: Procedure, Benefits, and Risks",
"description": "A complete guide to dental implants including procedure, cost, and recovery.",
"brandPresent": false
},
{
"url": "https://www.exampleclinic.com/dental-implants",
"title": "Affordable Dental Implants at Example Clinic",
"description": "Get high-quality dental implants with experienced dentists.",
"brandPresent": true
}
]
},
{
"theme": "Dental implants",
"prompt": "Cost of dental implants in India",
"aiModel": "GEMINI",
"businessNumber": 327349434334,
"processedDate": "15-Mar-2026",
"citations": [
{
"url": "https://www.practo.com/healthfeed/dental-implant-cost-in-india-45910/post",
"title": "Dental Implant Cost in India",
"description": "Overview of dental implant pricing across major cities in India.",
"brandPresent": false
},
{
"url": "https://www.dentalcareplus.in/implants",
"title": "Advanced Dental Implant Solutions",
"description": "State-of-the-art dental implant services with modern technology.",
"brandPresent": true
}
]
},
{
"theme": "Dental implants",
"prompt": "Are dental implants safe?",
"aiModel": "CHATGPT",
"businessNumber": 278237892323,
"processedDate": "20-Mar-2026",
"citations": [
{
"url": "https://www.webmd.com/oral-health/guide/dental-implants",
"title": "Dental Implants: What You Should Know",
"description": "Learn about the safety, benefits, and risks of dental implants.",
"brandPresent": false
}
]
}
],
"total": 3
}{
"code": 1161,
"message": "Invalid API key"
}{
"code": 89,
"message": "Rate limit exceeded"
}Get Search AI Citations
Retrieves Search AI citations for the specified business, including sources referenced by AI models for given prompts and themes.
curl --request POST \
--url https://api.birdeye.com/resources/v1/listing/searchAi/public/citations \
--header 'Content-Type: application/json' \
--data '
{
"businessNumbers": [
67348934989,
327349434334,
278237892323
],
"aiModel": "CHATGPT",
"theme": "Dental implants",
"pageNo": 1,
"pageSize": 25,
"startDate": "03/01/2026",
"endDate": "03/31/2026",
"viewReportType": "LOCATION_LEVEL"
}
'import requests
url = "https://api.birdeye.com/resources/v1/listing/searchAi/public/citations"
payload = {
"businessNumbers": [67348934989, 327349434334, 278237892323],
"aiModel": "CHATGPT",
"theme": "Dental implants",
"pageNo": 1,
"pageSize": 25,
"startDate": "03/01/2026",
"endDate": "03/31/2026",
"viewReportType": "LOCATION_LEVEL"
}
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({
businessNumbers: [67348934989, 327349434334, 278237892323],
aiModel: 'CHATGPT',
theme: 'Dental implants',
pageNo: 1,
pageSize: 25,
startDate: '03/01/2026',
endDate: '03/31/2026',
viewReportType: 'LOCATION_LEVEL'
})
};
fetch('https://api.birdeye.com/resources/v1/listing/searchAi/public/citations', 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/listing/searchAi/public/citations",
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([
'businessNumbers' => [
67348934989,
327349434334,
278237892323
],
'aiModel' => 'CHATGPT',
'theme' => 'Dental implants',
'pageNo' => 1,
'pageSize' => 25,
'startDate' => '03/01/2026',
'endDate' => '03/31/2026',
'viewReportType' => 'LOCATION_LEVEL'
]),
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/listing/searchAi/public/citations"
payload := strings.NewReader("{\n \"businessNumbers\": [\n 67348934989,\n 327349434334,\n 278237892323\n ],\n \"aiModel\": \"CHATGPT\",\n \"theme\": \"Dental implants\",\n \"pageNo\": 1,\n \"pageSize\": 25,\n \"startDate\": \"03/01/2026\",\n \"endDate\": \"03/31/2026\",\n \"viewReportType\": \"LOCATION_LEVEL\"\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/listing/searchAi/public/citations")
.header("Content-Type", "application/json")
.body("{\n \"businessNumbers\": [\n 67348934989,\n 327349434334,\n 278237892323\n ],\n \"aiModel\": \"CHATGPT\",\n \"theme\": \"Dental implants\",\n \"pageNo\": 1,\n \"pageSize\": 25,\n \"startDate\": \"03/01/2026\",\n \"endDate\": \"03/31/2026\",\n \"viewReportType\": \"LOCATION_LEVEL\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.birdeye.com/resources/v1/listing/searchAi/public/citations")
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 \"businessNumbers\": [\n 67348934989,\n 327349434334,\n 278237892323\n ],\n \"aiModel\": \"CHATGPT\",\n \"theme\": \"Dental implants\",\n \"pageNo\": 1,\n \"pageSize\": 25,\n \"startDate\": \"03/01/2026\",\n \"endDate\": \"03/31/2026\",\n \"viewReportType\": \"LOCATION_LEVEL\"\n}"
response = http.request(request)
puts response.read_body{
"citations": [
{
"theme": "Dental implants",
"prompt": "Best dental implants near me",
"aiModel": "CHATGPT",
"businessNumber": 67348934989,
"processedDate": "10-Mar-2026",
"citations": [
{
"url": "https://www.healthline.com/health/dental-and-oral-health/dental-implants",
"title": "Dental Implants: Procedure, Benefits, and Risks",
"description": "A complete guide to dental implants including procedure, cost, and recovery.",
"brandPresent": false
},
{
"url": "https://www.exampleclinic.com/dental-implants",
"title": "Affordable Dental Implants at Example Clinic",
"description": "Get high-quality dental implants with experienced dentists.",
"brandPresent": true
}
]
},
{
"theme": "Dental implants",
"prompt": "Cost of dental implants in India",
"aiModel": "GEMINI",
"businessNumber": 327349434334,
"processedDate": "15-Mar-2026",
"citations": [
{
"url": "https://www.practo.com/healthfeed/dental-implant-cost-in-india-45910/post",
"title": "Dental Implant Cost in India",
"description": "Overview of dental implant pricing across major cities in India.",
"brandPresent": false
},
{
"url": "https://www.dentalcareplus.in/implants",
"title": "Advanced Dental Implant Solutions",
"description": "State-of-the-art dental implant services with modern technology.",
"brandPresent": true
}
]
},
{
"theme": "Dental implants",
"prompt": "Are dental implants safe?",
"aiModel": "CHATGPT",
"businessNumber": 278237892323,
"processedDate": "20-Mar-2026",
"citations": [
{
"url": "https://www.webmd.com/oral-health/guide/dental-implants",
"title": "Dental Implants: What You Should Know",
"description": "Learn about the safety, benefits, and risks of dental implants.",
"brandPresent": false
}
]
}
],
"total": 3
}{
"code": 1161,
"message": "Invalid API key"
}{
"code": 89,
"message": "Rate limit exceeded"
}Headers
e.g. application/json
e.g. [Required] Partner specific API key provided by Birdeye for data exchange.
e.g. - Long Business Number
Media type of the JSON request body.
Body
Comma-separated list of business numbers to retrieve the report for.
Possible values are [CHATGPT, GEMINI, PERPLEXITY]
Specifies the theme or category used to filter the report data.
Specifies the page number for paginated results. Defaults to 1.
Defines the number of records to be returned per page. Defaults to 25.
Start date for the report range (format: mm/dd/yyyy).
End date for the report range (format: mm/dd/yyyy).
Defines the level at which the report is generated. Allowed values: LOCATION_LEVEL, ACCOUNT_LEVEL
Start date for the report range (format: mm/dd/yyyy).
End date for the report range (format: mm/dd/yyyy).
Defines the level at which the report is generated. Allowed values: LOCATION_LEVEL, ACCOUNT_LEVEL