URL: /plays/keyless-signup · Id: `play:keyless-signup`

# Keyless signup

> Lets an agent pay for your API from its first call, with no signup, and offers it a key once it keeps paying.

Lets an agent pay for your API from its first call, with no signup, and offers it a key once it keeps paying.

```text title="Run one · Ask"
Let agents pay for Leaseline’s rent-comps lookup at 0.2¢ a call from their first call, with no signup, and show me the reply an agent gets, in try mode.
```

```ts title="Run one · SDK"
import { $ } from 'startup-builder'

const goal = await $.try.Goal.pursue({
  goal: 'Let agents pay for Leaseline’s rent-comps lookup at 0.2¢ a call from their first call, with no signup, and show me the reply an agent gets',
  budget: { amount: 4, currency: 'USD' },
  use: ['Offer.syndicate', 'Lead.route'],
})
console.log(goal.estimate.fill) // 1 inbound
```

| What it does | What you do | What it costs | When you hear back |
| --- | --- | --- | --- |
| Answers an agent’s first priced call with the price, takes its payment in the same call, and offers a key and an account once it keeps paying. | 21 minutes in week 1, then 18 more minutes by week 4. | Calls about $3 a month. | A paid call in seconds. |

| Runs on | [Agent-ready offer](/capabilities/check-ai-answers/agent-ready-offer) (Workflow), then [Inbound routing](/capabilities/convert-visitors/inbound-routing) (Workflow) |
| --- | --- |
| Runs inside | [Onboarding](https://startupbuilder.dev/workflows/processes/onboarding) |
| Ratings | [Scalability, cost and latency, rated 1 to 5](https://startupbuilder.dev/workflows/customer/plays/keyless-signup#ratings) on the hub Play page |

## What it sends
### The key offer, after the third paid call · In the third reply

> You have made 3 paid calls this month. A key and an account keep your history and bill monthly at the same 0.2¢ a lookup.
>
> Claim it at the link in `next`; nothing changes until you do.

## Start it this week
1. **Price the call.** Put a per-unit Price on the call in Stripe: 0.2¢ a lookup here. Your agent writes it into the price file.
2. **Answer with the price.** A call with no key gets a 402 with the price and a `next` link. The agent pays in the same call and gets its answer.
3. **List it where agents look.** Your agent submits the API to the Stripe Directory, so agents that need rent comps find a call they can pay for.
4. **Offer a key once it keeps paying.** After 3 paid calls in 30 days, the reply offers a key and an account. Your agent never asks before that.

## Did it work
**Watch:** Count the agents that paid for at least one call each month, and how many take the key once offered.

Your dashboard shows your rate from week 3.

If this works, you see it first in Paid-call customers, then in new customers.

### The math
agent callers × priced % × pay % × settles % = 100 × 70% × 25% × 80% = about 14 customers a month

| Input | Value | This month | Why this number | Made yours by |
| --- | --- | --- | --- | --- |
| Agents that call with no key a month | 100 | 100 callers | Agents that find the API in the Stripe Directory or a registry | Your own rate, from the readout once it has its sample |
| Reach a priced Verb | 70% | 70 priced calls | The free calls answer what the API is; the work is priced | Your own rate, from the readout once it has its sample |
| Pay at the 402 | 25% | 18 payers | An agent that holds a payment token or a wallet pays in the same call | Your own rate, from the readout once it has its sample |
| The payment settles | 80% | 14 customers | A payment refused above the agent’s own limit does not settle | Your own rate, from the readout once it has its sample |

**Calls** $2.91 for the Directory listing and the weekly check (1 run × $2.91), plus 5.6¢ for routing each paying agent as a Lead (14 runs × 0.4¢).
About $2.97 a month in cash. At 14 customers a month, that is about 21¢ a customer in cash, before your hours.

It runs from week 1, so the first customer lands about week 1. That is 14 new customers a month at full rate, under 15 min a week of your time, and a loaded CAC of $4.85: cash plus your hours at $100.

### When it breaks
| Symptom | Cause | Fix | Watched by |
| --- | --- | --- | --- |
| Pays at the 402: under 1 in 5 priced calls, at 100 priced calls | The 402 names a rail the caller does not hold | Accept the agent payment token and stablecoins as well as cards | [`Offer.publish`](https://startupbuilder.dev/business/nouns/offer/publish) |
| Keyless callers: under 20 a month, after 60 days | No catalog agents read lists the API | Submit it to the Stripe Directory and the MCP registry | [`Post.publish`](https://startupbuilder.dev/business/nouns/post/publish) |
| Key offers claimed: under 1 in 4, at 12 offers | The account adds nothing a paying agent lacks | Put a volume Price on the account | [`Offer.publish`](https://startupbuilder.dev/business/nouns/offer/publish) |

## How it decides
**When it starts, who runs it, what it does next and when it won’t send**

**Use it when:** An API, MCP server or agent with a per-unit price. If no per-unit price in Stripe, first publish the call’s per-unit price in Stripe. If no agent calls the API yet, run [Agent registries](/plays/agent-registries) instead.

**When it starts.** When a call with no key reaches a priced Verb, one agent makes its third paid call in 30 days, or the per-unit price changes in Stripe.

**Who runs it.** Your tester agent runs it. Spend over your Demand Budget asks you first. Ads go live on their own once you set the budget. One approval rule on `publish` makes every ad wait for you.

**What it can do next.** When someone writes back, it sorts the reply (interested, send me pricing, not now, wrong person, out of office, question it can’t answer, or stop) and gives each its own next step.

**When it hands to you.** When a signup who fits asks for a call, it comes to you with their answers and times to offer.

**When it won’t send.** It pauses itself when one of its checks fails, and tells you which. Every pause and how to clear it: [Refusals](/code/refusals).

**Your settings.** Every setting is one file your agent edits, with the calls behind it: [Code](/code).

| Fact | Value |
| --- | --- |
| Play | `play:keyless-signup` |
| Runs inside | `process:onboarding` |
| Reads | `metric:paid-call-customers` over 28 days |
| Calls | `Offer.syndicate`, `Lead.route` |
| Hypothesis | [The hub Play's Hypothesis and Learn step](https://startupbuilder.dev/workflows/customer/plays/keyless-signup#loop) |