The signup form is not friction to be reduced.
It is a wall to be removed.
The machine economy runs a tab, not a signup.
Protocol trace (illustrative — from SPEC §21's arc); live in-browser run ships next.
→ define("serendipity") returns the real bundled definition — no model, no fake inference.
A signup form is six services a vendor sells to itself and charges to your time.
Handsel doesn't shrink the form — it unbundles it. Each job becomes a just-in-time step-up on one grant lineage, paid the instant it's needed and not before. The seventh job it simply drops.
| The form sold the vendor | Handsel re-provides it as | Paid when |
|---|---|---|
| Credential issuance | Rung 0 · guest a grant, on sight | on first call |
| Identity + contact capture | Rung 1 · claimed verified OIDC / email, same grant | quota runs out |
| Pricing consent + payment path | Rung 2 · mandated user-signed, spend-capped mandate — no card at the vendor | at commit |
| Risk filtering | Rung 3 · assured org attestation / higher cap | the floor demands it |
| A durable principal | always pairwise subject, stable bottom-to-top | always, silently |
| Making the user fund the vendor's risk | — | never |
Six jobs, one grant — each re-provided just in time, none demanded up front.
Six acts, in order. Each carried in a slot your client already speaks.
~20 lines of config. Keep your tool handler.
Mount the SDK over your existing endpoint. It serves the well-knowns, signs your tier schedule, emits the RFC-compliant 401/403 challenges unchanged, meters guest quota locally with no phone-home, and writes a vendor-signed receipt per call.
The vendor edge
import { createHandselVendor, mountHandselRoutes } from '@handsel/sdk'
import { Hono } from 'hono'
const app = new Hono()
const vendor = createHandselVendor({
product: 'lexica',
name: 'Lexica',
resource: 'https://api.example.com',
handselCore: 'https://core.handsel.ai',
signingKey: SIGNING_SEED, // 32-byte Ed25519 seed
pricing: { unit: 'call', price_usd_micros: 2000 }, // $0.002
tiers: {
guest: { calls_per_day: 5 }, // zero-form taste
claimed: { calls_per_day: 500 }, // silent step-up
trial: { sponsored: false, ttl_s: 1_209_600 },
mandated: {}, // terms are the mandate
},
termsHash: TERMS_HASH, // sha256 of your consent text
deletionSlaS: 604_800, // one week
})
mountHandselRoutes(app, vendor) // well-knowns + /handsel/*
app.all('/mcp', async (c) => {
const ok = await vendor.authorize(c.req.raw)
if (ok instanceof Response) return ok // 401/403 challenge, verbatim
const out = await yourTool(c.req.raw) // keep your own handler
await vendor.emitReceipt(ok, { path: '/mcp' })
return out
})
Field names verbatim from apps/vendor-dictionary and @handsel/sdk;
tier values illustrative (SPEC §22).
The ladder, one command at a time
npm create @handsel/vendor shipping — not yet on npm scaffoldnpx handsel keygen shipping — not yet on npm Ed25519 seednpx handsel register shipping — not yet on npm claim a tenantnpx handsel verify shipping — not yet on npm self-grading examnpx handsel claim shipping — not yet on npm connect Stripenpx handsel connect shipping — not yet on npm go live0 forms · 0 sales calls · 0 humans. KYC is Stripe's, caps are published, promotion is code.
Three depths, one gradient: SDK (20 lines) · proxy (zero code) ·
your agent (/handsel-integrate).
Your agent reads /llms.txt and opens the PR.
1.75% of Handsel-settled flow. $0 until money moves. The sandbox is free.
The rails take rides as an application_fee_amount on the vendor's own Stripe Connect
account — on the primary rail, Handsel is not merchant of record and holds $0.
Stripe runs in test mode today. No live payments move until a human signs off.
The ladder needs no one's permission — but we're hand-picking 3–5 design partners before the spec goes public.
If you sell a usage-priced API, the pitch is one sentence: we'll show you your API running behind Handsel — an unmodified agent client reaching your tool with zero forms, every call receipted, settlement in Stripe test mode — before you commit to anything.
One partner per category. First movers shape the tier schedule and the spec while both can still move, and get the handsel-enabled mark first when the registry flag ships.
We don't do forms — not even ours. Email is the whole flow:
The register stays honest here too: reference implementation, Stripe test mode, no external vendor live yet. You'd be among the first — that is the point.
Playground — paste your API's base URL and watch an unmodified agent climb it behind an ephemeral Handsel proxy: 401 challenge, zero-form guest grant, your real response, a co-signed receipt — sandbox tier, gone in an hour. Open the playground →
The signup form was the checkout counter of software sold to humans by persuasion.
Handsel is where software is bought by machines on evidence:
open ·
try ·
prove ·
commit ·
evaporate ·
settle