Trust & billing
Proofs & track record
An agent can't squint at a chart. So every answer CoinGraph gives is stored exactly as issued, fingerprinted, tied to the data calls behind it, and graded against what happened next.
What gets a proof #
| Object | Id | Where it comes from |
|---|---|---|
| Check | eval_… | Evaluate |
| Answer or claim verdict | ans_… | Ask |
| Agent run | run_… | Agents |
| Brief | a number | Explain |
How a proof works #
Store the exact object
The object returned to you is saved as it was, with its id and time.
Fingerprint it
CoinGraph writes the object as canonical JSON (keys sorted, no spaces) and takes its SHA-256. Change one character and the fingerprint changes completely.
Record the sources
The data-source calls made around the issue time are listed with provider, endpoint, time, latency and outcome.
Attest it
A Chainlink CRE workflow (
cre/verify-investigation) runs every few minutes: it fetches each new proof from/v1/verify, recomputes the SHA-256 on every node, requires the nodes to agree, and posts the attestation back. CoinGraph re-hashes the object before storing it, so neither side can attest a fingerprint the object does not hash to. The attestation records the workflow, the consensus rule and the time. Today it runs on the CRE simulator (mode: "simulation"), as agreed with the Chainlink team; a DON deployment is next. Until the workflow has reached a new proof, its status ispendingand the fingerprint itself is the commitment.
Check a proof #
In a browser #
Open /proof/eval_b0a5ee5a25b634682506: the verdict, the fingerprint, whether it matches, the attestation status and the source calls.
Over the API #
curl "https://coingraph.ai/api/v1/verify/eval_b0a5ee5a25b634682506"{
"object": "proof",
"id": "eval_b0a5ee5a25b634682506",
"as_of": "2026-10-06T23:20:50.884Z",
"data": {
"id": "eval_b0a5ee5a25b634682506",
"kind": "evaluation",
"token": "chainlink",
"issued_at": "2026-10-06T23:20:50.884Z",
"sha256": "191799c06ad780515560070f892e1c19d7dd72e22b844e127980674a496e5599",
"hash_matches_stored": true,
"canonical_bytes": 3262,
"attestation": {
"mode": "simulation",
"note": "The Chainlink CRE workflow fetched this proof, recomputed the SHA-256 independently and reached consensus on the CRE simulator (a local DON). On-chain publication of the attestation is the next step.",
"sha256": "191799c06ad780515560070f892e1c19d7dd72e22b844e127980674a496e5599",
"status": "attested",
"network": "chainlink-cre",
"workflow": {
"id": null,
"name": "verify-investigation-staging",
"execution_id": null
},
"consensus": {
"nodes": null,
"aggregation": "identical"
},
"attested_at": "2026-10-07T12:09:13.389Z",
"recorded_at": "2026-10-07T12:09:29.574Z",
"served_sha256": "191799c06ad780515560070f892e1c19d7dd72e22b844e127980674a496e5599",
"matches_stored": true
},
"object": {
"token": {
"id": "chainlink",
"name": "Chainlink",
"rank": 14,
"symbol": "LINK"
},
"reasons": [
{
"text": "1h +0.36%, 24h +0.73%: nothing stretched",
"source": "coingecko:/coins/markets",
"dimension": "momentum"
},
{
"info": true,
"text": "$3.3M available within 2% of the price on tracked order books",
"source": "ccxt:fetchOrderBook",
"dimension": "liquidity"
},
"… 1 more"
],
"verdict": "proceed",
"snapshot": {
"market": {
"rank": 14,
"as_of": "2026-10-06T23:20:00.000Z",
"ath_usd": 52.7,
"atl_usd": 0.148183,
"sources": [
{
"as_of": "2026-10-06T23:20:00.000Z",
"endpoint": "/coins/markets",
"provider": "coingecko"
}
],
"ath_date": "2021-05-09T16:13:57.000Z",
"price_usd": 13.96,
"change_pct": {
"1h": 0.36,
"1y": -40.4316,
"4h": 0.22,
"7d": -5.2107,
"15m": 0.14,
"24h": 0.73,
"30d": 8.1012,
"200d": 40.1246
},
"low_24h_usd": 13.72,
"from_ath_pct": -73.5,
"from_atl_pct": 9323.01,
"high_24h_usd": 14.11,
"…": "5 more fields"
},
"supply": {
"top_holders": {
"as_of": "2026-10-06T14:52:00.000Z",
"top10": 39,
"top20": 49.4
},
"fdv_to_market_cap": 1.34
},
"derivatives": {
"funding": [
{
"mark": 13.959,
"index": 13.96491236,
"venue": "binanceusdm",
"symbol": "LINK/USDT:USDT",
"next_at": null,
"rate_pct": 0.01,
"basis_pct": -0.04,
"next_rate_pct": null,
"annualised_pct": 11
},
{
"mark": 13.958,
"index": 13.966,
"venue": "bybit",
"symbol": "LINK/USDT:USDT",
"next_at": null,
"rate_pct": 0.0089,
"basis_pct": -0.06,
"next_rate_pct": null,
"annualised_pct": 9.8
},
"… 1 more"
],
"liquidations_1h": {
"usd": 0,
"count": 0,
"longs_usd": 0,
"shorts_usd": 0
},
"open_interest_change": {
"1h": 0.67,
"4h": 0.42,
"24h": 0.59
}
},
"liquidity_depth": {
"ask": 3265820,
"bid": 3449590,
"bid_ask_ratio": 1.06
},
"onchain_flows_24h": {
"net_usd": -411856,
"inflow_usd": 2109570,
"outflow_usd": 2521420
}
},
"confidence": 0.95,
"dimensions": {
"supply": {
"rating": "ok",
"reasons": [
{
"info": true,
"text": "FDV / market cap 1.34",
"source": "coingecko:/coins/markets"
},
{
"info": true,
"text": "Top 10 holders own 39% of supply",
"source": "goplus/nownodes holders"
},
"… 1 more"
]
},
"context": {
"rating": "ok",
"reasons": [
{
"text": "No fundamental or mood flags",
"source": "coingraph"
}
]
},
"onchain": {
"rating": "ok",
"reasons": [
{
"info": true,
"text": "Exchange net flow $-411.9K in 24h: normal",
"source": "nownodes:eth_getLogs"
}
]
},
"contract": {
"rating": "ok",
"reasons": [
{
"text": "No contract risks found on the ETH contract (home chain)",
"source": "goplus:/token_security"
}
]
},
"leverage": {
"rating": "ok",
"reasons": [
{
"text": "Funding 0.01% per 8h: leverage not crowded",
"source": "ccxt:fetchFundingRates"
}
]
},
"momentum": {
"rating": "ok",
"reasons": [
{
"text": "1h +0.36%, 24h +0.73%: nothing stretched",
"source": "coingecko:/coins/markets"
}
]
},
"liquidity": {
"rating": "ok",
"reasons": [
{
"info": true,
"text": "$3.3M available within 2% of the price on tracked order books",
"source": "ccxt:fetchOrderBook"
}
]
}
},
"disclaimer": "CoinGraph never executes, custodies or advises. The caller decides.",
"size_check": null,
"watch_next": [],
"policy_check": null
},
"provenance": [
{
"call_id": 14139,
"provider": "nownodes",
"endpoint": "sol:getSignaturesForAddress:inspect",
"at": "2026-10-06T23:20:47.628Z",
"latency_ms": 461,
"ok": true,
"rows": null
},
{
"call_id": 14137,
"provider": "nownodes",
"endpoint": "sol:getBalance:inspect",
"at": "2026-10-06T23:20:46.866Z",
"latency_ms": 500,
"ok": true,
"rows": null
},
"… 58 more"
]
},
"sources": [
{
"provider": "nownodes",
"endpoint": "sol:getSignaturesForAddress:inspect",
"as_of": "2026-10-06T23:20:47.628Z"
},
{
"provider": "nownodes",
"endpoint": "sol:getBalance:inspect",
"as_of": "2026-10-06T23:20:46.866Z"
},
"… 15 more"
]
}Recompute it yourself #
import crypto from "node:crypto";
const res = await fetch("https://coingraph.ai/api/v1/verify/eval_b0a5ee5a25b634682506");
const { data } = await res.json();
// Canonical JSON: keys sorted at every level, no whitespace.
const canon = (v) => Array.isArray(v) ? `[${v.map(canon).join(",")}]`
: v && typeof v === "object" ? `{${Object.keys(v).sort().map((k) => JSON.stringify(k) + ":" + canon(v[k])).join(",")}}`
: JSON.stringify(v);
const sha = crypto.createHash("sha256").update(canon(data.object)).digest("hex");
console.log(sha === data.sha256); // trueThe public track record #
Every check, signal and brief is compared with the price 1 hour, 24 hours and 7 days after it was issued. Misses stay on the record.
| Call | Graded right when |
|---|---|
| Signal or brief pointing up / down | The 24-hour return has the same sign (1-hour if 24 hours have not passed). |
| Check: proceed / avoid | Graded as up / down on the same rule. |
Check: caution | The price moved 2% or more either way within 24 hours. |
| Neutral calls | Listed, not graded. |
An honest caveat
The record started on 6 October 2026, so samples are small. Grading checks as price calls is a simplification: a check says whether it is safe to act, not where the price goes. A risk-based grading method is planned.
Read it with Track record or the MCP tool get_track_record.