
# Summaries API

To typer AI-genererede resuméer er tilgængelige via API'en:

- **Chatresuméer** — et kort referat af én kontakts samtale, genereret efter behov. Det samme som resumé-kontrollen i en chat (se [Chatresumé](../chats/chat-interface.md#chat-summary)).
- **Daglige resuméer** — det daglige overblik over alle dine samtaler, som [Daglige resuméer](../daily-summaries/daily-summaries.md) opretter hver morgen: statistik, én markdown-blok pr. sektion og eventuelle opgaver, som AI'en har oprettet ud fra det.

- **Base URL** — `https://api.dmchamp.com/v1`
- **Godkendelse** — din API-nøgle (se [Godkendelse](authentication.md)). En [begrænset nøgle](api-keys.md#scoped-keys) kræver sektionen `Summaries`.
- **Fejl og paginering** — se [Fejl og paginering](errors-and-pagination.md)

Alle eksempler herunder viser `?apiKey=` forespørgselsformen i cURL og `X-API-Key` headeren i JavaScript og Python — begge virker på alle slutpunkter.

---

## Generer et chatresumé

`POST /summaries` — send kontaktens `phoneNumber` (med landekode) eller `email`; en af de to er påkrævet.

AI'en læser kontaktens senest **afsluttede** samtale, eller den der stadig er åben, hvis ingen er afsluttet endnu, og skriver et referat af den. Referatet gemmes på kontakten (det vises under **Resuméer** i kontaktpanelet i appen) og returneres i svaret, så du kan videresende det direkte til et CRM-system, en Slack-kanal eller en e-mail.

**Pris:** det samme som ét AI-svar på agentens AI-kvalitetsniveau — Pro 1 kredit, Max 0,25, Mini 0,15; med din egen Anthropic-nøgle tilsluttet koster Pro 0. Anmodningen afvises, før noget genereres, hvis saldoen ikke dækker det.

**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"])
```

**Svar**

```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 | Betydning |
|---|---|
| `400` | Hverken `phoneNumber` eller `email` blev sendt. |
| `404` | Ingen kontakt matcher, kontakten har endnu ingen samtale, eller samtalen har ingen beskeder. Brødtekstens `message` angiver hvilken. |
| `500` | Generering mislykkedes (f.eks. ikke nok kreditter). |

> **Automatiseringsopskrift: booking-e-mail med referat.** I en [automatisering](../automations/automations.md) på udløseren **Aftale booket**, tilføj et **HTTP-anmodning**-trin, der kalder dette endepunkt med `${trigger.contact.phone_number}` (eller kontaktens e-mail), derefter et **E-mail**-trin, der indsætter `summary` fra HTTP-trinets svar sammen med et link til chatten (din apps adresse efterfulgt af `/chats/` og kontakt-ID'et fra udløseren). Dit team får konteksten for bookingen i den samme e-mail uden at skulle åbne indbakken.

> **Læsning af resuméer.** Der findes intet endepunkt, der viser gemte chatresuméer. Gem teksten fra svaret, hvis du skal bruge den senere, eller generer den igen (hvert kald faktureres).

### Alternativ: via kontakt-ID

`POST /summaries/chat-summary` med `{"contactId": "..."}` udfører den samme generering for en kontakt, hvis ID du allerede har. Den bekræfter kun succes (`{"success": true, "data": "Chat summary generated successfully"}`) og returnerer **ikke** teksten, så brug `POST /summaries`, når du ønsker selve referatet. Et teammedlem, hvis nøgle er begrænset til deres tildelte kontakter, får `404` for en kontakt uden for dette område.

---

## Hent et dagligt resumé

`GET /summaries/daily/{date}` — `date` er `YYYY-MM-DD`. Returnerer resuméet for den dag, eller `null` under `summary`, når intet er genereret endnu, plus din sektionskonfiguration.

**cURL**

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

**Svar**

```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` eller `failed` (med `error` indstillet). Forespørg dette endpoint efter en gendannelse, indtil det læser `completed`.
- **`sections`** — én markdown-streng pr. sektion, sorteret efter sektions-id. De fem standardsektioner er `wins_losses_improvements`, `tasks_action_items`, `human_alerts_reviews`, `sentiment_analysis` og `booked_meetings_sales`; sektioner, du tilføjer under **Konfigurer** på siden Daglige resuméer, får et `custom_…`-id. Navne og rækkefølge gentages i `section_configs`.
- **`contact_map`** — visningsnavn til kontakt-id, så du kan omdanne navnene i teksten til links.
- **`auto_tasks`** / **`created_task_ids`** — de handlingspunkter, som AI'en har udtrækket, og de opgaver, den har oprettet ud fra dem (når **Opret opgavekort fra handlingspunkter** er slået til).

| Status | Betydning |
|---|---|
| `400` | `date` er ikke `YYYY-MM-DD`, eller ligger i fremtiden. |
| `403` | Daglige resuméer er slået fra for kontoen. |

> Foretrækker du push frem for polling? [Webhook-begivenheden](../integrations/webhooks.md) **Daily Summary Created** leverer den samme payload i det øjeblik, et morgenresumé er færdigt.

---

## Gendan et dagligt resumé

`POST /summaries/daily/{date}/regenerate` — starter en ny generering for den pågældende dag i baggrunden og returnerer med det samme med `status: "generating"` og tomt `sections`. Forespørg `GET /summaries/daily/{date}`, indtil det er fuldført. De samme regler gælder som for linket **Prøv igen** i appen.

Valgfri body `{"deleteTasks": false}` beholder de opgaver, som den forrige kørsel oprettede; som standard slettes de og oprettes på ny ud fra det nye resumé. Send en reel boolean — strengen `"false"` ignoreres og behandles som standardværdien.

```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}'
```

---

## Hurtig reference

| Opgave | Endpoint |
|---|---|
| Generer et chatresumé og hent teksten | `POST /summaries` |
| Generer et chatresumé efter kontakt-id (ingen tekst returneres) | `POST /summaries/chat-summary` |
| Læs et dagsresumé | `GET /summaries/daily/{date}` |
| Gendan et dagsresumé | `POST /summaries/daily/{date}/regenerate` |
