// api
Certificates as an input to your product.
Everything this site shows, as JSON, read from the contract. Writes go to the contract itself, signed by your own wallet.
Read
| method | path | returns |
|---|---|---|
| GET | /api/v1/certificates | The newest certificates, newest first. |
| GET | /api/v1/certificates/:id | One certificate, as the chain holds it. |
| GET | /api/v1/certificates?url= | The newest captures of one url, newest first. |
| GET | /api/v1/certificates?digest= | The first certificate carrying a claims digest, or a 404. |
| GET | /api/v1/watches/:id | A watch, with its page's history and the change between captures. |
| GET | /api/v1/assessments?from=&to= | The judgment of the change between two captures, or a 404. |
| GET | /api/contract-source | The contract's source, byte for byte, as text. |
Responses are cached for five seconds. Every field name mirrors the contract's own views, so the same record can be read off the chain with no part of this site.
A certificate
curl https://getstanding.xyz/api/v1/certificates/0
The newest certificate, rendered by the function that serves the endpoint.
{
"certificate": {
"id": 0,
"url": "https://standing-henna.vercel.app/walkthrough/terms.html",
"kind": "page",
"claims": [
"accounts with no activity for 12 months are closed",
"northwind exchange is not a real business",
"refunds are available within 30 days of purchase",
"support replies to every ticket within one business day",
"trading fee is 1 percent of each order",
"withdrawals are limited to 5,000 gen per day"
],
"claims_digest": "9661bc614f76fa23f65f9ab161746f05b1886c48f7c22481eb13d8307192f4d9",
"cloaking": false,
"at": "2026-09-16T01:08:05Z",
"requester": "0x3e1D268c8B1Ba7d042968ab713467C5631831513",
"watch_id": null,
"previous": null,
"records": "Independent validators each read this url at this time and confirmed every claim below against their own copy of the page.",
"url_html": "https://getstanding.xyz/c/0"
}
}Write
Call the contract with any GenLayer client. Each payable call takes exactly the price its stats() view reports at that moment, and refuses anything else with a sentence saying so.
| method | price | does |
|---|---|---|
| notarize(url) | 4 wei GEN | Certify what a page states now. |
| notarize_contracts(targets, method_sets) | 1 wei GEN each | Record other contracts' zero-argument views, up to ten per call. |
| watch(url, cadence_hours) | 4 wei GEN per capture | Prepay captures of a page on a cadence. |
| capture_watch(watch_id) | free | Take a watch's due capture. Any account may. |
| assess(cert_a, cert_b) | 2 wei GEN | Put one question about two captures of a page. |
Judgments, not just diffs
A diff between two captures reports the same thing whether a fee moved from one percent to five or a sentence was reworded. The judgment separates them, answered material, immaterial or unclear, and the verify page sets out how each is reached. A 404 from the assessments endpoint means nobody has put that question yet, which is a different fact from any verdict.