Para criar um formulário, você precisará criar um json.

Acesse a lista de perguntas aqui

O json será constituido por:

Um id, os detalhes do autor do formulário, a versão, o contato para suporte, o tipo de acesso, nome e descrição, a api de chamada
e as páginas do formulário, que contém as perguntas e as resposta

O id do json é a forma de identifica-lo

           "id": "hash-form"

Os detalhes do autor deverão estar dentro de um objeto, os campos são: nome, email, documento e copyright, você precisará informar os mesmos dados contidos no seu cadastro, eles serão cruzados.
Utilize o campo copyright se por acaso você quiser atribuir sua marca a este conjunto de perguntas

"author": {
      "name": "Seu nome",
      "email": "[email protected]",
      "document": "",
      "copyright": ""
}

A parte de suporte serve pra os usuários que utilizarem seu formulário conseguirem se comunicar com você, portanto precisa de uma url e um email.

"support": {
      "url": "https://urldoseusite.com",
      "email": "[email protected]"
}

A versão do formulário, fique atento às versões, você não poderá subir o mesmo formulário mais de uma vez com o mesmo id e a mesma versão, então sempre que precisar subir um formulário novo com poucas alterações, informe uma nova versão para que os usuários usem sempre a versão mais nova

"version": "1.0.0"

A parte de acesso, possui três chaves:
Se o formulário é público, que permite que qualquer pessoa que utilize o KeyApp possa colocar o seu formulário no portal dela.
Qual a frequência em que será pedido para os usuários do seu portal refazerem o formulário, 1/1 significa que 1 vez por dia, 1/2 é uma vez a cada dois dias, 1/30 uma vez por mês, e assim por diante, se você quiser que essa resposta seja única, sem repetições, você pode colocar apenas “1”. Você não pode colocar 2/1 por exemplo, querendo que o usuário responda duas vezes por dia.

E se o formulário é obrigatório de ser respondido para entrar no seu portal, se você colocar ‘false’ a pessoa verá o botão ‘não quero responder’

"access": {
      "public": false,
      "frequency": "1/1",
      "mandatory": true
}

A parte de visualização, que contém o título do formulário e a sua descrição. neste momento você só pode informar textos em português do brasil

"view": {
      "title": {
           "ptBR": ""
       },
      "description": {
           "ptBR": ""
      },
}

A api, que possui duas chaves, sendo essa parte opcional
O post, que é para caso você deseja receber as respostas do formulário em algum outro servidor sob seu domínio, coloque a url e nós as enviaremos. consulte a documentação de respostas para ver como é o schema de envio das respostas
E o exceptions, para caso de erro, enviaremos uma mensagem de erro para o mesmo lugar. esse endpoint será invocado se por qualquer motivo que seja, sua api principal retornar um HTTP status diferente de ‘200’, assim te enviaremos apenas um aviso de que alguém tentou responder e te enviar os dados, mas que sua api estava fora do ar naquele momento. Indicamos que estes dois endereços estejam em servidores diferentes para garantir resiliência das notificações.

"api": {
      "post": "",
      "exceptions": ""
}

E por fim, as páginas
Dentro de pages, cada objeto vai possuir um tipo, que representa qual o tipo da página. você poderá invocar essas páginas com base nas respostas dos usuários. ou até para separar seções. a sequência delas na chave “pages” importa, pois elas serão exibidas da forma que você posicionar.
Os cinco tipos possíveis são:

  1. Success é um objeto com o texto de sucesso e uma coloração positiva
  2. Failure é um objeto com o texto de erro e uma coloração negativa
  3. Warning é um objeto com o texto de aviso e uma coloração alarmante
  4. Neutral, é um objeto com um texto que você deseja que apareça pro usuário, por exemplo um texto explicativo sobre o formulário ou uma separação de seções dentro do formulário
  5. Fields, é um array que terá os objetos de perguntas e respostas

