StackLégal

Développeurs

API du catalogue de sous-traitants

Cette API sert à enrichir, côté serveur, une liste d’outils que vous avez déjà confirmés. Elle lit les fiches publiées sur StackLégal, les mêmes que le widget gratuit. Aucune clé, aucun cookie, aucune donnée personnelle.

Le pack documentaire pour une fonction d’IA est à part du catalogue. Pack RGPD + IA

Détecter un domaine ou un script ne qualifie pas le service au sens du RGPD. L’API décrit les fiches des outils que vous confirmez utiliser. Elle ne rédige pas un DPA, elle ne signe rien, et elle ne rend pas un site conforme.

Points d’accès

  • GET /api/v1/providers

    Tout le catalogue, ou seulement les slugs demandés avec ids.

  • GET /api/v1/providers/{slug}

    Une fiche. Un slug inconnu répond 404 en JSON. Un alias répond 200 avec l’id canonique.

Paramètres

lang
Optionnel. Français si le paramètre est absent ; en et les autres langues livrées du site sont acceptées : elles traduisent la finalité, le nom juridique et le lieu. Les slugs ne changent pas. Une valeur inconnue répond 400.
ids
Optionnel, sur la liste seulement. Slugs séparés par des virgules, 73 au plus, dans l’ordre demandé. Un slug inconnu ou mal formé est recopié dans unknown et le reste de la réponse reste en 200. Sans ce paramètre, le catalogue entier est renvoyé.

Enveloppe

apiVersion
« 1 ». Le chemin /api/v1/ est le contrat de cette version.
generatedAt
Date de la fiche la plus récemment révisée du catalogue, à minuit UTC. Ce n’est pas l’heure de la requête.
lastVerifiedBasis
Toujours fiche-revision : la date vient de l’historique des fiches, pas d’un contrôle lancé à la volée.
lang
Langue des textes renvoyés.
count / total
Nombre de lignes dans cette réponse, et taille du catalogue.
license
Conditions courtes, dont le lien d’attribution.
attributionUrl
https://stacklegal.eu — à citer si vous réutilisez les faits.
docs
Cette page.
unknown
Slugs demandés et introuvables. Tableau vide si ids est absent.

Champs d’un fournisseur

id
Slug stable. C’est l’identifiant du widget (paramètre v) et de la fiche. Il ne sera pas renommé.
name
Nom du fournisseur tel qu’affiché sur la fiche.
legalName
Entité juridique citée sur la fiche. Le texte peut nommer plusieurs sociétés.
category
Identifiant de catégorie du catalogue (hebergement, paiement, ia…). Ce n’est pas une qualification juridique.
purpose
Finalité typique écrite par StackLégal pour un usage indie, pas une phrase du fournisseur. null si la fiche ne la donne pas.
location
Lieu de traitement dans les mots de la fiche : pays, zones, ou choix de région par le client. Pas une liste de codes ISO, parce que beaucoup de fiches décrivent un choix et non un seul pays. null si la fiche dit que le lieu n’est pas communiqué.
transfer
Mécanismes retenus, zéro ou plusieurs : eu-only, eu-us-dpf, sccs. Un tableau vide veut dire que la fiche ne permet pas de retenir l’un de ces trois mécanismes. Ce n’est pas l’affirmation qu’aucun transfert n’existe.
dpfStatus
Statut lu sur la liste Data Privacy Framework : actif, actif-examen, non-inscrit, inactif, ou non-communique.
officialUrl
Lien HTTPS du DPA, ou à défaut une page de confidentialité déjà citée dans les sources de la fiche. null s’il n’y en a pas.
officialUrlKind
dpa, privacy, ou null. Précise ce que pointe officialUrl.
pageUrl
Fiche StackLégal de ce fournisseur, dans la langue demandée. La page existe pour chaque slug du catalogue.
lastVerified
Date YYYY-MM-DD de la dernière révision enregistrée de cette fiche.
verification
verified, partial ou unverified. Voir plus bas.
missing
Clés absentes parmi purpose, location, transfer, officialUrl et lastVerified.
aliases
Autres clés acceptées pour ce slug. Aujourd’hui : ga pour google-analytics, l’identifiant du scanner de cookies.

Mécanismes de transfert

Les codes sont ceux du widget, calculés sur le texte français de la fiche. Rien n’est déduit d’un nom de pays seul.

eu-only
Le texte d’hébergement dit que les données restent dans l’Union, sans destination hors EEE, et le DPF n’est pas retenu pour ce fournisseur.
eu-us-dpf
L’entité citée est au statut DPF actif, ou actif avec réexamen. Le détail est dans dpfStatus (actif ou actif-examen).
sccs
La fiche française nomme les clauses contractuelles types (standard contractual clauses).

Complétude

Le drapeau décrit la fiche, pas le résultat d’un audit chez le fournisseur le jour de l’appel.

