API et MCP

API des rapports

Un rapport IA lit un ensemble de conversations terminées et en dégage le sentiment, les thèmes récurrents et les problèmes. L’API renvoie les rapports que votre équipe a créés dans le tableau de bord. Elle ne peut pas en créer de nouveaux. Pour l’authentification, la pagination et les erreurs, consultez la Vue d’ensemble de l’API.

Lister les rapports#

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

Renvoie les rapports d’un projet, des plus récents aux plus anciens, sans leur contenu. Les rapports supprimés sont exclus.

Paramètres de requête#

ParamètreDescription
statusUne ou plusieurs valeurs parmi generating, completed, failed, séparées par des virgules
limitDe 1 à 100. 25 par défaut.
cursorLe next_cursor de la page précédente

Exemple#

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

Réponse#

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
}

Champs d’un rapport#

ChampTypeDescription
idstringID du rapport
project_idstringLe projet auquel il appartient
statusstringgenerating, completed ou failed
titlestring ou nullLe titre que l’IA a donné au rapport. null tant qu’il n’est pas terminé.
focusstring ou nullLa question sur laquelle votre équipe a demandé au rapport de se concentrer, s’il y en a une
selection.modestringdate_range (toutes les conversations terminées d’une période) ou manual (conversations choisies à la main)
selection.range_start, selection.range_endstring ou nullLa période pour date_range. null signifie qu’il n’y a pas de limite de ce côté.
conversation_countnumberNombre de conversations couvertes par le rapport
first_conversation_at, last_conversation_atstring ou nullDates de création de la plus ancienne et de la plus récente des conversations couvertes
sentiment_countsobject ou nullLes conversations couvertes, réparties par sentiment global. null tant que le rapport n’est pas terminé.
error_messagestring ou nullLa raison de l’échec d’un rapport failed
created_atstringDate à laquelle le rapport a été demandé
completed_atstring ou nullDate à laquelle il s’est terminé ou a échoué

Obtenir un rapport#

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

Renvoie un rapport avec tous les champs de la liste, plus conversation_ids et le content rédigé.

Exemple#

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

Réponse#

Les champs communs avec la liste sont omis ici.

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"]
      }
    ]
  }
}

Champs du contenu#

content vaut null tant que le rapport est generating et quand il est failed.

ChampTypeDescription
conversation_idsarrayToutes les conversations couvertes par le rapport
content.summarystringLe résumé général du rapport
content.focus_answerstring ou nullLa réponse au focus du rapport, s’il a été défini
content.sentiment_explanationstringCe qui explique la répartition des sentiments
content.themesarrayLes sujets récurrents, les plus mentionnés en premier
content.themes[].tonestringpositive, negative, mixed ou neutral
content.issuesarrayProblèmes concrets à corriger
content.issues[].severitystringhigh, medium ou low
content.outliersarrayPoints marquants soulevés par quelques répondants seulement. Ils n’ont pas de citations.
title, detailstringPour chaque thème, problème et cas isolé : un titre et une courte explication
mention_countnumberNombre de conversations qui l’ont soulevé
conversation_idsarrayCes conversations. Récupérez n’importe laquelle avec l’API des conversations.
quotes[].textstringLes mots du répondant
quotes[].translationstring ou nullUne traduction en anglais quand la citation est dans une autre langue
quotes[].conversation_idstringLa conversation d’où vient la citation
quotes[].respondent_labelstring ou nullQui l’a dit, si c’est connu
quotes[].created_atstringDate de création de cette conversation

Un rapport est un instantané des conversations au moment de sa rédaction. Si une conversation est supprimée par la suite, ses citations sont retirées du rapport.