API dei progetti
Un progetto è un intervistatore IA con le sue domande. Quasi tutti gli altri endpoint richiedono l’ID di un progetto, quindi di solito questa è la prima chiamata che fai. Per autenticazione, paginazione ed errori, vedi la Panoramica dell’API.
Elenca i progetti#
HTTP
GET /api/v1/projectsRestituisce tutti i progetti dell’organizzazione della chiave, dal più recente, pubblicati o no. Non accetta parametri e restituisce tutti i progetti in un’unica pagina.
Esempio#
curl "https://diaform.io/api/v1/projects" \
-H "Authorization: Bearer $DIAFORM_API_KEY"Risposta#
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
}Campi del progetto#
| Campo | Tipo | Descrizione |
|---|---|---|
id | string | ID del progetto |
name | string o null | Il nome del progetto come appare nella dashboard |
product_name | string o null | Nome del prodotto o servizio nelle impostazioni del progetto |
published | boolean | Indica se il progetto è online |
language | string o null | Lingua dell’intervista, ad esempio english |
respondent_access | string | public (chiunque abbia il link) o invite_only |
url | string o null | Il link pubblico alla conversazione. Usa il tuo dominio personalizzato verificato, se ne hai uno. |
created_at | string | Quando è stato creato il progetto |
published_at | string o null | Quando è stato pubblicato l’ultima volta |
Ottieni un progetto#
HTTP
GET /api/v1/projects/{project_id}Restituisce un progetto con le sue domande attuali e il numero di conversazioni.
Esempio#
curl "https://diaform.io/api/v1/projects/b8acb3ab-1f3d-4a7e-a846-b7f493f86b6d" \
-H "Authorization: Bearer $DIAFORM_API_KEY"Risposta#
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
}
}Ha tutti i campi dell’elenco, più:
| Campo | Tipo | Descrizione |
|---|---|---|
questions | array | Le domande pubblicate, in ordine |
questions[].id | string | ID della domanda. I riepiloghi delle conversazioni lo indicano come question_id. |
questions[].text | string | La domanda così com’è scritta |
questions[].type | string | open_text, single_choice, multiple_choice, nps, star_rating o file_upload |
questions[].required | boolean | Indica se la domanda è obbligatoria |
questions[].options | array | Le opzioni di una domanda a scelta, ognuna con id e label. Vuoto per gli altri tipi. |
conversation_counts.total | number | Conversazioni che sono state almeno aperte |
conversation_counts.completed | number | Conversazioni arrivate alla fine |
Le domande possono cambiare nel tempo. Il riepilogo di una conversazione conserva la formulazione che è stata davvero posta al rispondente.