# Agent sign-up check

> Seven checks for whether an AI agent can sign up for a developer platform, pay for it and use it on its own, and the results for 100 platforms on November 12, 2026.

URL: https://prized.dev/agent-signup-check

Each check reads a public file with a plain GET request and cites the spec it checks against. Check any domain with `GET https://prized.dev/api/agent-signup-check?domain=<domain>` (add `&api=<an API URL on that domain that needs a key>`; without one, a platform in the table is probed as its row was, and any other domain at `api.<domain>`, except a host on a shared host such as `vercel.app`, which has no API host of its own and is not probed for one), or run the script yourself (below). The answer is JSON: a verdict and a reason per check, a short quote where there is one, and every request made. For a platform in the table it also has `listed`: its row's score, rank and date, and each check whose verdict changed since (`fixed`, `better`, `worse`, `broke`, or `changed` for a check that ran in one and not the other); for any other domain `listed` is null. A check of the same domain in the last ten minutes is answered from cache (`cached: true`); add `&fresh=1` to run it again after a fix. The page opened with `?domain=<domain>` fills that check in, and runs it at once for a platform in the table, so `https://prized.dev/agent-signup-check?domain=<domain>` is a link to re-run it. A domain typed with www. that is in the table as its bare name is checked as that name. This API is the checker on the page, and it runs at most 12 checks per visitor, 30 of one domain and 300 in all in any 10 minutes (answers from its cache are not counted); past that it answers 429 with a Retry-After header. The script has no such limit on your own machine. A check also ends with 429, and no verdict, when the domain's files send it to another host that this API has already sent 120 requests in those 10 minutes. A platform the table lists without an API probe is checked that way only: an `api=` for it, or another host of its site, is refused.

## The seven checks

Each check passes, passes partly, or fails. Partly means the platform publishes something the check looks for, but short of the spec: it says it only in prose an agent can read, its file departs from the spec’s shape (a heading, a field, or a resource clients must not use), or the file stops short, such as an auth.md that says agents cannot register yet or metadata that names no authorization server. For the key check, partly is an API that refuses the signed-out call, usually with a 401, but without the WWW-Authenticate header the spec requires. That check sends no key. A check is not read when it would be a fail and one of its own files gave no answer: a server error, a 429, a bot wall, a failed connection, or a request the script’s own cap stopped (the dated run asks twice before it says so). That is not a fail: the reason says what happened at the URL and on which date, and the check still counts in the platform’s total. Sign-up by API, spend limits and payment handoff also read auth.md and llms.txt for prose; when only those went unread, the check stays a fail and its reason names the file.

