Monitor GEO
Documentation

API REST

Tout ce que fait l'interface, en JSON. Pour n8n, Make, Google Sheets et vos scripts. Sans surcoût : seules les réponses de ChatGPT sont facturées.

Conventions

Adresse de base : https://monitor-geo.fr/api/v1. Spécification complète : openapi.json (OpenAPI 3.1).

Authentification : une clé API créée dans votre compte, dans l'en-tête Authorization: Bearer mg_live_.... La même clé sert au serveur MCP.

Premier appel
curl https://monitor-geo.fr/api/v1/balance \
  -H "Authorization: Bearer mg_live_..."
  • Réponse : { "data": …, "meta": { … } }. Erreur : { "error": { "code", "message", "details" } }, message en français.
  • Montants en centimes (*_cents) avec une version formatée (*_display, « 0,10 € »). Taux entre 0 et 1.
  • Horodatages ISO 8601 en UTC. Jours au format AAAA-MM-JJ, calculés à l'heure de Paris.
  • Pagination : paramètres limit (1 à 100) et cursor. La page suivante est donnée par meta.next_cursor, qui vaut null en fin de liste.
  • Export CSV : ajoutez format=csv aux listes de réponses et de citations. Séparateur point-virgule, UTF-8 avec BOM, décimales à virgule : le fichier s'ouvre directement dans Excel.
  • Idempotence : l'en-tête Idempotency-Key sur l'ajout de questions et la vérification immédiate rejoue la même réponse pendant 24 heures, sans nouveau débit.
  • Limites : 120 requêtes par minute par clé, 20 vérifications immédiates par heure. En-têtes X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, et Retry-After en cas de dépassement.
Codes d'erreur
400validation_errorDonnées invalides. Le détail par champ est dans error.details.
401unauthorizedClé API absente, invalide ou révoquée.
402insufficient_balanceSolde insuffisant pour une vérification immédiate.
404not_foundRessource introuvable, ou appartenant à un autre compte.
409conflictDoublon, par exemple un domaine déjà suivi.
409limit_reachedLimite atteinte : 50 projets, 200 questions par projet, 20 clés actives.
409idempotency_conflictClé d'idempotence déjà utilisée pour un autre corps, ou requête en cours.
429rate_limitedLimite de requêtes atteinte. Attendre la durée de l'en-tête Retry-After.
502provider_errorChatGPT n'a pas répondu à temps. Rien n'a été débité.
503payment_not_configuredPaiement indisponible sur ce serveur.

Cagnotte

GET/balance

Lire le solde

Solde de la cagnotte, coût du jour du suivi, autonomie estimée et état du suivi.

GratuitOutil MCP : get_balance

Exemple
curl "https://monitor-geo.fr/api/v1/balance" \
  -H "Authorization: Bearer mg_live_..."
Réponse 200, listes raccourcies
{
  "data": {
    "balance_cents": 2100,
    "balance_eur": 21,
    "balance_display": "21,00 €",
    "daily_cost_cents": 20,
    "daily_cost_display": "0,20 €",
    "estimated_days_left": 105,
    "autonomy_display": "environ 105 jours",
    "active_questions": 10,
    "tracking_paused": false,
    "question_day_price_cents": 2,
    "live_check_price_cents": 10
  },
  "meta": {}
}
GET/ledger

Lister les mouvements de la cagnotte

Recharges, solde offert et débits, du plus récent au plus ancien, avec le solde après chaque opération.

GratuitOutil MCP : list_ledgerPaginé

Paramètres de requête
NomTypeDescription
limitentier (1 à 100)Nombre d'éléments, de 1 à 100 (50 par défaut)
cursortexteCurseur renvoyé dans meta.next_cursor de la page précédente
Exemple
curl "https://monitor-geo.fr/api/v1/ledger?limit=20" \
  -H "Authorization: Bearer mg_live_..."
Réponse 200, listes raccourcies
{
  "data": [
    {
      "id": 1990,
      "created_at": "2026-09-13T05:06:19+00:00",
      "kind": "debit_question_day",
      "description": "Suivi du 13 sept. : « Top des agences web à Saint-Étienne en 2026 ? »",
      "amount_cents": -2,
      "amount_display": "-0,02 €",
      "balance_after_cents": 2100,
      "balance_after_display": "21,00 €"
    },
    {
      "id": 1989,
      "created_at": "2026-09-13T05:05:18+00:00",
      "kind": "debit_question_day",
      "description": "Suivi du 13 sept. : « Développeur web ou agence à Montbrison pour une application… »",
      "amount_cents": -2,
      "amount_display": "-0,02 €",
      "balance_after_cents": 2102,
      "balance_after_display": "21,02 €"
    }
  ],
  "meta": {
    "next_cursor": "eyJpZCI6MTk4OX0"
  }
}

Projets

GET/projects

Lister les projets

Projets du compte avec leurs taux de citation sur 7 et 30 jours et le nombre de questions suivies.

GratuitOutil MCP : list_projects

Paramètres de requête
NomTypeDescription
include_archived"true" | "false"true pour inclure les projets archivés
Exemple
curl "https://monitor-geo.fr/api/v1/projects" \
  -H "Authorization: Bearer mg_live_..."
Réponse 200, listes raccourcies
{
  "data": [
    {
      "id": "c81254b9-b419-431b-9bd2-1bbe7d1b1eb7",
      "name": "Agora Studio",
      "domain": "agora-studio.fr",
      "brand": "Agora Studio",
      "brand_aliases": [
        "agora-studio"
      ],
      "status": "active",
      "location_code": 2250,
      "language_code": "fr",
      "created_at": "2026-09-13T13:07:06.352479+00:00",
      "updated_at": "2026-09-13T13:07:06.352479+00:00",
      "active_questions": 10,
      "runs_done_7d": 210,
      "citation_rate_7d": 0.3952,
      "citation_rate_prev_7d": 0.3762,
      "citation_rate_30d": 0.3189,
      "mention_rate_7d": 0.3952
    }
  ],
  "meta": {}
}
POST/projects

Créer un projet

Un projet suit un domaine. Le domaine est normalisé (sans https ni www). La marque et ses variantes servent à détecter les mentions sans lien.

GratuitOutil MCP : create_project

Corps JSON
NomTypeDescription
domainobligatoiretexte (3 à 253 car.)Domaine du site suivi, par exemple agora-studio.fr
brandobligatoiretexteNom de marque tel qu'un client l'écrirait
brand_aliasesliste de texte, 0 à 20Variantes du nom de marque
nametexte (1 à 120 car.)Nom du projet, par défaut le domaine
countrytextePays d'où ChatGPT est interrogé, code ISO à deux lettres (FR par défaut). Ne peut plus changer ensuite.
languagetexteLangue des réponses, par exemple fr, nl ou en (langue principale du pays par défaut). Ne peut plus changer ensuite.
Exemple
curl -X POST "https://monitor-geo.fr/api/v1/projects" \
  -H "Authorization: Bearer mg_live_..." \
  -H "Content-Type: application/json" \
  -d '{"domain":"exemple.fr","brand":"Exemple","brand_aliases":["Exemple SARL"]}'
Réponse 201, listes raccourcies
{
  "data": {
    "id": "14720cc1-4512-4419-863b-91106aa6bb32",
    "name": "exemple-doc-mtztwopg.fr",
    "domain": "exemple-doc-mtztwopg.fr",
    "brand": "Exemple",
    "brand_aliases": [],
    "status": "active",
    "location_code": 2250,
    "language_code": "fr",
    "created_at": "2026-09-13T13:07:27.923843+00:00",
    "updated_at": "2026-09-13T13:07:27.923843+00:00"
  },
  "meta": {}
}
GET/projects/{id}

Lire un projet

Détail d'un projet et ses indicateurs.

Gratuit

Paramètres de chemin
NomTypeDescription
idobligatoireuuidIdentifiant du projet
Exemple
curl "https://monitor-geo.fr/api/v1/projects/<project_id>" \
  -H "Authorization: Bearer mg_live_..."
Réponse 200, listes raccourcies
{
  "data": {
    "id": "c81254b9-b419-431b-9bd2-1bbe7d1b1eb7",
    "name": "Agora Studio",
    "domain": "agora-studio.fr",
    "brand": "Agora Studio",
    "brand_aliases": [
      "agora-studio"
    ],
    "status": "active",
    "location_code": 2250,
    "language_code": "fr",
    "created_at": "2026-09-13T13:07:06.352479+00:00",
    "updated_at": "2026-09-13T13:07:06.352479+00:00",
    "active_questions": 10,
    "runs_done_7d": 210,
    "citation_rate_7d": 0.3952,
    "citation_rate_prev_7d": 0.3762,
    "citation_rate_30d": 0.3189,
    "mention_rate_7d": 0.3952
  },
  "meta": {}
}
PATCH/projects/{id}

Modifier un projet

Nom, marque, variantes ou statut. Un projet en pause n'est plus interrogé ; un projet archivé disparaît de la liste.

GratuitOutil MCP : update_project

Paramètres de chemin
NomTypeDescription
idobligatoireuuidIdentifiant du projet
Corps JSON
NomTypeDescription
nametexte (1 à 120 car.)Nom du projet
brandtexte (1 à 120 car.)Nom de marque
brand_aliasesliste de texte, 0 à 20Variantes du nom de marque, remplacent la liste existante
status"active" | "paused" | "archived"active, paused ou archived
Exemple
curl -X PATCH "https://monitor-geo.fr/api/v1/projects/<project_id>" \
  -H "Authorization: Bearer mg_live_..." \
  -H "Content-Type: application/json" \
  -d '{"status":"paused"}'
Réponse 200, listes raccourcies
{
  "data": {
    "id": "c81254b9-b419-431b-9bd2-1bbe7d1b1eb7",
    "name": "Agora Studio",
    "domain": "agora-studio.fr",
    "brand": "Agora Studio",
    "brand_aliases": [
      "agora-studio"
    ],
    "status": "active",
    "location_code": 2250,
    "language_code": "fr",
    "created_at": "2026-09-13T13:07:06.352479+00:00",
    "updated_at": "2026-09-13T13:07:26.472853+00:00"
  },
  "meta": {}
}
GET/projects/{id}/report

Rapport d'un projet

Taux de citation et de mention, série journalière, tableau par question et part de voix des 20 domaines les plus cités.

GratuitOutil MCP : get_project_report

Paramètres de chemin
NomTypeDescription
idobligatoireuuidIdentifiant du projet
Paramètres de requête
NomTypeDescription
days"7" | "30" | "90"Période en jours : 7, 30 ou 90 (30 par défaut)
Exemple
curl "https://monitor-geo.fr/api/v1/projects/<project_id>/report?days=30" \
  -H "Authorization: Bearer mg_live_..."
Réponse 200, listes raccourcies
{
  "data": {
    "project": {
      "id": "c81254b9-b419-431b-9bd2-1bbe7d1b1eb7",
      "name": "Agora Studio",
      "domain": "agora-studio.fr",
      "brand": "Agora Studio",
      "brand_aliases": [
        "agora-studio"
      ],
      "status": "active",
      "location_code": 2250,
      "language_code": "fr",
      "created_at": "2026-09-13T13:07:06.352479+00:00",
      "updated_at": "2026-09-13T13:07:26.472853+00:00"
    },
    "days": 7,
    "runs_done": 210,
    "runs_cited": 83,
    "runs_mentioned": 83,
    "citation_rate": 0.3952,
    "mention_rate": 0.3952,
    "avg_best_position": 1.7,
    "local_block_rate": 0.7667,
    "series": [
      {
        "day": "2026-09-07",
        "runs_done": 30,
        "runs_cited": 12,
        "runs_mentioned": 12,
        "citation_rate": 0.4
      },
      {
        "day": "2026-09-08",
        "runs_done": 30,
        "runs_cited": 12,
        "runs_mentioned": 12,
        "citation_rate": 0.4
      }
    ],
    "questions": [
      {
        "id": "8eb0c1e4-ba11-436b-91a8-a113a5fcbd69",
        "text": "Quelle agence web choisir à Montbrison pour créer un site internet ?",
        "status": "active",
        "runs_done": 21,
        "citation_rate": 1,
        "mention_rate": 1,
        "best_position": 1,
        "last_run_at": "2026-09-13T17:03:10+00:00"
      },
      {
        "id": "ce4254ae-c0d3-4364-b9e5-0b61d1dfa5cf",
        "text": "Meilleure agence web dans la Loire (42) pour un site vitrine d'artisan ?",
        "status": "active",
        "runs_done": 21,
        "citation_rate": 0,
        "mention_rate": 0,
        "best_position": null,
        "last_run_at": "2026-09-13T17:04:11+00:00"
      }
    ],
    "share_of_voice": [
      {
        "domain": "agora-studio.fr",
        "runs_cited": 83,
        "share": 0.3952,
        "avg_position": 1.7,
        "is_owner": true
      },
      {
        "domain": "gokuu.fr",
        "runs_cited": 63,
        "share": 0.3,
        "avg_position": 8.1,
        "is_owner": false
      }
    ]
  },
  "meta": {}
}

Questions

GET/projects/{id}/questions

Lister les questions d'un projet

Questions du projet (hors archivées par défaut) avec leurs taux sur 7 jours.

GratuitOutil MCP : list_questions

Paramètres de chemin
NomTypeDescription
idobligatoireuuidIdentifiant du projet
Paramètres de requête
NomTypeDescription
status"active" | "paused" | "archived"active, paused ou archived
days"7" | "30" | "90"Période des indicateurs : 7, 30 ou 90 jours (7 par défaut)
Exemple
curl "https://monitor-geo.fr/api/v1/projects/<project_id>/questions?status=active" \
  -H "Authorization: Bearer mg_live_..."
Réponse 200, listes raccourcies
{
  "data": [
    {
      "id": "8eb0c1e4-ba11-436b-91a8-a113a5fcbd69",
      "project_id": "c81254b9-b419-431b-9bd2-1bbe7d1b1eb7",
      "text": "Quelle agence web choisir à Montbrison pour créer un site internet ?",
      "status": "active",
      "created_at": "2026-08-14T07:00:00+00:00",
      "citation_rate_7d": 1,
      "mention_rate_7d": 1,
      "best_position_7d": 1,
      "runs_done_7d": 21,
      "last_run_at": "2026-09-13T17:03:10+00:00"
    },
    {
      "id": "ce4254ae-c0d3-4364-b9e5-0b61d1dfa5cf",
      "project_id": "c81254b9-b419-431b-9bd2-1bbe7d1b1eb7",
      "text": "Meilleure agence web dans la Loire (42) pour un site vitrine d'artisan ?",
      "status": "active",
      "created_at": "2026-08-14T07:00:00+00:00",
      "citation_rate_7d": 0,
      "mention_rate_7d": 0,
      "best_position_7d": null,
      "runs_done_7d": 21,
      "last_run_at": "2026-09-13T17:04:11+00:00"
    }
  ],
  "meta": {}
}
POST/projects/{id}/questions

