Développeurs
API REST
Une API JSON versionnée. Tout ce que l'interface fait passe par ces mêmes routes, donc rien ne vous est caché.
Authentification
Jeton personnel pour vos scripts, clé de service pour vos serveurs. Les deux se créent dans Administration puis Développeurs, avec des portées par ressource.
curl https://acme.open-helpdesk.com/api/v1/tickets \
-H "Authorization: Bearer $OHD_TOKEN"Ressources
| GET | /api/v1/tickets | Liste filtrable par statut, priorité, assigné, étiquette, date. |
| POST | /api/v1/tickets | Crée un ticket avec son premier message. |
| GET | /api/v1/tickets/:id | Ticket complet avec messages, notes et historique. |
| PATCH | /api/v1/tickets/:id | Modifie statut, priorité, assigné, étiquettes, champs. |
| POST | /api/v1/tickets/:id/messages | Ajoute une réponse publique ou une note interne. |
| GET | /api/v1/contacts | Recherche de contacts par email, nom ou entreprise. |
| GET | /api/v1/articles | Articles publiés, filtrables par catégorie et locale. |
| POST | /api/v1/exports | Demande un export CSV ou NDJSON, récupéré par lien signé. |
Pagination
Pagination par curseur, 50 éléments par défaut, 200 au maximum. Le curseur suivant est renvoyé dans le corps, pas dans un en-tête.
{
"data": [ /* ... */ ],
"next_cursor": "eyJpZCI6NDgyMX0",
"has_more": true
}Limites de débit
600 requêtes par minute et par clé. En cas de dépassement, réponse 429 avec l'en-tête Retry-After. Les exports comptent pour une requête, quel que soit le volume renvoyé.
Webhooks
Chaque livraison porte un en-tête X-OHD-Signature contenant un HMAC SHA-256 du corps brut. Vérifiez-le avant de traiter la charge utile, et répondez en moins de 5 secondes.
{
"event": "ticket.updated",
"occurred_at": "2026-08-21T09:14:22Z",
"workspace": "acme",
"data": { "id": 4821, "status": "pending", "assignee": "lea@acme.fr" }
}Erreurs
{
"error": {
"code": "validation_failed",
"message": "Le champ requester.email est invalide.",
"field": "requester.email"
}
}