Votira Servidor MCP

Ligue assistentes de IA aos seus questionários, respostas e análises do Votira através do Model Context Protocol (MCP).

Endpoint: https://votira.co/mcp Transporte: HTTP streamable (JSON‑RPC 2.0)
Voltar às definições

O que é isto?

O Model Context Protocol é um padrão aberto para conectar assistentes de IA a sistemas externos. A Votira disponibiliza ferramentas de inquérito, resultados, Painel de IA e conta, com permissões explícitas para alterações e gastos de IA.

Autenticação

Gere uma única chave de acesso MCP em Configurações (uma chave por conta). Só é apresentada uma vez. Utilize-a como token Bearer no endpoint MCP:

Authorization: Bearer vot_mcp_xxxxxxxxxxxxxxxx

Pode rodar ou eliminar a chave a qualquer momento; a rotação invalida imediatamente o segredo anterior.

Configuração do cliente

Aponte qualquer cliente MCP que suporte o transporte HTTP streamable para o endpoint. Exemplo de configuração do cliente:

{
  "mcpServers": {
    "votira": {
      "url": "https://votira.co/mcp",
      "headers": { "Authorization": "Bearer vot_mcp_xxxxxxxx" }
    }
  }
}

Ferramentas disponíveis

FerramentaArgumentosRetorna
list_surveys—Os seus inquéritos com id, título, estado e número de respostas.
get_surveysurvey_idUm inquérito com as suas perguntas e definições.
get_survey_responsessurvey_id, limit?, offset?Respostas paginadas de um inquérito.
get_survey_analysissurvey_idAnálise AI em cache para o inquérito completo e por pergunta.

Permissões e ferramentas avançadas

Novas e atuais chaves MCP são apenas de leitura por padrão. Ative explicitamente as permissões de escrita, eliminação e créditos de IA nas Definições. A rotação preserva as permissões selecionadas; visualizadores da organização não podem realizar operações de escrita.

Ferramentas de alteração requerem permissão de escrita, ferramentas destrutivas requerem permissão de eliminação e ferramentas de IA pagas requerem ambas. Revise os argumentos da ferramenta antes de aprovar uma operação de escrita ou que consuma créditos no seu assistente.

Os resultados JSON incluem structuredContent. As exportações de ficheiros são devolvidas como recursos MCP incorporados: texto para CSV e JSON, blobs base64 para PDF. Operações assíncronas devolvem jobId; use get_ai_job para obter o estado e resultado.

Ferramentas de gestão e auditoria da organização exigem privilégios de administrador. Chaves API pessoais, palavras-passe, compras e eliminação de conta não são expostas como ferramentas.

get_integration_capabilities

Ler operações disponíveis, esquemas, permissões e limites.

Permissões necessárias: read

{
  "additionalProperties": false,
  "properties": {},
  "required": [],
  "type": "object"
}
create_survey

Criar um inquérito, incluindo páginas, perguntas e definições.

Permissões necessárias: write

{
  "additionalProperties": false,
  "properties": {
    "payload": {
      "type": "object"
    }
  },
  "required": [
    "payload"
  ],
  "type": "object"
}
update_survey

Atualizar o conteúdo do inquérito, páginas, agendamento e aparência.

Permissões necessárias: write

{
  "additionalProperties": false,
  "properties": {
    "payload": {
      "type": "object"
    },
    "survey_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    }
  },
  "required": [
    "survey_id",
    "payload"
  ],
  "type": "object"
}
duplicate_survey

Duplicar um inquérito como novo rascunho sem respostas.

Permissões necessárias: write

{
  "additionalProperties": false,
  "properties": {
    "survey_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "title": {
      "maxLength": 2000,
      "type": "string"
    }
  },
  "required": [
    "survey_id"
  ],
  "type": "object"
}
set_survey_status

Publicar, fechar ou devolver um inquérito para rascunho.

Permissões necessárias: write

{
  "additionalProperties": false,
  "properties": {
    "status": {
      "enum": [
        "draft",
        "published",
        "closed"
      ]
    },
    "survey_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    }
  },
  "required": [
    "survey_id",
    "status"
  ],
  "type": "object"
}
delete_survey

