the handshake
Signed intent.
Verifiable in one round-trip.
Every request from a verified customer (human or agent-acting-for-human) arrives as a signed envelope. You resolve their key, check the scope, and act. The whole exchange fits in one HTTP round-trip and it's cryptographic — not "we hope they clicked the box in 2022."
Five steps, one round-trip
-
1
Intent is composed and signed
The customer's client (browser, mobile app, or delegated agent) builds an intent envelope
{from, intent, scope, expires, nonce}and signs it with an ed25519 key rooted at/u/<handle>. Delegated agents sign with a scoped subkey. -
2
Envelope hits your endpoint
Any surface you already run: support inbox, refund API, agent gateway. The envelope is a JSON blob in the body or the
X-Handle-Intentheader — you pick. -
3
You resolve the handle's keys
Fetch
https://username.md/u/<handle>/.well-known/keys. Cache the JWKS response for its TTL (default 60s). No new SDK — plain HTTP+JSON. -
4
Verify signature + scope + expiry
Standard ed25519 verify. Check
scopeagainst what the intent actually asks for. Checkexpiresagainst now. Reject on mismatch. -
5
Act — and log the receipt
Store the signed envelope with the resulting action. That envelope is your consent receipt: replayable, non-repudiable, revocable. Refund disputes get shorter.
The envelope, up close
Everything is public-key verifiable. The customer never gives you their private key; you never store one. The scope is bounded. The expiry is short. The nonce prevents replay.
Where the verification runs
Edge middleware
10-line Node/Go/Python middleware in front of your API. Rejects invalid envelopes before they touch business logic.
API gateway plugin
Kong, Envoy, or Traefik plugin. Verifies once, forwards a trusted X-Verified-Handle
header to your services.
Helpdesk hook
Zendesk/Freshdesk/FreeScout inbound webhook. Tags the ticket with the verified handle and surfaces the scope to your agent.
What you don't have to build
- A key-management system. Customers hold their own keys via username.md.
- A revocation UX. Customers revoke agents from their side; your cached JWKS refreshes on TTL.
- A phishing-detection heuristic. If the signature verifies against a real handle, the intent is real.
- A "was this AI or human?" classifier. The envelope tells you which agent signed.