Tag Evolution
curl --request GET \
--url https://api.example.com/api/v1/brands/{brandId}/tags/{tagId}/evolution \
--header 'Authorization: <authorization>'import requests
url = "https://api.example.com/api/v1/brands/{brandId}/tags/{tagId}/evolution"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://api.example.com/api/v1/brands/{brandId}/tags/{tagId}/evolution', 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.example.com/api/v1/brands/{brandId}/tags/{tagId}/evolution",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/v1/brands/{brandId}/tags/{tagId}/evolution"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/api/v1/brands/{brandId}/tags/{tagId}/evolution")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/brands/{brandId}/tags/{tagId}/evolution")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"success": true,
"tag": {
"id": "<string>",
"name": "<string>"
},
"evolution": [
{
"date": "<string>",
"answers": 123,
"mentionRate": 123,
"shareOfVoice": 123,
"avgSentiment": {},
"sourceRate": 123
}
]
}Tags
Tag Evolution
Daily time-series metrics for a specific tag
GET
/
api
/
v1
/
brands
/
{brandId}
/
tags
/
{tagId}
/
evolution
Tag Evolution
curl --request GET \
--url https://api.example.com/api/v1/brands/{brandId}/tags/{tagId}/evolution \
--header 'Authorization: <authorization>'import requests
url = "https://api.example.com/api/v1/brands/{brandId}/tags/{tagId}/evolution"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://api.example.com/api/v1/brands/{brandId}/tags/{tagId}/evolution', 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.example.com/api/v1/brands/{brandId}/tags/{tagId}/evolution",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/v1/brands/{brandId}/tags/{tagId}/evolution"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/api/v1/brands/{brandId}/tags/{tagId}/evolution")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/brands/{brandId}/tags/{tagId}/evolution")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"success": true,
"tag": {
"id": "<string>",
"name": "<string>"
},
"evolution": [
{
"date": "<string>",
"answers": 123,
"mentionRate": 123,
"shareOfVoice": 123,
"avgSentiment": {},
"sourceRate": 123
}
]
}Returns daily time-series metrics for a specific tag, including mention rate, share of voice, sentiment, and source citation rate.
string
required
Bearer token. Example:
Bearer qw-api-xxxPath Parameters
string
required
The unique identifier of the brand
string
required
The unique identifier of the tag
Query Parameters
number
Number of days to include. If not specified, returns all data.
string
Start date (ISO 8601 format)
string
End date (ISO 8601 format)
string
Filter by AI provider. Supports comma-separated multi-select (e.g.,
chatgpt,claude).string
Filter by topic (keyword) ID. Supports comma-separated multi-select (e.g.,
id1,id2).string
Filter by prompt type:
TOFU, MOFU, BOFUResponse
boolean
Indicates if the request was successful
array
Example Request
curl -X GET "https://www.qwairy.co/api/v1/brands/cm1234567890abcdef/tags/tag1/evolution?period=30" \
-H "Authorization: Bearer qw-api-your-token-here"
Example Response
{
"success": true,
"tag": {
"id": "tag1",
"name": "Product Comparisons"
},
"evolution": [
{
"date": "2026-02-15",
"answers": 42,
"mentionRate": 65.2,
"shareOfVoice": 48.3,
"avgSentiment": 72.1,
"sourceRate": 55.0
},
{
"date": "2026-02-16",
"answers": 38,
"mentionRate": 60.5,
"shareOfVoice": 45.1,
"avgSentiment": 74.2,
"sourceRate": 52.6
}
]
}
Error Responses
| Status | Code | Description |
|---|---|---|
| 401 | INVALID_TOKEN | Authentication failed |
| 404 | BRAND_NOT_FOUND | Brand doesn’t exist or not accessible |
| 404 | TAG_NOT_FOUND | Tag doesn’t exist or not accessible |
⌘I