Eliminar permanentemente um inquérito, respostas, imagens, análises e visualizações.

Permissões necessárias: delete

{
  "additionalProperties": false,
  "properties": {
    "survey_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    }
  },
  "required": [
    "survey_id"
  ],
  "type": "object"
}
list_templates

Listar modelos de inquérito localizados.

Permissões necessárias: read

{
  "additionalProperties": false,
  "properties": {},
  "required": [],
  "type": "object"
}
get_template

Ler um modelo localizado com perguntas e tema.

Permissões necessárias: read

{
  "additionalProperties": false,
  "properties": {
    "template_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    }
  },
  "required": [
    "template_id"
  ],
  "type": "object"
}
create_survey_from_template

Criar um inquérito localizado a partir de um modelo sem créditos de IA.

Permissões necessárias: write

{
  "additionalProperties": false,
  "properties": {
    "template_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "title": {
      "maxLength": 2000,
      "type": "string"
    }
  },
  "required": [
    "template_id"
  ],
  "type": "object"
}
get_question_types

Listar todos os tipos de perguntas suportados e campos de configuração específicos por tipo.

Permissões necessárias: read

{
  "additionalProperties": false,
  "properties": {},
  "required": [],
  "type": "object"
}
add_question

Adicionar uma pergunta ao inquérito.

Permissões necessárias: write

{
  "additionalProperties": false,
  "properties": {
    "question": {
      "type": "object"
    },
    "survey_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    }
  },
  "required": [
    "survey_id",
    "question"
  ],
  "type": "object"
}
update_question

Atualizar uma pergunta mantendo a sua identidade.

Permissões necessárias: write

{
  "additionalProperties": false,
  "properties": {
    "question": {
      "type": "object"
    },
    "question_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "survey_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    }
  },
  "required": [
    "survey_id",
    "question_id",
    "question"
  ],
  "type": "object"
}
delete_question

Eliminar uma pergunta e reparar referências de ramificação.

Permissões necessárias: delete

{
  "additionalProperties": false,
  "properties": {
    "question_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "survey_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    }
  },
  "required": [
    "survey_id",
    "question_id"
  ],
  "type": "object"
}
reorder_questions

Reordenar todas as perguntas, mantendo a ordem principal das páginas.

Permissões necessárias: write

{
  "additionalProperties": false,
  "properties": {
    "order": {
      "items": {
        "maxLength": 100,
        "minLength": 1,
        "pattern": "^[A-Za-z0-9_-]+$",
        "type": "string"
      },
      "maxItems": 50,
      "type": "array",
      "uniqueItems": true
    },
    "survey_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    }
  },
  "required": [
    "survey_id",
    "order"
  ],
  "type": "object"
}
get_survey_preview

Obter perguntas A/B resolvidas sem registar uma visualização. Use respondent_id para corresponder às submissões JSON seguintes.

Permissões necessárias: read

{
  "additionalProperties": false,
  "properties": {
    "respondent_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "seed": {
      "maxLength": 2000,
      "type": "string"
    },
    "survey_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    }
  },
  "required": [
    "survey_id"
  ],
  "type": "object"
}
generate_survey_questions

Gerar perguntas a partir de uma ideia ou editar perguntas existentes de forma incremental. Custa um crédito; pode devolver um trabalho.

Permissões necessárias: write, ai

{
  "additionalProperties": false,
  "properties": {
    "idea": {
      "maxLength": 2000,
      "type": "string"
    },
    "pages": {
      "items": {
        "type": "object"
      },
      "maxItems": 20,
      "type": "array"
    },
    "questions": {
      "items": {
        "type": "object"
      },
      "maxItems": 50,
      "type": "array"
    },
    "survey_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    }
  },
  "required": [
    "idea"
  ],
  "type": "object"
}
get_ai_job

Ler o estado e resultado de um trabalho de IA pertencente a esta conta.

Permissões necessárias: read

{
  "additionalProperties": false,
  "properties": {
    "job_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    }
  },
  "required": [
    "job_id"
  ],
  "type": "object"
}
generate_question_analysis

