Développez avec Praxium.

Composable par conception

Branchez vos outils habituels sur Praxium. API REST, un SDK TypeScript typé et des webhooks signés pour les flux de travail de santé.

Démarrez en 5 minutes

Choisissez votre parcours. Les deux mènent à une intégration API qui fonctionne dans la même session.

Vous découvrez Praxium

Essai en autonomie

  1. Des données d’exemple, prêtes à l’emploi

    Les essais démarrent avec des membres de l’équipe, des clients et des rendez-vous d’exemple. Une action de réinitialisation vous ramène à un point propre quand vous le souhaitez.

  2. Créer un profil API et une clé

    Administration → Profils API. Chaque profil possède sa propre clé HMAC et décide des types de données et des champs personnalisés qu’il expose.

  3. Appeler les API

    Utilisez @praxium/sdk ou curl vers https://{your-slug}.admin.praxium.nl.

Démarrer l’essai gratuit
Déjà client ?

Se connecter à votre organisation

  1. Demandez à votre administrateur

    Un administrateur de votre organisation peut créer un profil API et vous en communiquer la clé. Le profil décide des champs que vous pouvez lire.

  2. Appeler les API

    Utilisez @praxium/sdk ou curl avec la clé qui vous est communiquée.

API REST

  • Routage — REST par organisation sur /api/{tenant-slug}/...
  • Authentification — clé API HMAC dans Authorization: Bearer, jamais dans l’URL
  • Autorisations — chaque clé est liée à un profil API qui définit les types de données et les champs qu’elle peut lire
  • Langues — utilisez Accept-Language: nl, en ou ro ; une préférence non prise en charge retombe sur la langue par défaut de l’organisation.
  • Découverte — décrites en OpenAPI, consultables dans l’interface Scalar
  • Observabilité — chaque appel est journalisé avec son statut, sa latence, son profil et son IP (90 jours de conservation, visibles en administration)
bash
curl -H "Authorization: Bearer $PRAXIUM_API_KEY" \  https://demo.admin.praxium.nl/api/demo/team
Comment fonctionne l’authentification

Les clés API sont signées en HMAC à la création : la clé porte sa propre preuve d’intégrité, au format praxium_v1_<tenant>_<profile>_<timestamp>_<signature>, où la signature est dérivée côté serveur en HMAC-SHA256 à partir d’un secret de signature propre à chaque profil, conservé chiffré en base — le secret ne circule jamais sur le réseau, seule circule la signature qu’il produit. Le nom court de l’organisation est lié cryptographiquement à la signature : une clé émise pour l’organisation A ne peut donc pas être réutilisée sur l’organisation B sans casser la vérification. À l’arrivée, le serveur vérifie l’intégrité de la clé avant de renvoyer la moindre donnée, et les clés falsifiées ou détournées reçoivent un 403.

Les requêtes s’authentifient avec le classique Authorization: Bearer <key> en HTTPS — le même schéma que GitHub, OpenAI, Slack et Notion.

Par-dessus, chaque clé appartient à un seul profil API, qui définit précisément les types de données et les champs qu’elle peut lire. Chaque intégration ne touche que les données dont elle a besoin — le principe du moindre privilège, appliqué au champ près plutôt qu’au point de terminaison. La révocation et la rotation se font par profil depuis le portail d’administration.

Comment fonctionnent les contenus traduits

Envoyez Accept-Language: nl, Accept-Language: en ou Accept-Language: ro quand votre site n’affiche qu’une langue. Les API utilisent la langue demandée uniquement si l’organisation l’a activée ; sinon elles utilisent sa langue par défaut.

Chaque point de terminaison conserve une seule forme de réponse documentée. Les champs documentés comme traduits — noms de catégories de FAQ, questions et réponses, libellés et valeurs des champs personnalisés de l’équipe — reviennent sous forme de chaînes. Les champs documentés en OpenAPI comme cartes de langues conservent cette forme.

Pour les champs traduits, une traduction absente retombe sur le meilleur texte publié disponible plutôt que sur une chaîne vide.

Ouvrez votre référence d’API interactive sur /api-docs

Remplacez {tenant} par le nom court de votre organisation.

Essayer

@praxium/sdk

npm install @praxium/sdk
  • Types — client TypeScript avec autocomplétion pour chaque point de terminaison
  • Authentification — clés API dérivées en HMAC, signées automatiquement, sans code répétitif
  • Langues — réglez locale sur nl, en ou ro ; chaque méthode conserve un seul type de réponse TypeScript
  • Environnements — Node.js 20+, environnements Edge, tout runtime doté de fetch
