# auth.md — how an agent authenticates here

> Everything this site publishes is public. There is nothing to log in to, and no
> credential is issued to an agent.

## What is public

Every path listed in https://agenticwebscore.com/bot is public, unauthenticated and safe to fetch
without credentials. There are no cookies to carry, no session to establish, and no
token to present.

## What requires authentication

Nothing. `POST /api/scan`, `POST /api/badge/claim`, `POST /api/badge/verify`, and
`POST /api/theme` accept a request body, and none of them authenticates the caller.
None is privileged either. A scan only reads pages the public web can already read. A
badge claim returns a token, and nothing is listed until that token is found on the claimed
site. The theme endpoint sets a display cookie. The scan and badge endpoints are
rate-limited instead; the limits are listed below.

## Authentication methods supported

| Registration method | Supported | Notes |
|---|---|---|
| `anonymous` | Yes | Every published surface and every endpoint is reachable with no registration at all |
| `service_auth` | No | No first-party credential is issued, so there is no service credential to present |
| `identity_assertion` | No | No third-party identity provider is accepted |
| OAuth 2.0 dynamic client registration | No | There is no authorisation server to register against |
| mTLS | No | — |

Because every surface is `anonymous`, no registration step exists to document. That is a
statement about this service, not an omission: an agent should be able to read this and stop
looking for a credential.

## Endpoints

| Key | Value | Status |
|---|---|---|
| `identity_endpoint` | none | No identity provider is operated by this site |
| `claim_endpoint` | `POST https://agenticwebscore.com/api/badge/claim` | Exists, unauthenticated, 10 per client per minute. Returns a token and a snippet; claiming proves nothing until the token is found on the site |
| `score_endpoint` | `GET https://agenticwebscore.com/api/scan?target=<domain>`, or `POST` with `{"target": "<domain>"}` | Exists, unauthenticated. New scans: 10 per client per minute and 3 running at once |
| `verify_endpoint` | `POST https://agenticwebscore.com/api/badge/verify` with `{"token": "aws_…"}` | Exists, unauthenticated, 10 per client per minute, and 3 per token in 10 minutes |
| `oauth-protected-resource` | none | Not published, because no protected resource exists |

The machine-readable pointer for authorisation is deliberately absent rather than
deceptive: `/.well-known/oauth-protected-resource` returning a document would imply a
protected resource that does not exist.

## What the endpoints do and do not offer

- **No credential for agents.** No API key, bearer credential, or client certificate is
  issued to an agent. A claim token proves nothing until it is found on the claimed site.
  The operator's health token only adds detail to `/api/health`, whose public body needs none.
- **A description, not a contract.** https://agenticwebscore.com/openapi.json describes the
  4 API endpoints that answer JSON, as they answer today, and it changes when
  they change. The catalog at https://agenticwebscore.com/.well-known/api-catalog points at it.
- **No quota you can reserve.** The limits live in the memory of the process that serves
  them, and the counters reset when it restarts:
  - Scans: 10 per client per minute and 3 running at once, across every entry point that starts one. A reused record or a joined scan spends nothing.
  - /api/health: 30 per client per minute.
  - Badge claims: 10 per client per minute.
  - Badge verifications: 10 per client per minute, and 3 per token in 10 minutes.
  - /verify/<fingerprint>, a page: 30 lookups per client per minute.
- **No service level.** The API is provided as is, and no uptime is promised, as
  https://agenticwebscore.com/terms states.

## Identity for clients that want to be recognised

This site does not gate content behind user-agent allowlists, because a user-agent
string is unauthenticated and proves nothing. If you want to be recognisable, present
a Web Bot Auth signature — see https://agenticwebscore.com/bot. This site does not publish a key
directory of its own yet.

## Discovery documents

- API catalog: https://agenticwebscore.com/.well-known/api-catalog
- OpenAPI description: https://agenticwebscore.com/openapi.json
- Agent permissions: https://agenticwebscore.com/.well-known/agent-permissions.json
- MCP server card: https://agenticwebscore.com/.well-known/mcp/server-card.json — a declaration of the
  interface this service intends to expose. There is no MCP server at `/mcp` today.
- OAuth discovery (`/.well-known/oauth-authorization-server`): **not published** — there is no authorisation server to describe. Declaring one would be a false claim.

## Contact

hello@agenticwebscore.com
