Get narrative evidence
Fetch bounded source-free supporting signals for one eligible Qoory narrative by exact slug. Results expose only opaque Qoory signal identifiers, generic signal categories, and observation timestamps. Source URLs, platforms, provider names, external identifiers, copied text, and provenance are unavailable.
GET
/
v1
/
narratives
/
{slug}
/
evidence
Get narrative evidence
curl --request GET \
--url https://api.qoory.ai/v1/narratives/{slug}/evidence \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.qoory.ai/v1/narratives/{slug}/evidence"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.qoory.ai/v1/narratives/{slug}/evidence', 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.qoory.ai/v1/narratives/{slug}/evidence",
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: Bearer <token>"
],
]);
$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.qoory.ai/v1/narratives/{slug}/evidence"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.qoory.ai/v1/narratives/{slug}/evidence")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.qoory.ai/v1/narratives/{slug}/evidence")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"kind": "narrative_supporting_signals",
"id": "narrative-1",
"narrative": {
"id": "narrative-1",
"slug": "binance-okx-executive-dispute",
"title": "Binance and OKX executive dispute",
"narrative_kind": "exchange_beef",
"status": "active"
},
"limit": 12,
"signal_count": 8,
"supporting_signals": [
{
"id": "signal-1",
"signal_type": "x",
"observed_at": "2026-06-17T00:00:00.000Z"
}
]
},
"meta": {
"request_id": "req_example",
"credits_used": 2,
"credits_remaining": 98,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}{
"error": {
"code": "INVALID_API_KEY",
"message": "The API key is invalid."
},
"meta": {
"request_id": "req_example",
"credits_used": 0,
"credits_remaining": 100,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}{
"error": {
"code": "INSUFFICIENT_CREDITS",
"message": "Not enough credits are available for this request."
},
"meta": {
"request_id": "req_example",
"credits_used": 0,
"credits_remaining": 0,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}{
"error": {
"code": "FORBIDDEN",
"message": "The API key does not have the required scope."
},
"meta": {
"request_id": "req_example",
"credits_used": 0,
"credits_remaining": 100,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}{
"error": {
"code": "NOT_FOUND",
"message": "The requested record was not found."
},
"meta": {
"request_id": "req_example",
"credits_used": 0,
"credits_remaining": 100,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}{
"error": {
"code": "INVALID_REQUEST",
"message": "The request parameters are invalid.",
"details": [
{
"path": "limit",
"message": "Expected a value within the documented range.",
"code": "too_big"
}
]
},
"meta": {
"request_id": "req_example",
"credits_used": 0,
"credits_remaining": 100,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded."
},
"meta": {
"request_id": "req_example",
"credits_used": 0,
"credits_remaining": 100,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "The request could not be completed."
},
"meta": {
"request_id": "req_example",
"credits_used": 0,
"credits_remaining": 100,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}Authorizations
Use the HTTP authentication scheme with a Qoory API key.
Path Parameters
Exact Qoory slug for the target narrative.
Required string length:
1 - 160Query Parameters
Maximum number of items to return. This API does not expose pagination for this operation.
Required range:
1 <= x <= 24Previous
Get fund identityFetch exactly one fund's identity (type, id, slug, and name) by slug. Fund classification, websites, profiles, media, social handles, scores, and relationship graphs are not exposed.
Next
⌘I
Get narrative evidence
curl --request GET \
--url https://api.qoory.ai/v1/narratives/{slug}/evidence \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.qoory.ai/v1/narratives/{slug}/evidence"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.qoory.ai/v1/narratives/{slug}/evidence', 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.qoory.ai/v1/narratives/{slug}/evidence",
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: Bearer <token>"
],
]);
$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.qoory.ai/v1/narratives/{slug}/evidence"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.qoory.ai/v1/narratives/{slug}/evidence")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.qoory.ai/v1/narratives/{slug}/evidence")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"kind": "narrative_supporting_signals",
"id": "narrative-1",
"narrative": {
"id": "narrative-1",
"slug": "binance-okx-executive-dispute",
"title": "Binance and OKX executive dispute",
"narrative_kind": "exchange_beef",
"status": "active"
},
"limit": 12,
"signal_count": 8,
"supporting_signals": [
{
"id": "signal-1",
"signal_type": "x",
"observed_at": "2026-06-17T00:00:00.000Z"
}
]
},
"meta": {
"request_id": "req_example",
"credits_used": 2,
"credits_remaining": 98,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}{
"error": {
"code": "INVALID_API_KEY",
"message": "The API key is invalid."
},
"meta": {
"request_id": "req_example",
"credits_used": 0,
"credits_remaining": 100,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}{
"error": {
"code": "INSUFFICIENT_CREDITS",
"message": "Not enough credits are available for this request."
},
"meta": {
"request_id": "req_example",
"credits_used": 0,
"credits_remaining": 0,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}{
"error": {
"code": "FORBIDDEN",
"message": "The API key does not have the required scope."
},
"meta": {
"request_id": "req_example",
"credits_used": 0,
"credits_remaining": 100,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}{
"error": {
"code": "NOT_FOUND",
"message": "The requested record was not found."
},
"meta": {
"request_id": "req_example",
"credits_used": 0,
"credits_remaining": 100,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}{
"error": {
"code": "INVALID_REQUEST",
"message": "The request parameters are invalid.",
"details": [
{
"path": "limit",
"message": "Expected a value within the documented range.",
"code": "too_big"
}
]
},
"meta": {
"request_id": "req_example",
"credits_used": 0,
"credits_remaining": 100,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded."
},
"meta": {
"request_id": "req_example",
"credits_used": 0,
"credits_remaining": 100,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "The request could not be completed."
},
"meta": {
"request_id": "req_example",
"credits_used": 0,
"credits_remaining": 100,
"rate_limit": {
"limit": 30,
"remaining": 29,
"reset_at": "2026-06-26T00:00:00.000Z",
"tier": "free"
}
}
}