# Only 17 of 55 API keys our agent got came without a browser

61 of 66 first API or MCP calls our agent reached needed no browser. The key was where it needed one: it copied 36 keys from a dashboard.

Source: https://agentdrives.com/research/api-keys-without-a-browser?via=md · Published 2026-10-28 · 168 products, driven 2026-10-01 to 2026-10-27

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.” ([source](https://agentmail.to/docs/agent-onboarding)) BazaarLink says of its agent registration endpoint: “It requires no login and no Authorization header.” ([source](https://bazaarlink.ai/en/blog/ai-agent-auto-register-api-key-en))

| What it does | Where it is public |
|---|---|
| Needs no login or console | [BazaarLink](https://bazaarlink.ai/en/blog/ai-agent-auto-register-api-key-en): no login and no Authorization header. [AgentMail](https://agentmail.to/docs/agent-onboarding): sign-up through its Agent API with no console access |
| Returns the key once | [AgentStack](https://agentstack.build/docs/developers/rest-agent-signup): "The key is returned exactly once and is never retrievable again." |
| Sends a claim code to a human | [AgentStack](https://agentstack.build/docs/developers/rest-agent-signup) emails a 6-digit claim code to the named address. [AgentMail](https://agentmail.to/docs/agent-onboarding) sends a 6-digit OTP to the provided email, and confirming it gives full permissions |
| Caps a new agent account | [AgentStack](https://agentstack.build/docs/developers/rest-agent-signup): 25 credits that never refresh. [AgentMail](https://agentmail.to/docs/agent-onboarding): 1 inbox, no custom domains and 10 emails per day |
| Limits sign-up calls | [AgentStack](https://agentstack.build/docs/developers/rest-agent-signup): 5 per hour and 20 per day per IP address, 3 per day per email address |

Under [RFC 7591](https://www.rfc-editor.org/rfc/rfc7591.html) (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.” ([source](https://www.rfc-editor.org/rfc/rfc7591.html)) The registration response returns a client identifier, plus “the client secret, if the client is a confidential client” ([source](https://www.rfc-editor.org/rfc/rfc7591.html)). On who may register, the RFC says the endpoint “SHOULD allow registration requests with no authorization” ([source](https://www.rfc-editor.org/rfc/rfc7591.html)). 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](https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization) 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.” ([source](https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization)) Dynamic Client Registration dropped from SHOULD to MAY: “This option is included for backwards compatibility with earlier versions of the MCP authorization spec.” ([source](https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization)) The last resort is to “Prompt the user to enter the client information if no other option is available” ([source](https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization)).

Workload identity federation at [Anthropic](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation) and [OpenAI](https://developers.openai.com/api/docs/guides/workload-identity-federation) 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](https://mpp.dev/overview) says services can “Accept payments from any client—agents, apps, or humans—without requiring signups, billing accounts, or API keys.” ([source](https://mpp.dev/overview)) [Stripe](https://docs.stripe.com/payments/machine/mpp?locale=en-US) describes MPP as an open protocol “co-authored by Stripe and Tempo” ([source](https://docs.stripe.com/payments/machine/mpp?locale=en-US)). The protocol requires that “Servers must not perform side effects (database writes, external API calls) for requests that have not been paid.” ([source](https://mpp.dev/protocol)) In [Coinbase's x402 flow](https://docs.cdp.coinbase.com/x402/core-concepts/how-it-works), “The server asks the CDP Facilitator to verify the payment.” ([source](https://docs.cdp.coinbase.com/x402/core-concepts/how-it-works)) 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](https://bazaarlink.ai/en/blog/ai-agent-auto-register-api-key-en) does.
- The key returned once in the response, as [AgentStack](https://agentstack.build/docs/developers/rest-agent-signup) 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](https://www.rfc-editor.org/rfc/rfc7591.html) recommends, and support for [Client ID Metadata Documents](https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization).
- For pay per call: no side effects before payment ([MPP protocol spec](https://mpp.dev/protocol)).

## 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](/method).

## Method and limits

- Products: 168, driven 2026-10-01 to 2026-10-27.
- Numbers: each one links to its definition and the products behind it.
- Limits: Cloudflare has listed our agent as a signed agent since 24 October 2026. Drives before 24 October 2026 ran signed but unlisted: a check could see the signature but had no listed identity to trust. No other bot-check provider lists it yet.
- Every number, with its products: [our facts](/data/facts). How we drive and score: [our method](/method).

## Questions

**Can an AI agent sign up for my API and get a key without a human or a browser?**

It can, if your product offers a way. Our agent did it at 17 of 168 products, driven 1 to 27 Oct 2026.

**If my key is only in a dashboard, does an agent give up or drive a browser to get it?**

Ours drove the browser. At 36 of 168 products it copied the key from a dashboard, and at 36 of 168 the first call then worked without a browser. It could not get a key at all at 5 of the 67 products where it reached that step.

**How long does it take an agent to get from sign-up to a first working call?**

The median was 8 minutes from drive start to the first working API or MCP call. The median to the key itself was also 8 minutes, counted where the agent got one.

**How do I let agents get a key without opening the door to abuse?**

Cap and limit the account until a person claims it. AgentStack limits sign-up to 5 calls per hour and 20 per day per IP, and 3 per day per email. Its agent workspaces hold 25 credits that never refresh, and a 6-digit claim code goes to a named human. If you run OAuth, RFC 7591 lets you require an initial access token instead of open registration.

**Should I offer pay-per-call (x402 or MPP) instead of a key?**

Our agent paid for its credential at 2 of 168 products. MPP lets you accept payments without sign-ups, billing accounts or API keys, but your server must do no database writes or external calls for unpaid requests. With x402 through Coinbase, a facilitator checks and settles the payment for you.

**Which tools should an agent builder pick to run end to end without a browser?**

Pick tools that document a sign-up or key call. 61 of 66 first calls our agent reached needed no browser. Our agent got 17 of its 55 keys without a browser. Public examples include AgentMail, whose agent can sign up through its API with no console, and BazaarLink, whose registration needs no login.