O objeto do tipo fields
*Nota:
     só podem ser escolhidas perguntas que existam no nosso banco de dados, consulte a lista de perguntas antes de construir seu formulário
     as únicas partes que podem ser alteradas dentro das respostas são o peso, que é o quanto cada uma vale, o valor experado como “correto”, e a visibilidade delas para o usuário*
A chave question representa a pergunta, cada uma terá um ID, que é o existente no nosso banco, e um array de respostas, representado pela chave answers
Se por ventura você não atribur valores novos para uma resposta (visible, expected e weight), serão usados seus valores padrões, previamente dispostos em nosso banco de perguntas

"pages": [
{
"id": "FormCompleted",
"type": "success",
"text": {
"ptBR": "Obrigado por preencher o formulário"
}
},
{
"id": "FormError",
"type": "failure",
"text": {
"ptBR": "Ocorreu um erro, por favor preencher de novo"
}
},
{
"id": "pag1",
"type": "fields",
"questions": [
{
"question": {
"required": true,
"visible": true,
"id": "covid-cl1",
"answers": [
{
"id": "ans1",
"expected": false
},
{
"id": "ans2",
"expected": false
},
{
"id": "ans3",
"expected": false
},
{
"id": "ans4",
"expected": false
},
{
"id": "ans5",
"expected": false
},
{
"id": "ans6",
"expected": true
},
{
"id": "ans7",
"expected": true
},
{
"id": "ans8",
"expected": true
},
{
"id": "ans9",
"expected": true
},
{
"id": "ans10",
"expected": true
},
{
"id": "ans11",
"expected": true
}
]
}
}
]
},
{
"id": "pag2",
"type": "fields",
"questions": [
{
"question": {
"required": false,
"visible": true,
"id": "covid-cl2",
"answers": [
{
"id": "ans1",
"expected": false
},
{
"id": "ans2",
"expected": true
}
]
}
},
{
"question": {
"required": true,
"visible": true,
"id": "covid-cl3",
"answers": [
{
"id": "ans1",
"expected": false
},
{
"id": "ans2",
"expected": true
}
]
}
}
]
}
]

Modelo de json completo:

{
"id": "cyberlabs_quiz",
"author": {
"name": "Cyberlabs",
"email": "",
"document": "",
"copyright": ""
},
"support": {
"url": "https://cyberlabs.ai/contato/",
"email": "[email protected]"
},
"version": "1.0.0",
"access": {
"public": true,
"frequency": "1/7",
"mandatory": true
},
"view": {
"title": {
"ptBR": "Nome do Quiz"
},
"description": {
"ptBR": "Descrição do quiz criado pela Cyberlabs"
}
},
"api": {
"post": "",
"exceptions": ""
},
"pages": [
{
"id": "FormCompleted",
"type": "success",
"text": {
"ptBR": "Obrigado por preencher o formulário"
}
},
{
"id": "FormError",
"type": "failure",
"text": {
"ptBR": "Ocorreu um erro, por favor preencher de novo"
}
},
{
"id": "pag1",
"type": "fields",
"questions": [
{
"question": {
"required": true,
"visible": true,
"id": "covid-cl1",
"answers": [
{
"id": "ans1",
"expected": false
},
{
"id": "ans2",
"expected": false
},
{
"id": "ans3",
"expected": false
},
{
"id": "ans4",
"expected": false
},
{
"id": "ans5",
"expected": false
},
{
"id": "ans6",
"expected": true
},
{
"id": "ans7",
"expected": true
},
{
"id": "ans8",
"expected": true
},
{
"id": "ans9",
"expected": true
},
{
"id": "ans10",
"expected": true
},
{
"id": "ans11",
"expected": true
}
]
}
}
]
},
{
"id": "pag2",
"type": "fields",
"questions": [
{
"question": {
"required": false,
"visible": true,
"id": "covid-cl2",
"answers": [
{
"id": "ans1",
"expected": false
},
{
"id": "ans2",
"expected": true
}
]
}
},
{
"question": {
"required": true,
"visible": true,
"id": "covid-cl3",
"answers": [
{
"id": "ans1",
"expected": false
},
{
"id": "ans2",
"expected": true
}
]
}
}
]
}
]
}