# Pharos

Pharos is a marketing command center for the apps you ship: contacts, email
campaigns, drip automations, mention monitoring, social, revenue and reviews —
all of it scoped per project, all of it reachable over one HTTP API.

## The product surface is the API

Most marketing tools are a dashboard with an API bolted on. Pharos is the
other way around. Every capability lands as a documented endpoint first, and
the dashboard exists so a human can **review and approve** what was drafted —
not to compete with a campaign builder.

That ordering has a practical consequence: these docs are the contract. They
are written to be read by a person onboarding an integration *and* by a model
driving one. The same pages are served to agents as MCP resources
(`pharos://docs/<slug>`), so what you read here is what your agent reads.

## How the pieces fit

An **organization** owns **projects**. A project is one app — its own sender
identity, branding, audience, automations and revenue view. Everything else
hangs off a project: contacts and the lists they subscribe to, email templates
and the campaigns rendered from them, automations, beacons, and the send log.

Three credentials reach a project: a dashboard session, a project API key
(`phk_…`, pinned to exactly one project), and an organization API key
(`pha_…`, good for any project it owns). See
[Core concepts](/docs/concepts) for the whole model.

## Preview is a property of your credential

The ability to actually deliver mail is a **separate scope** from the ability
to draft, render, and resolve recipients. An agent key carries
`campaigns:preview` and `events:write`; it does not carry `campaigns:send` or
`events:send`.

So a model can write a campaign, resolve exactly who would receive it, render
the final HTML, and preview a transactional email — and cannot send any of it,
regardless of what it decides to do. The guarantee lives in the credential
rather than in a prompt, which is the only place a guarantee can live.

The same discipline applies to the model itself: Pharos uses an LLM for
bounded language generation only. Recipients, numbers, prices, rankings and
URLs are computed deterministically and validated before they reach a
template. Every generation is audited with its model, prompt version and a
hash of its input.

## Where to go next

- **[Quickstart](/docs/quickstart)** — a key, a synced contact, and a real
  send, in about ten minutes.
- **[Core concepts](/docs/concepts)** — the object model, in one page.
- **[Authentication & keys](/docs/authentication)** — credentials, scopes,
  expiry, rate limits.
- **[Sending & deliverability](/docs/sending-providers)** — bring your own
  Resend or SES account; Pharos never pools sending.
- **[API reference](/docs/api-projects)** — every endpoint, with the scope it
  demands.
- **[MCP server](/docs/mcp-server)** — point Claude Code or another agent at
  your projects.