Analisar uma pergunta de texto livre. Resultados em cache são gratuitos; nova análise custa um crédito.

Permissões necessárias: write, ai

{
  "additionalProperties": false,
  "properties": {
    "question_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "survey_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    }
  },
  "required": [
    "survey_id",
    "question_id"
  ],
  "type": "object"
}
generate_survey_analysis

Gerar a análise de IA do inquérito. Resultados em cache são gratuitos; nova análise custa um crédito.

Permissões necessárias: write, ai

{
  "additionalProperties": false,
  "properties": {
    "survey_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    }
  },
  "required": [
    "survey_id"
  ],
  "type": "object"
}
get_ai_credits

Ler créditos de IA disponíveis, plafond, consumo e custos das operações.

Permissões necessárias: read

{
  "additionalProperties": false,
  "properties": {},
  "required": [],
  "type": "object"
}
list_personas

Listar personas num painel pessoal ou de organização, opcionalmente restrito a um grupo.

Permissões necessárias: read

{
  "additionalProperties": false,
  "properties": {
    "pool_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "scope": {
      "enum": [
        "user",
        "org"
      ],
      "type": "string"
    }
  },
  "required": [],
  "type": "object"
}
get_persona

Ler uma persona sintética.

Permissões necessárias: read

{
  "additionalProperties": false,
  "properties": {
    "persona_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "scope": {
      "enum": [
        "user",
        "org"
      ],
      "type": "string"
    }
  },
  "required": [
    "persona_id"
  ],
  "type": "object"
}
create_persona

Criar uma persona manualmente sem consumir créditos de IA.

Permissões necessárias: write

{
  "additionalProperties": false,
  "properties": {
    "attributes": {
      "type": "object"
    },
    "name": {
      "maxLength": 2000,
      "type": "string"
    },
    "poolIds": {
      "items": {
        "maxLength": 100,
        "minLength": 1,
        "pattern": "^[A-Za-z0-9_-]+$",
        "type": "string"
      },
      "maxItems": 500,
      "type": "array",
      "uniqueItems": true
    },
    "scope": {
      "enum": [
        "user",
        "org"
      ],
      "type": "string"
    }
  },
  "required": [
    "name"
  ],
  "type": "object"
}
update_persona

Editar atributos da persona e substituir grupos quando fornecido.

Permissões necessárias: write

{
  "additionalProperties": false,
  "properties": {
    "attributes": {
      "type": "object"
    },
    "name": {
      "maxLength": 2000,
      "type": "string"
    },
    "persona_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "poolIds": {
      "items": {
        "maxLength": 100,
        "minLength": 1,
        "pattern": "^[A-Za-z0-9_-]+$",
        "type": "string"
      },
      "maxItems": 500,
      "type": "array",
      "uniqueItems": true
    },
    "scope": {
      "enum": [
        "user",
        "org"
      ],
      "type": "string"
    }
  },
  "required": [
    "persona_id"
  ],
  "type": "object"
}
delete_persona

Eliminar uma persona do painel.

Permissões necessárias: delete

{
  "additionalProperties": false,
  "properties": {
    "persona_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "scope": {
      "enum": [
        "user",
        "org"
      ],
      "type": "string"
    }
  },
  "required": [
    "persona_id"
  ],
  "type": "object"
}
list_pools

Listar grupos nomeados e o número de personas em cada um.

Permissões necessárias: read

{
  "additionalProperties": false,
  "properties": {
    "scope": {
      "enum": [
        "user",
        "org"
      ],
      "type": "string"
    }
  },
  "required": [],
  "type": "object"
}
get_pool

Ler um grupo nomeado e as suas personas.

Permissões necessárias: read

{
  "additionalProperties": false,
  "properties": {
    "pool_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "scope": {
      "enum": [
        "user",
        "org"
      ],
      "type": "string"
    }
  },
  "required": [
    "pool_id"
  ],
  "type": "object"
}
create_pool

Criar um grupo de personas nomeado.

Permissões necessárias: write

