Documentation Vicket

Endpoints API

Derniere mise a jour le 8 mars 2026

Utiliser l'API publique de support Vicket directement sans le package de scaffold.

La methode recommandee pour integrer les pages support est le package de scaffold (npx @vicket/create-support). Cependant, si vous preferez construire votre propre interface ou integrer depuis une stack non couverte par les templates, vous pouvez appeler l'API publique de support directement.

Authentification

Tous les endpoints se trouvent sous /api/v1/public/support et necessitent une cle API de website envoyee via le header X-Api-Key.

curl -H "X-Api-Key: VOTRE_CLE_API_WEBSITE" \
     https://api.vicket.app/api/v1/public/support/init

N'exposez jamais votre cle API dans du code cote client. Faites passer les appels par un proxy serveur (BFF) qui injecte la cle.

Endpoints

Initialiser la page support

Recupere les templates, articles, FAQs et informations du website en un seul appel.

GET /api/v1/public/support/init

Limite de requetes : 30 requetes/minute par website.

Reponse :

{
  "success": true,
  "data": {
    "website": { "name": "Mon App" },
    "templates": [
      {
        "id": "tpl_...",
        "name": "Rapport de bug",
        "description": "Signaler un bug",
        "questions": [
          {
            "id": "q_...",
            "label": "Decrivez le probleme",
            "type": "TEXTAREA",
            "required": true,
            "order": 1,
            "options": []
          }
        ]
      }
    ],
    "articles": [
      { "id": "art_...", "title": "Pour commencer", "slug": "pour-commencer", "content": "<p>...</p>" }
    ],
    "faqs": [
      { "id": "faq_...", "question": "Comment reinitialiser mon mot de passe ?", "answer": "Allez dans..." }
    ]
  }
}

Creer un ticket

POST /api/v1/public/support/tickets

Limite de requetes : 10 requetes/minute par website.

Corps JSON (sans fichier) :

{
  "email": "utilisateur@example.com",
  "title": "Impossible de se connecter",
  "templateId": "tpl_...",
  "answers": {
    "q_1": "Je vois une page blanche",
    "q_2": "Chrome 120"
  }
}

Corps multipart (avec fichiers) :

Envoyez une requete multipart/form-data avec :

  • Un champ data contenant le payload JSON (meme structure que ci-dessus, avec "__isFile:true" comme valeur pour les questions de type fichier)
  • Des champs fichier nommes files[QUESTION_ID] pour chaque fichier

Reponse (201) :

{
  "success": true,
  "data": {
    "email_limit_reached": false,
    "warning": null
  }
}

Recuperer le fil d'un ticket

Recupere un ticket avec ses messages, pieces jointes et reponses au formulaire.

GET /api/v1/public/support/ticket?token=TOKEN_SECURISE

Limite de requetes : 30 requetes/minute par website.

Le token est le jeton d'acces securise envoye au rapporteur par email lors de la creation du ticket.

Reponse :

{
  "success": true,
  "data": {
    "id": "tick_...",
    "title": "Impossible de se connecter",
    "status": { "label": "Open" },
    "priority": { "label": "Low" },
    "messages": [
      {
        "id": "msg_...",
        "content": "<p>Je vois une page blanche</p>",
        "author_type": "reporter",
        "created_at": "2026-03-08T10:00:00Z",
        "attachments": []
      }
    ],
    "answers": [
      {
        "id": "ans_...",
        "question_label": "Navigateur",
        "answer": "Chrome 120",
        "attachments": []
      }
    ]
  }
}

Codes d'erreur :

  • ticket-link-expired (410) : Le token a expire. Un nouveau lien est automatiquement envoye au rapporteur.

Repondre a un ticket

POST /api/v1/public/support/ticket/messages?token=TOKEN_SECURISE

Limite de requetes : 10 requetes/minute par website.

Corps JSON (sans piece jointe) :

{
  "content": "Merci, je vais essayer de vider mon cache."
}

Corps multipart (avec pieces jointes) :

Envoyez une requete multipart/form-data avec :

  • Un champ data contenant { "content": "..." }
  • Des champs fichier nommes files pour chaque piece jointe

Reponse (201) :

{
  "success": true,
  "data": {
    "id": "msg_...",
    "content": "Merci, je vais essayer de vider mon cache.",
    "author_type": "reporter",
    "created_at": "2026-03-08T12:00:00Z"
  }
}

Recuperer un article public

GET /api/v1/public/support/articles/{slug}

Retourne un article publie par son slug.

Reponse :

{
  "success": true,
  "data": {
    "id": "art_...",
    "title": "Pour commencer",
    "slug": "pour-commencer",
    "content": "<p>...</p>"
  }
}

Format des erreurs

Toutes les reponses d'erreur suivent la meme structure :

{
  "success": false,
  "error": "Message lisible",
  "error_code": "code-machine"
}

Codes HTTP courants : 400 (validation), 401 (token/cle invalide), 410 (lien expire), 429 (limite de requetes).

Types de questions

Les questions de template retournees par /init utilisent ces valeurs de type :

TypeValeur de reponse attendue
TEXTChaine de caracteres
TEXTAREAChaine de caracteres
SELECTChaine (valeur de l'option selectionnee)
CHECKBOXBooleen
DATEChaine de date ISO
FILEUpload de fichier (utiliser multipart)

On this page