Ajouter des questions

Ajout en lot, 50 questions au maximum par appel. Les doublons sont ignorés et listés. Accepte l'en-tête Idempotency-Key.

Coût : 0,02 € par question et par jour de suiviOutil MCP : add_questions

Paramètres de chemin
NomTypeDescription
idobligatoireuuidIdentifiant du projet
Corps JSON
NomTypeDescription
questionsobligatoireliste de texte, 1 à 50Questions en langage naturel, 10 à 500 caractères chacune. Pour une recherche locale, mettre la ville dans la question.
Exemple
curl -X POST "https://monitor-geo.fr/api/v1/projects/<project_id>/questions" \
  -H "Authorization: Bearer mg_live_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"questions":["Quel plombier appeler en urgence à Lyon ?","Plombier chauffagiste à Lyon, lequel choisir ?"]}'
Réponse 201, listes raccourcies
{
  "data": {
    "created": [],
    "skipped_duplicates": [
      "Agora Studio à Montbrison, c'est quoi comme agence ?"
    ],
    "new_daily_cost_cents": 20,
    "new_daily_cost_display": "0,20 €",
    "estimated_days_left": 105,
    "autonomy_display": "environ 105 jours"
  },
  "meta": {}
}
POST/projects/{id}/site-analysis

Analyser le site et proposer des questions

Lit la page d'accueil du site du projet et jusqu'à trois pages utiles, résume l'activité et propose des questions où l'entreprise peut être citée à côté de ses concurrents : des questions sans ville et, pour une entreprise locale, des questions modèles avec {ville} et les villes les plus peuplées autour de son adresse. Rien n'est ajouté au suivi. 10 analyses par heure.

GratuitOutil MCP : analyze_site

Paramètres de chemin
NomTypeDescription
idobligatoireuuidIdentifiant du projet
Exemple
curl -X POST "https://monitor-geo.fr/api/v1/projects/<project_id>/site-analysis" \
  -H "Authorization: Bearer mg_live_..."
GET/cities

Chercher une ville

Villes disponibles pour décliner une question : France, Belgique, Suisse, Luxembourg, Monaco, Canada et Maroc. Recherche par début de nom, par numéro de département en France (42) ou par code postal.

GratuitOutil MCP : search_cities

Paramètres de requête
NomTypeDescription
countrytextePays, code ISO à deux lettres (FR par défaut)
qtexte (0 à 80 car.)Début du nom, numéro de département en France (42) ou code postal
limitentier (1 à 50)Nombre de villes, de 1 à 50
Exemple
curl "https://monitor-geo.fr/api/v1/cities?country=FR&q=42" \
  -H "Authorization: Bearer mg_live_..."
Réponse 200, listes raccourcies
{
  "data": {
    "country": "FR",
    "available": true,
    "cities": [
      {
        "code": "42218",
        "name": "Saint-Étienne",
        "label": "Saint-Étienne (42000)",
        "postal_codes": [
          "42000",
          "42100"
        ],
        "region": "42",
        "region_name": "Loire",
        "population": 173136,
        "homonym": false
      },
      {
        "code": "42207",
        "name": "Saint-Chamond",
        "label": "Saint-Chamond (42400)",
        "postal_codes": [
          "42400"
        ],
        "region": "42",
        "region_name": "Loire",
        "population": 35646,
        "homonym": false
      }
    ]
  },
  "meta": {}
}
POST/projects/{id}/questions/by-city

Décliner une question par ville

Crée une question par ville à partir d'une question modèle contenant {ville}. Les articles sont contractés (« au Puy-en-Velay »). Les questions créées partagent un template_id. Accepte l'en-tête Idempotency-Key.

Coût : 0,02 € par question créée et par jour de suiviOutil MCP : add_questions_by_city

Paramètres de chemin
NomTypeDescription
idobligatoireuuidIdentifiant du projet
Corps JSON
NomTypeDescription
templateobligatoiretexteQuestion modèle avec {ville} à l'endroit de la ville, par exemple « Quelle agence web choisir à {ville} ? »
city_codesobligatoireliste de texte (1 à 20 car.), 1 à 100Codes des villes renvoyés par la recherche de villes
source_question_iduuidQuestion existante déclinée : elle rejoint le groupe de villes
Exemple
curl -X POST "https://monitor-geo.fr/api/v1/projects/<project_id>/questions/by-city" \
  -H "Authorization: Bearer mg_live_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"template":"Quel plombier appeler en urgence à {ville} ?","city_codes":["69123","42218","43157"]}'
Réponse 201, listes raccourcies
{
  "data": {
    "created": [
      {
        "id": "3f0b7c52-6f7e-4d1a-9a55-1c2d8e4b7a10",
        "text": "Quel plombier appeler en urgence à Lyon ?"
      },
      {
        "id": "a8d4e1f3-2b6c-4e0d-8f71-5b9c3a2d6e84",
        "text": "Quel plombier appeler en urgence au Puy-en-Velay ?"
      }
    ],
    "skipped_duplicates": [],
    "new_daily_cost_cents": 26,
    "new_daily_cost_display": "0,26 €",
    "estimated_days_left": 80,
    "autonomy_display": "environ 80 jours",
    "template_id": "7c1e9d2a-4b8f-4f63-a0d5-e2b6c9f1a347"
  },
  "meta": {}
}
PATCH/questions/{id}

Changer le statut d'une question

Mettre en pause, reprendre ou archiver une question.

GratuitOutil MCP : set_question_status

Paramètres de chemin
NomTypeDescription
idobligatoireuuidIdentifiant de la question
Corps JSON
NomTypeDescription
statusobligatoire"active" | "paused" | "archived"
Exemple
curl -X PATCH "https://monitor-geo.fr/api/v1/questions/<question_id>" \
  -H "Authorization: Bearer mg_live_..." \
  -H "Content-Type: application/json" \
  -d '{"status":"paused"}'
Réponse 200, listes raccourcies
{
  "data": {
    "updated": 1
  },
  "meta": {}
}
POST/questions/status

Changer le statut de plusieurs questions

Mise en pause, reprise ou archivage en lot, 200 questions au maximum.

GratuitOutil MCP : set_question_status

Corps JSON
NomTypeDescription
question_idsobligatoireliste de uuid, 1 à 200Identifiants des questions
statusobligatoire"active" | "paused" | "archived"active, paused ou archived
Exemple
curl -X POST "https://monitor-geo.fr/api/v1/questions/status" \
  -H "Authorization: Bearer mg_live_..." \
  -H "Content-Type: application/json" \
  -d '{"question_ids":["<question_id>","<question_id>"],"status":"archived"}'
Réponse 200, listes raccourcies
{
  "data": {
    "updated": 1
  },
  "meta": {}
}
GET/questions/{id}/report

Rapport d'une question

Taux, série journalière, 10 domaines les plus cités et 5 dernières réponses.

GratuitOutil MCP : get_question_report

Paramètres de chemin
NomTypeDescription
idobligatoireuuidIdentifiant de la question
Paramètres de requête
NomTypeDescription
days"7" | "30" | "90"Période en jours : 7, 30 ou 90 (30 par défaut)
Exemple
curl "https://monitor-geo.fr/api/v1/questions/<question_id>/report?days=7" \
  -H "Authorization: Bearer mg_live_..."
Réponse 200, listes raccourcies
{
  "data": {
    "question": {
      "id": "58f1d962-c9f5-4163-85d2-54d75a41db1c",
      "project_id": "c81254b9-b419-431b-9bd2-1bbe7d1b1eb7",
      "text": "Agora Studio à Montbrison, c'est quoi comme agence ?",
      "status": "active"
    },
    "project": {
      "id": "c81254b9-b419-431b-9bd2-1bbe7d1b1eb7",
      "name": "Agora Studio",
      "domain": "agora-studio.fr"
    },
    "days": 7,
    "runs_done": 21,
    "runs_cited": 21,
    "runs_mentioned": 21,
    "citation_rate": 1,
    "mention_rate": 1,
    "best_position": 1,
    "series": [
      {
        "day": "2026-09-07",
        "runs_done": 3,
        "runs_cited": 3,
        "citation_rate": 1,
        "runs_mentioned": 3
      },
      {
        "day": "2026-09-08",
        "runs_done": 3,
        "runs_cited": 3,
        "citation_rate": 1,
        "runs_mentioned": 3
      }
    ],
    "top_domains": [
      {
        "domain": "agora-studio.fr",
        "runs_cited": 21,
        "share": 1,
        "avg_position": 1,
        "is_owner": true
      },
      {
        "domain": "fr.linkedin.com",
        "runs_cited": 21,
        "share": 1,
        "avg_position": 2,
        "is_owner": false
      }
    ],
    "recent_runs": [
      {
        "run_id": "6581a315-c27e-4601-9181-9a6154fba8d6",
        "day": "2026-09-13",
        "completed_at": "2026-09-13T17:04:17+00:00",
        "mode": "scheduled",
        "cited": true,
        "mentioned": true,
        "position": 1
      },
      {
        "run_id": "545c24c4-6949-4961-b621-489507932c59",
        "day": "2026-09-13",
        "completed_at": "2026-09-13T11:04:17+00:00",
        "mode": "scheduled",
        "cited": true,
        "mentioned": true,
        "position": 1
      }
    ]
  },
  "meta": {}
}

Réponses

GET/projects/{id}/brands

Paysage concurrentiel d'un projet

Marques nommées par ChatGPT dans les réponses du projet, classées par visibilité, avec leur rang moyen d'apparition et l'évolution sur la période précédente. La marque suivie figure toujours dans la liste.

GratuitOutil MCP : get_brand_landscape

Paramètres de chemin
NomTypeDescription
idobligatoireuuidIdentifiant du projet
Paramètres de requête
NomTypeDescription
daysentier (-9007199254740991 à 9007199254740991)Période : 7, 30 ou 90 jours (30 par défaut)
limitentier (1 à 100)Nombre de marques, de 1 à 100 (50 par défaut)
Exemple
curl "https://monitor-geo.fr/api/v1/projects/<project_id>/brands?days=30&limit=20" \
  -H "Authorization: Bearer mg_live_..."
GET/projects/{id}/sources

Sources les plus citées d'un projet

Domaines cités par ChatGPT sur le projet, comme sources ou dans le bloc d'entreprises locales, avec la part des réponses, le nombre de citations et de pages, et la position moyenne.

GratuitOutil MCP : get_top_sources

Paramètres de chemin
NomTypeDescription
idobligatoireuuidIdentifiant du projet
Paramètres de requête
NomTypeDescription
daysentier (-9007199254740991 à 9007199254740991)Période : 7, 30 ou 90 jours (30 par défaut)
kind"source" | "local_business"source pour les sources de la réponse, local_business pour les fiches d'entreprises locales ; les deux par défaut
limitentier (1 à 100)Nombre de domaines, de 1 à 100 (50 par défaut)
Exemple
curl "https://monitor-geo.fr/api/v1/projects/<project_id>/sources?days=30&kind=source" \
  -H "Authorization: Bearer mg_live_..."
GET/projects/{id}/sources/pages

Pages citées d'un domaine

Pages d'un domaine citées sur le projet, avec le nombre de réponses, la position moyenne et le dernier jour de citation.

GratuitOutil MCP : get_source_pages

Paramètres de chemin
NomTypeDescription
idobligatoireuuidIdentifiant du projet
Paramètres de requête
NomTypeDescription
domaintexte (3 à 253 car.)Domaine cité, tel que renvoyé par les sources les plus citées
daysentier (-9007199254740991 à 9007199254740991)Période : 7, 30 ou 90 jours (30 par défaut)
limitentier (1 à 100)Nombre de pages, de 1 à 100 (50 par défaut)
Exemple
curl "https://monitor-geo.fr/api/v1/projects/<project_id>/sources/pages?domain=exemple.fr&days=30" \
  -H "Authorization: Bearer mg_live_..."
GET/projects/{id}/answers

Chercher dans les réponses d'un projet

Réponses de ChatGPT du projet, des plus récentes aux plus anciennes. Recherche plein texte en français, filtres par résultat, question, ville et dates, pagination par curseur. Les termes trouvés sont entre ⟦ et ⟧ dans l'extrait.

GratuitOutil MCP : search_answersPaginé

Paramètres de chemin
NomTypeDescription
idobligatoireuuidIdentifiant du projet
Paramètres de requête
NomTypeDescription
qtexte (0 à 200 car.)Mots à chercher dans le texte des réponses, en français ; guillemets pour une expression exacte
state"cited" | "mentioned" | "not_cited"cited : site cité ; mentioned : marque nommée sans lien ; not_cited : ni cité ni nommé
question_iduuidNe garder que les réponses à cette question
city_codetexte (0 à 20 car.)Ne garder que les questions de cette ville
fromtextePremier jour inclus, AAAA-MM-JJ
totexteDernier jour inclus, AAAA-MM-JJ
limitentier (1 à 50)Nombre de réponses, de 1 à 50 (20 par défaut)
cursortexte (0 à 500 car.)Curseur renvoyé par la page précédente
Exemple
curl "https://monitor-geo.fr/api/v1/projects/<project_id>/answers?q=site%20vitrine&state=not_cited" \
  -H "Authorization: Bearer mg_live_..."
GET/projects/{id}/city-report

Citations par ville

Taux de citation, réponses et positions ville par ville pour les questions déclinées par ville, avec le palier de couleur de la carte. Filtrable par groupe de questions (template_id).

GratuitOutil MCP : get_city_report

Paramètres de chemin
NomTypeDescription
idobligatoireuuidIdentifiant du projet
Paramètres de requête
NomTypeDescription
template_iduuidGroupe de questions déclinées par ville ; toutes les questions par ville du projet par défaut
daysentier (-9007199254740991 à 9007199254740991)Période : 7, 30 ou 90 jours (30 par défaut)
Exemple
curl "https://monitor-geo.fr/api/v1/projects/<project_id>/city-report?days=30" \
  -H "Authorization: Bearer mg_live_..."
GET/projects/{id}/citations

Exporter les citations d'un projet

Chaque source citée par ChatGPT sur les questions du projet, avec sa position. Filtrable par période et par domaine.

GratuitPaginéCSV possible

Paramètres de chemin
NomTypeDescription
idobligatoireuuidIdentifiant du projet
Paramètres de requête
NomTypeDescription
fromtextePremier jour inclus, AAAA-MM-JJ
totexteDernier jour inclus, AAAA-MM-JJ
domaintexteNe garder qu'un domaine, par exemple exemple.fr
format"json" | "csv"csv pour un export ouvrable dans Excel (séparateur ;, UTF-8 avec BOM)
limitentier (1 à 100)Nombre d'éléments, de 1 à 100 (50 par défaut)
cursortexteCurseur renvoyé dans meta.next_cursor de la page précédente
Exemple
curl "https://monitor-geo.fr/api/v1/projects/<project_id>/citations?from=2026-09-01&format=csv" \
  -H "Authorization: Bearer mg_live_..."
