API & MCP

Rapporten-API

Een AI-rapport leest een reeks afgeronde gesprekken en beschrijft het sentiment, de veelvoorkomende thema's en de problemen. De API geeft de rapporten terug die je team in het dashboard heeft gemaakt. Nieuwe rapporten maken kan de API niet. Zie het API-overzicht voor authenticatie, paginering en fouten.

Rapporten ophalen#

HTTP
GET /api/v1/projects/{project_id}/reports

Geeft de rapporten van een project terug, van nieuw naar oud, zonder hun inhoud. Verwijderde rapporten worden weggelaten.

Queryparameters#

ParameterBeschrijving
statusEén of meer van generating, completed, failed, gescheiden door komma's
limit1 tot 100. Standaard 25.
cursorDe next_cursor van de vorige pagina

Voorbeeld#

curl -G "https://diaform.io/api/v1/projects/b8acb3ab-1f3d-4a7e-a846-b7f493f86b6d/reports" \
  -H "Authorization: Bearer $DIAFORM_API_KEY" \
  --data-urlencode "status=completed"

Response#

JSON
{
  "data": [
    {
      "id": "882f2ed7-07d9-4344-aced-9e523275b196",
      "project_id": "b8acb3ab-1f3d-4a7e-a846-b7f493f86b6d",
      "status": "completed",
      "title": "Support problems overshadow a well-liked product",
      "focus": null,
      "selection": {
        "mode": "date_range",
        "range_start": "2026-05-01T00:00:00+00:00",
        "range_end": "2026-05-31T23:59:59+00:00"
      },
      "conversation_count": 48,
      "first_conversation_at": "2026-05-01T08:12:09.692998+00:00",
      "last_conversation_at": "2026-05-30T13:11:09.628765+00:00",
      "sentiment_counts": {
        "positive": 14,
        "negative": 11,
        "neutral": 8,
        "mixed": 15,
        "unknown": 0
      },
      "error_message": null,
      "created_at": "2026-06-01T09:33:49.465144+00:00",
      "completed_at": "2026-06-01T09:34:07.2+00:00"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Velden van een rapport#

VeldTypeBeschrijving
idstringID van het rapport
project_idstringHet project waar het bij hoort
statusstringgenerating, completed of failed
titlestring of nullDe kop die de AI het rapport gaf. null tot het rapport klaar is.
focusstring of nullDe vraag waarop je team het rapport liet focussen, als die er is
selection.modestringdate_range (alle afgeronde gesprekken in een periode) of manual (met de hand gekozen gesprekken)
selection.range_start, selection.range_endstring of nullDe periode bij date_range. null betekent geen grens aan die kant.
conversation_countnumberHoeveel gesprekken het rapport behandelt
first_conversation_at, last_conversation_atstring of nullWanneer het oudste en het nieuwste behandelde gesprek zijn aangemaakt
sentiment_countsobject of nullDe behandelde gesprekken per algemeen sentiment. null tot het rapport klaar is.
error_messagestring of nullWaarom een rapport met de status failed is mislukt
created_atstringWanneer het rapport is aangevraagd
completed_atstring of nullWanneer het klaar was of mislukte

Eén rapport ophalen#

HTTP
GET /api/v1/reports/{report_id}

Geeft één rapport terug met elk veld van de lijst, plus conversation_ids en de geschreven content.

Voorbeeld#

curl "https://diaform.io/api/v1/reports/882f2ed7-07d9-4344-aced-9e523275b196" \
  -H "Authorization: Bearer $DIAFORM_API_KEY"

Response#

De velden die ook in de lijst staan, zijn hier weggelaten.

JSON
{
  "id": "882f2ed7-07d9-4344-aced-9e523275b196",
  "status": "completed",
  "title": "Support problems overshadow a well-liked product",
  "conversation_ids": [
    "0f8d43a2-6df9-49c8-bf5d-fd2b6ec2d9ee",
    "912b8ced-f69d-4f50-b497-9a712fe59359"
  ],
  "content": {
    "summary": "Most respondents like the product and would recommend it, but support wait times came up in a quarter of the interviews.",
    "focus_answer": null,
    "sentiment_explanation": "Praise for the product is offset by frustration with support.",
    "themes": [
      {
        "title": "Customer support is the top complaint",
        "detail": "Twelve respondents described long waits before reaching support.",
        "tone": "negative",
        "mention_count": 12,
        "conversation_ids": ["912b8ced-f69d-4f50-b497-9a712fe59359"],
        "quotes": [
          {
            "conversation_id": "912b8ced-f69d-4f50-b497-9a712fe59359",
            "text": "it took me 25 min to connect last time, which is too long",
            "translation": null,
            "respondent_label": "alex@acme.com",
            "created_at": "2026-05-10T17:52:10.539708+00:00"
          }
        ]
      }
    ],
    "issues": [
      {
        "title": "Invite emails land in spam",
        "detail": "Three respondents never received their teammate invite.",
        "severity": "high",
        "mention_count": 3,
        "conversation_ids": ["0f8d43a2-6df9-49c8-bf5d-fd2b6ec2d9ee"],
        "quotes": []
      }
    ],
    "outliers": [
      {
        "title": "Request for an on-premise version",
        "detail": "One enterprise respondent can't use cloud tools.",
        "mention_count": 1,
        "conversation_ids": ["0f8d43a2-6df9-49c8-bf5d-fd2b6ec2d9ee"]
      }
    ]
  }
}

Velden van de inhoud#

content is null zolang het rapport de status generating heeft, en ook bij de status failed.

VeldTypeBeschrijving
conversation_idsarrayElk gesprek dat het rapport behandelt
content.summarystringDe algemene samenvatting van het rapport
content.focus_answerstring of nullHet antwoord op de focus van het rapport, als die is ingesteld
content.sentiment_explanationstringWat de verdeling van het sentiment verklaart
content.themesarrayTerugkerende onderwerpen, de meest genoemde eerst
content.themes[].tonestringpositive, negative, mixed of neutral
content.issuesarrayConcrete problemen om op te lossen
content.issues[].severitystringhigh, medium of low
content.outliersarrayOpvallende punten die maar een paar respondenten noemden. Ze hebben geen citaten.
title, detailstringBij elk thema, elk probleem en elke uitschieter: een kop en een korte uitleg
mention_countnumberIn hoeveel gesprekken het werd genoemd
conversation_idsarrayDie gesprekken. Je kunt elk ervan ophalen met de Gesprekken-API.
quotes[].textstringDe eigen woorden van de respondent
quotes[].translationstring of nullEen Engelse vertaling als het citaat in een andere taal is
quotes[].conversation_idstringHet gesprek waar het citaat uit komt
quotes[].respondent_labelstring of nullWie het zei, als dat bekend is
quotes[].created_atstringWanneer dat gesprek is aangemaakt

Een rapport is een momentopname van de gesprekken op het moment dat het werd geschreven. Wordt een gesprek later verwijderd, dan worden de citaten uit dat gesprek uit het rapport gehaald.