> ## 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.

# Drafting from knowledge

> Let pepline propose services, voice, and fit criteria from what your agents already know.

Instead of authoring the [catalog](/authoring/agents-and-catalog) by hand, you can draft it from your [knowledge](/guides/keeping-knowledge-fresh) — the same loop pepline's concierge onboarding runs. Drafting is **additive and proposals-only**: it never writes to your live catalog until you accept.

## 1. Regenerate a catalog

```bash theme={null}
curl -X POST https://app.pepline.ai/api/v1/catalogs/service/regenerate \
  -H "Authorization: Bearer pep_sk_..."
```

`kind` is one of `service`, `voice`, `fit_criterion`, or `flow` (flow is agent-scoped — add `?agent=sales-intake`). The call is asynchronous: `202` with a `catalog_generation` in `running`.

## 2. Poll the run

```bash theme={null}
curl https://app.pepline.ai/api/v1/catalog_generations/42 \
  -H "Authorization: Bearer pep_sk_..."
```

Watch `status` settle to `completed`, `attention`, or `failed`. `attention` means the material looks like it names more than got drafted — worth a look.

## 3. Review and accept the proposals

```bash theme={null}
curl "https://app.pepline.ai/api/v1/resource_drafts?catalog_generation_id=42" \
  -H "Authorization: Bearer pep_sk_..."
```

Each proposal is deduped against what already exists. Then:

* **Accept**: `POST /resource_drafts/{id}/accept` — creates the real catalog row through the same validations the dashboard uses. Idempotent.
* **Dismiss**: `POST /resource_drafts/{id}/dismiss` — permanent per fingerprint; a later regeneration never re-proposes it.

Accepted rows are ordinary catalog entries from there on — edit or archive them like anything you authored by hand.
