# Auth.md

No OAuth; keys are self-provisioned. Call `provision` (MCP tool, no arguments) or `POST https://api.veezee.io/v1/provision` (no body) and you get a working key back immediately: no signup, no card, no human in the loop.

## Getting a key

- `provision` returns `api_key` (500 trial credits) exactly once; store it yourself, Veezee cannot show it again.
- Send it as `Authorization: Bearer <api_key>` on every REST call. Over MCP, once you've called `provision` in the current session, later tool calls in that session authenticate automatically; a new session needs the header again.

## Keyless taste

Every metered tool (resolve_url, get_profile, search_people, get_company, get_posts) also answers with no key at all, sharing a small per-IP daily budget (20 credits/day), cached data only, no `Idempotency-Key` needed. Use this to try a call before provisioning; `get_usage` still needs an account.

## Claiming (recovery)

`provision` and `get_usage` both return `claim_url`. Opening it attaches an email to the account so it can be recovered later; the trial key keeps working unchanged whether or not you claim it.

## Recovering a lost key

`POST https://api.veezee.io/v1/recover` with the claimed email sends a one-time re-key link to that address. Following it (or `POST https://api.veezee.io/v1/rekey` with the link's token) issues a new key and revokes the old one; balance, plan, and receipts are unchanged. An account that was never claimed cannot be recovered this way: write to hello@veezee.io.

## Upgrading

`provision` and `get_usage` return an account-bound `upgrade_url`; errors a payment can fix (INSUFFICIENT_CREDITS, TRIAL_CAP_EXCEEDED, and BUDGET_EXHAUSTED; on trial accounts also RATE_LIMITED and CONCURRENCY_LIMIT) carry it too. Give the link to your human: purchases credit the account directly with no login, and the same key keeps working after payment.

## What this is not

No OAuth flow, no client id or secret, no scopes, no token exchange, no expiring access tokens. One bearer key per account, rotated only by re-keying.
