> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pepline.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# The authoring API

> Provision and shape agents from your own systems — the same config surface the dashboard uses.

Pushing [knowledge](/guides/keeping-knowledge-fresh) is one half of the API. The other half authors the **agents** themselves: everything the dashboard configures is config-as-data you can write over the API — no field is dashboard-only.

## What you can author

* [**Agents**](/authoring/agents-and-catalog) — provision a new agent from a starter, then tune its widget settings.
* [**Catalog**](/authoring/agents-and-catalog) — the services an agent offers, the fit criteria it qualifies against, and the voice it speaks in.
* [**Flows**](/authoring/conversation-flows) — the conversation itself: its phases and the answers each one captures.
* [**Drafting**](/authoring/drafting-from-knowledge) — let pepline propose that catalog from what your agents already know, and accept what fits.

The same surface serves three callers: pepline's own concierge onboarding, the pepline MCP server, and your own tooling.

## Conventions that hold everywhere

* **Declarative activation.** Many resources take an `agents` array of slugs that is a full **replacement set** — the resource ends up offered by (or active for) exactly the agents you list. Omit it to leave activations untouched; send `[]` to deactivate everywhere.
* **Archive, never delete.** Nothing is destroyed. Archiving removes a resource from an agent's world while keeping its history; restoring brings it back. (`DELETE` on a source answers `405` and points you at the archive verb.)
* **Flows trial-compile.** Every write that touches a flow is compiled in the same transaction before it commits. An illegal change — over the slot budget, a reserved key, moving the closing phase — rolls back with `422 flow_invalid`. You cannot author a broken agent.

Everything here is authenticated the same way as the rest of the API — see [Authentication](/authentication).
