
# Summaries API

Er zijn twee soorten door AI geschreven samenvattingen beschikbaar via de API:

- **Chatsamenvattingen** — een korte samenvatting van het gesprek met één contactpersoon, op aanvraag gegenereerd. Dit is hetzelfde als de samenvattingsfunctie in een chat (zie [Chatsamenvatting](../chats/chat-interface.md#chat-summary)).
- **Dagelijkse samenvattingen** — het dagelijkse overzicht van al uw gesprekken dat [Dagelijkse samenvattingen](../daily-summaries/daily-summaries.md) elke ochtend opstelt: statistieken, één markdown-blok per sectie en alle taken die de AI daaruit heeft gegenereerd.

- **Basis-URL** — `https://api.dmchamp.com/v1`
- **Authenticatie** — uw API-sleutel (zie [Authenticatie](authentication.md)). Een [scoped key](api-keys.md#scoped-keys) heeft de sectie `Summaries` nodig.
- **Fouten & paginering** — zie [Fouten & Paginering](errors-and-pagination.md)

Alle onderstaande voorbeelden tonen de `?apiKey=` query-vorm in cURL en de `X-API-Key` header in JavaScript en Python — beide werken op elk eindpunt.

---

## Een chatsamenvatting genereren

`POST /summaries` — stuur het `phoneNumber` (met landcode) of `email` van de contactpersoon; één van beide is vereist.

De AI leest het meest recent **afgesloten** gesprek van de contactpersoon, of het gesprek dat nog openstaat als er nog geen is afgesloten, en schrijft daar een samenvatting van. De samenvatting wordt opgeslagen bij de contactpersoon (deze verschijnt onder **Samenvattingen** in het contactpaneel in de app) en wordt geretourneerd in het antwoord, zodat u deze direct kunt doorsturen naar een CRM, een Slack-kanaal of een e-mail.

**Kosten:** hetzelfde als één AI-antwoord op het AI-kwaliteitsniveau van de Agent — Pro 1 credit, Max 0,25, Mini 0,15; met uw eigen gekoppelde Anthropic-sleutel kost Pro 0. Het verzoek wordt geweigerd voordat er iets wordt gegenereerd als het saldo niet toereikend is.

**cURL**

```bash
curl -X POST "https://api.dmchamp.com/v1/summaries?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"phoneNumber": "+31612345678"}'
```

**JavaScript**

```javascript
const res = await fetch("https://api.dmchamp.com/v1/summaries", {
  method: "POST",
  headers: { "X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({ email: "jane@example.com" }),
});
const { summary } = await res.json();
```

**Python**

```python
import requests

r = requests.post(
    "https://api.dmchamp.com/v1/summaries",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"phoneNumber": "+31612345678"},
)
print(r.json()["summary"])
```

**Antwoord**

```json
{
  "success": true,
  "message": "Chat summary generated successfully",
  "summary": "Jane asked about the 10-session package for her two children (ages 6 and 9) and preferred Saturday mornings. She booked a trial lesson for Saturday at 10:00 and wants to know whether siblings get a discount."
}
```

| Status | Betekenis |
|---|---|
| `400` | Noch `phoneNumber` noch `email` werd verzonden. |
| `404` | Geen overeenkomende contactpersoon, de contactpersoon heeft nog geen gesprek, of het gesprek bevat geen berichten. De `message` van de body geeft aan welke van deze het is. |
| `500` | Generatie mislukt (bijvoorbeeld door onvoldoende credits). |

> **Automatiseringsrecept: boekingsmail met een samenvatting.** Voeg in een [automatisering](../automations/automations.md) bij de trigger **Afspraak geboekt** een **HTTP-verzoek**-stap toe die dit eindpunt aanroept met `${trigger.contact.phone_number}` (of het e-mailadres van de contactpersoon), gevolgd door een **E-mail**-stap die de `summary` uit het antwoord van de HTTP-stap invoegt, samen met een link naar de chat (het adres van uw app gevolgd door `/chats/` en het contact-ID uit de trigger). Uw team krijgt de context van de boeking in dezelfde e-mail, zonder de inbox te hoeven openen.

> **Samenvattingen teruglezen.** Er is geen eindpunt dat opgeslagen chatsamenvattingen weergeeft. Bewaar de tekst uit het antwoord als u deze later nodig heeft, of genereer deze opnieuw (elke aanroep wordt in rekening gebracht).

### Alternatief: op contact-ID

`POST /summaries/chat-summary` met `{"contactId": "..."}` voert dezelfde generatie uit voor een contactpersoon waarvan u het ID al heeft. Het bevestigt alleen succes (`{"success": true, "data": "Chat summary generated successfully"}`) en retourneert **niet** de tekst zelf, dus gebruik `POST /summaries` wanneer u de samenvatting zelf wilt hebben. Een teamlid wiens sleutel beperkt is tot hun toegewezen contactpersonen krijgt `404` voor een contactpersoon buiten dat bereik.

---

## Een dagelijkse samenvatting ophalen

`GET /summaries/daily/{date}` — `date` is `YYYY-MM-DD`. Retourneert de samenvatting voor die dag, of `null` onder `summary` wanneer er nog geen is gegenereerd, plus uw sectieconfiguratie.

**cURL**

```bash
curl "https://api.dmchamp.com/v1/summaries/daily/2026-09-08?apiKey=YOUR_API_KEY"
```

**Antwoord**

```json
{
  "success": true,
  "data": {
    "summary": {
      "date": "2026-09-08",
      "status": "completed",
      "generated_at": "2026-09-09T05:02:11.000Z",
      "stats": {
        "total_conversations": 42,
        "total_messages_sent": 310,
        "total_messages_received": 268,
        "human_alerts": 3,
        "bookings": 5,
        "new_contacts": 11,
        "sales": 2
      },
      "sections": {
        "wins_losses_improvements": "## Wins\n- ...",
        "tasks_action_items": "- Call Jane back about the sibling discount",
        "human_alerts_reviews": "...",
        "sentiment_analysis": "...",
        "booked_meetings_sales": "..."
      },
      "contact_map": { "Jane Doe": "uid_whatsapp_31612345678" },
      "auto_tasks": [],
      "created_task_ids": []
    },
    "section_configs": [
      { "id": "wins_losses_improvements", "name": "Wins, Losses & Improvements", "enabled": true, "position": 0 }
    ]
  }
}
```

- **`status`** — `pending`, `generating`, `completed` of `failed` (met `error` ingesteld). Pol dit eindpunt na een regeneratie totdat het `completed` aangeeft.
- **`sections`** — één markdown-tekenreeks per sectie, gesorteerd op sectie-id. De vijf standaardsecties zijn `wins_losses_improvements`, `tasks_action_items`, `human_alerts_reviews`, `sentiment_analysis` en `booked_meetings_sales`; secties die u toevoegt onder **Configureren** op de pagina Dagelijkse samenvattingen krijgen een `custom_…`-id. Namen en volgorde worden herhaald in `section_configs`.
- **`contact_map`** — weergavenaam naar contact-ID, zodat u de namen in de tekst kunt omzetten in links.
- **`auto_tasks`** / **`created_task_ids`** — de actiepunten die de AI heeft geëxtraheerd en de taken die daaruit zijn gemaakt (wanneer **Maak taakkaarten van actiepunten** is ingeschakeld).

| Status | Betekenis |
|---|---|
| `400` | `date` is niet `YYYY-MM-DD`, of ligt in de toekomst. |
| `403` | Dagelijkse samenvattingen is uitgeschakeld voor het account. |

> Geeft u de voorkeur aan een push boven pollen? De **Dagelijkse samenvatting gemaakt** [webhook-gebeurtenis](../integrations/webhooks.md) levert dezelfde payload zodra een ochtendsamenvatting is voltooid.

---

## Een dagelijkse samenvatting opnieuw genereren

`POST /summaries/daily/{date}/regenerate` — start een nieuwe generatie voor die dag op de achtergrond en keert onmiddellijk terug met `status: "generating"` en een lege `sections`. Pol `GET /summaries/daily/{date}` totdat deze is voltooid. Dezelfde regels zijn van toepassing als voor de **Opnieuw proberen**-link in de app.

Optionele body `{"deleteTasks": false}` behoudt de taken die door de vorige uitvoering zijn gemaakt; standaard worden ze verwijderd en opnieuw gemaakt op basis van de nieuwe samenvatting. Stuur een echte boolean — de tekenreeks `"false"` wordt genegeerd en behandeld als de standaardwaarde.

```bash
curl -X POST "https://api.dmchamp.com/v1/summaries/daily/2026-09-08/regenerate?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"deleteTasks": false}'
```

---

## Snelgids

| Taak | Eindpunt |
|---|---|
| Genereer een chatsamenvatting en ontvang de tekst | `POST /summaries` |
| Genereer een chatsamenvatting op contact-ID (geen tekst geretourneerd) | `POST /summaries/chat-summary` |
| Lees de samenvatting van een dag | `GET /summaries/daily/{date}` |
| Genereer de samenvatting van een dag opnieuw | `POST /summaries/daily/{date}/regenerate` |
