Votira MCP Server

Connectez des assistants IA à vos enquêtes, réponses et analyses Votira via le Model Context Protocol (MCP).

Point de terminaison : https://votira.co/mcp Transport : HTTP streamable (JSON‑RPC 2.0)
Retour aux paramètres

Qu’est-ce que c’est ?

Le Model Context Protocol est une norme ouverte permettant de connecter des assistants IA à des systèmes externes. Votira propose des outils pour les sondages, les résultats, le panneau IA et le compte, avec des autorisations explicites pour les modifications et l’utilisation de l’IA.

Authentification

Générez une seule clé d’accès MCP dans Paramètres (une clé par compte). Elle n’est affichée qu’une seule fois. Présentez-la comme un jeton Bearer sur le point de terminaison MCP :

Authorization: Bearer vot_mcp_xxxxxxxxxxxxxxxx

Vous pouvez faire une rotation ou supprimer la clé à tout moment ; la rotation invalide immédiatement le secret précédent.

Configuration du client

Configurez tout client MCP compatible avec le transport HTTP streamable sur ce point de terminaison. Exemple de configuration :

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

Outils disponibles

OutilArgumentsRenvoie
list_surveys—Vos enquêtes avec identifiant, titre, statut et nombre de réponses.
get_surveysurvey_idUne enquête avec ses questions et paramètres.
get_survey_responsessurvey_id, limit?, offset?Réponses paginées pour une enquête.
get_survey_analysissurvey_idAnalyse IA mise en cache pour l’ensemble de l’enquête et par question.

Permissions et outils avancés

Les nouvelles et anciennes clés MCP sont en lecture seule par défaut. Activez explicitement les autorisations d'écriture, de suppression et de crédits IA dans les paramètres. La rotation conserve les autorisations sélectionnées ; les spectateurs de l'organisation ne peuvent pas effectuer d'écritures.

Les outils de modification nécessitent l'autorisation d'écriture, les outils destructifs nécessitent l'autorisation de suppression, et les outils IA payants requièrent à la fois l'écriture et l'IA. Vérifiez les paramètres de l'outil avant d'approuver une opération d'écriture ou consommant des crédits dans votre assistant.

Les résultats JSON incluent structuredContent. Les exports de fichiers sont retournés comme ressources MCP intégrées : texte pour CSV et JSON, blobs base64 pour PDF. Les opérations asynchrones retournent jobId ; utilisez get_ai_job pour récupérer leur statut et résultat.

Les outils de gestion et d'audit de l'organisation nécessitent des privilèges administrateur. Les clés API personnelles, mots de passe, achats et suppression de compte ne sont pas accessibles en tant qu'outils.

get_integration_capabilities

Lire les opérations disponibles, les schémas, les permissions et les limites.

Autorisations requises: read

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

Créez un sondage, incluant pages, questions et paramètres.

Autorisations requises: write

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

Modifiez le contenu, les pages, la planification et l’apparence du sondage.

Autorisations requises: 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

Dupliquez un sondage en tant que nouveau brouillon sans réponses.

Autorisations requises: 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

Publiez, fermez ou repassez un sondage en mode brouillon.

Autorisations requises: 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

Supprimez définitivement un sondage, ses réponses, images, analyses et vues.

Autorisations requises: delete

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

Listez les modèles de sondage localisés.

Autorisations requises: read

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

Consultez un modèle localisé avec ses questions et son thème.

Autorisations requises: 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

Créez un sondage localisé à partir d’un modèle sans crédits AI.

Autorisations requises: 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

Listez tous les types de questions pris en charge et les champs de configuration spécifiques.

Autorisations requises: read

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

Ajoutez une question à un sondage.

Autorisations requises: 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

Modifiez une question tout en conservant son identité.

Autorisations requises: 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

Supprimez une question et réparez les références de logique.

Autorisations requises: 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

Réorganisez toutes les questions en conservant l’ordre principal par page.

Autorisations requises: 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

Obtenez les questions A/B résolues sans enregistrer de vue. Utilisez respondent_id pour associer les soumissions JSON suivantes.

Autorisations requises: 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

Générer des questions à partir d'une idée ou modifier progressivement des questions existantes. Coûte un crédit ; peut retourner un job.

Autorisations requises: 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

Consulter le statut et le résultat d'un job AI appartenant à ce compte.

Autorisations requises: 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

Analyser une question à réponse libre. Les résultats en cache sont gratuits ; une analyse fraîche coûte un crédit.

Autorisations requises: 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

Générer l'analyse AI du sondage. Les résultats en cache sont gratuits ; une analyse fraîche coûte un crédit.

Autorisations requises: 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

Lire les crédits AI disponibles, l'allocation, la consommation et les coûts des opérations.

Autorisations requises: read

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

Afficher les personas dans un panel personnel ou organisationnel, éventuellement limité à un pool.

Autorisations requises: 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

Lire une persona synthétique.

Autorisations requises: 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

Créer une persona manuellement sans consommer de crédits AI.

Autorisations requises: 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

