Sign up from an agent
An AI agent can sign up for froog without a human pasting an API key. froog implements auth.md, the WorkOS agent registration protocol, like boat. The contract is a machine-readable file at froogcorp.com/auth.md. Give the agent this instruction:
Follow https://froogcorp.com/auth.md and start a froog sandbox free trial for me.
- It finds the endpoints: a
401from the API carriesWWW-Authenticate: Bearer resource_metadata="https://api.froogcorp.com/.well-known/oauth-protected-resource/v1", and/.well-known/oauth-authorization-serverhas theagent_authblock (the same document as for MCP clients when OAuth for MCP is on: its token endpoint takes both flows' grants). - It registers:
POST /v1/agent/identitywith{"type": "anonymous"}, or{"type": "service_auth", "login_hint": "you@example.com"}when it knows your email. - It sends you a link and a 6-digit code. You open the link, sign in (any method), and type the code. A registration bound to an email needs an account with that address (
403 wrong_accountotherwise). - It polls
POST /v1/oauth2/tokenand gets an API key on your account. Then it starts your plan's free trial the usual way (POST /v1/billing/planreturns Stripe Checkout, you enter the card).
| Method | Token | What the agent can do |
|---|---|---|
| Anonymous | At once, by exchanging its identity assertion | Only account.read (GET /v1/account, /v1/limits). Anything else answers 403 claim_required until you claim it. |
Email (service_auth) | After you sign in and type the code | It must know your email. |
A claimed agent's key has the actions to create and run sandboxes, snapshots and files, read the environment, and billing.trial: it can read billing and start the free trial (choose the first plan, you complete Stripe Checkout). It can't change or cancel a plan, pay from the wallet, or create API keys (403 api_key_action_forbidden). The agent can exchange its identity assertion for a new key, which revokes the previous one, only while its current key is live. Revoke the key any time on the API keys page, with POST /v1/oauth2/revoke or POST /oauth/revoke: that ends the agent's registration, so its assertion gets no new key (invalid_grant) and it must register and be claimed again. The same goes when the key expires after 90 days. froog doesn't accept identity assertions from agent providers (ID-JAG): sending one answers issuer_not_enabled. Claim tokens last 24 hours, codes 10 minutes and 5 tries, and each network (an IPv4 address or an IPv6 /64) can register 10 agents an hour.