{
  "additionalProperties": false,
  "properties": {
    "description": {
      "maxLength": 2000,
      "type": "string"
    },
    "name": {
      "maxLength": 2000,
      "type": "string"
    },
    "scope": {
      "enum": [
        "user",
        "org"
      ],
      "type": "string"
    }
  },
  "required": [
    "name"
  ],
  "type": "object"
}
update_pool

Renomear um grupo ou atualizar a sua descrição.

Permissões necessárias: write

{
  "additionalProperties": false,
  "properties": {
    "description": {
      "maxLength": 2000,
      "type": "string"
    },
    "name": {
      "maxLength": 2000,
      "type": "string"
    },
    "pool_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "scope": {
      "enum": [
        "user",
        "org"
      ],
      "type": "string"
    }
  },
  "required": [
    "pool_id"
  ],
  "type": "object"
}
delete_pool

Eliminar um grupo e desvincular os seus membros sem eliminar as personas.

Permissões necessárias: delete

{
  "additionalProperties": false,
  "properties": {
    "pool_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "scope": {
      "enum": [
        "user",
        "org"
      ],
      "type": "string"
    }
  },
  "required": [
    "pool_id"
  ],
  "type": "object"
}
assign_pool_personas

Adicionar ou remover personas em massa de um grupo.

Permissões necessárias: write

{
  "additionalProperties": false,
  "properties": {
    "action": {
      "enum": [
        "add",
        "remove"
      ]
    },
    "personaIds": {
      "items": {
        "maxLength": 100,
        "minLength": 1,
        "pattern": "^[A-Za-z0-9_-]+$",
        "type": "string"
      },
      "maxItems": 500,
      "type": "array",
      "uniqueItems": true
    },
    "pool_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "scope": {
      "enum": [
        "user",
        "org"
      ],
      "type": "string"
    }
  },
  "required": [
    "pool_id",
    "personaIds",
    "action"
  ],
  "type": "object"
}
import_personas

Importar personas de JSON. Metadados dos grupos são ignorados; personas importadas ficam por atribuir.

Permissões necessárias: write

{
  "additionalProperties": false,
  "properties": {
    "personas": {
      "items": {
        "type": "object"
      },
      "maxItems": 200,
      "minItems": 1,
      "type": "array"
    },
    "scope": {
      "enum": [
        "user",
        "org"
      ],
      "type": "string"
    }
  },
  "required": [
    "personas"
  ],
  "type": "object"
}
export_personas

Exportar personas ou um grupo como JSON ou CSV.

Permissões necessárias: read

{
  "additionalProperties": false,
  "properties": {
    "format": {
      "enum": [
        "json",
        "csv"
      ]
    },
    "persona_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "pool_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "scope": {
      "enum": [
        "user",
        "org"
      ],
      "type": "string"
    }
  },
  "required": [],
  "type": "object"
}
generate_personas

Gerar personas com IA. Custa cinco créditos por persona, com reembolso para resultados em falta.

Permissões necessárias: write, ai

{
  "additionalProperties": false,
  "properties": {
    "ageMax": {
      "maximum": 120,
      "minimum": 13,
      "type": "integer"
    },
    "ageMin": {
      "maximum": 120,
      "minimum": 13,
      "type": "integer"
    },
    "count": {
      "maximum": 50,
      "minimum": 1,
      "type": "integer"
    },
    "description": {
      "maxLength": 2000,
      "type": "string"
    },
    "extra": {
      "maxLength": 2000,
      "type": "string"
    },
    "genderMix": {
      "additionalProperties": false,
      "properties": {
        "female": {
          "maximum": 50,
          "minimum": 0,
          "type": "integer"
        },
        "male": {
          "maximum": 50,
          "minimum": 0,
          "type": "integer"
        },
        "non_binary": {
          "maximum": 50,
          "minimum": 0,
          "type": "integer"
        }
      },
      "type": "object"
    },
    "scope": {
      "enum": [
        "user",
        "org"
      ],
      "type": "string"
    }
  },
  "required": [
    "description"
  ],
  "type": "object"
}
estimate_panel_cost

Estimar créditos necessários para administrar um inquérito a um grupo nomeado.

Permissões necessárias: read

