Handsel. Protocol rails for agent-native software
Reference implementation · Stripe test mode · No external vendor live yet
The end of the signup form

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.

the climb — discover → guest grant → first call → co-signed receipt

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.

Quickstart ›
0 forms · 1 grant · 6 acts
The wallSPEC §1

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 vendorHandsel re-provides it asPaid 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.

Integrate@handsel/sdk

~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 scaffold
$ npx handsel keygen shipping — not yet on npm Ed25519 seed
$ npx handsel register shipping — not yet on npm claim a tenant
$ npx handsel verify shipping — not yet on npm self-grading exam
$ npx handsel claim shipping — not yet on npm connect Stripe
$ npx handsel connect shipping — not yet on npm go live

0 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.

PricingSPEC §12.3 · §17

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.

Integer USD micros · Balances never negative · No cash-out, anywhere

Stripe runs in test mode today. No live payments move until a human signs off.

Design partners3–5 slots · pre-launch

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