1. auth.md. Does /auth.md tell an agent how to register, in the shape of the auth.md spec? Checked against [WorkOS auth.md, AUTH.md v0.6.0](https://github.com/workos/auth.md/blob/main/AUTH.md). 13 of 100 pass (2 not read).
2. Protected resource metadata. Is there RFC 9728 metadata that names the authorization server? Checked against [RFC 9728, sections 2, 3 and 3.3](https://www.rfc-editor.org/rfc/rfc9728). 18 of 100 pass (1 not read).
3. Sign-up by API. Can an agent find an API endpoint that creates an account, with no web form or CAPTCHA? Checked against [auth.md Step 1b (agent_auth in RFC 8414 metadata)](https://github.com/workos/auth.md/blob/main/AUTH.md#1b-fetch-the-authorization-server-metadata). 10 of 100 pass (1 not read).
4. Key works without a browser. Does a signed-out API call get a 401 with a WWW-Authenticate challenge, not a login page or a bot wall? Checked against [RFC 9110 section 15.5.2; RFC 6750 section 3; RFC 9728 section 5.1](https://www.rfc-editor.org/rfc/rfc9110#section-15.5.2). 20 of 95 pass.
5. Spend limits. Can an agent read the spend cap its key will have? Checked against [auth-md-spend-limits 0.1 (draft, Prized); draft-hardt-aauth-budgets-00](https://github.com/prized-dev/integrations/blob/auth-md-spend-limits/auth-md-spend-limits/README.md). 0 of 100 pass (1 not read).
6. Payment handoff. When money is needed, is there a machine-readable way for the agent to say so and hand over? Checked against [RFC 9110 section 15.5.3 (402); x402 v2 HTTP transport; draft-httpauth-payment; auth-md-spend-limits section 4](https://github.com/x402-foundation/x402/blob/main/specs/transports-v2/http.md). 2 of 100 pass (1 not read).
7. Docs in Markdown. Is there an llms.txt an agent can read? Checked against [llms.txt (llmstxt.org)](https://llmstxt.org/). 91 of 100 pass (2 not read).

## 100 platforms, November 12, 2026

None passes all seven. The highest score is 6 of 7 (Telnyx). 0 of 100 publish a spend cap in a machine-readable form the check accepts (the draft Prized wrote, or the AAuth budgets Internet-Draft, an individual submission); 6 more only mention limits or budgets in their docs. No platform passes that check, so none can pass all seven. 2 of 100 publish a machine-readable way for an agent to pay. 20 of 95 APIs answer a signed-out call with a challenge an agent can parse (a 401 with WWW-Authenticate, or a 402 payment requirement); most send a 401 with no WWW-Authenticate header. 8 checks on 3 platforms could not be read on the day of the run (the file gave no answer: a bot wall, a server error, a 429, a failed connection, or the script’s own request cap); they are shown as not read, not as fails. Prized scores 5 of 7 on the same script, tied with 3 others for rank 2 of 100. It fails spend limits and only partly passes payment handoff.

Each mark is pass, partly, fail, not read (the file gave no answer; not a fail), or not run. Ranked by checks passed; ties share a rank and are listed by name. Every reason, quote and request is in the results file (below).

| Rank | Platform | Site | Score | auth.md | Protected resource metadata | Sign-up by API | Key works without a browser | Spend limits | Payment handoff | Docs in Markdown |
| ---: | --- | --- | --- | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| 1 | Telnyx | telnyx.com | 6/7 | pass | pass | pass | pass | fail | pass | pass |
| 2 | Firecrawl | firecrawl.dev | 5/7 | pass | pass | pass | pass | fail | fail | pass |
| 2 | Kernel | kernel.sh | 5/7 | pass | pass | pass | pass | fail | fail | pass |
| 2 | Polar | polar.sh | 5/7 | pass | pass | pass | pass | fail | fail | pass |
| 2 | Prized | prized.dev | 5/7, 1 partly | pass | pass | pass | pass | fail | partly | pass |
| 6 | Boat | boat.dev | 4/7, 2 partly | pass | partly | pass | pass | fail | partly | pass |
| 6 | Bright Data | brightdata.com | 4/7, 1 partly | pass | pass | pass | partly | fail | fail | pass |
| 6 | Neon | neon.com | 4/7, 1 partly | partly | pass | pass | pass | fail | fail | pass |
| 9 | AgentMail | agentmail.to | 3/7, 2 partly | pass | partly | partly | pass | fail | fail | pass |
| 9 | Autumn | useautumn.com | 3/7, 2 partly | pass | pass | partly | partly | fail | fail | pass |
| 9 | Cloudinary | cloudinary.com | 3/7, 1 partly | pass | fail | partly | pass | fail | fail | pass |
| 9 | Context.dev | context.dev | 3/7, 2 partly | pass | partly | pass | partly | fail | fail | pass |
| 9 | Financial Datasets | financialdatasets.ai | 3/7, 1 partly | fail | fail | partly | pass | fail | pass | pass |
| 9 | PostHog | posthog.com | 3/7, 2 partly | partly | pass | partly | pass | fail | fail | pass |
| 9 | Sentry | sentry.io | 3/7 | fail | pass | fail | pass | fail | fail | pass |
| 9 | WorkOS | workos.com | 3/7, 1 partly | pass | fail | pass | partly | fail | fail | pass |
| 17 | Beam | beam.cloud | 2/7 | fail | fail | fail | pass | fail | fail | pass |
| 17 | Browserless | browserless.io | 2/7, 1 partly | fail | pass | fail | partly | fail | fail | pass |
| 17 | Clerk | clerk.com | 2/7, 3 partly | pass | partly | partly | partly | fail | fail | pass |
| 17 | Exa | exa.ai | 2/7, 3 partly | partly | pass | fail | partly | fail | partly | pass |
| 17 | Fly.io | fly.io | 2/7, 2 partly | partly | partly | fail | pass | fail | fail | pass |
| 17 | Hugging Face | huggingface.co | 2/7, 1 partly | fail | partly | fail | pass | fail | fail | pass |
| 17 | Loops | loops.so | 2/7, 2 partly | partly | pass | fail | partly | fail | fail | pass |
| 17 | Mailgun | mailgun.com | 2/7, 1 partly | fail | partly | fail | pass | fail | fail | pass |
| 17 | MongoDB Atlas | mongodb.com | 2/7 | fail | fail | fail | pass | fail | fail | pass |
| 17 | OpenAI | openai.com | 2/7 | fail | fail | fail | pass | fail | fail | pass |
| 17 | Perplexity | perplexity.ai | 2/7, 1 partly, 1 not read | not read | pass | fail | partly | fail | fail | pass |
| 17 | PlanetScale | planetscale.com | 2/7, 1 partly | fail | pass | fail | partly | fail | fail | pass |
| 17 | Railway | railway.com | 2/6, 1 partly | partly | pass | fail | not run | fail | fail | pass |
| 17 | Resend | resend.com | 2/7, 2 partly | partly | pass | fail | partly | fail | fail | pass |
| 17 | Supabase | supabase.com | 2/7, 1 partly | fail | pass | fail | partly | fail | fail | pass |
| 17 | Twilio | twilio.com | 2/7 | fail | fail | fail | pass | fail | fail | pass |
| 33 | AgentPhone | agentphone.to | 1/7, 2 partly | fail | fail | partly | partly | fail | fail | pass |
| 33 | Anthropic | anthropic.com | 1/7, 2 partly | fail | fail | fail | partly | partly | fail | pass |
| 33 | Apify | apify.com | 1/7, 5 partly | partly | partly | fail | partly | partly | partly | pass |
| 33 | AssemblyAI | assemblyai.com | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | AWS | aws.amazon.com | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | Blaxel | blaxel.ai | 1/7, 3 partly | partly | partly | fail | partly | fail | fail | pass |
| 33 | Brave Search API | brave.com | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | Browser Use | browser-use.com | 1/7, 4 partly | partly | partly | fail | partly | fail | partly | pass |
| 33 | Browserbase | browserbase.com | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | Cerebras | cerebras.ai | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | Cloudflare | cloudflare.com | 1/7, 2 partly | partly | fail | fail | partly | fail | fail | pass |
| 33 | Cohere | cohere.com | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | Coinbase Developer Platform | cdp.coinbase.com | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | Convex | convex.dev | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | Daytona | daytona.io | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | Deepgram | deepgram.com | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | DigitalOcean | digitalocean.com | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | E2B | e2b.dev | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | ElevenLabs | elevenlabs.io | 1/7, 2 partly | fail | partly | fail | partly | fail | fail | pass |
| 33 | fal | fal.ai | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | Fireworks AI | fireworks.ai | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | Freestyle | freestyle.sh | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | GitHub | github.com | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | GitLab | gitlab.com | 1/7, 2 partly | fail | partly | fail | partly | fail | fail | pass |
| 33 | Google Cloud | cloud.google.com | 1/7 | fail | fail | fail | pass | fail | fail | fail |
| 33 | Google Gemini API | ai.google.dev | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | Groq | groq.com | 1/7, 2 partly | fail | fail | fail | partly | partly | fail | pass |
| 33 | Heroku | heroku.com | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | Hetzner Cloud | hetzner.com | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | Hyperbrowser | hyperbrowser.ai | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | Inkbox | inkbox.ai | 1/7, 3 partly | fail | partly | partly | partly | fail | fail | pass |
| 33 | Linear | linear.app | 1/6 | fail | fail | fail | not run | fail | fail | pass |
| 33 | Mistral | mistral.ai | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | Modal | modal.com | 1/6, 1 partly | fail | fail | fail | not run | partly | fail | pass |
| 33 | Morph Cloud | morph.so | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | NanoGPT | nano-gpt.com | 1/7, 5 partly | partly | partly | fail | partly | partly | partly | pass |
| 33 | Netlify | netlify.com | 1/7, 2 partly | partly | fail | fail | partly | fail | fail | pass |
| 33 | Northflank | northflank.com | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | OpenRouter | openrouter.ai | 1/7, 2 partly | fail | fail | fail | partly | partly | fail | pass |
| 33 | Orthogonal | orthogonal.com | 1/7, 3 partly | fail | fail | partly | partly | fail | partly | pass |
| 33 | Paddle | paddle.com | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | Parallel | parallel.ai | 1/7, 4 partly | partly | fail | partly | partly | fail | partly | pass |
| 33 | Pinecone | pinecone.io | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | Postmark | postmarkapp.com | 1/7, 2 partly | partly | fail | fail | partly | fail | fail | pass |
| 33 | Render | render.com | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | Replicate | replicate.com | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | Replit | replit.com | 1/6 | fail | fail | fail | not run | fail | fail | pass |
| 33 | Runloop | runloop.ai | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | RunPod | runpod.io | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | ScrapingBee | scrapingbee.com | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | SerpApi | serpapi.com | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | Steel | steel.dev | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | Stripe | stripe.com | 1/6 | fail | fail | fail | not run | fail | fail | pass |
| 33 | Tavily | tavily.com | 1/7, 2 partly | fail | fail | fail | partly | fail | partly | pass |
| 33 | Together AI | together.ai | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | Turso | turso.tech | 1/7, 2 partly | fail | partly | fail | partly | fail | fail | pass |
| 33 | Upstash | upstash.com | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | Vapi | vapi.ai | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | Vercel | vercel.com | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 33 | xAI | x.ai | 1/7, 1 partly | fail | fail | fail | partly | fail | fail | pass |
| 93 | CodeSandbox | codesandbox.io | 0/7, 1 partly, 6 not read | not read | not read | not read | partly | not read | not read | not read |
| 93 | DeepSeek | deepseek.com | 0/7, 1 partly | fail | fail | fail | partly | fail | fail | fail |
| 93 | Deno Deploy | deno.com | 0/7, 1 partly, 1 not read | fail | fail | fail | partly | fail | fail | not read |
| 93 | Jina AI | jina.ai | 0/7, 2 partly | fail | fail | fail | partly | fail | fail | partly |
| 93 | Koyeb | koyeb.com | 0/7, 1 partly | fail | fail | fail | partly | fail | fail | fail |
| 93 | Lemon Squeezy | lemonsqueezy.com | 0/7, 1 partly | fail | fail | fail | partly | fail | fail | fail |
| 93 | SendGrid | sendgrid.com | 0/7, 1 partly | fail | fail | fail | partly | fail | fail | fail |
| 93 | Sprites | sprites.dev | 0/7, 1 partly | fail | fail | fail | partly | fail | fail | fail |

## How it checks

- GET requests only, to files published for agents, to one documented API URL without a key, and sometimes to one made-up path that tells a real auth.md from a page a site serves at every path. Nothing is posted, no account is made, and no credential is sent. At most 24 requests per check of a platform, redirects included; a run checks a platform a second time when a request got no answer (a network failure, a server error, a 429 or a bot wall).
- https on port 443 only, public addresses only, 1 MB and 8 seconds per response. The script names itself in its User-Agent (PrizedAgentSignupCheck/0.2.5, with a link to this page).
- For 95 of the 100 platforms we picked one documented API endpoint that needs a key; the results file lists it. GraphQL-only APIs and platforms with no public REST API were not probed, and neither was Stripe, whose API the tooling that makes the run does not call. Those rows count six checks, so six is the most they can pass.
- Protected resource metadata is looked for at the URL the probed API’s 401 names, then on the site’s own host, then on the API’s host (also for a GraphQL API that is not probed). Authorization server metadata is read from the first server named in protected resource metadata that a client may use, or else from the site’s own host, then the API’s host. For protected resource metadata, a separate MCP server host is read only when the site’s or the API host’s well-known path redirects there, or the API’s 401 points there; the check does not go to a host for it because auth.md or llms.txt names that host. Netlify, Cloudinary and Render, among others, publish protected resource metadata for their MCP servers on separate hosts, so they fail that check.
- A check sees what a platform publishes, not what happens after a sign-up form is sent. A platform that lets agents in through a CLI or SDK it never describes in a public file scores lower here than it would in use. A check that would fail while one of its own files gave no answer (a bot wall, a server error, a 429, a failed connection, or a request the script’s own cap stopped) is shown as not read, with what happened at the file’s URL and the date; it is not counted as a fail, and it is not a pass. A bot wall in front of the API itself still fails the key check.
- Three verdicts were corrected by hand after review, where the script matched text about something else: Coinbase Developer Platform (payment handoff), Stripe (payment handoff) and xAI (spend limits). Each reason in the results says so and gives the script’s own verdict.
- Prized wrote this checker, picked the platforms, and wrote the spend-limits draft that two of the checks accept. Prized is one of the platforms listed under sandboxes and compute and competes with others in that group. The payment check’s prose patterns for billing_url and billing_required were added after reading Prized’s and Boat’s auth.md; they apply to every platform. Prized is scored by the same code as everyone else and sorted with them.
- This is one dated run. Platforms change their files; run the script again for today’s answer.

## Run it yourself

Node 18 or later, no dependencies:

```sh
curl -fsSLO https://prized.dev/agent-signup-check.mjs
node agent-signup-check.mjs example.com --api https://api.example.com/v1/me
```

The script is agent-signup-check/0.2.5. The results of this run, with every reason, quote and request: https://prized.dev/agent-signup-index/2026-11-12.json

## Badge

A platform in the table can show its dated result: the badge shows the score from the latest published run and that run's date, never a live check, and it changes when a new run is published. The badge is `https://prized.dev/agent-signup-check/badge/<site>.svg`, with `<site>` as the Site column gives it, and it links to that platform's row, `https://prized.dev/agent-signup-check#<site>`. The same words for shields.io are at `https://prized.dev/agent-signup-check/badge/<site>.json`. For Prized:

```md
[![Agent sign-up check result for prized.dev](https://prized.dev/agent-signup-check/badge/prized.dev.svg)](https://prized.dev/agent-signup-check?utm_source=badge&utm_campaign=prized.dev#prized.dev)
```

```html
<a href="https://prized.dev/agent-signup-check?utm_source=badge&amp;utm_campaign=prized.dev#prized.dev"><img src="https://prized.dev/agent-signup-check/badge/prized.dev.svg" alt="Agent sign-up check result for prized.dev"></a>
```

Badges exist only for platforms in the table; any other name is a 404.

## A result looks wrong

Email team@prized.dev, or open an issue: https://github.com/prized-dev/integrations/issues. Source, targets, evidence and history on GitHub: https://github.com/prized-dev/integrations/tree/main/agent-signup-check