ts
import { createPraxiumClient } from '@praxium/sdk'
const client = createPraxiumClient({  baseUrl: process.env.PRAXIUM_API_URL!,  apiKey: process.env.PRAXIUM_API_KEY!,  locale: 'nl',  // 'nl' | 'en' | 'ro'})
const location = client.location('amsterdam')const hours = await location.getOpeningHours()const team = await location.getTeamMembers()const faq = await location.getFaq()

Démarrez avec le SDK : @praxium/sdk ou allez directement aux méthodes disponibles

Comment le SDK s’authentifie

Le SDK reprend le modèle d’authentification de l’API REST ci-dessus — les mêmes clés praxium_v1_…, la même vérification HMAC côté serveur, le même 403 sur une clé falsifiée ou détournée. Ce que le SDK ajoute : il déduit seul le nom court de l’organisation à partir de la clé (aucune configuration séparée), joint Authorization: Bearer <PRAXIUM_API_KEY> à chaque requête et fournit des méthodes typées par site (await client.location('amsterdam').getTeamMembers(), await client.location('amsterdam').getOpeningHours(), …) pour vous éviter d’écrire du code fetch répétitif.

La garde de la clé reste votre responsabilité : chargez-la depuis un gestionnaire de secrets ou une variable d’environnement (PRAXIUM_API_KEY est la convention, mais le nom vous appartient), ne la placez jamais dans le code source et faites-la tourner depuis le portail d’administration lors d’un départ ou d’une exposition possible. Les clés générées ne s’affichent qu’une fois, à la création — seule leur empreinte SHA-256 est conservée, donc une clé perdue ne se récupère pas (générez-en une nouvelle et révoquez l’ancienne).

Comment fonctionnent les contenus traduits dans le SDK

Réglez locale sur nl, en ou ro. Le SDK envoie cette valeur en Accept-Language à chaque requête, et une langue désactivée pour l’organisation retombe sur sa langue par défaut.

Chaque méthode possède un seul type de réponse TypeScript. getFaq() renvoie des noms de catégories, des questions et des réponses déjà traduits ; les libellés et les valeurs des champs personnalisés de l’équipe suivent la même règle. Les champs générés sous forme de cartes de langues conservent la forme documentée et s’affichent avec les utilitaires de traduction de votre application.

Voir sur npm

Webhooks

Abonnez-vous à un type de ressource et à une ou plusieurs actions de son cycle de vie, avec une condition facultative — par exemple : type de ressource = prestation, action = mise à jour, condition = le site contient Bruxelles.

  • CloudEvents — un identifiant d’occurrence pour reconnaître les renvois, plus le type et l’identifiant de la ressource modifiée dans le sujet et les données
  • Livraison fiable — signatures HMAC-SHA256 liées à l’instant d’envoi, renvois automatiques et 90 jours de journal de livraison
http
POST /your-endpoint
X-Praxium-Signature: t=1784023200,sha256=<64-character-hex-digest>Content-Type: application/cloudevents+json
{  "specversion": "1.0",  "id": "019f60d2-3c47-7bb1-816f-458b53f520b5",  "type": "service.updated",  "source": "urn:praxium:tenant:019f5b62-21fa-7b40-88ee-9be2d71da2a1",  "subject": "service/019f5c7e-87f6-7449-9138-b0bc38d5bc65",  "time": "2026-07-14T12:00:00.000Z",  "data": {    "resource": {      "type": "service",      "id": "019f5c7e-87f6-7449-9138-b0bc38d5bc65"    }  }}

Tous les utilitaires et types d’événement → référence des webhooks de @praxium/sdk

Comment fonctionnent les signatures et comment les vérifier

Chaque livraison porte un seul en-tête X-Praxium-Signature: t=<unix_ts>,sha256=<hmac_hex>, où le HMAC-SHA256 est calculé côté serveur sur ${timestamp}.${rawBody} avec le secret propre au webhook. Le secret partagé ne circule jamais sur le réseau — seul circule le résultat du HMAC. La signature prouve deux choses à la fois : que le corps n’a pas été altéré en chemin (intégrité) et que l’appel vient bien de Praxium et non de quelqu’un qui a deviné l’adresse de votre point de terminaison (authenticité). Toutes les livraisons passent en HTTPS — Praxium refuse d’enregistrer une adresse de webhook non HTTPS dans les environnements publiés.

En tant que destinataire, c’est à vous de vérifier chaque livraison — Praxium signe et envoie, mais le contrôle a lieu dans votre gestionnaire. Avec @praxium/sdk, vous n’écrivez rien de tout cela à la main : processWebhook() (indépendant du framework) et createRevalidationHandler() (ISR de Next.js) enchaînent les quatre étapes et la protection contre les renvois. Vous l’implémentez dans un autre environnement ? Les quatre étapes sont : (1) lisez l’instant et la signature dans l’en-tête, (2) rejetez les livraisons plus anciennes que votre fenêtre de renvoi — 5 minutes est la norme, (3) recalculez le HMAC sur ${timestamp}.${rawBody} avec votre secret partagé, (4) comparez en temps constant (par exemple crypto.timingSafeEqual sur Node).

C’est le schéma que Stripe utilise pour signer ses webhooks. Le secret d’un webhook n’est renvoyé qu’une seule fois — dans la réponse qui crée le webhook et dans chaque réponse de rotation — puis il ne réapparaît plus. Cette exposition unique fait qu’aucune surface d’attaque durable ne subsiste côté plateforme : même une session d’administration compromise ne pourrait pas le relire. Il vous en faut un nouveau ? Faites-le tourner depuis le portail d’administration — le nouveau secret arrive dans la réponse, le précédent perd aussitôt sa validité et les autres abonnements ne bougent pas.

Modèles d’intégration.

Lisez les données quand votre site en a besoin. Réagissez aux changements dès qu’ils se produisent.

Afficher les données Praxium sur votre propre site

Votre site lit l’équipe, les prestations, les sites et la FAQ via le SDK. Abonnez-vous à leurs événements de cycle de vie et régénérez la mise en page de la langue dès qu’un événement signé arrive : plus aucun contenu périmé.

Événement de ressource + lecture des données par le SDK

Réagir aux changements dans vos propres outils

Votre point de terminaison reçoit un CloudEvent signé, avec son identifiant d’occurrence et celui de la ressource modifiée. Transmettez-le à Slack, à votre CRM, à un data lake ou à n’importe quel traitement que vous exploitez — Praxium signe et renvoie l’événement d’origine, la réaction vous appartient.

Webhooks sortants