A carbon credit should only ever count once.
Singletonne is a shared registry that enforces it. AI reads and rates every certificate, and a smart contract refuses any serial number that has already been registered or retired, no matter who submits it or how the paperwork is dressed up.
The problem
A carbon credit stands for one tonne of CO₂ kept out of, or taken out of, the atmosphere. Its whole value rests on being counted once. When it is counted twice, two organisations report the same cut, and the real emissions are higher than anyone's books say.
- Double selling
- The same serial numbers are sold to two buyers. This is easiest where brokers buy large blocks and resell them in slices.
- Double claiming
- Credits that were already retired are claimed again, often as a re-saved copy or screenshot of a genuine certificate.
- Double issuance
- The same reduction is credited twice, for example by listing one project with two registries under different IDs.
The market's own integrity standard treats this as non-negotiable: the ICVCM's Core Carbon Principles say credits shall only be counted once towards achieving mitigation targets or goals
. The scale is real too. In 2024, buyers retired about 182 million tonnes of credits across the ten largest standards, according to Ecosystem Marketplace data.
Each registry keeps its own records, and certificates travel as PDFs. A buyer or auditor holding one has no neutral, shared place to check whether those exact serials were already sold or claimed.
How it works
- 1
AI reads the certificate. Gemini extracts the registry, project, vintage and serial range from a PDF or image, and rates the credits on additionality, permanence, baseline integrity and verification. Fixed rules then double-check its reading; Verra serial numbers, for instance, encode the exact block, project and vintage.
- 2
The AI vouches, the owner submits. The server signs what the AI found (an EIP-712 attestation) for one specific wallet. The owner submits it from that wallet. Neither the owner nor the server can register credits alone, and a signature can't be edited or reused by anyone else.
- 3
The contract decides. The registry contract rejects any serial range that overlaps one already registered, including retired ones, any certificate that was registered before, and any second retirement. Retired credits can never be moved.
- 4
Anyone can check. Every batch has a public page and QR code. Buyers can check a serial range before paying. Auditors can check a certificate without uploading it: it is hashed in their own browser.
Who it's for
- Sellers and brokers
- Register your inventory so nobody, including someone holding a copy of your certificate, can sell the same serials.
- Companies making climate claims
- Buy only credits that are registered and not yet retired, then retire them here so the claim is public and final.
- Auditors, regulators, journalists
- Check any certificate or serial range in seconds, with no account and nothing uploaded.
- Registries and marketplaces
- Call the public API before listing or settling a trade, and get an answer straight from the contract.
Impact
Singletonne measures its own impact: every refused attempt is a quantity of tonnes that would otherwise have been counted twice. Registered and retired totals are read live from the contract. Refusals are recorded only after the server re-runs the attempt against the contract and sees it rejected.
Reading the contract…
This deployment runs on the Sepolia test network, seeded with publicly published retirement certificates.
What you can rely on
- Enforced by the contract
- No overlapping serials within a project, no certificate registered twice, no batch retired twice, no movement after retirement, and no registration without an attestation for that exact wallet and those exact details.
- Relies on the AI attester
- Reading the certificate correctly and normalising project IDs. If its key were compromised, an administrator can revoke it and pause the registry; every batch records which attester signed it.
- Not covered yet
- The same project listed with two registries under different IDs is flagged by the AI layer, not blocked on-chain. The AI rating is an indicative screen of the document and project type, not an audit of the project itself.
For developers
Two read-only endpoints are open to any site or tool, with CORS enabled and a limit of 60 lookups per minute per address. Both answer from the contract.
# Are these serials already registered or retired?
GET /api/check-serials?registry=Verra&projectId=VCS%202481&from=757866216&to=757866431
{ "available": false,
"query": { "registry": "verra", "projectId": "2481", "quantity": 216, ... },
"conflict": { "batchId": 1, "status": "retired", "beneficiary": "...", "url": ".../credit/1", ... } }
# Is this certificate registered? (docHash = keccak256 of the file's bytes)
GET /api/verify?docHash=0x...
{ "registered": true, "batch": { "batchId": 1, "status": "active", "owner": "0x...", ... } }The contract itself is public: CarbonCreditRegistry on Sepolia. Call findOverlap or getBatch directly if you would rather not trust this site at all.
What comes next
- Partial retirement: split a batch when only part of it is claimed.
- Serial parsers for Gold Standard, ACR and Climate Action Reserve, so every registry gets the same fixed-rule cross-check Verra has.
- Direct imports from registry APIs, not just certificates.
- Mainnet or an Ethereum layer 2, with attestations from several independent verifiers instead of one key.
- Flags for credits used toward national targets under Article 6 of the Paris Agreement.
Built for the ClimateChain Global Hackathon 2026, Track 1: Carbon Markets & Emissions Transparency.
Sources: