Vermeld
Sur cette pageIntroduction

L'API

Six routes de lecture sur vos propres chiffres. Elles donnent exactement ce que vous voyez dans votre tableau de bord, en JSON. Il n'y a pas de route d'écriture: lancer une mesure coûte de l'argent et cela n'a pas sa place derrière une clé qui traîne dans un script.

Introduction

Croissance et Bureau. Vous créez une clé dans votre tableau de bord, sous Gestion, dans API. La clé s'affiche une seule fois. Nous n'en conservons qu'une empreinte chiffrée, donc nous ne pouvons pas la réafficher plus tard.

Chaque route se trouve sous une seule adresse de base. Tout passe par HTTPS et chaque route est un GET.

Adresse de baseurl
https://www.vermeld.be/api/v1

Démarrage rapide

  1. 1Créez une clé dans votre tableau de bord, dans API. Copiez-la tout de suite: elle ne s'affiche qu'une fois.
  2. 2Faites votre première requête. Remplacez vm_live_... par votre propre clé.
  3. 3Vous recevez vos sites. L'identifiant de cette liste sert dans chaque autre route.

Créer une clé

Requêtebash
curl https://www.vermeld.be/api/v1/projecten \
  -H "Authorization: Bearer vm_live_..." \
  -H "Accept-Language: fr"
Réponsejson
{
  "gegevens": [
    {
      "id": "6f2c1d4e-8b3a-4c55-9e21-0d7a4b9c3e18",
      "domein": "bakkerijjan.be",
      "merknaam": "Bakkerij Jan",
      "aangemaakt_op": "2026-03-04T09:11:22.000Z"
    }
  ],
  "gemeten_op": null
}

Authentification

Envoyez votre clé dans un en-tête. Jamais dans l'adresse: celle-ci se retrouve dans les journaux du serveur.

Une clé commence par vm_live_ suivi de 32 caractères. Une clé d'une autre forme reçoit aussitôt geen_sleutel.

En-têtehttp
Authorization: Bearer vm_live_...

Forme des réponses

Une forme en cas de succès et une en cas d'erreur. Votre code n'a ainsi pas à deviner par route où se trouve la réponse.

gemeten_op vaut null tant que rien n'a été mesuré. Cela vaut partout: null veut dire pas mesuré, zéro veut dire mesuré et absent. Confondre les deux fait plonger un score à cause d'une panne chez nous.

L'explication suit votre Accept-Language: néerlandais ou français. Le code dans fout ne change jamais. Branchez dessus et pas sur la phrase.

Réponse réussiejson
{
  "gegevens": ...,
  "gemeten_op": "2026-08-26T04:12:07.331Z"
}
Réponse d'erreurjson
{
  "fout": "onbekende_sleutel",
  "uitleg": "Cette clé n'existe pas ou a été révoquée. Créez-en une nouvelle dans votre tableau de bord."
}

Limites

60 requêtes par minute et par clé. Chaque réponse porte deux en-têtes: X-Vermeld-Limiet et X-Vermeld-Resterend. Vous n'avez donc pas besoin d'attendre un 429 pour savoir qu'il faut ralentir.

Si vous dépassez, vous recevez un statut 429 avec te_veel_verzoeken. Le compteur est par minute, donc attendre aide toujours.

En-têtes d'une réponsehttp
HTTP/2 200
content-type: application/json
x-vermeld-limiet: 60
x-vermeld-resterend: 59
cache-control: no-store

Erreurs

Une erreur a toujours un statut HTTP et un code fixe. Les voici tous.

CodeDescription
geen_sleutelHTTP 401Aucun en-tête Authorization valable n'était joint.
onbekende_sleutelHTTP 401La clé n'existe pas ou a été révoquée.
pakket_zonder_apiHTTP 403Votre formule n'inclut pas l'API. Elle fait partie de Croissance et Bureau.
onbekend_projectHTTP 404Ce projet n'existe pas. Ou il n'appartient pas à cette clé. Nous ne faisons volontairement pas la différence: sinon l'API révélerait quels identifiants existent.
te_veel_verzoekenHTTP 429Plus de 60 requêtes dans cette minute avec cette clé. Attendez la minute suivante.
Requêtebash
curl https://www.vermeld.be/api/v1/projecten \
  -H "Accept-Language: fr"
Réponsejson
{
  "fout": "geen_sleutel",
  "uitleg": "Envoyez votre clé dans Authorization: Bearer vm_live_..."
}

Sites

GET /api/v1/projecten

Vos sites. Commencez ici: les identifiants de cette liste servent dans les autres routes.

Paramètres

Aucun. La clé détermine quels sites vous recevez.

Champs

gegevens est une liste. Chaque élément a ces champs.

ChampDescription
idstringL'identifiant fixe du site. Il va dans le chemin de chaque autre route.
domeinstringLe domaine du site.
merknaamstring | nullLe nom de marque que nous cherchons. Null s'il n'est pas renseigné.
aangemaakt_opstringQuand le site a été ajouté. ISO 8601 en UTC.

Erreurs possibles

Requêtebash
curl https://www.vermeld.be/api/v1/projecten \
  -H "Authorization: Bearer vm_live_..." \
  -H "Accept-Language: fr"
Réponsejson
{
  "gegevens": [
    {
      "id": "6f2c1d4e-8b3a-4c55-9e21-0d7a4b9c3e18",
      "domein": "bakkerijjan.be",
      "merknaam": "Bakkerij Jan",
      "aangemaakt_op": "2026-03-04T09:11:22.000Z"
    }
  ],
  "gemeten_op": null
}

Score Vermeld

GET /api/v1/projecten/{id}/score

Le score Vermeld et les quatre volets, avec leur poids.

Paramètres

ParamètreDescription
idstring · obligatoire · dans le cheminL'identifiant d'un site. Vous l'obtenez avec la route projecten.

Champs

gegevens est un seul objet avec ces champs.

ChampDescription
domeinstringLe domaine du site.
scoreinteger | nullLe score Vermeld, de 0 à 100. Null tant qu'aucune analyse n'est terminée.
onderdelenarrayLes quatre volets du score. Toujours les quatre.
onderdelen[].sleutelstringaanwezigheid, citeerbaarheid, entiteit ou agent. Branchez là-dessus.
onderdelen[].naamstringLe nom du volet. Toujours en néerlandais.
onderdelen[].gewichtintegerLe poids dans le score. Ensemble ils font 100.
onderdelen[].scoreinteger | nullDe 0 à 100. Null si ce volet n'a pas été mesuré.

Erreurs possibles

Requêtebash
curl https://www.vermeld.be/api/v1/projecten/6f2c1d4e-8b3a-4c55-9e21-0d7a4b9c3e18/score \
  -H "Authorization: Bearer vm_live_..." \
  -H "Accept-Language: fr"
Réponsejson
{
  "gegevens": {
    "domein": "bakkerijjan.be",
    "score": 61,
    "onderdelen": [
      {
        "sleutel": "aanwezigheid",
        "naam": "Aanwezigheid",
        "gewicht": 40,
        "score": 45
      },
      {
        "sleutel": "citeerbaarheid",
        "naam": "Citeerbaarheid",
        "gewicht": 25,
        "score": 72
      },
      {
        "sleutel": "entiteit",
        "naam": "Entiteit",
        "gewicht": 20,
        "score": 80
      },
      {
        "sleutel": "agent",
        "naam": "Agent-klaar",
        "gewicht": 15,
        "score": null
      }
    ]
  },
  "gemeten_op": "2026-08-26T04:12:07.331Z"
}

Visibilité

GET /api/v1/projecten/{id}/zichtbaarheid

Les quatre mesures, au total et par canal. Seule la mesure la plus récente par question et par canal compte: sinon vous mesurez votre propre rythme de mesure.

Paramètres

ParamètreDescription
idstring · obligatoire · dans le cheminL'identifiant d'un site. Vous l'obtenez avec la route projecten.

Champs

gegevens est un seul objet avec ces champs.

ChampDescription
domeinstringLe domaine du site.
vermeldingsgraadinteger | nullDans quel pourcentage des mesures réussies votre nom figure dans la réponse. Null sans mesure réussie.
citatiegraadinteger | nullDans quel pourcentage des mesures réussies une de vos pages figure comme source sous la réponse. Jamais plus haut que le taux de mention.
gemiddelde_positieinteger | nullOù tombe votre nom en moyenne: 0 tout au début, 100 à la fin. Uniquement sur les réponses qui vous citent.
toonverdelingobjectCombien de fois chaque ton est apparu: positief, neutraal ou negatief.
aandeel_in_de_stemobjectQui prend quelle part de toutes les mentions. En pourcentage. Vous-même figurez sous jij. Total 100. Vide tant que personne n'a été cité.
per_kanaalarrayLes mêmes chiffres par canal.
per_kanaal[].kanaalstringLe canal, comme chatgpt ou perplexity.
per_kanaal[].gemetenintegerLe nombre de mesures réussies sur ce canal.
per_kanaal[].vermeldingsgraadinteger | nullComme ci-dessus, pour ce canal.
per_kanaal[].citatiegraadinteger | nullComme ci-dessus, pour ce canal.
per_kanaal[].gemiddelde_positieinteger | nullComme ci-dessus, pour ce canal.