{
  "additionalProperties": false,
  "properties": {
    "pool_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "scope": {
      "enum": [
        "user",
        "org"
      ],
      "type": "string"
    },
    "survey_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    }
  },
  "required": [
    "pool_id",
    "survey_id"
  ],
  "type": "object"
}
administer_panel

Administrar um inquérito a um grupo nomeado. Custa três créditos por persona; pode devolver um trabalho.

Permissões necessárias: write, ai

{
  "additionalProperties": false,
  "properties": {
    "pool_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "scope": {
      "enum": [
        "user",
        "org"
      ],
      "type": "string"
    },
    "survey_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    }
  },
  "required": [
    "pool_id",
    "survey_id"
  ],
  "type": "object"
}
get_survey_results

Ler estatísticas por pergunta, análises A/B, visualizações, contagens do painel de IA e análise de desistências.

Permissões necessárias: read

{
  "additionalProperties": false,
  "properties": {
    "survey_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    }
  },
  "required": [
    "survey_id"
  ],
  "type": "object"
}
get_partial_responses

Ler respostas em andamento, separadamente das submissões concluídas.

Permissões necessárias: read

{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "maximum": 500,
      "minimum": 1,
      "type": "integer"
    },
    "offset": {
      "maximum": 100000,
      "minimum": 0,
      "type": "integer"
    },
    "survey_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    }
  },
  "required": [
    "survey_id"
  ],
  "type": "object"
}
export_survey_results

Descarregar respostas concluídas em CSV (até 5000 por página) ou um relatório de resultados em PDF.

Permissões necessárias: read

{
  "additionalProperties": false,
  "properties": {
    "format": {
      "enum": [
        "csv",
        "pdf"
      ]
    },
    "offset": {
      "maximum": 100000,
      "minimum": 0,
      "type": "integer"
    },
    "survey_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    }
  },
  "required": [
    "survey_id"
  ],
  "type": "object"
}
upload_survey_image

Carregar uma imagem PNG, JPEG, GIF ou WebP codificada em base64 (máximo 5 MB) para o tema do inquérito.

Permissões necessárias: write

{
  "additionalProperties": false,
  "properties": {
    "content": {
      "maxLength": 6990510,
      "type": "string"
    },
    "contentType": {
      "enum": [
        "image/png",
        "image/jpeg",
        "image/gif",
        "image/webp"
      ]
    },
    "field": {
      "enum": [
        "headerImage",
        "backgroundImage"
      ]
    },
    "survey_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    }
  },
  "required": [
    "survey_id",
    "field",
    "contentType",
    "content"
  ],
  "type": "object"
}
submit_survey_response

Submeter uma resposta concluída para um respondente externo; aplica regras de publicação, agendamento, ramificação e duplicados.

Permissões necessárias: write

{
  "additionalProperties": false,
  "properties": {
    "answers": {
      "type": "object"
    },
    "completionTimeSeconds": {
      "maximum": 604800,
      "minimum": 0,
      "type": "integer"
    },
    "respondentInfo": {
      "type": "object"
    },
    "respondent_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "survey_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    }
  },
  "required": [
    "survey_id",
    "respondent_id",
    "answers"
  ],
  "type": "object"
}
save_partial_response

Guardar automaticamente uma resposta parcial de um respondente externo quando a recolha está ativada.

Permissões necessárias: write

{
  "additionalProperties": false,
  "properties": {
    "answers": {
      "type": "object"
    },
    "completionTimeSeconds": {
      "maximum": 604800,
      "minimum": 0,
      "type": "integer"
    },
    "respondentInfo": {
      "type": "object"
    },
    "respondent_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "survey_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    }
  },
  "required": [
    "survey_id",
    "respondent_id",
    "answers"
  ],
  "type": "object"
}
get_account

Ler perfil, idioma, domínio, plano e acesso à organização.

Permissões necessárias: read

{
  "additionalProperties": false,
  "properties": {},
  "required": [],
  "type": "object"
}
update_account

Atualizar nome de exibição, idioma do serviço ou domínio personalizado. Não altera o email, credenciais ou faturação.

Permissões necessárias: write

{
  "additionalProperties": false,
  "properties": {
    "customDomain": {
      "maxLength": 253,
      "type": [
        "string",
        "null"
      ]
    },
    "displayName": {
      "maxLength": 100,
      "minLength": 2,
      "type": "string"
    },
    "preferredLanguage": {
      "maxLength": 10,
      "type": "string"
    }
  },
  "required": [],
  "type": "object"
}
get_organization

Ler a organização, licenças disponíveis e créditos de IA partilhados.

Permissões necessárias: read

{
  "additionalProperties": false,
  "properties": {},
  "required": [],
  "type": "object"
}
list_organization_members

Listar membros da organização, funções, licenças e consumo de IA. Apenas administradores.

Permissões necessárias: read

{
  "additionalProperties": false,
  "properties": {},
  "required": [],
  "type": "object"
}
add_organization_member

Adicionar uma conta Votira existente à organização. Apenas administradores.

Permissões necessárias: write

{
  "additionalProperties": false,
  "properties": {
    "email": {
      "maxLength": 254,
      "pattern": "^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$",
      "type": "string"
    },
    "role": {
      "enum": [
        "viewer",
        "editor",
        "admin"
      ]
    }
  },
  "required": [
    "email",
    "role"
  ],
  "type": "object"
}
update_organization_member

Atualizar a função ou licença atribuída de um membro. Apenas administradores; o proprietário está protegido.

Permissões necessárias: write

{
  "additionalProperties": false,
  "properties": {
    "hasLicense": {
      "type": "boolean"
    },
    "member_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    },
    "role": {
      "enum": [
        "viewer",
        "editor",
        "admin"
      ]
    }
  },
  "required": [
    "member_id"
  ],
  "type": "object"
}
remove_organization_member

Remover um membro sem eliminar a sua conta. Apenas administradores.

Permissões necessárias: delete

{
  "additionalProperties": false,
  "properties": {
    "member_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    }
  },
  "required": [
    "member_id"
  ],
  "type": "object"
}
list_organization_invites

Listar convites da organização sem expor os tokens de convite. Apenas administradores.

Permissões necessárias: read

{
  "additionalProperties": false,
  "properties": {},
  "required": [],
  "type": "object"
}
create_organization_invite

Criar um convite e devolver o URL de partilha. Apenas administradores.

Permissões necessárias: write

{
  "additionalProperties": false,
  "properties": {
    "email": {
      "maxLength": 254,
      "pattern": "^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$",
      "type": "string"
    },
    "role": {
      "enum": [
        "viewer",
        "editor",
        "admin"
      ]
    },
    "type": {
      "enum": [
        "member",
        "guest"
      ]
    }
  },
  "required": [
    "role"
  ],
  "type": "object"
}
revoke_organization_invite

Revogar um convite pendente da organização. Apenas administradores.

Permissões necessárias: delete

{
  "additionalProperties": false,
  "properties": {
    "invite_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    }
  },
  "required": [
    "invite_id"
  ],
  "type": "object"
}
get_audit_log

Pesquisar o registo de auditoria da organização. Apenas administradores Enterprise.

Permissões necessárias: read

{
  "additionalProperties": false,
  "properties": {
    "category": {
      "enum": [
        "auth",
        "survey",
        "results",
        "ai",
        "keys",
        "billing",
        "organization",
        "profile",
        "audit",
        "api",
        "mcp"
      ]
    },
    "date_from": {
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "type": "string"
    },
    "date_to": {
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "type": "string"
    },
    "limit": {
      "maximum": 500,
      "minimum": 1,
      "type": "integer"
    },
    "offset": {
      "maximum": 100000,
      "minimum": 0,
      "type": "integer"
    },
    "search": {
      "maxLength": 100,
      "type": "string"
    }
  },
  "required": [],
  "type": "object"
}
export_audit_log

Exportar até 5000 registos de auditoria em CSV. Apenas administradores Enterprise.

Permissões necessárias: read

