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#
GET /api/v1/projects/{project_id}/reportsRenvoie 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ètre | Description |
|---|---|
status | Une ou plusieurs valeurs parmi generating, completed, failed, séparées par des virgules |
limit | De 1 à 100. 25 par défaut. |
cursor | Le 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#
{
"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#
| Champ | Type | Description |
|---|---|---|
id | string | ID du rapport |
project_id | string | Le projet auquel il appartient |
status | string | generating, completed ou failed |
title | string ou null | Le titre que l’IA a donné au rapport. null tant qu’il n’est pas terminé. |
focus | string ou null | La question sur laquelle votre équipe a demandé au rapport de se concentrer, s’il y en a une |
selection.mode | string | date_range (toutes les conversations terminées d’une période) ou manual (conversations choisies à la main) |
selection.range_start, selection.range_end | string ou null | La période pour date_range. null signifie qu’il n’y a pas de limite de ce côté. |
conversation_count | number | Nombre de conversations couvertes par le rapport |
first_conversation_at, last_conversation_at | string ou null | Dates de création de la plus ancienne et de la plus récente des conversations couvertes |
sentiment_counts | object ou null | Les conversations couvertes, réparties par sentiment global. null tant que le rapport n’est pas terminé. |
error_message | string ou null | La raison de l’échec d’un rapport failed |
created_at | string | Date à laquelle le rapport a été demandé |
completed_at | string ou null | Date à laquelle il s’est terminé ou a échoué |
Obtenir un rapport#
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.
{
"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.
| Champ | Type | Description |
|---|---|---|
conversation_ids | array | Toutes les conversations couvertes par le rapport |
content.summary | string | Le résumé général du rapport |
content.focus_answer | string ou null | La réponse au focus du rapport, s’il a été défini |
content.sentiment_explanation | string | Ce qui explique la répartition des sentiments |
content.themes | array | Les sujets récurrents, les plus mentionnés en premier |
content.themes[].tone | string | positive, negative, mixed ou neutral |
content.issues | array | Problèmes concrets à corriger |
content.issues[].severity | string | high, medium ou low |
content.outliers | array | Points marquants soulevés par quelques répondants seulement. Ils n’ont pas de citations. |
title, detail | string | Pour chaque thème, problème et cas isolé : un titre et une courte explication |
mention_count | number | Nombre de conversations qui l’ont soulevé |
conversation_ids | array | Ces conversations. Récupérez n’importe laquelle avec l’API des conversations. |
quotes[].text | string | Les mots du répondant |
quotes[].translation | string ou null | Une traduction en anglais quand la citation est dans une autre langue |
quotes[].conversation_id | string | La conversation d’où vient la citation |
quotes[].respondent_label | string ou null | Qui l’a dit, si c’est connu |
quotes[].created_at | string | Date 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.