Erreurs possibles

Requêtebash
curl https://www.vermeld.be/api/v1/projecten/6f2c1d4e-8b3a-4c55-9e21-0d7a4b9c3e18/zichtbaarheid \
  -H "Authorization: Bearer vm_live_..." \
  -H "Accept-Language: fr"
Réponsejson
{
  "gegevens": {
    "domein": "bakkerijjan.be",
    "vermeldingsgraad": 38,
    "citatiegraad": 12,
    "gemiddelde_positie": 64,
    "toonverdeling": {
      "positief": 7,
      "neutraal": 4
    },
    "aandeel_in_de_stem": {
      "jij": 22,
      "Bakkerij Peeters": 41,
      "Bakkerij Wouters": 37
    },
    "per_kanaal": [
      {
        "kanaal": "chatgpt",
        "gemeten": 25,
        "vermeldingsgraad": 44,
        "citatiegraad": 16,
        "gemiddelde_positie": 58
      }
    ]
  },
  "gemeten_op": "2026-08-26T04:12:07.331Z"
}

Questions

GET /api/v1/projecten/{id}/vragen

Les questions que nous posons, avec leur dernier résultat par canal. La réponse brute n'y figure pas: c'est du texte d'un tiers et cela rend la réponse dix fois plus lourde.

Paramètres

ParamètreDescription
idstring · obligatoire · dans le cheminL'identifiant d'un site. Vous l'obtenez avec la route projecten.

Champs

gegevens est une liste. Chaque élément a ces champs.

ChampDescription
idstringL'identifiant fixe de la question.
vraagstringLa question telle que nous la posons aux assistants.
labelstring | nullLe type de question: keuzehulp, lokaal, prijs, probleem ou merk. Null s'il n'y en a pas.
laatst_gemeten_opstring | nullQuand cette question a été mesurée pour la dernière fois. Null si ce n'est pas encore fait.
kanalenarrayLa mesure la plus récente par canal.
kanalen[].kanaalstringLe canal, comme chatgpt ou perplexity.
kanalen[].genoemdboolean | nullSi votre nom figure dans la réponse. Null si la mesure n'a pas réussi.
kanalen[].geciteerdboolean | nullSi une de vos pages figure comme source sous la réponse. Null si la mesure n'a pas réussi.
kanalen[].positieinteger | nullOù tombe votre nom, de 0 à 100. Null si votre nom n'est pas dans le texte.
kanalen[].toonstring | nullpositief, neutraal ou negatief. Null sans jugement.
kanalen[].statusstringgelukt, mislukt, overgeslagen ou geen_antwoord. Avec geen_antwoord, le canal n'a affiché aucune réponse IA pour cette question.
kanalen[].gemeten_opstringQuand cette mesure a eu lieu.

Erreurs possibles

Requêtebash
curl https://www.vermeld.be/api/v1/projecten/6f2c1d4e-8b3a-4c55-9e21-0d7a4b9c3e18/vragen \
  -H "Authorization: Bearer vm_live_..." \
  -H "Accept-Language: fr"
Réponsejson
{
  "gegevens": [
    {
      "id": "9a41c0b2-5d7e-4f18-a3c6-2b8e1f0d9c47",
      "vraag": "beste bakker in Leuven",
      "label": "lokaal",
      "laatst_gemeten_op": "2026-08-26T04:09:55.000Z",
      "kanalen": [
        {
          "kanaal": "chatgpt",
          "genoemd": true,
          "geciteerd": false,
          "positie": 41,
          "toon": "positief",
          "status": "gelukt",
          "gemeten_op": "2026-08-26T04:09:55.000Z"
        }
      ]
    }
  ],
  "gemeten_op": "2026-08-26T04:09:55.000Z"
}

Concurrents

GET /api/v1/projecten/{id}/concurrenten

Qui est cité à côté de vous. Uniquement des noms que nous avons vus nous-mêmes dans une réponse.

Paramètres

ParamètreDescription
idstring · obligatoire · dans le cheminL'identifiant d'un site. Vous l'obtenez avec la route projecten.

Champs

gegevens est une liste. Chaque élément a ces champs.

ChampDescription
naamstringLe nom du concurrent.
domeinstring | nullSon domaine. Null si nous ne le connaissons pas.
vermeldingenintegerCombien de fois nous l'avons vu dans une réponse.
eerst_gezien_opstringQuand nous l'avons vu pour la première fois.
laatst_gezien_opstringQuand nous l'avons vu pour la dernière fois.
bronstringgevonden si nous l'avons vu nous-mêmes dans une réponse. handmatig si vous l'avez ajouté.

Erreurs possibles

Requêtebash
curl https://www.vermeld.be/api/v1/projecten/6f2c1d4e-8b3a-4c55-9e21-0d7a4b9c3e18/concurrenten \
  -H "Authorization: Bearer vm_live_..." \
  -H "Accept-Language: fr"
Réponsejson
{
  "gegevens": [
    {
      "naam": "Bakkerij Peeters",
      "domein": "bakkerijpeeters.be",
      "vermeldingen": 34,
      "eerst_gezien_op": "2026-04-02T00:00:00.000Z",
      "laatst_gezien_op": "2026-08-26T04:09:55.000Z",
      "bron": "gevonden"
    }
  ],
  "gemeten_op": "2026-08-26T04:09:55.000Z"
}

Points à corriger

GET /api/v1/projecten/{id}/werkpunten

Les constatations ouvertes de votre dernière analyse. Avec leur origine: ce champ dit quelle règle prescrit cette constatation.

Paramètres

ParamètreDescription
idstring · obligatoire · dans le cheminL'identifiant d'un site. Vous l'obtenez avec la route projecten.

Champs

gegevens est une liste. Chaque élément a ces champs.

ChampDescription
idstringL'identifiant fixe du point à corriger.
onderdeelstring | nullLe volet du score auquel il appartient: aanwezigheid, citeerbaarheid, entiteit ou agent. Null s'il n'appartient à aucun volet.
categoriestringLe groupe du contrôle, comme ai.
ernststringkritiek, hoog, gemiddeld, laag ou info.
titelstringCe qui ne va pas en une phrase. Suit votre Accept-Language.
bewijsstring | nullCe que nous avons vu. Null s'il n'y a rien à montrer.
adviesstring | nullCe que vous pouvez y faire. Null s'il n'y a pas de conseil.
paginastring | nullL'adresse de la source sur laquelle ce conseil s'appuie. Null s'il n'y en a pas.
herkomststring | nullQuelle règle prescrit ce seuil. Null si le seuil vient de nous.

Erreurs possibles

Requêtebash
curl https://www.vermeld.be/api/v1/projecten/6f2c1d4e-8b3a-4c55-9e21-0d7a4b9c3e18/werkpunten \
  -H "Authorization: Bearer vm_live_..." \
  -H "Accept-Language: fr"
Réponsejson
{
  "gegevens": [
    {
      "id": "3c88a9e2-1f4b-4d6a-8c07-5e9b2d1a7f30",
      "onderdeel": "agent",
      "categorie": "ai",
      "ernst": "kritiek",
      "titel": "GPTBot est refusé dans robots.txt",
      "bewijs": "User-agent: GPTBot / Disallow: /",
      "advies": "Supprimez la règle ou limitez-la à /admin.",
      "pagina": "https://platform.openai.com/docs/bots",
      "herkomst": null
    }
  ],
  "gemeten_op": "2026-08-26T04:12:07.331Z"
}

Serveur MCP

Les six mêmes routes existent aussi sous forme de serveur MCP. Votre assistant IA lit alors vos chiffres lui-même. La même clé, les mêmes limites et la même réponse que ci-dessus. Chaque message envoyé au serveur compte dans la limite.

Dans Claude Code, vous l'ajoutez avec une seule commande. Un autre client, comme Cursor, reçoit l'adresse et l'en-tête dans ses réglages.

Un client qui ne se connecte qu'avec OAuth et ne laisse pas définir d'en-tête ne fonctionne pas encore. Nous n'avons pas d'OAuth.

Les outils portent le nom des routes. Tous sauf projecten demandent un project_id.

OutilDescription
projectenSites
scoreproject_id: string · obligatoireScore Vermeld
zichtbaarheidproject_id: string · obligatoireVisibilité
vragenproject_id: string · obligatoireQuestions
concurrentenproject_id: string · obligatoireConcurrents
werkpuntenproject_id: string · obligatoirePoints à corriger
Claude Codebash
claude mcp add --transport http vermeld https://www.vermeld.be/api/mcp \
  --header "Authorization: Bearer vm_live_..."
Autres clientsjson
{
  "mcpServers": {
    "vermeld": {
      "url": "https://www.vermeld.be/api/mcp",
      "headers": {
        "Authorization": "Bearer vm_live_..."
      }
    }
  }
}