Verification
Every cell on a Gridz profile can be independently verified. You don't have to trust gridz.bio — verification runs in your browser (or your own script) against Base EAS and the GridzResolver.
On the website
Every profile page has a Verify profile button in the toolbar (formerly "Query & verify"). It opens a live scanner that checks each field against on-chain EAS attestations and shows a green check when verified.
The website loads verification from GET /api/verify/… (browsers cannot call Base RPC directly due to CORS). When all on-chain cells pass verification, the profile header shows a single ✓ Verified badge. Use the toolbar Verify profile button for a per-field breakdown.
If you see a Draft badge, verification uses the published on-chain profile, not local browser edits.
Verify API (one request)
Fetch the grid plus a full verification report — same checks as the website modal:
GET https://gridz.bio/api/verify/demo.gridz.eth
{
"ok": true,
"subject": "demo.gridz.eth",
"grid": { ... },
"report": {
"ok": true,
"cells": [{ "key": "alias", "result": { "status": "verified", "proof": "eas-onchain" } }],
"root": { "status": "verified", "proof": "manifest" }
}
}Offline verification (TypeScript)
For eas-onchain cells loaded from the API, pass an EAS RPC context so verifyGrid can fetch attestations from Base:
import { verifyGrid } from "@gridz/core";
import { createPublicClient, http } from "viem";
import { base } from "viem/chains";
const { grid } = await fetch("https://gridz.bio/api/profile/kevin.gridz.eth").then((r) => r.json());
const client = createPublicClient({ chain: base, transport: http("https://base.publicnode.com") });
const report = await verifyGrid(grid, {
allowDelegated: true,
eas: {
chainId: 8453,
easAddress: "0x4200000000000000000000000000000000000021",
cellSchemaUid: "0x394d8e67b1470cbdb7fa6c7d15d15d295ca81d822b55267939751a8a686abb87",
resolverAddress: "0x73c5e3944B780D4927c403d351A4F94875DC57B3",
subjectEns: "kevin.gridz.eth",
readContract: (args) => client.readContract(args),
},
});Offline verification (Python)
from gridz import verify_grid
import httpx
grid = httpx.get("https://gridz.bio/api/profile/kevin.gridz.eth").json()["grid"]
report = verify_grid(grid)CLI
gridz grid verify grid.jsonWhat verification proves
- Each cell value matches its on-chain EAS attestation (schema, attester, not revoked).
- The GridzResolver points at the same EAS UID and serves the same value via
text(). - Inline EIP-712 payloads (drafts / exports) additionally recover the signer locally.
Verification does not prove a human is "really" who they claim — it proves the cryptographic identity behind the ENS name signed the content.