Tickets de support (Administration)
Base URL : /api/v1/admin/org/tickets
Gestion des tickets de support de l'organisation.
Structure d'un ticket
| Champ | Type | Description |
|---|---|---|
id | uuid | Identifiant |
organization_id | uuid | Organisation |
title | string | Titre |
description | string? | Description |
status | string | open, in_progress, waiting_on_customer, resolved, closed |
priority | string | low, medium, high, critical |
category | string | technical, financial, card_issue, product_issue, other |
assigned_to | uuid? | Assigné à |
created_by | uuid | Créateur |
resolved_at | datetime? | Résolu le |
created_at / updated_at | datetime | Horodatage |
Structure d'un message
| Champ | Type | Description |
|---|---|---|
id | uuid | Identifiant |
ticket_id | uuid | Ticket |
author_id | uuid | Auteur |
author_kind | string | staff ou customer |
content | string | Contenu |
created_at | datetime | Date |
GET /admin/org/tickets
Liste paginée des tickets.
Permissions : ticket.read
| Param | Type | Défaut | Description |
|---|---|---|---|
status | string | — | Filtrer par statut |
limit | integer | 20 | |
offset | integer | 0 |
Réponse (200) : { "items": [Ticket], "total": n }
GET /admin/org/tickets/{id}
Détail d'un ticket et ses 20 premiers messages.
Permissions : ticket.read
{
"ticket": { "id": "uuid", "title": "...", "status": "open" },
"messages": [
{
"id": "uuid",
"author_kind": "customer",
"author_id": "uuid",
"content": "...",
"created_at": "2025-01-20T10:00:00Z"
}
]
}
POST /admin/org/tickets
Crée un ticket. Si une description est fournie, elle devient le premier message (author_kind = "customer").
Permissions : ticket.create
| Champ | Type | Requis | Description |
|---|---|---|---|
title | string | Oui | Titre (non vide) |
description | string | Non | Description |
priority | string | Non | Défaut medium |
category | string | Non | Défaut other |
Réponse (201) : { "message": "Ticket créé", "ticket": {...} }
PUT /admin/org/tickets/{id}
Met à jour les métadonnées (priorité, catégorie, assignation).
Permissions : ticket.update
{ "priority": "urgent", "category": "financial", "assigned_to": "uuid" }
Réponse (200) : { "message": "Ticket mis à jour", "ticket": {...} }
PUT /admin/org/tickets/{id}/status
Change le statut d'un ticket.
Permissions : ticket.update
{ "status": "in_progress" }
Statuts valides : open, in_progress, waiting_on_customer, resolved, closed.
Réponse (200) : { "message": "Statut mis à jour", "ticket": {...} }
GET /admin/org/tickets/{ticket_id}/messages
Liste les messages d'un ticket.
Permissions : ticket.read
| Param | Type | Défaut |
|---|---|---|
limit | integer | 20 |
offset | integer | 0 |
Réponse (200) : { "items": [TicketMessage], "total": n }
POST /admin/org/tickets/{ticket_id}/messages
Ajoute un message à un ticket.
Permissions : ticket.create
{
"author_kind": "staff",
"content": "Nous vérifions votre transaction."
}
author_id provient du JWT. content doit être non vide.
Réponse (200) : { "message": "Message ajouté", "msg": {...} }
Permissions
| Permission | Description |
|---|---|
ticket.read / ticket.create / ticket.update | Lecture, création, mise à jour |
reservation.manage | Super-permission couvrant ticket.* |
Les porteurs et agents disposent de leurs propres endpoints de tickets sous /me/tickets.