verified
La finalité, le lieu, au moins un mécanisme, le lien officiel et la date sont présents.
partial
Il manque au moins un de ces éléments, mais le lieu, un mécanisme ou le lien officiel est encore renseigné.
unverified
Le lieu, le mécanisme et le lien officiel manquent tous les trois. La ligne ne suffit pas à documenter un transfert.

Dates

Chaque fiche a une date de publication, et parfois une correction des faits le même jour ou plus tard. lastVerified est la plus récente de ces révisions pour ce slug. generatedAt est la plus récente de tout le catalogue, écrite à minuit UTC. Si une fiche n’avait pas de date, elle serait marquée dans missing et lastVerified serait null : ce n’est pas le cas du catalogue actuel. Aucune date n’est inventée.

Slugs

L’id renvoyé est toujours le slug canonique de la fiche. Il fait partie du contrat : un slug publié n’est pas renommé. Une graphie supplémentaire est ajoutée comme alias, et la réponse garde l’id canonique. ga résout vers google-analytics.

Cache, CORS, erreurs

Les réponses 200 portent Cache-Control: public, max-age=3600, s-maxage=86400, stale-while-revalidate=604800. Un 404 est mis en cache plus brièvement, pour qu’un slug ajouté ensuite ne reste pas introuvable. CORS est ouvert pour GET et OPTIONS (Access-Control-Allow-Origin: *), sans cookie et sans authentification. Un slug inconnu sur l’URL d’une fiche répond 404 avec error: not_found. lang inconnu répond 400 (invalid_lang). Plus de 73 ids répond 400 (too_many_ids).

Exemple

Deux fournisseurs, tels que l’API les renvoie.

GET https://stacklegal.eu/api/v1/providers?ids=vercel,plausible&lang=fr

{
  "apiVersion": "1",
  "generatedAt": "2026-10-12T00:00:00.000Z",
  "lastVerifiedBasis": "fiche-revision",
  "lastVerifiedNote": "lastVerified is the date of the latest recorded edit of that provider's fiche in this catalog (first publication, or a later correction of the stored facts). It is not the time of the HTTP response. generatedAt is the newest of those dates, at UTC midnight.",
  "lang": "fr",
  "license": "Provider facts come from the StackLégal fiches, which quote public vendor pages and leave unstated points undisclosed. This is not legal advice. A technical detection is not a legal qualification: confirm the services you actually use before you rely on a row. Attribution required: link to https://stacklegal.eu when you reuse this catalog.",
  "attributionUrl": "https://stacklegal.eu",
  "docs": "https://stacklegal.eu/developpeurs",
  "count": 2,
  "total": 73,
  "providers": [
    {
      "id": "vercel",
      "name": "Vercel",
      "legalName": "Vercel Inc.",
      "category": "hebergement",
      "purpose": "Hébergement, CDN et déploiements du front.",
      "location": "Le DPA indique que les installations principales de traitement sont aux États-Unis à la date d’effet, et que les Customer Data peuvent être traitées aux États-Unis et partout où Vercel ou ses sous-traitants opèrent. Les services s’appuient sur AWS, Microsoft Azure et Google Cloud Platform.",
      "transfer": [
        "eu-us-dpf"
      ],
      "dpfStatus": "actif",
      "officialUrl": "https://vercel.com/legal/dpa",
      "officialUrlKind": "dpa",
      "pageUrl": "https://stacklegal.eu/rgpd/vercel",
      "lastVerified": "2026-10-04",
      "verification": "verified",
      "missing": [],
      "aliases": []
    },
    {
      "id": "plausible",
      "name": "Plausible",
      "legalName": "Plausible Insights OÜ",
      "category": "mesure",
      "purpose": "Mesure d’audience sans cookies.",
      "location": "Les données de visiteurs sont traitées et stockées dans l’UE. Le site est stocké chez Hetzner à Falkenstein (Allemagne), UpCloud (Finlande) pour la base et les exports, Bunny (Slovénie) comme CDN. Plausible indique que les données de visiteurs ne quittent pas l’UE.",
      "transfer": [
        "eu-only"
      ],
      "dpfStatus": "non-inscrit",
      "officialUrl": "https://plausible.io/dpa",
      "officialUrlKind": "dpa",
      "pageUrl": "https://stacklegal.eu/rgpd/plausible",
      "lastVerified": "2026-10-04",
      "verification": "verified",
      "missing": [],
      "aliases": []
    }
  ],
  "unknown": []
}

La fiche unique a la même enveloppe, avec un objet provider au lieu du tableau.

GET https://stacklegal.eu/api/v1/providers/vercel?lang=fr

