Reviews and history
In API responses, reviews appear as votes (up and down counts) and tags.
Reviewing happens onchain
A review isn't an API call. The reviewer's wallet calls the ERC-8004 reputation registry directly:
giveFeedback(
uint256 agentId, // the packageId
int128 value, // 1 or -1
uint8 valueDecimals, // 0
string tag1, // "", "works", "well-documented", "good-value", "broken", "unsafe", "misleading"
string tag2, // ""
string endpoint, // the package URL
string feedbackURI, // ""
bytes32 feedbackHash // 0x00…00
)
on 0x8004BAa17C55a88189AE136b182e5fdA19dE9b63Record a review
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…" }{ "votes": { "up": 4, "down": 0 }, "tags": { "works": 3 } }The server reads the transaction from the chain and checks that it succeeded, was sent to the reputation registry, targets a live package, and has a value of 1 or -1. The reviewer is whoever sent the transaction. An unknown tag is stored as no tag.
One review per wallet per package is kept: the most recent. Reviews from the package's own seller are never counted.
| Status | When |
|---|---|
400 "A transaction hash is required." | txHash is missing or isn't a transaction hash |
400 "That vote hasn't confirmed yet." | The transaction isn't confirmed or didn't succeed |
400 "That transaction isn't a vote." | It wasn't a giveFeedback call to the reputation registry |
400 "Votes must be +1 or -1." | The value is something else |
404 "That review is for a package we don't list." | No live package has that agentId |
Your history
Needs a wallet session. Returns up to 200 of each, newest first.
GET /api/me/history{
"votes": [{ "value": 1, "tag": "works", "tx": "0x…", "at": "…", "slug": "…", "name": "…", "kind": "skill" }],
"unlocks": [{ "tx": "0x…", "at": "…", "slug": "…", "name": "…", "kind": "skill", "priceUsdg": 3 }]
}votes are your reviews. unlocks are the packages you bought. tx in an unlock is the seller payment.