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

# Agents and catalog

> Provision agents from a starter, then shape how they sell, qualify, and sound.

## Provision an agent

```bash theme={null}
curl https://app.pepline.ai/api/v1/agents \
  -H "Authorization: Bearer pep_sk_..." -H "Content-Type: application/json" \
  -d '{ "name": "Sales intake", "starter": "advisor" }'
```

The new agent clones a catalog starter (`blank`, `advisor`, or `intake`) — flow, prompts, deliverable templates, widget defaults — and starts **paused** with empty knowledge and fit. Activate it and fill it in from there. Authoring the [flow](/authoring/conversation-flows) is a separate surface.

### Widget settings

```bash theme={null}
curl -X PATCH https://app.pepline.ai/api/v1/agents/sales-intake/widget_setting \
  -H "Authorization: Bearer pep_sk_..." -H "Content-Type: application/json" \
  -d '{ "consent_text": "…", "allowed_domains": ["example.com"], "daily_credit_budget": 500 }'
```

Runtime knobs — consent text, offline message, theme, allowed domains, the per-agent daily credit budget. Changes serve immediately. `translations` merges field-by-field per locale, so a partial payload never clobbers a sibling field.

## The catalog

Three resources shape what an agent offers, who it treats as a good lead, and how it sounds. Each takes the declarative `agents` activation set.

### Services — what it offers

```bash theme={null}
curl https://app.pepline.ai/api/v1/services \
  -H "Authorization: Bearer pep_sk_..." -H "Content-Type: application/json" \
  -d '{ "name": "Website build", "pricing_unit": "from", "price_min": 8000,
        "currency": "EUR", "deliverables": ["Design", "Build", "Launch"],
        "agents": ["sales-intake"] }'
```

`key` is minted from the name on create and never changes. Update with `PATCH /services/{id}` (the `key` is identity; `agents`, when present, replaces the activation set).

### Fit criteria — who's a good lead

```bash theme={null}
curl https://app.pepline.ai/api/v1/fit_criteria \
  -H "Authorization: Bearer pep_sk_..." -H "Content-Type: application/json" \
  -d '{ "kind": "dealbreaker", "description": "Budget under €2,000", "agents": ["sales-intake"] }'
```

`kind` is one of `ideal`, `acceptable`, `poor_fit`, `dealbreaker`. Omit `agents` and the criterion judges for **all** current agents.

### Voice profiles — how it sounds

```bash theme={null}
curl https://app.pepline.ai/api/v1/voice_profiles \
  -H "Authorization: Bearer pep_sk_..." -H "Content-Type: application/json" \
  -d '{ "name": "Warm and direct", "tone_rules": ["Plain language", "No hype"],
        "agents": ["sales-intake"] }'
```

Voice is **selection, not activation**: each listed agent switches to this profile. An agent leaves a voice only by being claimed by another one.

<Tip>
  Rather than write the catalog by hand, you can [draft it from your knowledge](/authoring/drafting-from-knowledge) and accept what fits.
</Tip>