{
  "additionalProperties": false,
  "properties": {
    "category": {
      "enum": [
        "auth",
        "survey",
        "results",
        "ai",
        "keys",
        "billing",
        "organization",
        "profile",
        "audit",
        "api",
        "mcp"
      ]
    },
    "date_from": {
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "type": "string"
    },
    "date_to": {
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "type": "string"
    },
    "limit": {
      "maximum": 500,
      "minimum": 1,
      "type": "integer"
    },
    "offset": {
      "maximum": 100000,
      "minimum": 0,
      "type": "integer"
    },
    "search": {
      "maxLength": 100,
      "type": "string"
    }
  },
  "required": [],
  "type": "object"
}
list_invoices

Listar faturas pessoais pagas e, para administradores, faturas da organização.

Permissões necessárias: read

{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "maximum": 500,
      "minimum": 1,
      "type": "integer"
    },
    "offset": {
      "maximum": 100000,
      "minimum": 0,
      "type": "integer"
    }
  },
  "required": [],
  "type": "object"
}
download_invoice

Descarregar o PDF de uma fatura paga após verificar a titularidade da faturação.

Permissões necessárias: read

{
  "additionalProperties": false,
  "properties": {
    "invoice_id": {
      "maxLength": 100,
      "pattern": "^in_[A-Za-z0-9]+$",
      "type": "string"
    }
  },
  "required": [
    "invoice_id"
  ],
  "type": "object"
}
list_support_requests

Listar os pedidos de suporte, relatórios de erros e pedidos de funcionalidades da conta.

Permissões necessárias: read

{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "maximum": 500,
      "minimum": 1,
      "type": "integer"
    },
    "offset": {
      "maximum": 100000,
      "minimum": 0,
      "type": "integer"
    }
  },
  "required": [],
  "type": "object"
}
get_support_request

Ler um pedido de suporte e respostas da equipa, restrito ao seu proprietário.

Permissões necessárias: read

{
  "additionalProperties": false,
  "properties": {
    "submission_id": {
      "maxLength": 100,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_-]+$",
      "type": "string"
    }
  },
  "required": [
    "submission_id"
  ],
  "type": "object"
}
create_support_request

Abrir um pedido de suporte, relatório de erro ou pedido de funcionalidade.

Permissões necessárias: write

{
  "additionalProperties": false,
  "properties": {
    "category": {
      "enum": [
        "bug",
        "feature",
        "ticket"
      ]
    },
    "description": {
      "maxLength": 5000,
      "minLength": 10,
      "type": "string"
    },
    "priority": {
      "enum": [
        "low",
        "normal",
        "high",
        "urgent"
      ]
    },
    "problemSolved": {
      "maxLength": 5000,
      "type": "string"
    },
    "severity": {
      "enum": [
        "low",
        "medium",
        "high",
        "critical"
      ]
    },
    "stepsToReproduce": {
      "maxLength": 5000,
      "type": "string"
    },
    "subject": {
      "maxLength": 150,
      "minLength": 3,
      "type": "string"
    },
    "ticketCategory": {
      "enum": [
        "billing",
        "technical",
        "account",
        "other"
      ]
    }
  },
  "required": [
    "category",
    "subject",
    "description"
  ],
  "type": "object"
}

Métodos do protocolo

O endpoint implementa os métodos principais MCP JSON‑RPC: initialize, tools/list e tools/call (mais ping). Exemplo de listagem de ferramentas:

curl -X POST https://votira.co/mcp \
  -H "Authorization: Bearer $VOTIRA_MCP_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Executar uma ferramenta

curl -X POST https://votira.co/mcp \
  -H "Authorization: Bearer $VOTIRA_MCP_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call",
       "params":{"name":"get_survey","arguments":{"survey_id":"srv_123"}}}'

Segurança & limites

  • As ferramentas estão limitadas à conta autenticada e aos recursos autorizados da organização. Escritas e gastos de IA requerem permissões explícitas.
  • Um plano de conta inativo retorna 403 Forbidden.
  • O endpoint tem limite de taxa (600 pedidos/hora por cliente).
  • Nenhuma informação pessoal identificável é registada nos logs do servidor.

Pare de adivinhar. Comece a validar.

Crie o seu primeiro inquérito com IA em minutos e descubra se a sua ideia tem potencial.

Iniciar Teste Gratuito

Teste gratuito de 7 dias com todas as funcionalidades · Não é necessário cartão de crédito