Réponse 200, listes raccourcies
{
  "data": [
    {
      "id": 38197,
      "run_id": "cd151666-615f-44bf-ada0-fc0c2f6ceceb",
      "question_id": "6f9b5d3f-1dcc-4800-9d90-ff5a95e4bab1",
      "question_text": "Top des agences web à Saint-Étienne en 2026 ?",
      "day": "2026-09-13",
      "position": 22,
      "url": "https://evodesign.fr/",
      "domain": "evodesign.fr",
      "title": "IconicWeb",
      "kind": "local_business",
      "is_owner": false,
      "origin": "search",
      "rating": 5,
      "votes_count": 21
    },
    {
      "id": 38196,
      "run_id": "cd151666-615f-44bf-ada0-fc0c2f6ceceb",
      "question_id": "6f9b5d3f-1dcc-4800-9d90-ff5a95e4bab1",
      "question_text": "Top des agences web à Saint-Étienne en 2026 ?",
      "day": "2026-09-13",
      "position": 21,
      "url": "https://kosmoss.fr/",
      "domain": "kosmoss.fr",
      "title": "Agence Kosmoss",
      "kind": "local_business",
      "is_owner": false,
      "origin": "search",
      "rating": 5,
      "votes_count": 21
    }
  ],
  "meta": {
    "next_cursor": "eyJpZCI6MzgxOTZ9"
  }
}
GET/questions/{id}/runs

Lister les réponses d'une question

Chaque passage de ChatGPT sur la question, du plus récent au plus ancien, avec le résultat pour votre site.

GratuitPaginéCSV possible

Paramètres de chemin
NomTypeDescription
idobligatoireuuidIdentifiant de la question
Paramètres de requête
NomTypeDescription
fromtextePremier jour inclus, AAAA-MM-JJ
totexteDernier jour inclus, AAAA-MM-JJ
format"json" | "csv"csv pour un export ouvrable dans Excel (séparateur ;, UTF-8 avec BOM)
limitentier (1 à 100)Nombre d'éléments, de 1 à 100 (50 par défaut)
cursortexteCurseur renvoyé dans meta.next_cursor de la page précédente
Exemple
curl "https://monitor-geo.fr/api/v1/questions/<question_id>/runs?limit=50" \
  -H "Authorization: Bearer mg_live_..."
Réponse 200, listes raccourcies
{
  "data": [
    {
      "run_id": "6581a315-c27e-4601-9181-9a6154fba8d6",
      "question_id": "58f1d962-c9f5-4163-85d2-54d75a41db1c",
      "day": "2026-09-13",
      "slot": 3,
      "mode": "scheduled",
      "status": "done",
      "created_at": "2026-09-13T17:05:00+00:00",
      "completed_at": "2026-09-13T17:04:17+00:00",
      "model_name": null,
      "owner_cited": true,
      "owner_mentioned": true,
      "owner_best_position": 1,
      "sources_count": 1,
      "has_local_block": true,
      "error": null
    },
    {
      "run_id": "545c24c4-6949-4961-b621-489507932c59",
      "question_id": "58f1d962-c9f5-4163-85d2-54d75a41db1c",
      "day": "2026-09-13",
      "slot": 2,
      "mode": "scheduled",
      "status": "done",
      "created_at": "2026-09-13T11:05:00+00:00",
      "completed_at": "2026-09-13T11:04:17+00:00",
      "model_name": null,
      "owner_cited": true,
      "owner_mentioned": true,
      "owner_best_position": 1,
      "sources_count": 1,
      "has_local_block": true,
      "error": null
    }
  ],
  "meta": {
    "next_cursor": "eyJjcmVhdGVkX2F0IjoiMjAyNi0wOS0xM1QxMTowNTowMCswMDowMCIsImlkIjoiNTQ1YzI0YzQtNjk0OS00OTYxLWI2MjEtNDg5NTA3OTMyYzU5In0"
  }
}
GET/runs/{id}

Lire une réponse complète

Texte de la réponse de ChatGPT en markdown, sources dans l'ordre, bloc d'entreprises locales et résultat pour votre site.

GratuitOutil MCP : get_answer

Paramètres de chemin
NomTypeDescription
idobligatoireuuidIdentifiant du run
Exemple
curl "https://monitor-geo.fr/api/v1/runs/<run_id>" \
  -H "Authorization: Bearer mg_live_..."
