API des projets
Un projet est un intervieweur IA avec ses propres questions. La plupart des autres endpoints ont besoin d’un ID de projet : c’est donc en général le premier appel que vous faites. Pour l’authentification, la pagination et les erreurs, consultez la Vue d’ensemble de l’API.
Lister les projets#
HTTP
GET /api/v1/projectsRenvoie tous les projets de l’organisation de la clé, des plus récents aux plus anciens, publiés ou non. Il ne prend aucun paramètre et renvoie tous les projets sur une seule page.
Exemple#
curl "https://diaform.io/api/v1/projects" \
-H "Authorization: Bearer $DIAFORM_API_KEY"Réponse#
JSON
{
"data": [
{
"id": "b8acb3ab-1f3d-4a7e-a846-b7f493f86b6d",
"name": "Onboarding interviews",
"product_name": "Acme",
"published": true,
"language": "english",
"respondent_access": "public",
"url": "https://acme.diaform.io/c/b8acb3ab-1f3d-4a7e-a846-b7f493f86b6d",
"created_at": "2026-04-02T09:14:31.402057+00:00",
"published_at": "2026-04-02T09:41:05.471073+00:00"
}
],
"has_more": false,
"next_cursor": null
}Champs d’un projet#
| Champ | Type | Description |
|---|---|---|
id | string | ID du projet |
name | string ou null | Le nom du projet tel qu’il apparaît dans le tableau de bord |
product_name | string ou null | Nom du produit ou du service, dans les paramètres du projet |
published | boolean | Indique si le projet est en ligne |
language | string ou null | Langue de l’entretien, par exemple english |
respondent_access | string | public (toute personne qui a le lien) ou invite_only |
url | string ou null | Le lien public de conversation. Il utilise votre domaine personnalisé vérifié, si vous en avez un. |
created_at | string | Date de création du projet |
published_at | string ou null | Date de sa dernière publication |
Obtenir un projet#
HTTP
GET /api/v1/projects/{project_id}Renvoie un projet avec ses questions actuelles et le nombre de ses conversations.
Exemple#
curl "https://diaform.io/api/v1/projects/b8acb3ab-1f3d-4a7e-a846-b7f493f86b6d" \
-H "Authorization: Bearer $DIAFORM_API_KEY"Réponse#
JSON
{
"id": "b8acb3ab-1f3d-4a7e-a846-b7f493f86b6d",
"name": "Onboarding interviews",
"product_name": "Acme",
"published": true,
"language": "english",
"respondent_access": "public",
"url": "https://acme.diaform.io/c/b8acb3ab-1f3d-4a7e-a846-b7f493f86b6d",
"created_at": "2026-04-02T09:14:31.402057+00:00",
"published_at": "2026-04-02T09:41:05.471073+00:00",
"questions": [
{
"id": "V1StGXR8_Z5jdHi6B-myT",
"text": "How did your first week with the product go?",
"type": "open_text",
"required": false,
"options": []
},
{
"id": "tTJUuhijB3m3nvA5horJ6",
"text": "Which plan are you on?",
"type": "single_choice",
"required": true,
"options": [
{ "id": "fvbfMZcZXZLzZWCa-jXXJ", "label": "Starter" },
{ "id": "nb-XqVVvSICqEQjZ12Mox", "label": "Pro" }
]
}
],
"conversation_counts": {
"total": 212,
"completed": 148
}
}Il contient tous les champs de la liste, plus :
| Champ | Type | Description |
|---|---|---|
questions | array | Les questions publiées, dans l’ordre |
questions[].id | string | ID de la question. Les résumés de conversation le désignent par question_id. |
questions[].text | string | La question telle qu’elle est rédigée |
questions[].type | string | open_text, single_choice, multiple_choice, nps, star_rating ou file_upload |
questions[].required | boolean | Indique si la question est obligatoire |
questions[].options | array | Les choix d’une question à choix, chacun avec id et label. Vide pour les autres types. |
conversation_counts.total | number | Conversations qui ont au moins été ouvertes |
conversation_counts.completed | number | Conversations allées jusqu’au bout |
Les questions peuvent changer avec le temps. Le résumé d’une conversation conserve la formulation réellement posée au répondant.