Modifier les attributs d'une persona et remplacer les adhésions aux pools si fourni.

Autorisations requises: 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

Supprimer une persona du panel.

Autorisations requises: 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

Afficher les pools nommés et le nombre de personas dans chacun.

Autorisations requises: read

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

Lire un pool nommé et ses personas.

Autorisations requises: 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

Créer un pool de personas nommé.

Autorisations requises: 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

Renommer un pool ou modifier sa description.

Autorisations requises: 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

Supprimer un pool et détacher ses membres sans supprimer les personas.

Autorisations requises: 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

Ajouter ou retirer des personas d'un pool en masse.

Autorisations requises: 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

Importer des personas depuis un JSON. Les métadonnées du pool sont ignorées ; les personas importés ne sont pas assignés.

Autorisations requises: 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

Exporter des personas ou un pool en JSON ou CSV.

Autorisations requises: 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

Générer des personas avec AI. Coûte cinq crédits par persona, avec remboursement en cas de résultat manquant.

Autorisations requises: 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

Estimer les crédits nécessaires pour administrer un sondage à un pool nommé.

Autorisations requises: 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

Administrer un sondage à un pool nommé. Coûte trois crédits par persona ; peut retourner un job.

Autorisations requises: 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

Lire les statistiques par question, les répartitions A/B, les vues, les comptes AI-panel et l'analyse des abandons.

Autorisations requises: 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

Consultez les réponses en cours, séparément des soumissions complètes.

Autorisations requises: 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

Téléchargez les réponses complètes au format CSV (jusqu'à 5000 par page) ou un rapport PDF des résultats.

Autorisations requises: 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

Importez une image PNG, JPEG, GIF ou WebP encodée en base64 (maximum 5 Mo) pour le thème du sondage.

Autorisations requises: 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

Soumettez une réponse complète pour un répondant externe ; applique les règles de publication, de calendrier, de logique et de doublons.

Autorisations requises: 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

Enregistrez automatiquement la réponse partielle d’un répondant externe lorsque la collecte est activée.

Autorisations requises: 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

Lire le profil, la langue, le domaine, le forfait et l'accès à l'organisation.

Autorisations requises: read

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

Modifier le nom affiché, la langue du service ou le domaine personnalisé. N'affecte pas l'email, les identifiants ou la facturation.

Autorisations requises: 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

Consulter l'organisation, les licences disponibles et les crédits AI partagés.

Autorisations requises: read

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

Afficher les membres, rôles, licences et la consommation AI de l'organisation. Administrateurs uniquement.

Autorisations requises: read

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

Ajouter un compte Votira existant à l'organisation. Administrateurs uniquement.

Autorisations requises: 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

Modifier le rôle ou la licence attribuée d'un membre. Administrateurs uniquement ; le propriétaire est protégé.

Autorisations requises: 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

Retirer un membre sans supprimer son compte. Administrateurs uniquement.

Autorisations requises: 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

Afficher les invitations de l'organisation sans révéler les jetons d'invitation. Administrateurs uniquement.

Autorisations requises: read

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

Créer une invitation et retourner son URL de partage. Administrateurs uniquement.

Autorisations requises: 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

Révoquer une invitation en attente dans l'organisation. Administrateurs uniquement.

Autorisations requises: 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

Rechercher dans le journal d'audit de l'organisation. Administrateurs entreprise uniquement.

Autorisations requises: 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

Exporter jusqu'à 5000 entrées d'audit en CSV. Administrateurs entreprise uniquement.

Autorisations requises: 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

Afficher les factures personnelles payées et, pour les administrateurs, celles de l'organisation.

Autorisations requises: read

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

Télécharger un PDF de facture payée après vérification du titulaire de la facturation.

Autorisations requises: read

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

Afficher les tickets de support, rapports de bugs et demandes de fonctionnalités du compte.

Autorisations requises: read

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

Lire une demande de support et les réponses de l'équipe, limité à son propriétaire.

Autorisations requises: 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

Ouvrir un ticket de support, un rapport de bug ou une demande de fonctionnalité.

Autorisations requises: 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éthodes du protocole

Le point de terminaison implémente les méthodes principales MCP JSON‑RPC : initialize, tools/list et tools/call (plus ping). Exemple de liste d’outils :

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"}'

Appeler un outil

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"}}}'

Sécurité & limites

  • Les outils sont limités au compte authentifié et à ses ressources organisationnelles autorisées. Les modifications et l’utilisation des crédits IA nécessitent des autorisations explicites.
  • Un plan de compte inactif renvoie 403 Forbidden.
  • Le point de terminaison est soumis à une limite de débit (600 requêtes/heure par client).
  • Aucune donnée personnelle identifiable n’est enregistrée dans les journaux du serveur.

Arrêtez de deviner. Commencez à valider.

Créez votre première enquête alimentée par l’IA en quelques minutes et découvrez si votre idée tient la route.

Commencer l’essai gratuit

Essai gratuit de 7 jours avec toutes les fonctionnalités · Aucune carte bancaire requise