# auth.md — Camp Notice

> How automated clients authenticate with Camp Notice. Short version: the public surface needs no credential, and the private surface has no agent credential to issue yet. This document is the honest map of both.

## Audience

Autonomous agents, assistants and integrations acting either for themselves (answering a question about the product) or on behalf of a parent who uses Camp Notice.

## Open — no credential required

- `POST https://campnotice.com/mcp` — MCP server (read-only: pages, docs, pricing, camps).
- `GET https://campnotice.com/api/v1/…` — the camp data API (read-only: the camp directory and the live status of watched camps).
- Any public page with `Accept: text/markdown`.
- https://campnotice.com/llms.txt, https://campnotice.com/llms-full.txt, https://campnotice.com/.well-known/api-catalog, https://campnotice.com/api/openapi.json, https://campnotice.com/.well-known/mcp/server-card.json, https://campnotice.com/.well-known/agent-skills/index.json, https://campnotice.com/.well-known/oauth-protected-resource.
- The developer portal: https://campnotice.com/developers.
- `GET https://campnotice.com/api/health`.

Send a descriptive `User-Agent`. Do not send credentials to these endpoints; they are ignored.

## Protected — the private surface

A parent's own data (their watches, email address, purchases) is **first-party only**, and consent is the whole design:

- A parent confirms their email with a 6-digit code sent to it — the watch wizard (`/watch`) or a camp page's watch form. Alerts never start without that code, and every alert carries a one-click unsubscribe.
- The parent dashboard (`/my`) signs in with a 6-digit code emailed to the address the alerts go to.
- An agent must never set up, modify or stop a watch on someone's behalf — the codes exist precisely so nobody can.
- There are no bearer tokens, no API keys, and no service accounts.

## Agent registration

**None today.** Camp Notice runs no OAuth authorization server and no OpenID Connect issuer, so there is deliberately nothing published at `/.well-known/oauth-authorization-server` or `/.well-known/openid-configuration`: an invented document there would send agents into a flow that cannot complete. https://campnotice.com/.well-known/oauth-protected-resource (RFC 9728) is published, and says exactly this — the public API accepts no bearer token and names no authorization server. There is no `register_uri`, no dynamic client registration, no ID-JAG or verified-email assertion flow, and no anonymous agent credential.

What that means in practice:

- An agent acting for a parent cannot obtain its own credential. Hand the parent the page and let them confirm the code themselves.
- Do not probe for a registration endpoint. If one appears, it will be documented here first, and this file's H1 will still be `auth.md`.
- Integrating something that needs API access? Write to hello@campnotice.com and say what you're building — we'd rather design the grant with you than have you guess at one.

## Alert links

`/w/<id>` are the short links inside a parent's alert emails — they record the tap and forward to the camp's registration page. They are addressed to that parent and are not an API; an agent should never fetch or replay one.

## Reporting

Security issues, or anything that looks like an authentication bug: hello@campnotice.com.

See also: https://campnotice.com/agents.md.
