Grantor documentation#
OAuth with no authorization server. A caller presents a deed — a self-certifying credential it mints itself — and your app verifies it with a library call against a public on-chain registry. There is no auth server to run, trust, page at 3am, or subpoena. Grantor operates no service in this path; the trust anchor is a contract anyone can read.
A grantor is the party that grants a right. A deed is the artifact that records it. The word is deliberately plain and lowercase, the way passkey is: Grantor is the brand, a deed is the thing.
The 30-second model#
- Your app issues a challenge (the OIDC
nonceshape — one value, one use). - The caller signs or proves against it and returns a deed. No redirect, no token endpoint, no round trip to anyone.
- Your app calls
verify_deed, which checks the cryptography and reads the on-chain registry: is this tenant paid up, and for agents, is this member still un-revoked? - You mint your own session however you already do. Grantor never sees it.
Step 3 is a plain eth_call — a read. It costs no gas, needs no API key, and works from any RPC provider.
Pick your path#
| You are… | Start here |
|---|---|
| An app that needs to authenticate callers | Verify a deed |
| Adding wallet login for humans | Wallet login |
| Building an AI agent that needs API access | Agent tokens · Agent integration |
| Gating a remote MCP server | MCP server auth |
| Wondering how any of this works | Concepts |
| A contributor | Architecture · Contributing |
Three kinds of deed#
| Mode | Who holds it | Proves | On-chain check |
|---|---|---|---|
user-sig | a human with a wallet | control of a wallet-derived, app-scoped key; the app sees a pseudonym, not an address | tenant billing status |
agent-zk | an enrolled agent | ZK membership of the tenant's registry without revealing which member | membership-root recency (revocation) + billing |
admin-sig | a Grantor dashboard admin | control of a wallet address (identified, not pseudonymous) | none, deliberately — why |
user-sig and agent-zk both verify through one call, verify_deed. admin-sig has its own entry point that verify_deed refuses, so an ordinary app cannot accept an admin deed even by mistake.
Every capability, every language#
The product rule is all languages or no go: a capability that ships in one language has not shipped. Enforced by just capability-matrix, which inspects the generated binding surfaces rather than the Rust source.
| TypeScript | Python | Go | Rust | |
|---|---|---|---|---|
user-sig holder (wallet login) | ✅ | ✅ | ✅ | ✅ |
agent-zk holder (ZK proving) | ✅ | ✅ | ✅ | ✅ |
admin-sig holder | ✅ | ✅ | ✅ | ✅ |
| Deed verification (your app's side) | ✅ | ✅ | ✅ | ✅ |
| Deed guard (challenge store + single-use burn) | ✅ | ✅ | ✅ | ✅ |
There is no authorization server in this product — the credential self-certifies and your app verifies it against the public chain.
Reference#
- Concepts: the mental model — read this first.
- Machine docs:
llms.txt(index) ·llms-full.txt(everything, one file). - Every page here is also Markdown — same URL,
.mdinstead of.html. - Live, per RP deployment: an app that accepts deeds publishes its own
/.well-known/grantor-deeddiscovery document and challenge endpoint — see Sovereign tier § Discovery.
Guides#
- Concepts — the mental model
- Getting started
- Verify a deed — the relying-party side
- Wallet login —
user-sig, for humans - Agent tokens —
agent-zk, for machines - MCP server auth — gate a remote MCP server with a deed, no authorization server
- Sovereign tier — the full deed reference
- Errors
Agents (LLM-first)#
Internal (contributors)#
Status: developer preview. The contract and the full six-language end-to-end proof run on a local devnet (anvil). It has not been deployed to a public testnet or mainnet, and grantor-verify is not yet published to any package registry — today it resolves by path inside this workspace. It has not been audited. Do not put it in front of production money.
Licence: proprietary, all rights reserved. The source is readable — package registries distribute source — but that is not a grant of rights. You may use these libraries to integrate with Grantor; you may not fork, redistribute, or build a competing service with them. Full terms in LICENSE; enquiries for broader terms are welcome.