API de projetos
Um projeto é um entrevistador de IA com perguntas próprias. A maioria dos outros endpoints precisa de um ID de projeto, então esta costuma ser a primeira chamada que você faz. Para autenticação, paginação e erros, veja a visão geral da API.
Listar projetos#
HTTP
GET /api/v1/projectsRetorna todos os projetos da organização da chave, dos mais recentes para os mais antigos, publicados ou não. Não recebe parâmetros e retorna todos os projetos em uma única página.
Exemplo#
curl "https://diaform.io/api/v1/projects" \
-H "Authorization: Bearer $DIAFORM_API_KEY"Resposta#
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
}Campos do projeto#
| Campo | Tipo | Descrição |
|---|---|---|
id | string | ID do projeto |
name | string ou null | O nome do projeto como aparece no painel |
product_name | string ou null | Nome do produto ou serviço das configurações do projeto |
published | boolean | Se o projeto está publicado |
language | string ou null | Idioma da entrevista, como english |
respondent_access | string | public (qualquer pessoa com o link) ou invite_only |
url | string ou null | O link público da conversa. Usa seu domínio próprio verificado, se você tiver um. |
created_at | string | Quando o projeto foi criado |
published_at | string ou null | Quando ele foi publicado pela última vez |
Buscar um projeto#
HTTP
GET /api/v1/projects/{project_id}Retorna um projeto com as perguntas atuais e as contagens de conversas.
Exemplo#
curl "https://diaform.io/api/v1/projects/b8acb3ab-1f3d-4a7e-a846-b7f493f86b6d" \
-H "Authorization: Bearer $DIAFORM_API_KEY"Resposta#
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
}
}Tem todos os campos da lista e mais:
| Campo | Tipo | Descrição |
|---|---|---|
questions | array | As perguntas publicadas, em ordem |
questions[].id | string | ID da pergunta. Os resumos das conversas se referem a ele como question_id. |
questions[].text | string | A pergunta como foi escrita |
questions[].type | string | open_text, single_choice, multiple_choice, nps, star_rating ou file_upload |
questions[].required | boolean | Se a pergunta é obrigatória |
questions[].options | array | As opções de uma pergunta de escolha única ou múltipla, cada uma com id e label. Vazio nos outros tipos. |
conversation_counts.total | number | Conversas que foram pelo menos abertas |
conversation_counts.completed | number | Conversas que chegaram ao fim |
As perguntas podem mudar com o tempo. O resumo de uma conversa mantém o texto da pergunta como ela foi feita ao respondente.