{
  "apiVersion": "1",
  "generatedAt": "2026-10-12T00:00:00.000Z",
  "lastVerifiedBasis": "fiche-revision",
  "lastVerifiedNote": "lastVerified is the date of the latest recorded edit of that provider's fiche in this catalog (first publication, or a later correction of the stored facts). It is not the time of the HTTP response. generatedAt is the newest of those dates, at UTC midnight.",
  "lang": "fr",
  "license": "Provider facts come from the StackLégal fiches, which quote public vendor pages and leave unstated points undisclosed. This is not legal advice. A technical detection is not a legal qualification: confirm the services you actually use before you rely on a row. Attribution required: link to https://stacklegal.eu when you reuse this catalog.",
  "attributionUrl": "https://stacklegal.eu",
  "docs": "https://stacklegal.eu/developpeurs",
  "provider": {
    "id": "vercel",
    "name": "Vercel",
    "legalName": "Vercel Inc.",
    "category": "hebergement",
    "purpose": "Hébergement, CDN et déploiements du front.",
    "location": "Le DPA indique que les installations principales de traitement sont aux États-Unis à la date d’effet, et que les Customer Data peuvent être traitées aux États-Unis et partout où Vercel ou ses sous-traitants opèrent. Les services s’appuient sur AWS, Microsoft Azure et Google Cloud Platform.",
    "transfer": [
      "eu-us-dpf"
    ],
    "dpfStatus": "actif",
    "officialUrl": "https://vercel.com/legal/dpa",
    "officialUrlKind": "dpa",
    "pageUrl": "https://stacklegal.eu/rgpd/vercel",
    "lastVerified": "2026-10-04",
    "verification": "verified",
    "missing": [],
    "aliases": []
  }
}

GET /api/v1/providers/inconnu

{
  "apiVersion": "1",
  "error": "not_found",
  "message": "No provider for this slug.",
  "slug": "inconnu"
}

Serveur MCP

Le même catalogue, et le scanner de cookies, sont aussi un serveur MCP public. Pas de clé, pas de cookie, pas de session. Le transport est Streamable HTTP : un POST JSON-RPC sur /api/mcp. Les descriptions des outils sont en anglais.

Les fiches lues par ce serveur (OpenAI, Mistral, Anthropic, Gemini API) servent aussi les clauses du pack. Pack RGPD + IA

POST https://stacklegal.eu/api/mcp

Outils

get_provider
Une fiche, par slug canonique, alias (ga) ou nom exact du catalogue. Même objet que GET /api/v1/providers/{slug}. lang est optionnel et vaut le français s’il est omis.
list_providers
Le catalogue, ou seulement les slugs passés dans ids (73 au plus). Même enveloppe que GET /api/v1/providers. Un slug inconnu est recopié dans unknown.
scan_site
Une requête HTTP, puis les traceurs présents dans le HTML et les en-têtes Set-Cookie de la première réponse, avant un clic de consentement. Le JavaScript de la page n’est pas exécuté. Un slug de fiche n’est indiqué que si le catalogue du scanner connaît ce traceur. La réponse donne aussi le lien vers la page du scanner. Ce n’est pas une qualification juridique.

scan_site est plafonné à 6 lectures par fenêtre de 10 minutes. L’adresse IP ne sert qu’à ce plafond, sous forme d’empreinte en mémoire. L’adresse demandée et l’IP ne sont pas enregistrées. Ce plafond est distinct de celui de la page du scanner.

Clients

Cursor ~/.cursor/mcp.json

{
  "mcpServers": {
    "stacklegal": {
      "url": "https://stacklegal.eu/api/mcp"
    }
  }
}

Claude Desktop claude_desktop_config.json

{
  "mcpServers": {
    "stacklegal": {
      "type": "http",
      "url": "https://stacklegal.eu/api/mcp"
    }
  }
}

VS Code .vscode/mcp.json

{
  "servers": {
    "stacklegal": {
      "type": "http",
      "url": "https://stacklegal.eu/api/mcp"
    }
  }
}

Liste des outils

curl -sS -X POST https://stacklegal.eu/api/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

Attribution

Si vous réutilisez ces faits, liez https://stacklegal.eu. Le champ license de chaque réponse le redit. Les fiches citent des pages publiques des fournisseurs ; ce qui n’y figure pas reste non communiqué.

Contact

Pour une question sur cette API : contact@stacklegal.eu

Questions fréquentes

L’API est-elle gratuite ?

Oui. GET /api/v1/providers est public, sans clé et sans cookie. Le même catalogue est disponible en MCP.

Quelle différence entre le total et les fiches vérifiées ?

Le total est le nombre de fiches du catalogue. Une fiche est vérifiée lorsque le lieu, le transfert, le lien officiel et la date de vérification sont renseignés. Ce n’est pas un audit juridique.

Un slug inconnu fait-il échouer la liste ?

Non. Le slug part dans unknown et le reste répond 200. L’URL d’une fiche inconnue répond 404.

Widget

Le widget à coller sur un site n’utilise pas cette API. Il reste sur /widget.js et la page de construction. Les deux lisent les mêmes fiches. /rgpd/widget-sous-traitants