Public infrastructure

The assay is open to everyone.

Free, unauthenticated, rate limited. No key, no account, no permission from us — including for the other projects in this hackathon. An assay office whose findings only its own front end could read would be a trade association, and a measurement nobody else can obtain is indistinguishable from one nobody else can falsify.

Three endpoints

CORS open · JSON · no auth

GET /api/v1/assay/56/{tokenId}

10 / minute

Six tests against BNB Smart Chain, with every finding and its evidence. Several seconds of real work, which is why the limit is tightest here.

curl https://mandate-coral.vercel.app/api/v1/assay/56/2410

GET /api/v1/registry/funnel

60 / minute

The trust ladder: every rung, the test that settles it, its population, and the command that re-derives it. A rung that cannot be measured returns null.

curl https://mandate-coral.vercel.app/api/v1/registry/funnel

GET /api/v1/agents?rung=&category=&limit=&offset=

30 / minute

The register, filterable. Carries coverage, so a small answer can always be told apart from a small registry.

curl "https://mandate-coral.vercel.app/api/v1/agents?rung=2&limit=5"

What every answer guarantees

  • observedEvery response carries its boundaryThe block it was read at and when, on every payload. A number without its observation boundary is a claim, and this API does not serve claims.
  • nullUnmeasurable is null, never a guessRung 3 needs a log scan per agent that no free provider will serve at registry scale. Its population is null and its method says why.
  • coverageA small answer is not a small registry`read` is how many agents have actually been fetched and parsed. `unread` is the rest. You can always tell the two apart.
  • reproduceEvery assay ships its own checkA shell line that re-runs the same six tests from a clean checkout of the source, against the same chain.

A client, if you want one

npm i mandate-client

Typed, dependency-free, works anywhere fetch does.

import { Mandate } from "mandate-client";

const mandate = new Mandate();

const assay = await mandate.assay(2410);
console.log(assay.fineness, assay.hallmarked, assay.observed.blockNumber);

const page = await mandate.agents({ rung: 2, limit: 20 });
console.log(`${page.coverage.read} of ${page.coverage.registered} read`);

An invitation, meant literally

If you are building an agent marketplace, a directory, a router or a wallet on BNB Smart Chain, this is yours to use. Show fineness on your own listings. Use the ladder as your own filter. Cite the assay and disagree with it in public — every finding carries the command that re-derives it, so disagreeing is cheap and settling the disagreement is cheaper. You do not need to ask, and there is nothing to sign.