Réponse 200, listes raccourcies
{
  "data": {
    "run_id": "6581a315-c27e-4601-9181-9a6154fba8d6",
    "question_id": "58f1d962-c9f5-4163-85d2-54d75a41db1c",
    "question_text": "Agora Studio à Montbrison, c'est quoi comme agence ?",
    "project_id": "c81254b9-b419-431b-9bd2-1bbe7d1b1eb7",
    "project_domain": "agora-studio.fr",
    "mode": "scheduled",
    "status": "done",
    "day": "2026-09-13",
    "datetime": "2026-09-13T17:04:17+00:00",
    "model_name": null,
    "check_url": "https://chatgpt.com/?prompt=Agora%20Studio%20%C3%A0%20Montbrison%2C%20c%27est%20quoi%20comme%20agence%20%3F&hints=search",
    "markdown": "- **Agora Studio** - 12 Rue de la République, 42600 Montbrison, France\n\nOui. [Agora Studio](https://www.agora-studio.fr/?utm_source=gmb) à Montbrison est ess…",
    "owner_cited": true,
    "owner_mentioned": true,
    "owner_best_position": 1,
    "sources": [
      {
        "position": 1,
        "url": "https://www.agora-studio.fr/",
        "domain": "agora-studio.fr",
        "title": "Agora Studio",
        "kind": "local_business",
        "is_owner": true,
        "origin": "gmb",
        "rating": 5,
        "votes_count": 41
      },
      {
        "position": 2,
        "url": "https://fr.linkedin.com/company/agorastudioweb",
        "domain": "fr.linkedin.com",
        "title": "Agora Studio - Agence Web | LinkedIn",
        "kind": "source",
        "is_owner": false,
        "origin": "search",
        "rating": null,
        "votes_count": null
      }
    ],
    "local_businesses": [
      {
        "title": "Agora Studio",
        "description": "Concepteur de sites Web",
        "address": "12 Rue de la République, 42600 Montbrison, France",
        "phone": "+33756927450",
        "url": "https://www.agora-studio.fr/?utm_source=gmb",
        "domain": "agora-studio.fr",
        "rating": 5,
        "votes_count": 41,
        "is_owner": true
      }
    ]
  },
  "meta": {}
}
POST/checks

Vérifier une question maintenant

Pose la question à ChatGPT immédiatement et renvoie la réponse, en moins de deux minutes. Envoyez question_id, ou project_id et question. Une question libre est rattachée au projet sans être suivie chaque jour. Accepte l'en-tête Idempotency-Key.

Coût : 0,10 € par vérification réussieOutil MCP : check_now

Corps JSON, forme 1
NomTypeDescription
question_idobligatoireuuidQuestion existante à vérifier
Corps JSON, forme 2
NomTypeDescription
project_idobligatoireuuidProjet de rattachement
questionobligatoiretexteQuestion libre, rattachée au projet sans suivi quotidien
Exemple
curl -X POST "https://monitor-geo.fr/api/v1/checks" \
  -H "Authorization: Bearer mg_live_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"question_id":"<question_id>"}'
Réponse 200, listes raccourcies
{
  "data": {
    "run_id": "6581a315-c27e-4601-9181-9a6154fba8d6",
    "question_id": "58f1d962-c9f5-4163-85d2-54d75a41db1c",
    "question_text": "Agora Studio à Montbrison, c'est quoi comme agence ?",
    "project_id": "c81254b9-b419-431b-9bd2-1bbe7d1b1eb7",
    "project_domain": "agora-studio.fr",
    "mode": "live",
    "status": "done",
    "day": "2026-09-13",
    "datetime": "2026-09-13T17:04:17+00:00",
    "model_name": null,
    "check_url": "https://chatgpt.com/?prompt=Agora%20Studio%20%C3%A0%20Montbrison%2C%20c%27est%20quoi%20comme%20agence%20%3F&hints=search",
    "markdown": "- **Agora Studio** - 12 Rue de la République, 42600 Montbrison, France\n\nOui. [Agora Studio](https://www.agora-studio.fr/?utm_source=gmb) à Montbrison est ess…",
    "owner_cited": true,
    "owner_mentioned": true,
    "owner_best_position": 1,
    "sources": [
      {
        "position": 1,
        "url": "https://www.agora-studio.fr/",
        "domain": "agora-studio.fr",
        "title": "Agora Studio",
        "kind": "local_business",
        "is_owner": true,
        "origin": "gmb",
        "rating": 5,
        "votes_count": 41
      },
      {
        "position": 2,
        "url": "https://fr.linkedin.com/company/agorastudioweb",
        "domain": "fr.linkedin.com",
        "title": "Agora Studio - Agence Web | LinkedIn",
        "kind": "source",
        "is_owner": false,
        "origin": "search",
        "rating": null,
        "votes_count": null
      }
    ],
    "local_businesses": [
      {
        "title": "Agora Studio",
        "description": "Concepteur de sites Web",
        "address": "12 Rue de la République, 42600 Montbrison, France",
        "phone": "+33756927450",
        "url": "https://www.agora-studio.fr/?utm_source=gmb",
        "domain": "agora-studio.fr",
        "rating": 5,
        "votes_count": 41,
        "is_owner": true
      }
    ],
    "cost_cents": 10,
    "cost_display": "0,10 €"
  },
  "meta": {}
}