Revere · Docs
Build on Revere
Revere is a protocol, not a service: the standard, the escrow on Polygon and the attestations on EAS are all you need, and the MIT library @reverefi/sdk reads and writes them. revere.fi adds a read API, feeds and badges for convenience — if it went dark, everything would still be on chain.
The library
npm install @reverefi/sdk viem
import { resolve, offers, makeOffer, offerTxs, acceptTx } from "@reverefi/sdk";
const slab = await resolve("PSA 148617224", { client }); // attested token + live holder
const book = await offers("PSA 148617224", { client }); // every offer, with its status now
Read API
JSON, access-control-allow-origin: *, cached for seconds to minutes. A cert is GRADER:NUMBER (URL-encode the colon or not).
GET /api/cert/<cert>— one cert, whole: the card (name, grade, picture), its Courtyard token, the attestation and live holder, every offer with its status, and a price for other copies at the grade.GET /api/card/<cert>— just the card and its Courtyard token(s), from the cert index; fast.GET /api/activity— every offer on the escrow (and the retired v1), newest first, with totals.GET /api/attested— every cert attested by a known attester.GET /api/holder/<0x address>— the Courtyard slabs an address holds, by cert, with attestation and live offers; and the offers it made.GET /api/offer-log— the escrow's rawOfferCreatedlogs up to a safe block (pass to the SDK'soffers({ prior })to read only newer blocks).GET /api/service— attester #2's address, gas left and today's count.
Write helpers
POST /api/attest {"cert":"PSA:…","tokenId":"…"}— attester #2 attests a Courtyard token's cert if the token's own metadata names it. Capped per day and per caller.POST /api/relay {"source":"base","txHash":"0x…"}— delivers a CCTP funding to the escrow once Circle has attested the burn. Anyone may do this (it'sescrow.fund(message, attestation)); this saves the buyer needing POL.
Feeds and badges
/feed.xml— every offer, RSS./feed/<cert>.xml— one cert's./badge/<cert>.svg— a live badge:. Embed it on a listing:
<a href="https://revere.fi/?cert=PSA:148617224"> <img src="https://revere.fi/badge/PSA:148617224.svg" alt="Offers on Revere"> </a>
/og/<cert>.png— the cert's social card; a sharedrevere.fi/?cert=…link uses it.
The cert index
A Courtyard token id is derived from the item's whole description, not from its cert, so nothing on chain maps a cert to its token. The indexer rebuilds that map from public metadata (every Courtyard token, new mints added as they appear). It's open: run your own and trust nobody's.
Contracts
- Escrow v2 (Polygon):
0xf9062486052a28B96ba7CFcadF5582C7913DD77F— Sourcify - EAS schema v1:
0xa3c4d832f48d5493b110b6df0fd16905f2c633296a0d245d7f9aa459417b8efb - Attester #1 (SHYGUY LLC):
0x4F926701A97331Ee990C6858738FE8f80AaA672b· Attester #2 (on request):0xf4d835e2dE3DBcd3E0c9406559BD177Bb1A61341