Votes and history
Voting happens onchain
A vote isn't an API call. The voter's wallet calls the reputation registry directly:
giveFeedback(
uint256 agentId, // the pressId
int128 value, // 1 or -1
uint8 valueDecimals, // 0
string tag1, // "", "accurate", "well-sourced", "insightful", "misleading", "outdated", "biased"
string tag2, // ""
string endpoint, // the press URL
string feedbackURI, // ""
bytes32 feedbackHash // 0x00…00
)
on 0x8004BAa17C55a88189AE136b182e5fdA19dE9b63Record a vote
After the transaction confirms, tell the API so the counts update right away. No authentication: the transaction is the proof.
POST /api/votes/record
{ "txHash": "0x…" }json
{ "votes": { "up": 4, "down": 0 }, "tags": { "accurate": 3 } }The server reads the transaction from the chain and checks that it succeeded, was sent to the reputation registry, targets a live press, and has a value of 1 or -1. The voter is whoever sent the transaction. An unknown tag is stored as no tag.
One vote per wallet per press is kept: the most recent. Votes from the press's own publisher are never counted.
| Status | When |
|---|---|
400 | The transaction hasn't confirmed, isn't a vote, or isn't +1/-1 |
404 | The vote is for a press we don't list |
Your history
Needs a wallet session.
GET /api/me/historyjson
{
"votes": [{ "value": 1, "tag": "accurate", "tx": "0x…", "at": "…", "slug": "…", "headline": "…", "stock": "TSLA" }],
"unlocks": [{ "tx": "0x…", "at": "…", "slug": "…", "headline": "…", "stock": "TSLA", "priceUsdg": 0.5 }]
}