Appeler votre référentiel depuis le navigateur de vos visiteurs, sans exposer votre clé secrète

Une page « trouver le magasin le plus proche » tourne dans le navigateur de vos
visiteurs. Jusqu’ici, l’appeler directement depuis cette page voulait dire
mettre votre clé d’API dans son code source — lisible par n’importe qui, et
imputée à votre quota par n’importe qui. Il fallait un serveur entre les deux.

Il existe désormais une seconde sorte de clé, faite pour ça : la clé
publiable
. Elle commence par tdp_, elle est faite pour être lue dans votre
JavaScript, et elle ne peut pas servir à grand-chose d’autre.

const r = await fetch(
  "https://api.trustydata.app/services/v1/locations/search"
  + "?referentiel=boutiques&adresse=Lyon&rayon=10",
  { headers: { Authorization: "Bearer tdp_live_…" } }
);
const { resultats } = await r.json();

Ce qu’elle ouvre, et rien d’autre

Une clé publiable n’ouvre qu’un seul appel : la recherche de proximité dans
vos référentiels, GET /locations/search. Pas la liste de vos référentiels,
pas la fiche d’un site, aucune écriture, aucun autre service. Une requête
ailleurs est refusée avec un 403 cle_publiable_hors_perimetre.

Et elle n’ouvre cet appel que depuis les domaines que vous déclarez. Le
navigateur envoie un en-tête Origin ; s’il ne correspond à aucun domaine de
la clé, la réponse est un 403 origine_non_autorisee. Sans Origin du tout —
un appel serveur, un curl — c’est 403 origine_absente : pour ça, vous avez
votre clé secrète.

Les domaines s’écrivent en https et acceptent un joker de sous-domaine :
https://*.exemple.fr couvre boutique.exemple.fr et www.exemple.fr, mais
pas exemple.fr lui-même — déclarez les deux si vous voulez les deux.

Ce qu’elle voit

Moins que votre clé secrète. La réponse ne contient ni le nom_interne que
vous donnez à vos sites, ni les champs techniques — géocodage, etag,
horodatages. Tout ce qui sert à afficher une page y est : nom public, adresse,
coordonnées, distance, étiquettes, horaires et ouverture, contacts, liens,
donnees.

Dans l’espace client

Mes clés → Clés publiables. Vous créez une clé avec sa liste de domaines,
vous la copiez, vous la collez dans votre page. Elle reste affichée en clair
dans l’espace client — c’est voulu : elle est de toute façon dans le code
source de votre page, la cacher ne protégerait rien.

Deux gestes qui comptent :

  • modifier les domaines ne change pas la clé. Pour ajouter un domaine, vous
    éditez la liste ; votre page continue de fonctionner sans redéploiement ;
  • plusieurs clés peuvent coexister, ce qui permet une rotation sans coupure :
    nouvelle clé, redéploiement, révocation de l’ancienne quand vous voulez.

Chaque plan en inclut un nombre :

Plan Clés publiables
Starter 2
Growth 5
Business 10

Au-delà, la création est refusée en 409 capacite_cles_publiables_depassee, avec
le compte exact dans le detail. Révoquer libère une place. Si votre compte a
un second facteur, sa création et la modification de ses domaines le demandent
— c’est le geste qui ouvre votre quota au monde.

Les comptes gérés par une agence créent les leurs de la même façon.

Deux choses à savoir avant de publier

L’attribution est à votre charge. La mention BAN / INSEE pour les adresses,
et OpenStreetMap (ODbL) dès que vous demandez une durée de trajet ou des
distances routières, doit être visible sur votre page — le champ attribution
de la réponse vous dit quand.

La restriction par domaine n’est pas une frontière de sécurité. Elle arrête
la réutilisation opportuniste d’une clé trouvée dans le code d’un site. Elle
n’arrête pas un appel forgé hors navigateur : un Origin se fabrique en une
ligne. Et la clé atteint tous les référentiels du compte qui l’a émise, pas
seulement celui que votre page interroge — leur code se devine. Traitez donc
le compte entier comme public, et gardez ce qui ne doit pas l’être sur un autre
compte.

Rien ne change pour vos intégrations existantes : votre clé secrète fait
exactement ce qu’elle faisait.

Le guide complet, avec le fragment prêt à coller et la liste des erreurs :
https://trustydata.fr/docs/cle-publiable.html

Dites-nous

  • Sur quel type de page comptez-vous l’utiliser — un localisateur de points de
    vente, une carte d’agences, une liste de revendeurs ?
  • Aimeriez-vous pouvoir borner une clé à un seul référentiel, plutôt qu’au
    compte entier ? C’est la question que nous nous posons ensuite.

Vos retours en réponse :backhand_index_pointing_down: