Re-derive a signal's own claims
curl --request GET \
--url http://localhost:3101/api/signals/verify/{id}import requests
url = "http://localhost:3101/api/signals/verify/{id}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('http://localhost:3101/api/signals/verify/{id}', 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/verify/{id}",
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/verify/{id}"
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/verify/{id}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:3101/api/signals/verify/{id}")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"signal_id": "<string>",
"reproducible": true,
"citations_valid": true,
"anchored": true
}{
"error": "not_found",
"signal_id": "<string>",
"detail": "<string>"
}Public HTTP endpoints
Verify a signal
Re-derive a signal’s hashes independently. What that proves, and what it explicitly cannot.
GET
/
api
/
signals
/
verify
/
{id}
Re-derive a signal's own claims
curl --request GET \
--url http://localhost:3101/api/signals/verify/{id}import requests
url = "http://localhost:3101/api/signals/verify/{id}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('http://localhost:3101/api/signals/verify/{id}', 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/verify/{id}",
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/verify/{id}"
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/verify/{id}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:3101/api/signals/verify/{id}")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"signal_id": "<string>",
"reproducible": true,
"citations_valid": true,
"anchored": true
}{
"error": "not_found",
"signal_id": "<string>",
"detail": "<string>"
}The path is
/api/signals/verify/{id}, not /api/signals/{id}/verify. The latter 404s.What it proves
Integrity
The published evidence bundle hashes to the recorded
evidence_hash. The bundle you can read is the bundle that was hashed.Honest citation
Every key in
evidence_used exists in that bundle. The model cited only things it was actually shown.Anchoring
Whether a real anchoring transaction exists — checked against the chain, not against a status field.
What it cannot prove
That the evidence was TRUE when it was collected.Nothing reachable from this endpoint can establish that a Hyperliquid position reading or a rug score was correct at the moment it was taken. What is verifiable is that nobody edited it afterwards, and that the reasoning cites the record rather than something invented.
Never cached
This endpoint setsrevalidate = 0 while every other public endpoint caches for 300 seconds. A verification is a claim about the state of a specific record right now; serving a five-minute-old reproducible: true for a record that has since changed is precisely the failure this endpoint exists to detect.
Anchoring status today
The Alpha Ledger contract is not deployed. Every signal is hashed with the canonical payload format and queued, soanchored is currently false for every signal and anchor_tx is null.
The hash format is a byte-for-byte port of the on-chain canonical encoding, with cross-language parity vectors in the test suite — so signals queued today will verify against the contract once it is deployed, without rehashing. See Alpha Ledger.
Scienter publishes impersonal market signals of general and regular circulation. Nothing here is investment, legal, or tax advice, or a recommendation to buy, sell, or hold any asset. Scienter is not a registered investment adviser or broker-dealer. Trading digital assets can result in the total loss of your funds — see Disclaimers for the full text.
Path Parameters
The signal id to verify.