Revere

Revere · Docs

Build on Revere

For developers. Everything here is public data; no key, open CORS. Last updated 6 October 2026.

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 raw OfferCreated logs up to a safe block (pass to the SDK's offers({ 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's escrow.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: Revere badge example. 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 shared revere.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