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/initN'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/initLimite 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/ticketsLimite 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
datacontenant 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_SECURISELimite 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_SECURISELimite 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
datacontenant{ "content": "..." } - Des champs fichier nommes
filespour 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 :
| Type | Valeur de reponse attendue |
|---|---|
TEXT | Chaine de caracteres |
TEXTAREA | Chaine de caracteres |
SELECT | Chaine (valeur de l'option selectionnee) |
CHECKBOX | Booleen |
DATE | Chaine de date ISO |
FILE | Upload de fichier (utiliser multipart) |