curl --request GET \
--url http://localhost:3101/api/signalsimport requests
url = "http://localhost:3101/api/signals"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('http://localhost:3101/api/signals', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "3101",
CURLOPT_URL => "http://localhost:3101/api/signals",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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 := "http://localhost:3101/api/signals"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("http://localhost:3101/api/signals")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:3101/api/signals")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"version": "<string>",
"data_mode": "measured",
"generated_at": "<string>",
"total": 123,
"matched": 123,
"returned": 123,
"signals": [
{
"version": "<string>",
"signal_id": "<string>",
"target": {
"chain": "<string>",
"address": "<string>"
},
"verdict": "avoid",
"confidence": 123,
"reasoning": "<string>",
"evidence_used": [
"<string>"
],
"evidence_hash": "<string>",
"prompt_version": "<string>",
"model": "<string>",
"generated_at": "2023-11-07T05:31:56Z",
"generated_at_unix": 123,
"call_hash": "<string>",
"anchor_tx": "<string>",
"anchor_status": "<string>",
"anchor_chain_id": 123,
"cost_usd": 123,
"cached": true,
"run_id": "<string>",
"evidence_source_count": 123
}
],
"calibration": {},
"served": {},
"read_this_first": {
"data_mode": "<string>",
"meaning": "<string>",
"anchoring": "<string>",
"not_advice": "<string>",
"verify": "<string>"
}
}List signals
The public feed of agent-generated risk signals, with filters and a calibration block that never gets filtered.
curl --request GET \
--url http://localhost:3101/api/signalsimport requests
url = "http://localhost:3101/api/signals"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('http://localhost:3101/api/signals', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "3101",
CURLOPT_URL => "http://localhost:3101/api/signals",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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 := "http://localhost:3101/api/signals"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("http://localhost:3101/api/signals")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:3101/api/signals")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"version": "<string>",
"data_mode": "measured",
"generated_at": "<string>",
"total": 123,
"matched": 123,
"returned": 123,
"signals": [
{
"version": "<string>",
"signal_id": "<string>",
"target": {
"chain": "<string>",
"address": "<string>"
},
"verdict": "avoid",
"confidence": 123,
"reasoning": "<string>",
"evidence_used": [
"<string>"
],
"evidence_hash": "<string>",
"prompt_version": "<string>",
"model": "<string>",
"generated_at": "2023-11-07T05:31:56Z",
"generated_at_unix": 123,
"call_hash": "<string>",
"anchor_tx": "<string>",
"anchor_status": "<string>",
"anchor_chain_id": 123,
"cost_usd": 123,
"cached": true,
"run_id": "<string>",
"evidence_source_count": 123
}
],
"calibration": {},
"served": {},
"read_this_first": {
"data_mode": "<string>",
"meaning": "<string>",
"anchoring": "<string>",
"not_advice": "<string>",
"verify": "<string>"
}
}Read data_mode first
{ "data_mode": "empty", "total": 0, "matched": 0, "returned": 0, "signals": [] }
empty means no agent run has happened on the host serving this response — not that no risks were found. It is mirrored into the X-Signal-Data-Mode header so a consumer that only logs headers still cannot miss it. See Data states.
Why calibration ignores your filters
The calibration block is always returned in full, regardless of verdict, chain, target, or limit. This is deliberate: a hit rate computed over a caller’s chosen subset would be a different number wearing the same name, and a filtered calibration figure quoted as the model’s accuracy is a straightforwardly false claim.
Read it before treating confidence: 0.9 as “90% likely”.
Fields that carry a trap
| Field | The trap |
|---|---|
anchor_status | queued is not anchored. Check anchor_tx — the status is written by the process that queued it, the tx hash by the process that got a receipt |
confidence | Confidence in the cited evidence, not a probability of being right. The calibration block holds realized accuracy |
verdict | A risk judgment about a counterparty. Not a price call, not a recommendation, never a position |
evidence_used | Exhaustive. Any signal citing a key outside its bundle was discarded before publication |
Evidence bundles are not here
Bundles are omitted from the list because fifty of them is megabytes and nobody reads it. Fetch one signal to get its bundle, then verify it.cd apps/dashboard && npm run dev and paste it.The Send button does not work against localhost in a local mint dev preview; it reports invalid URL. It is expected to work on a deployed docs site pointed at a reachable API origin, but that has not been verified here — there is no vendor-hosted instance to test against. Use the cURL command locally.Query Parameters
Filter by verdict.
avoid, trust, watch, no_opinion Filter by chain.
hl, base, solana Filter by target address (case-insensitive).
Maximum signals to return.
1 <= x <= 200Response
The signal feed.
empty means no run has happened on this host — NOT that no risks were found.
measured, empty Signals published on this deployment, before filters.
Signals matching your filters.
Signals in this response, after limit.
Show child attributes
Show child attributes
Realized calibration of the confidence scores. Always returned in full, never filtered — a hit rate computed over a caller's chosen subset would be a different number wearing the same name.
Whether the feed was read from the live engine or the committed snapshot.
Prose statement of what this payload does and does not establish. Part of the response rather than only the docs, because a payload travels where documentation does not.
Show child attributes
Show child attributes