
17 of 55 API keys our agent got on its own came without a browser. The first call is different: 61 of 66 first API or MCP calls it reached needed no browser.
At 36 of 168 products our agent had to copy the key from a dashboard in a browser, and at all 36 the first call then worked without one.
If you own an API, the dashboard copy is the step to look at first.
What our agent ran into, step by step
It got as far as the key step at 67 of 168. Of those 67, it got a key on its own at 55, needed no key at 7 because a documented route worked without an account, could not get a key at all at 5, and needed a human at none.
| What our agent reached | Count |
|---|---|
| Of the 168 products driven | |
| Reached the key step | 67 of 168 |
| Reached a first API or MCP call | 66 of 168 |
| Of the 67 that reached the key step | |
| Got a key on its own | 55 of 67 |
| Needed no key: a documented route worked without an account | 7 of 67 |
| Could not get a key at all | 5 of 67 |
| Needed a human for the key | 0 of 67 |
| Of the 55 keys it got on its own | |
| Got without a browser | 17 of 55 |
| Copied from a dashboard in a browser | 36 of 55 |
| Paid for as a credential (x402 or MPP) | 2 of 55 |
| Of the 66 first calls it reached | |
| Needed no browser | 61 of 66 |
| Needed a browser | 2 of 66 |
| Refused by the product | 3 of 66 |
The median from drive start to the API key was 8 minutes, where it got one. The median from drive start to the first working API or MCP call was also 8 minutes.
The pattern: the browser was needed for the key, not for the call
A key an agent can get over the API removes that step, and public docs already describe how it works.
AgentMail says: “Your agent can sign up programmatically using the Agent API. No console access needed.”
BazaarLink says of its agent registration endpoint: “It requires no login and no Authorization header.”
| What it does | Where it is public |
|---|---|
| Needs no login or console | BazaarLink[1]: no login and no Authorization header. AgentMail[2]: sign-up through its Agent API with no console access |
| Returns the key once | AgentStack[3]: “The key is returned exactly once and is never retrievable again.” |
| Sends a claim code to a human | AgentStack[3] emails a 6-digit claim code to the named address. AgentMail[2] sends a 6-digit OTP to the provided email, and confirming it gives full permissions |
| Caps a new agent account | AgentStack[3]: 25 credits that never refresh. AgentMail[2]: 1 inbox, no custom domains and 10 emails per day |
| Limits sign-up calls | AgentStack[3]: 5 per hour and 20 per day per IP address, 3 per day per email address |
Under RFC 7591[4] (IETF, July 2015), an OAuth client gets its credentials straight from an API call. RFC 7591 “defines mechanisms for dynamically registering OAuth 2.0 clients with authorization servers.”
The registration response returns a client identifier, plus “the client secret, if the client is a confidential client”
. On who may register, the RFC says the endpoint “SHOULD allow registration requests with no authorization”
. That is a recommendation, not a requirement, and a server may require an initial access token instead.
The MCP authorization spec of 2025-11-25[5] moved its preference. Client ID Metadata Documents are now the recommended way: “This approach enables clients to use HTTPS URLs as client identifiers, where the URL points to a JSON document containing client metadata.”
Dynamic Client Registration dropped from SHOULD to MAY: “This option is included for backwards compatibility with earlier versions of the MCP authorization spec.”
The last resort is to “Prompt the user to enter the client information if no other option is available”
.
Workload identity federation at Anthropic[6] and OpenAI[7] starts with an admin setup.
A paid credential skips the key, and it was the rarest path in our drives: 2 of 168 products. MPP overview[8] says services can “Accept payments from any client—agents, apps, or humans—without requiring signups, billing accounts, or API keys.”
Stripe[9] describes MPP as an open protocol “co-authored by Stripe and Tempo”
. The protocol requires that “Servers must not perform side effects (database writes, external API calls) for requests that have not been paid.”
In Coinbase’s x402 flow[10], “The server asks the CDP Facilitator to verify the payment.”
The server then asks the facilitator to settle it.
What to change in your product
If your key lives only in a dashboard, add one documented API call that returns a scoped key. Keep the dashboard for humans.
- An anonymous sign-up call that needs no login, as BazaarLink’s endpoint[1] does.
- The key returned once in the response, as AgentStack[3] does.
- A 6-digit claim code emailed to a named human.
- Hard caps until a human claims the account, for example a fixed number of credits that never refresh or a small daily send limit.
- Rate limits per IP address and per email address on the sign-up call.
- For OAuth or MCP servers: open registration as RFC 7591[4] recommends, and support for Client ID Metadata Documents[5].
- For pay per call: no side effects before payment (MPP protocol spec[11]).
How we measured
One real agent drove each of 168 products between 1 Oct 2026 and 27 Oct 2026. Per product, it signed up, tried to get a key and made a first API or MCP call, and we logged how the key was got (without a browser, from a browser dashboard or as a paid credential), where it got stuck and how long it took. Counts are per product with their base. The median time to the key covers drives where the agent got one, and the median time to the first working call covers drives that reached it. Scope: one agent, one drive per product, results as of the drive dates. Full limits are on the method page.