Référence de l’API partenaires
Notifications
Recevoir un appel signé (webhook) dès qu'une ressource que l'application a le droit de lire change, au lieu d'interroger l'API en boucle. Chaque application a UN point de réception (endpoint), commun à toutes les organisations qui l'ont connectée ; l'organisation de chaque événement est dans son corps. Le corps est mince (type, organisation, site, identifiant de la ressource) et ne porte aucune donnée personnelle : relisez la ressource sur l'API avec vos droits du moment. Toutes les routes de ce domaine exigent le droit webhooks ; recevoir un type exige en plus le droit de lecture de sa ressource.
Lister les livraisons
GET/api/partner/v1/webhooks/deliveries#
Rend les livraisons de la connexion du jeton (cette organisation, cette application, cette autorisation), pings compris, triées par date de dernier changement puis identifiant, de la plus ancienne à la plus récente. Après une déconnexion puis une reconnexion de l'organisation, les livraisons de l'ancienne connexion ne sont plus listées. Les livraisons terminées (DELIVERED, DEAD, MUTED, CANCELLED) sont supprimées 30 jours après leur production. Le corps envoyé n'est pas rendu ; data le résume.
Paramètres
| statusrequête · enum | Ne garder que les livraisons dans cet état (casse indifférente). |
| updated_sincerequête · date-time | Ne garder que les livraisons changées à cet instant ou après. |
| cursorrequête · string | Curseur opaque rendu par la page précédente ( |
| limitrequête · integer | Taille de la page. Au-delà de 200, ramené à 200. Défaut :50 |
Réponse
200Une page de livraisons.
Champs de la réponse (2)
| itemsWebhookDelivery[] | |
| iduuid | Identifiant de la livraison, égal à l' |
| typeenum | Type de l'événement. appointment.createdappointment.updatedappointment.cancelledappointment.no_showappointment.completedpatient.checked_inclient.createdpatient.createdpatient.deceasedconsultation.startedconsultation.validatedinvoice.issuedinvoice.paidpayment.recordedcredit_note.issuedprescription.signedlab.result.receivedping |
| occurredAtdate-time | Instant où le fait s'est produit dans Treats. |
| siteIduuid | Site de l'événement ( |
| dataobject | La ressource désignée. |
| objectenum | Nature de la ressource. appointmentclientpatientconsultationinvoicepaymentcredit_noteprescriptionlab_resultping |
| iduuid | Identifiant de la ressource. |
| publicIdstring | Identifiant public ( |
| statusenum |
PENDINGSENDINGDELIVEREDFAILEDDEADMUTEDCANCELLED |
| attemptsinteger | Tentatives comptées depuis la production ou le dernier rejeu (remis à 0 par un rejeu). |
| nextAttemptAtdate-time | Prochaine tentative prévue. Renseigné seulement pour |
| lastAttemptAtdate-time | Dernière requête envoyée à l'endpoint. peut être null |
| lastStatusCodeinteger | Code HTTP de la dernière réponse reçue. |
| lastErrorstring | Dernière erreur, en français : |
| deliveredAtdate-time | Date de la livraison réussie. peut être null |
| createdAtdate-time | Production de la livraison. |
| updatedAtdate-time | Dernier changement de la livraison (clé du tri et de |
| nextCursorstring | Curseur opaque de la page suivante, à repasser tel quel dans |
Erreurs propres à cette opération
| 400 INVALID_FIELD |
|
Et les erreurs communes à toutes les opérations : erreurs et limites.
Rejouer une livraison
POST/api/partner/v1/webhooks/deliveries/{id}/replay#
Remet une livraison de la connexion du jeton en file, quel que soit son état (sauf pendant un envoi) : elle repart dans les secondes qui suivent, avec le même identifiant et le même corps, et ses tentatives repartent de zéro (six tentatives de nouveau, en-tête Treats-Attempt à partir de 1). Les droits, le site, l'abonnement et l'endpoint sont revérifiés à l'envoi : une livraison dont la cause d'annulation demeure est de nouveau annulée. Ne marche que pour une livraison encore conservée (30 jours après sa production une fois terminée).
Paramètres
| idchemin · uuidrequis | Identifiant de la livraison ( |
| Idempotency-Keyen-tête · stringrequis | Clé unique de l'envoi (un UUID). Le même envoi répété avec la même clé n'est appliqué qu'une fois pendant 24 h. |
Réponse
202Livraison remise en file : `status` `PENDING`, `attempts` 0.
Champs de la réponse (14)
| iduuid | Identifiant de la livraison, égal à l' |
| typeenum | Type de l'événement. appointment.createdappointment.updatedappointment.cancelledappointment.no_showappointment.completedpatient.checked_inclient.createdpatient.createdpatient.deceasedconsultation.startedconsultation.validatedinvoice.issuedinvoice.paidpayment.recordedcredit_note.issuedprescription.signedlab.result.receivedping |
| occurredAtdate-time | Instant où le fait s'est produit dans Treats. |
| siteIduuid | Site de l'événement ( |
| dataobject | La ressource désignée. |
| objectenum | Nature de la ressource. appointmentclientpatientconsultationinvoicepaymentcredit_noteprescriptionlab_resultping |
| iduuid | Identifiant de la ressource. |
| publicIdstring | Identifiant public ( |
| statusenum |
PENDINGSENDINGDELIVEREDFAILEDDEADMUTEDCANCELLED |
| attemptsinteger | Tentatives comptées depuis la production ou le dernier rejeu (remis à 0 par un rejeu). |
| nextAttemptAtdate-time | Prochaine tentative prévue. Renseigné seulement pour |
| lastAttemptAtdate-time | Dernière requête envoyée à l'endpoint. peut être null |
| lastStatusCodeinteger | Code HTTP de la dernière réponse reçue. |
| lastErrorstring | Dernière erreur, en français : |
| deliveredAtdate-time | Date de la livraison réussie. peut être null |
| createdAtdate-time | Production de la livraison. |
| updatedAtdate-time | Dernier changement de la livraison (clé du tri et de |
Erreurs propres à cette opération
| 404 WEBHOOK_DELIVERY_NOT_FOUND | Aucune livraison de cet identifiant pour la connexion du jeton (autre organisation, autre application, ancienne connexion, ou livraison supprimée). |
| 409 WEBHOOK_DELIVERY_IN_PROGRESS | La livraison est en cours d'envoi : réessayer dans un instant. |
Et les erreurs communes à toutes les opérations : erreurs et limites.
Lire l'endpoint de l'application
GET/api/partner/v1/webhooks/endpoint#
Rend l'endpoint de l'application : adresse, types abonnés, état (actif ou désactivé après des échecs), série d'échecs en cours et fin de recouvrement d'une rotation. L'endpoint appartient à l'application, pas à l'organisation : tout jeton de l'application qui porte webhooks lit le même. Le secret n'est jamais rendu ici.
Réponse
200L'endpoint.
Champs de la réponse (10)
| iduuid | Identifiant de l'endpoint. |
| urlstring | Adresse HTTPS qui reçoit les événements. |
| typesstring[] | Types d'événement abonnés, dans l'ordre de |
| activeboolean |
|
| disabledAtdate-time | Date de la désactivation. |
| disabledReasonstring | Raison de la désactivation, en français (début de la série d'échecs et dernière erreur). |
| failingSincedate-time | Début de la série d'échecs en cours. Remis à |
| previousSecretValidUntildate-time | Après une rotation du secret : fin de la période pendant laquelle l'ancien secret signe encore. |
| createdAtdate-time | Création de l'endpoint. |
| updatedAtdate-time | Dernière modification (adresse, types, rotation du secret, désactivation). |
Erreurs propres à cette opération
| 404 WEBHOOK_ENDPOINT_NOT_FOUND | Aucun endpoint enregistré : en créer un par |
Et les erreurs communes à toutes les opérations : erreurs et limites.
Créer ou modifier l'endpoint de l'application
PUT/api/partner/v1/webhooks/endpoint#
Crée l'endpoint de l'application (201, avec le secret de signature rendu une seule fois) ou modifie celui qui existe (200, sans secret). Une modification remplace l'adresse et les types, ne touche pas au secret (voir POST /webhooks/endpoint/rotate-secret), réactive un endpoint désactivé et remet à zéro sa série d'échecs. L'adresse doit être en https://, sans identifiants ni fragment, 2 048 caractères au plus, et chacune des adresses IP vers lesquelles son nom se résout doit être publique (adresses privées, locales, réservées et de documentation refusées). Elle est revérifiée avant chaque envoi.
Pas d'Idempotency-Key (PUT). Deux premières créations simultanées donnent un seul 201 avec secret ; l'autre rend 200 sans secret. L'endpoint vaut pour toutes les organisations connectées ; il ne reçoit que les événements produits après son enregistrement.
Corps de la requête application/json
| urlstringrequis | Adresse HTTPS publique qui recevra les |
| typesstring[] | Types à recevoir (valeurs de |
Réponse
200Endpoint modifié : `secret` à null, `created` à false.
Champs de la réponse (3)
| endpointWebhookEndpoint | L'endpoint tel qu'il est enregistré. |
| iduuid | Identifiant de l'endpoint. |
| urlstring | Adresse HTTPS qui reçoit les événements. |
| typesstring[] | Types d'événement abonnés, dans l'ordre de |
| activeboolean |
|
| disabledAtdate-time | Date de la désactivation. |
| disabledReasonstring | Raison de la désactivation, en français (début de la série d'échecs et dernière erreur). |
| failingSincedate-time | Début de la série d'échecs en cours. Remis à |
| previousSecretValidUntildate-time | Après une rotation du secret : fin de la période pendant laquelle l'ancien secret signe encore. |
| createdAtdate-time | Création de l'endpoint. |
| updatedAtdate-time | Dernière modification (adresse, types, rotation du secret, désactivation). |
| secretstring | Secret de signature ( |
| createdboolean |
|
Erreurs propres à cette opération
| 400 WEBHOOK_URL_INVALID | Adresse illisible, trop longue, sans hôte, autre que |
| 400 WEBHOOK_URL_FORBIDDEN | L'hôte est local ( |
| 400 WEBHOOK_URL_UNRESOLVABLE | Le nom de l'hôte ne se résout pas. |
| 400 INVALID_FIELD |
|
Et les erreurs communes à toutes les opérations : erreurs et limites.
Changer le secret de signature
POST/api/partner/v1/webhooks/endpoint/rotate-secret#
Génère un nouveau secret et le rend une seule fois. L'ancien secret signe encore pendant 24 heures : chaque envoi porte alors deux signatures v1, la nouvelle d'abord, ce qui laisse le temps de déployer le nouveau secret sans coupure. Une seconde rotation dans ces 24 heures remplace l'ancien par le secret en place à ce moment : seuls les deux derniers secrets signent. La rotation ne change ni l'adresse, ni les types, et ne réactive pas un endpoint désactivé. Aucun corps n'est lu.
La même Idempotency-Key rejoue la réponse avec secret: null et secretRedacted: true : le secret n'est jamais conservé en clair. Si la réponse a été perdue, refaites une rotation avec une nouvelle clé.
Paramètres
| Idempotency-Keyen-tête · stringrequis | Clé unique de l'envoi (un UUID). Le même envoi répété avec la même clé n'est appliqué qu'une fois pendant 24 h. |
Réponse
200Le nouveau secret et la fin de validité de l'ancien.
Champs de la réponse (3)
| secretstring | Nouveau secret ( |
| previousSecretValidUntildate-time | L'ancien secret signe encore jusqu'à cet instant (24 heures après la rotation). |
| secretRedactedboolean | Présent et |
Erreurs propres à cette opération
| 404 WEBHOOK_ENDPOINT_NOT_FOUND | Aucun endpoint enregistré. |
Et les erreurs communes à toutes les opérations : erreurs et limites.
Lister les types d'événement
GET/api/partner/v1/webhooks/event-types#
Rend les 17 types d'événement auxquels un endpoint peut s'abonner, avec la ressource que chacun désigne et les droits qui permettent de le recevoir. La liste est la même pour toutes les applications : elle ne dit pas ce que votre connexion reçoit (comparez scopes à ceux de GET /me). Une seule page, nextCursor toujours null. Le type ping n'y figure pas : il n'est produit que par POST /webhooks/test.
Réponse
200Les types publiés, dans un ordre fixe.
Champs de la réponse (2)
| itemsWebhookEventType[] | |
| typeenum | Nom du type. appointment.createdappointment.updatedappointment.cancelledappointment.no_showappointment.completedpatient.checked_inclient.createdpatient.createdpatient.deceasedconsultation.startedconsultation.validatedinvoice.issuedinvoice.paidpayment.recordedcredit_note.issuedprescription.signedlab.result.received |
| objectenum | Nature de la ressource désignée par appointmentclientpatientconsultationinvoicepaymentcredit_noteprescriptionlab_result |
| scopesstring[] | Droits dont UN suffit, en plus de |
| nextCursorstring | Curseur opaque de la page suivante, à repasser tel quel dans |
Envoyer un ping à l'endpoint
POST/api/partner/v1/webhooks/test#
Envoie tout de suite un événement ping, signé comme les autres, à l'endpoint de l'application, pour l'organisation du jeton, et rend son verdict. Délai total de 5 secondes pour votre endpoint ; la réponse arrive en 7 secondes au plus. Pas de reprise : un échec rend DEAD avec lastStatusCode ou lastError. Aucun corps n'est lu.
Les règles d'envoi s'appliquent : avec une organisation de test, une application de production obtient MUTED (rien n'est envoyé) ; une application de recette n'envoie qu'à une organisation de test, sinon CANCELLED (SANDBOX_ORG_LIVE). Un seul ping à la fois par application. La même Idempotency-Key rejoue la première réponse sans renvoyer de ping. Dans un cas extrême (verdict pas encore écrit), le statut rendu est SENDING et le verdict se lit dans GET /webhooks/deliveries.
Paramètres
| Idempotency-Keyen-tête · stringrequis | Clé unique de l'envoi (un UUID). Le même envoi répété avec la même clé n'est appliqué qu'une fois pendant 24 h. |
Réponse
200La livraison du ping et son verdict (`DELIVERED`, `DEAD`, `MUTED`, `CANCELLED`, exceptionnellement `SENDING`).
Champs de la réponse (14)
| iduuid | Identifiant de la livraison, égal à l' |
| typeenum | Type de l'événement. appointment.createdappointment.updatedappointment.cancelledappointment.no_showappointment.completedpatient.checked_inclient.createdpatient.createdpatient.deceasedconsultation.startedconsultation.validatedinvoice.issuedinvoice.paidpayment.recordedcredit_note.issuedprescription.signedlab.result.receivedping |
| occurredAtdate-time | Instant où le fait s'est produit dans Treats. |
| siteIduuid | Site de l'événement ( |
| dataobject | La ressource désignée. |
| objectenum | Nature de la ressource. appointmentclientpatientconsultationinvoicepaymentcredit_noteprescriptionlab_resultping |
| iduuid | Identifiant de la ressource. |
| publicIdstring | Identifiant public ( |
| statusenum |
PENDINGSENDINGDELIVEREDFAILEDDEADMUTEDCANCELLED |
| attemptsinteger | Tentatives comptées depuis la production ou le dernier rejeu (remis à 0 par un rejeu). |
| nextAttemptAtdate-time | Prochaine tentative prévue. Renseigné seulement pour |
| lastAttemptAtdate-time | Dernière requête envoyée à l'endpoint. peut être null |
| lastStatusCodeinteger | Code HTTP de la dernière réponse reçue. |
| lastErrorstring | Dernière erreur, en français : |
| deliveredAtdate-time | Date de la livraison réussie. peut être null |
| createdAtdate-time | Production de la livraison. |
| updatedAtdate-time | Dernier changement de la livraison (clé du tri et de |
Erreurs propres à cette opération
| 404 WEBHOOK_ENDPOINT_NOT_FOUND | Aucun endpoint enregistré. |
| 409 WEBHOOK_ENDPOINT_DISABLED | Endpoint désactivé après des échecs continus : le réactiver par |
| 503 WEBHOOK_TEST_IN_PROGRESS | Un ping de l'application est déjà en cours. En-tête |
| 503 WEBHOOK_TEST_BUSY | Trop de pings en cours chez Treats. En-tête |
Et les erreurs communes à toutes les opérations : erreurs et limites.
Notifications envoyées :ping