Aller au contenu principal
SannmerkEn direct
Menu

API publique · v1

Documentation développeur

Tous les endpoints publics du registre Sannmerk. Réponses JSON, cache edge 60s, headers CORS ouverts. Pour le support commercial (SLA + quota étendu), contactez /contact?intent=api.

Conventions

- **Base URL** : `https://sannmerk.com/v1/sannmerk` - **Format** : `application/json` (GET only) - **Auth** : aucune pour les endpoints publics - **Cache** : 60s côté edge, 3600s pour les listings de taxonomie - **Rate limit** : 60 requêtes/minute par IP (burst 120) - **Erreurs** : HTTP standard, body `{"detail": "..."}`

Recherche et navigation

Endpoints de base pour chercher un produit, parcourir les marques et les catégories.

Marques et catégories

Annuaires et listes de taxonomie.

Gouvernance et transparence

Endpoints de transparence pour les auditeurs, journalistes et autorités.

Flux et syndication

Endpoints pour intégrer le registre dans d'autres applications (flux RSS, sitemap, Open Data).

Limites et quotas

- **Endpoints publics** : 60 requêtes/minute par IP (burst 120) - **Endpoints taxonomy** (`/facets`, `/sitemap`) : 30 requêtes/minute - **Pas d'authentification** sur les endpoints publics. Pour un SLA et un quota étendu, contactez /contact?intent=api. - **CORS** : tous les endpoints publics exposent `Access-Control-Allow-Origin: *`.

Besoin d'un accès commercial ?

SLA contractuel, quota étendu, support prioritaire, webhooks (alertes rappels Santé Canada, ingestion d'événements). Demandez un devis.

Demander un devis

Webhooks

Soyez notifié quand un produit change.

Enregistrer une souscription

Pour commencer, envoyez un POST à /v1/sannmerk/webhooks avec le body JSON suivant : ``` { "site_id": "<uuid du site>", "target_url": "https://example.com/webhooks/sannmerk", "event_types": ["product.recall", "product.updated"] } ``` La réponse contient un secret (à conserver en lieu sûr) qui sert à signer les livraisons. Si event_types est vide, la souscription reçoit tous les événements.

Types d'événements supportés

Choisissez ceux qui vous intéressent à l'inscription.

product.created

Un nouveau produit a été ajouté au registre. Utilisez ce hook pour synchroniser un cache local.

product.updated

Un produit existant a été mis à jour (nouvelle observation, prix, identifiant). Idéal pour les tableaux de bord.

product.recall

Un produit a été marqué avec un rappel ou un avis de sécurité. À traiter avec une priorité élevée.

brand.added

Une nouvelle marque est apparue dans le registre. Utile pour les workflows d'onboarding.

source.synced

Une source (DPD, LNHPD, etc.) a terminé un cycle de synchronisation. Bon pour les audits.

Vérification de la signature

Chaque livraison inclut un header `X-Sannmerk-Signature` au format `sha256=<hex>`. Pour vérifier : ``` mac = HMAC-SHA256(secret, raw_body) attendu = "sha256=" + mac.hexdigest() ``` Rejetez toute livraison dont la signature ne correspond pas. Le secret doit être traité comme un mot de passe : ne le stockez jamais en clair, ne l'embarquez pas dans le code, ne le transmettez pas en clair.

Sémantique de livraison

Les livraisons sont best-effort fire-and-forget. Le runtime POSTe l'événement, attend une réponse 2xx dans les 5 secondes, et journalise le code retour. Pas de file de retry dans cette version minimale — la fiabilité de bout en bout reste à la charge du consommateur (votre endpoint doit répondre vite et de manière idempotente). Un audit des dernières livraisons est disponible via `GET /v1/sannmerk/webhooks?site_id=...`.

Liste des endpoints

Tous les webhooks sont documentés dans l'API publique.