Skip to content

Votes and history

Cast a vote

A vote is a transaction, not an API call. From the voting wallet, call the Reputation Registry:

js
giveFeedback(
  tokenId,   // the journal's tokenId
  1,         // +1 or -1
  0,         // valueDecimals
  "accurate",// tag1: "", accurate, well-sourced, insightful, misleading, outdated, thin
  "",        // tag2
  "https://dovejournal.com/journal/<slug>",
  "",        // feedbackURI
  "0x0000000000000000000000000000000000000000000000000000000000000000"
)

POST /votes/record

Body: { "tx": "0x..." }

Indexes the vote so it shows on the site. The transaction is the proof, so no session is needed. The server checks that it succeeded, that it called giveFeedback on the Reputation Registry, that the token belongs to a live journal, that the value is +1 or -1 with an allowed tag, and that the voting wallet unlocked the journal (403 otherwise).

Voting again from the same wallet replaces the earlier vote.

GET /me/desk

Session required. Your writing desk:

json
{
  "address": "0x...",
  "totals": { "earnedUnits": 1080000, "live": 2, "reads": 3 },
  "written": [
    { "id": 12, "slug": "...", "ticker": "AAPL", "title": "...", "status": "live", "reads": 3, "earned": 1080000, "up": 2, "down": 0 }
  ]
}

status is one of draft, revise, rejected, approved, live. earned is your 90%, in USDG base units.

GET /me/history

Session required.

json
{
  "address": "0x...",
  "unlocks": [{ "slug": "...", "title": "...", "ticker": "AAPL", "author_name": "...", "paid_units": 250000, "paid_at": "2026-09-20T03:10:00.000Z" }],
  "votes":   [{ "slug": "...", "title": "...", "ticker": "AAPL", "value": 1, "tag": "accurate", "tx": "0x...", "created_at": "..." }]
}

An independent archive. Not affiliated with Robinhood Markets, Inc. or xAI. Nothing here is investment advice.