RooQuiz Docs
Intégrations et API

API REST

RooQuiz propose une petite API REST en lecture seule qui vous permet de récupérer les données des formulaires de votre équipe dans vos scripts, vos automatisations (Zapier, Make, n8n) ou vos propres tableaux de bord. Elle renvoie les définitions des formulaires (titre, champs, paramètres, configuration du rapport) et les réponses collectées par chaque formulaire, au format JSON brut.

L'API REST fonctionne au niveau du compte et s'authentifie au nom de votre équipe, et non d'un membre en particulier. Si vous préférez qu'un client IA agisse sur vos quiz en langage naturel, consultez Intégration MCP.

Fonctionnement

  • Vous vous authentifiez avec une clé API de compte (préfixe rqp_acct_) qui appartient à une équipe.
  • La clé peut lire tous les formulaires de cette équipe. Elle n'est liée à aucune personne, elle continue donc de fonctionner lorsque des membres arrivent ou partent.
  • Seul un propriétaire d'équipe peut créer, consulter ou révoquer des clés API de compte.
  • L'API est en lecture seule : elle renvoie les définitions des formulaires et les réponses, mais ne peut rien créer, modifier ni supprimer.

Obtenir une clé API

Rendez-vous dans Paramètres → Clés API (visible uniquement par les propriétaires d'équipe) et cliquez sur « Créer une clé API » :

  1. Donnez-lui un nom (pour la reconnaître, par exemple Zapier - Production).
  2. Une fois la clé créée, une clé en clair commençant par rqp_acct_ s'affiche.

La clé en clair n'est affichée qu'une seule fois. Elle ne peut plus être récupérée une fois la page quittée. Copiez-la immédiatement ; en cas de perte, vous devrez la révoquer et en créer une nouvelle.

Chaque équipe peut détenir au maximum 10 clés (clés révoquées comprises). Pour en créer davantage, supprimez une clé afin de libérer un emplacement (la « révocation » ne fait que désactiver la clé, elle ne libère pas l'emplacement). Traitez une clé comme un mot de passe et ne la commitez jamais dans votre gestionnaire de code source.

Authentification

Envoyez la clé comme jeton Bearer dans chaque requête :

Authorization: Bearer rqp_acct_xxx...

Un jeton MCP personnel (rqp_live_) ne fonctionne pas avec l'API REST : il renvoie 401. Utilisez une clé API de compte (rqp_acct_).

Points de terminaison

L'URL de base ressemble à https://your-domain/api/v1.

Lister les formulaires

GET /api/v1/forms

Liste tous les formulaires de l'équipe de la clé, du plus récent au plus ancien.

Paramètre de requêteTypePar défautDescription
scenestring—Filtrer par scène : knowledge_quiz, random_knowledge_quiz, scored_quiz, outcome_quiz.
titleContainsstring—Correspondance approximative sur le titre.
limitnumber20Éléments par page (maximum 100).
pagenumber1Numéro de page.
curl -H "Authorization: Bearer rqp_acct_xxx..." \
  "https://your-domain/api/v1/forms?scene=knowledge_quiz&limit=20"
{
  "totalDocs": 12,
  "page": 1,
  "limit": 20,
  "items": [
    {
      "id": "d983d8d9-...",
      "title": "Personality Quiz",
      "scene": "outcome_quiz",
      "language": "en_US",
      "publicToken": "h7sbps67",
      "shareUrl": "https://your-cairo-domain/a/h7sbps67",
      "localization": null,
      "isActive": true,
      "createdAt": "2026-06-18T11:35:11.468Z",
      "updatedAt": "2026-06-18T12:59:42.649Z"
    }
  ]
}

Obtenir un formulaire

GET /api/v1/forms/{id}

Renvoie la définition d'un formulaire.

Paramètre de requêteTypePar défautDescription
includeFieldsbooleantrueInclure le tableau fields[] (questions / sauts de page). Passez false pour l'omettre sur les formulaires volumineux.
includeReportbooleantrueInclure la configuration du rapport / de l'analyse par dimension.
curl -H "Authorization: Bearer rqp_acct_xxx..." \
  "https://your-domain/api/v1/forms/d983d8d9-..."
{
  "id": "d983d8d9-...",
  "title": "Personality Quiz",
  "scene": "outcome_quiz",
  "language": "en_US",
  "description": null,
  "isActive": true,
  "publicToken": "h7sbps67",
  "shareUrl": "https://your-cairo-domain/a/h7sbps67",
  "layout": "card",
  "localization": null,
  "systemText": null,
  "createdAt": "2026-06-18T11:35:11.468Z",
  "updatedAt": "2026-06-18T12:59:42.649Z",
  "fields": [ /* questions & page breaks */ ],
  "report": { /* report / dimension config */ }
}

Soumissions

Lisez les réponses collectées par les formulaires de votre équipe : leads, réponses, scores, résultats de rapport et attribution UTM. Idéal pour la synchronisation avec un CRM, les tableaux de bord personnalisés et les automatisations.

Les soumissions contiennent des données personnelles des répondants (e-mail, nom, IP). Traitez-les et stockez-les de manière responsable.

Lister les soumissions

GET /api/v1/records

Liste les soumissions de toute l'équipe, de la plus récente à la plus ancienne.

Paramètre de requêteTypePar défautDescription
formIdstring—Uniquement les soumissions de ce formulaire.
statusstring—Statut du rapport : pending, processing, completed, failed.
sinceISO date—Uniquement les soumissions créées à partir de cette date (synchronisation incrémentale).
untilISO date—Uniquement les soumissions créées jusqu'à cette date.
limitnumber20Éléments par page (maximum 100).
pagenumber1Numéro de page.
curl -H "Authorization: Bearer rqp_acct_xxx..." \
  "https://your-domain/api/v1/records?since=2026-06-01&limit=50"
{
  "totalDocs": 1500,
  "page": 1,
  "limit": 50,
  "items": [
    {
      "id": "...",
      "serialNumber": 11,
      "formId": "d983d8d9-...",
      "shareToken": "v2hrpv6d",
      "reportUrl": "https://your-cairo-domain/a/md8682rx/records/v2hrpv6d",
      "submittedAt": "2026-06-18T12:00:00.000Z",
      "updatedAt": "2026-06-18T12:00:05.000Z",
      "examinee": {
        "id": "...", "examineeId": "TZ4730277148",
        "email": "[email protected]", "name": "Jane", "customData": null
      },
      "metadata": {
        "utmSource": "newsletter", "utmMedium": "email",
        "utmCampaign": null, "utmTerm": null, "utmContent": null,
        "referrer": "https://..."
      },
      "data": { "q_email": "[email protected]", "q_rating": 5 },
      "result": {
        "status": "completed", "score": 2, "maxScore": 4,
        "level": "Good", "outcomeCode": null, "outcomeName": null
      }
    }
  ]
}

Les clés de data correspondent au code de chaque champ du formulaire (consultez le fields[] d'un formulaire via le point de terminaison des formulaires). examinee vaut null pour les soumissions anonymes. result est un résumé compact ; le rapport complet est disponible sur le point de terminaison de détail.

Obtenir une soumission

GET /api/v1/records/{id}

Renvoie une soumission avec son résultat de rapport complet (reportResult), ainsi que metadata.ip / metadata.userAgent.

curl -H "Authorization: Bearer rqp_acct_xxx..." \
  "https://your-domain/api/v1/records/..."
{
  "id": "...",
  "serialNumber": 11,
  "formId": "d983d8d9-...",
  "shareToken": "v2hrpv6d",
  "reportUrl": "https://your-cairo-domain/a/md8682rx/records/v2hrpv6d",
  "submittedAt": "...",
  "updatedAt": "...",
  "examinee": { "id": "...", "email": "[email protected]", "name": "Jane" },
  "metadata": { "ip": "203.0.113.4", "userAgent": "...", "utmSource": "newsletter" },
  "data": { /* answers keyed by field code */ },
  "reportResult": {
    "status": "completed",
    "overallAnalysis": { "score": 2, "maxScore": 4, "level": "Good", "summary": "...", "suggestions": "..." },
    "dimensionAnalysis": { "title": "...", "radar": [], "items": [] },
    "outcome": { "code": null, "name": null, "ranking": null },
    "aiSuggestion": { "status": "completed", "content": "..." }
  }
}

Erreurs

Les erreurs renvoient un corps JSON de la forme { "error": { "code": "...", "message": "..." } }.

StatutCodeQuand
401unauthorizedClé manquante, invalide, expirée ou révoquée (ou jeton qui n'est pas un jeton de compte).
404not_foundLe formulaire n'existe pas ou n'appartient pas à l'équipe de cette clé.
400bad_requestParamètre invalide (par exemple une scene inconnue).
429rate_limitedLimite de débit dépassée.

Limites de débit

Chaque clé est limitée à 120 requêtes par minute ; au-delà, l'API renvoie 429. Révoquez une clé depuis Paramètres → Clés API dès qu'elle n'est plus nécessaire : toute intégration qui l'utilise perd immédiatement l'accès.

Sur cette page