Développeurs

API et serveur MCP

Branchez les données de Discer à vos outils et à vos agents IA : avis ouverts, intelligence d'un avis, Pipeline, renouvellements, fiches d'entreprises et de donneurs d'ouvrage, bilan de marché.

URL de base de l'API
https://api.discer.ca/api/v1
Serveur MCP
https://api.discer.ca/mcp
Version
1.2.0
Accès
Forfait Équipe
Sommaire

1.Aperçu

API REST

Les données de votre compte en JSON, sur HTTPS, en lecture seule.

Serveur MCP

Les mêmes données pour vos agents IA (Claude, Cursor, VS Code, Codex…), par le protocole MCP. Outils en lecture seule.

Accès

Forfait Équipe. Les autres forfaits reçoivent une réponse 402 plan_required. L'API et le MCP partagent les mêmes clés et les mêmes plafonds.

2.Démarrer

  1. Créez une clé

    Le titulaire du compte crée la clé dans Réglages › API et MCP. La clé complète ne s'affiche qu'une fois : gardez-la dans un gestionnaire de secrets. Au plus 3 clés actives par compte.

  2. Authentifiez chaque requête

    Envoyez la clé dans l'en-tête Authorization: Bearer dsk_live_…. Sans clé valide, l'API répond 401.

  3. Appelez l'API

    Toutes les routes sont sous https://api.discer.ca/api/v1. Par exemple, chercher les avis ouverts qui contiennent « pavage » :

curl
export DISCER_API_KEY="dsk_live_VOTRE_CLE"

curl "https://api.discer.ca/api/v1/tenders?q=pavage&region=5&limit=20" \
  -H "Authorization: Bearer $DISCER_API_KEY"
Exemple de réponse (données inventées)
{
  "data": [
    {
      "id": "1234567",
      "source": "seao",
      "title": "Réfection de pavage, rue des Exemples",
      "buyer": "Ville de Exempleville",
      "buyer_city": "Exempleville",
      "region_code": 5,
      "region": "Estrie",
      "province": "QC",
      "published_at": "2026-10-01T09:00:00-04:00",
      "closes_at": "2026-10-22T14:00:00-04:00",
      "days_left": 19,
      "estimated_value": 850000,
      "unspsc": "72141100",
      "language": "fr",
      "relevance": null
    }
  ],
  "pagination": {
    "next_cursor": "eyJvIjoyMCwiZiI6ImFiYzEyMyJ9",
    "has_more": true,
    "total": 37
  }
}

Portée d'une clé : lecture. L'API et le serveur MCP sont en lecture seule.

3.Conventions

  • Réponses en JSON : {"data": …} ; les listes ajoutent pagination.
  • Horodatages : ISO 8601 avec décalage horaire, par exemple 2026-10-22T14:00:00-04:00.
  • Filtres de dates (published_after, closing_before…) : jours civils à l'heure du Québec (America/Toronto) ; _after est inclus, _before est exclu.
  • Montants : dollars canadiens, tels que publiés. Les champs qui finissent par _2026_dollars sont indexés en dollars de 2026.
  • Statistiques : chiffres {value, n, period: {from, to}, source}, où n est la taille de l'échantillon. Citez-les avec n et la période.
  • Notes explicatives (note, definition), libellés et certaines valeurs énumérées sont en français.
  • Aucune coordonnée de personne n'est renvoyée : seuls les organismes publics et les entreprises soumissionnaires, telles que publiées au SEAO, sont nommés.

4.Pagination

Les listes paginées renvoient pagination.next_cursor, pagination.has_more et pagination.total. Renvoyez le curseur dans le paramètre cursor, avec les mêmes filtres : un curseur émis pour d'autres filtres est refusé (422 invalid_cursor).

limit va de 1 à 100 (50 par défaut). Une requête filtrée s'arrête à 1 000 résultats (422 pagination_limit) : affinez les filtres pour aller plus loin. La recherche d'avis et les renouvellements exigent au moins un filtre.

Python
url = "https://api.discer.ca/api/v1/tenders"
headers = {"Authorization": f"Bearer {os.environ['DISCER_API_KEY']}"}
params = {"q": "pavage", "region": 5, "limit": 100}
tenders = []
while True:
    body = requests.get(url, params=params, headers=headers, timeout=30).json()
    tenders.extend(body["data"])
    if not body["pagination"]["has_more"]:
        break
    params["cursor"] = body["pagination"]["next_cursor"]

5.Routes

Les 19 opérations de la version 1.2.0, tirées de la définition OpenAPI de l'API. Chaque route exige une clé ; les statuts possibles sont indiqués sous chaque route.

Compte

GET/me

Votre compte, votre forfait et votre clé

Le compte de la clé, son forfait et les portées de la clé. Sert à tester une clé.

Succès : 200 · Erreurs possibles : 401, 402, 403, 422, 429

Avis

GET/tendersPaginée

Chercher des avis ouverts

Avis ouverts aujourd'hui. Au moins un filtre est obligatoire. Les dates _after sont incluses, les dates _before exclues. Chaque ligne renvoyée compte dans les lignes de listes du compte.

Paramètres

  • qstringrequêtefacultatif

    Mots du titre ou du nom du donneur d'ouvrage, par exemple pavage.

    200 caractères au plus

  • sourcestringrequêtefacultatif

    Source de l'avis.

    Valeurs : seao, canadabuys, toronto

  • provincestring[]requêtefacultatifrépétable

    Code ISO de province (QC, ON…), répétable. Les avis pancanadiens sont inclus.

  • regioninteger[]requêtefacultatifrépétable

    Code de région administrative du Québec (1 à 17), répétable.

  • unspscstringrequêtefacultatif

    Début de code UNSPSC, de 2 à 8 chiffres, par exemple 7214.

    Motif : ^\d{2,8}$

  • buyerstringrequêtefacultatif

    Partie du nom du donneur d'ouvrage, par exemple Ville de Lévis.

    200 caractères au plus

  • published_afterdaterequêtefacultatif

    Date AAAA-MM-JJ, heure du Québec (America/Toronto). Incluse.

  • published_beforedaterequêtefacultatif

    Date AAAA-MM-JJ, heure du Québec (America/Toronto). Exclue.

  • closing_afterdaterequêtefacultatif

    Date AAAA-MM-JJ, heure du Québec (America/Toronto). Incluse.

  • closing_beforedaterequêtefacultatif

    Date AAAA-MM-JJ, heure du Québec (America/Toronto). Exclue.

  • profilestringrequêtefacultatif

    Id d'un profil de veille (principal ou un id de /watch-profiles) : ajoute relevance et classe par score ; sort est alors ignoré.

    40 caractères au plus

  • sortstringrequêtefacultatif

    closing_asc : fermeture la plus proche d'abord ; published_desc : plus récents d'abord.

    Défaut : closing_ascValeurs : closing_asc, published_desc

  • limitintegerrequêtefacultatif

    Taille de la page, de 1 à 100.

    Défaut : 50De 1 à 100

  • cursorstringrequêtefacultatif

    pagination.next_cursor de la page précédente. Envoyez les mêmes filtres avec lui.

    200 caractères au plus

Succès : 200 · Erreurs possibles : 401, 402, 403, 404, 409, 422, 429

GET/tenders/{tender_id}

Fiche d'un avis et son intelligence

Faits de l'avis et, pour les avis SEAO, son intelligence : l'essentiel, probabilité de gain (si le segment est calibré), fourchette des prix gagnants (même sous-catégorie quand elle existe), soumissionnaires attendus et leurs chances de soumissionner, compétitivité et position de prix (avis ouverts), historique du donneur d'ouvrage pour ce type d'avis, avenants. Compte comme une fiche d'avis distincte dans les plafonds du jour et du mois.

Paramètres

  • tender_idstringcheminobligatoire

    id de l'avis venant de /tenders : numéro SEAO, ou CB-…, TOR-… pour les autres sources.

    40 caractères au plus

  • intelligencebooleanrequêtefacultatif

    Inclure le bloc d'intelligence (avis SEAO).

    Défaut : true

Succès : 200 · Erreurs possibles : 401, 402, 403, 404, 422, 429

Vos données

GET/bidsPaginée

Votre Pipeline (avis par étape)

Cartes du Pipeline du compte, sans les cartes écartées : étape, prix soumis, pertinence, avis suivis et leurs nouveautés (addendas, changements de fermeture, résultat publié). Ne compte pas dans les lignes de listes.

Paramètres

  • statusstringrequêtefacultatif

    Étape du Pipeline.

    Valeurs : to_evaluate, preparing, submitted, won, lost

  • limitintegerrequêtefacultatif

    Taille de la page, de 1 à 100.

    Défaut : 50De 1 à 100

  • cursorstringrequêtefacultatif

    pagination.next_cursor de la page précédente. Envoyez les mêmes filtres avec lui.

    200 caractères au plus

Succès : 200 · Erreurs possibles : 401, 402, 403, 422, 429

GET/watch-profiles

Profils de veille (leur id sert dans /tenders?profile=)

Profils de veille du compte : types d'avis UNSPSC, mots-clés, régions, valeurs.

Succès : 200 · Erreurs possibles : 401, 402, 403, 422, 429

Marché

GET/renewalsPaginée

Renouvellements à venir (contrats qui se terminent, avec leurs titulaires)

Contrats issus d'appels d'offres (pas de gré à gré) dont la fin prévue tombe dans l'horizon, avec leurs titulaires ; les contrats de votre entreprise d'abord (is_you). Un nouvel appel d'offres n'est pas confirmé. Au moins un des filtres family, region, buyer_id ou for_me est obligatoire. Chaque ligne renvoyée compte dans les lignes de listes du compte.

Paramètres

  • familystringrequêtefacultatif

    Début de code UNSPSC, 2 ou 4 chiffres, par exemple 7214.

    Motif : ^\d{2,4}$

  • regionintegerrequêtefacultatif

    Code de région administrative du Québec (1 à 17).

    De 1 à 17

  • buyer_idintegerrequêtefacultatif

    Id du donneur d'ouvrage venant de /buyers.

    Au moins 1

  • horizon_monthsintegerrequêtefacultatif

    Contrats dont la fin prévue tombe dans les N prochains mois.

    Défaut : 12De 1 à 24

  • for_mebooleanrequêtefacultatif

    Seulement votre créneau (types d'avis, mots-clés et régions du profil de veille), comme la page Renouvellements.

    Défaut : false

  • all_regionsbooleanrequêtefacultatif

    Avec for_me et un profil « tout le Québec » qui a des régions prioritaires : tout le Québec plutôt que ces régions.

    Défaut : false

  • limitintegerrequêtefacultatif

    Taille de la page, de 1 à 100.

    Défaut : 50De 1 à 100

  • cursorstringrequêtefacultatif

    pagination.next_cursor de la page précédente. Envoyez les mêmes filtres avec lui.

    200 caractères au plus

Succès : 200 · Erreurs possibles : 401, 402, 403, 409, 422, 429, 503

GET/companies

Chercher une entreprise par nom ou NEQ

Entreprises qui ont soumissionné au SEAO, trouvées par nom (sans égard aux accents, à la casse ni aux suffixes juridiques) ou par NEQ, 10 au plus. Chaque résultat compte dans les lignes de listes du compte.

Paramètres

  • qstringrequêteobligatoire

    Partie du nom de l'entreprise, ou début de son NEQ (3 à 10 chiffres).

    De 2 à 80 caractères

Succès : 200 · Erreurs possibles : 401, 402, 403, 422, 429

GET/companies/{neq}

Fiche d'une entreprise (historique SEAO)

Soumissions, contrats obtenus, taux de succès, principaux donneurs d'ouvrage, types d'avis, régions, principaux concurrents avec duels, dernières soumissions et leurs prix, force sur son marché, avenants de ses contrats. Compte comme une fiche d'entreprise distincte.

Paramètres

  • neqstringcheminobligatoire

    Numéro d'entreprise du Québec, 10 chiffres.

Succès : 200 · Erreurs possibles : 401, 402, 403, 404, 422, 429

GET/buyers

Chercher un donneur d'ouvrage par nom

Donneurs d'ouvrage publics (villes, ministères, centres de services scolaires…), les plus actifs d'abord, 10 au plus. Chaque résultat compte dans les lignes de listes du compte.

Paramètres

  • qstringrequêteobligatoire

    Partie du nom du donneur d'ouvrage, par exemple Ville de Québec.

    De 2 à 120 caractères

Succès : 200 · Erreurs possibles : 401, 402, 403, 422, 429

GET/buyers/{buyer_id}

Fiche d'un donneur d'ouvrage (achats, gagnants, prix, gré à gré, avenants)

Achats par type d'avis UNSPSC sur 5 ans, principaux gagnants, fourchettes de prix, présence sur le marché, contrats de gré à gré et avenants. Compte comme une fiche de donneur d'ouvrage distincte.

Paramètres

  • buyer_idintegercheminobligatoire

    Id du donneur d'ouvrage venant de /buyers.

Succès : 200 · Erreurs possibles : 401, 402, 403, 404, 422, 429

GET/market

Votre bilan de marché (historique SEAO de votre entreprise, concurrents, avis ratés)

Bilan de marché de l'entreprise du compte : créneau, chiffres, concurrents, avis ratés. report est nul si le compte n'a pas de NEQ ; un NEQ non vérifié donne le bilan public.

Succès : 200 · Erreurs possibles : 401, 402, 403, 422, 429

GET/market/competitors

Entreprises qui gagnent le plus dans votre créneau

Entreprises qui ont obtenu le plus de contrats dans votre créneau en 36 mois (vos soumissions, sinon votre profil de veille) : contrats obtenus, soumissions, taux de victoire, dernière soumission, et le taux médian des entreprises actives. Utile aussi à une entreprise qui soumissionne peu ou jamais ; la vôtre n'y figure pas.

Succès : 200 · Erreurs possibles : 401, 402, 403, 422, 429

GET/market/portrait

Chiffres du marché de votre créneau

Pour les 3 premiers types d'avis UNSPSC de votre créneau (vos soumissions, sinon votre profil de veille) : avis publiés, avis ouverts, soumissionnaires par avis, montants octroyés, principaux donneurs d'ouvrage, avis par mois. Votre région si le profil n'en a qu'une, sinon tout le Québec.

Succès : 200 · Erreurs possibles : 401, 402, 403, 422, 429

Avis conclus

GET/concluded-tendersPaginée

Chercher des avis conclus (gagnants, montants, soumissionnaires)

Avis du SEAO conclus depuis 2015, comme la page Historique : gagnant, montant gagnant, nombre de soumissionnaires, écart entre les deux plus bas prix soumissionnés, votre propre résultat. Au moins un filtre est obligatoire. Les dates _after sont incluses, les dates _before exclues (date de conclusion, sinon de publication). Chaque ligne renvoyée compte dans les lignes de listes du compte.

Paramètres

  • qstringrequêtefacultatif

    Mots du titre, par exemple pavage.

    200 caractères au plus

  • unspscstringrequêtefacultatif

    Type d'avis UNSPSC (4 chiffres) ou segment (2 chiffres), par exemple 7214.

    Motif : ^\d{2}(\d{2})?$

  • buyer_idintegerrequêtefacultatif

    Id du donneur d'ouvrage venant de /buyers.

    Au moins 1

  • regionintegerrequêtefacultatif

    Code de région administrative du Québec (1 à 17).

    De 1 à 17

  • concluded_afterdaterequêtefacultatif

    Date AAAA-MM-JJ, heure du Québec (America/Toronto). Incluse.

  • concluded_beforedaterequêtefacultatif

    Date AAAA-MM-JJ, heure du Québec (America/Toronto). Exclue.

  • min_amountnumberrequêtefacultatif

    Montant gagnant minimal, en dollars canadiens.

    Au moins 0

  • max_amountnumberrequêtefacultatif

    Montant gagnant maximal, en dollars canadiens.

    Au moins 0

  • companystringrequêtefacultatif

    NEQ d'une entreprise qui a soumissionné (ou gagné, avec role=won).

    Motif : ^\d{10}$

  • rolestringrequêtefacultatif

    Avec company : les avis où elle a soumissionné, ou ceux qu'elle a gagnés.

    Défaut : bidValeurs : bid, won

  • minebooleanrequêtefacultatif

    Seulement les avis où votre entreprise a soumissionné (NEQ vérifié).

    Défaut : false

  • min_biddersintegerrequêtefacultatif

    Nombre minimal de soumissionnaires.

    De 1 à 500

  • max_biddersintegerrequêtefacultatif

    Nombre maximal de soumissionnaires.

    De 1 à 500

  • pricesstringrequêtefacultatif

    with : tous les prix publiés ; without : prix non publiés.

    Valeurs : with, without

  • sortstringrequêtefacultatif

    recent : plus récents d'abord ; amount : montant le plus élevé d'abord ; gap : plus grand écart entre les deux plus bas prix soumissionnés d'abord.

    Défaut : recentValeurs : recent, amount, gap

  • limitintegerrequêtefacultatif

    Taille de la page, de 1 à 50.

    Défaut : 25De 1 à 50

  • cursorstringrequêtefacultatif

    pagination.next_cursor de la page précédente. Envoyez les mêmes filtres avec lui.

    200 caractères au plus

Succès : 200 · Erreurs possibles : 401, 402, 403, 422, 429, 503

GET/concluded-tenders/{tender_id}

Un avis conclu : chaque soumission et son prix

Chaque soumissionnaire avec son prix, son rang et son écart au gagnant, deuxième plus bas prix, dispersion des prix, avenants du contrat, avis conclus semblables. Compte comme une fiche d'avis distincte.

Paramètres

  • tender_idstringcheminobligatoire

    Numéro SEAO venant de /concluded-tenders.

    Motif : ^\d{1,12}$

Succès : 200 · Erreurs possibles : 401, 402, 403, 404, 422, 429, 503

Sous-traitance

GET/subcontracting/openPaginée

Avis ouverts où l'un de vos métiers peut être requis

Avis ouverts où l'un des métiers de vos réglages de sous-traitance peut être requis (licence RBQ en construction, analyse des documents ailleurs), comme la page Sous-traitance. Vide si le compte n'a aucun métier. Chaque ligne renvoyée compte dans les lignes de listes du compte.

Paramètres

  • tradestringrequêtefacultatif

    Un de vos métiers (code de trade_codes : sous-catégorie RBQ comme 4.1, code de service ou libre:…).

    90 caractères au plus

  • regionintegerrequêtefacultatif

    Code de région administrative du Québec (1 à 17).

    De 1 à 17

  • min_amountnumberrequêtefacultatif

    Valeur estimée minimale, en dollars canadiens.

    Au moins 0

  • max_amountnumberrequêtefacultatif

    Valeur estimée maximale, en dollars canadiens.

    Au moins 0

  • since_daysintegerrequêtefacultatif

    Publiés depuis N jours.

    De 1 à 365

  • limitintegerrequêtefacultatif

    Taille de la page, de 1 à 50.

    Défaut : 25De 1 à 50

  • cursorstringrequêtefacultatif

    pagination.next_cursor de la page précédente. Envoyez les mêmes filtres avec lui.

    200 caractères au plus

Succès : 200 · Erreurs possibles : 401, 402, 403, 422, 429, 503

GET/subcontracting/awardedPaginée

Avis adjugés dans vos métiers : gagnants à contacter

Avis adjugés dans vos métiers, votre région et votre plage de montants : l'entreprise gagnante à contacter pour de la sous-traitance (nom, NEQ, ville), montant, métiers. Le contact publié par le SEAO se lit dans Discer seulement. Chaque ligne renvoyée compte dans les lignes de listes du compte.

Paramètres

  • tradestringrequêtefacultatif

    Un de vos métiers (code de trade_codes : sous-catégorie RBQ comme 4.1, code de service ou libre:…).

    90 caractères au plus

  • regionintegerrequêtefacultatif

    Code de région administrative du Québec (1 à 17).

    De 1 à 17

  • min_amountnumberrequêtefacultatif

    Montant gagnant minimal, en dollars canadiens.

    Au moins 0

  • max_amountnumberrequêtefacultatif

    Montant gagnant maximal, en dollars canadiens.

    Au moins 0

  • since_daysintegerrequêtefacultatif

    Conclus depuis 30, 90 ou 365 jours.

    Défaut : 90De 30 à 365

  • winnerstringrequêtefacultatif

    Seulement les avis gagnés par ce NEQ (tous métiers).

    Motif : ^\d{10}$

  • buyer_idintegerrequêtefacultatif

    Seulement les avis de ce donneur d'ouvrage (tous métiers).

    Au moins 1

  • limitintegerrequêtefacultatif

    Taille de la page, de 1 à 50.

    Défaut : 25De 1 à 50

  • cursorstringrequêtefacultatif

    pagination.next_cursor de la page précédente. Envoyez les mêmes filtres avec lui.

    200 caractères au plus

Succès : 200 · Erreurs possibles : 401, 402, 403, 422, 429

Avis privés

GET/private-tenders

Avis privés envoyés à votre organisation

Avis privés publiés sur Discer par des donneurs d'ouvrage publics et privés. Lecture seule : l'intérêt, les questions et les soumissions se donnent dans Discer. Chaque ligne renvoyée compte dans les lignes de listes du compte.

Paramètres

  • viewstringrequêtefacultatif

    for_you : les avis privés où votre organisation est invitée ou ciblée ; all : tous les avis privés ouverts.

    Défaut : for_youValeurs : for_you, all

Succès : 200 · Erreurs possibles : 401, 402, 403, 404, 422, 429

GET/private-tenders/{private_tender_id}

Un avis privé

L'avis privé tel que votre organisation le voit. Le lire ici n'enregistre ni intérêt ni lecture (l'ouvrir dans Discer le fait). Compte comme une fiche d'avis distincte.

Paramètres

  • private_tender_idstringcheminobligatoire

    id venant de /private-tenders.

    40 caractères au plus

Succès : 200 · Erreurs possibles : 401, 402, 403, 404, 422, 429

6.Erreurs

Toute erreur renvoie un objet error avec code, message et, au besoin, details. Le code est stable ; le message, en anglais, peut changer.

Exemple d'erreur
{
  "error": {
    "code": "invalid_parameter",
    "message": "Invalid parameters.",
    "details": {
      "errors": [
        {
          "parameter": "limit",
          "message": "Input should be less than or equal to 100"
        }
      ]
    }
  }
}
  • 401missing_api_keyAucun en-tête Authorization: Bearer.
  • 401invalid_api_keyClé inconnue ou mal formée.
  • 401revoked_api_keyLa clé a été révoquée dans les Réglages.
  • 402plan_requiredLe compte n'est pas au forfait Équipe, ou son abonnement est inactif.
  • 402subscription_pausedL'abonnement est en pause : l'accès reprend avec lui.
  • 402first_payment_requiredPériode d'essai : l'API et le MCP s'ouvrent au premier paiement.
  • 403api_key_suspendedLa clé est suspendue en attente d'une revue, après un usage inhabituel.
  • 403account_under_reviewL'API, le MCP, l'assistant et les exports sont en pause en attente d'une revue.
  • 403account_disabledLe compte est désactivé.
  • 404not_foundAvis, entreprise, donneur d'ouvrage, profil de veille ou chemin inconnu.
  • 405method_not_allowedMéthode HTTP non prise en charge sur ce chemin.
  • 409profile_inactiveCe profil de veille est inactif au forfait actuel.
  • 409profile_incompletefor_me exige un profil de veille avec des catégories ou des mots-clés.
  • 422invalid_parameterUn paramètre manque ou est invalide (details.errors les énumère).
  • 422invalid_cursorLe curseur est mal formé ou a été émis pour d'autres filtres.
  • 422filter_required/tenders et /renewals exigent au moins un filtre.
  • 422pagination_limitLa pagination s'arrête au plafond de résultats d'une requête filtrée : affinez les filtres.
  • 429rate_limitedTrop de requêtes dans la dernière minute.
  • 429quota_exceededPlafond quotidien ou mensuel de requêtes atteint.
  • 429entity_quota_exceededPlafond quotidien ou mensuel de fiches distinctes atteint.
  • 429row_quota_exceededPlafond quotidien ou mensuel de lignes de listes atteint.
  • 429temporarily_blockedAccès en pause pendant 24 heures après un usage inhabituel.
  • 500internal_errorErreur inattendue du serveur : réessayez ; écrivez à thomas@contact.discer.ca si elle persiste.
  • 503not_readyLes renouvellements sont en cours de calcul : réessayez plus tard.

Les réponses 429 portent l'en-tête Retry-After, en secondes.

7.Limites et garde-fous

Discer sert aux équipes qui préparent leurs propres soumissions, pas à copier sa base. Plafonds par compte, toutes clés et le serveur MCP confondus ; jours et mois à l'heure du Québec.

Plafonds par compte
MesurePar jourPar mois
Requêtes (API et MCP)et 60 par minute2 00030 000
Fiches d'avis distinctes3003 000
Fiches d'entreprises distinctes2002 000
Fiches de donneurs d'ouvrage distinctes100600
Lignes de listes renvoyées5 00060 000
  • Une fiche déjà consultée ce mois-ci ne compte pas deux fois.
  • Au plus 3 clés actives par compte ; au plus 1 000 résultats par requête filtrée.
  • Au-delà d'un plafond : 429 avec l'en-tête Retry-After.
  • Un usage systématique (fiches demandées dans l'ordre, pagination profonde) ralentit le compte, puis le met en pause, puis suspend ses clés en attente d'une revue (403 api_key_suspended).
  • L'extraction systématique, la revente, la reconstitution d'une base et l'entraînement de modèles avec les données de Discer sont interdits : voir les conditions d'utilisation. Vous acceptez ces règles en créant une clé.

8.Serveur MCP

Le serveur MCP donne les données de Discer à un agent IA, avec la même clé et les mêmes plafonds que l'API.

URL
https://api.discer.ca/mcp
En-tête
Authorization: Bearer dsk_live_…
Transport
HTTP streamable, sans état, réponses JSON. /mcp et /mcp/ répondent tous deux.

Configurer votre client

Une commande dans le terminal. Ajoutez --scope user pour l'avoir dans tous vos projets.

Claude Code
claude mcp add --transport http discer https://api.discer.ca/mcp \
  --header "Authorization: Bearer dsk_live_VOTRE_CLE"

Ne versionnez jamais une clé : préférez une variable d'environnement ou le stockage de secrets de votre client. Révoquez une clé exposée dans Réglages › API et MCP ; l'effet est immédiat.

9.Outils MCP

14 outils en lecture seule. Chaque outil renvoie du JSON compact ; les plafonds de l'API s'appliquent.

search_open_tendersLecture seule

Cherche les avis OUVERTS aujourd'hui (SEAO et autres sources canadiennes) : id, titre, donneur d'ouvrage, date de fermeture, jours restants, valeur estimée, lien, et le nombre total de résultats. Ne révèle jamais qui prépare une soumission sur un avis ouvert.

Arguments

  • querystringfacultatif

    Mots du titre ou du nom du donneur d'ouvrage, en français de préférence, par exemple « pavage ».

  • unspscstringfacultatif

    Début de code UNSPSC, de 2 à 8 chiffres, par exemple « 7214 ».

    Motif : ^\d{2,8}$

  • regionstringfacultatif

    Région administrative du Québec : code 1 à 17 ou nom, par exemple « Montérégie ».

  • buyerstringfacultatif

    Partie du nom du donneur d'ouvrage, par exemple « Ville de Lévis ».

  • sourcestringfacultatif

    seao, canadabuys ou toronto.

  • closing_within_daysintegerfacultatif

    Seulement les avis qui ferment dans les N prochains jours (heure du Québec).

    De 1 à 365

  • use_watch_profilebooleanfacultatif

    Classer selon le profil de veille principal du compte (score 0 à 100).

    Défaut : false

  • limitintegerfacultatif

    Nombre d'avis, de 1 à 25.

    Défaut : 10De 1 à 25

get_tender_intelligenceLecture seule

Intelligence complète d'un avis : l'essentiel (en français), probabilité de gain calibrée de votre entreprise (seulement si le segment est calibré), fourchette des prix gagnants chez ce donneur d'ouvrage et pour ce type d'avis (dollars de 2026, avec n et période), écart attendu entre les deux plus bas prix soumissionnés, compétitivité et position de prix (avis ouverts), soumissionnaires attendus et leurs chances de soumissionner, historique du donneur d'ouvrage. De l'information, pas une recommandation. Compte comme une fiche d'avis distincte.

Arguments

  • tender_idstringobligatoire

    Id de l'avis venant de search_open_tenders (numéro SEAO, par exemple « 20158453 »).

get_winning_priceLecture seule

Prix gagnants observés pour un avis : P10 à P90 des soumissions gagnantes comparables (même sous-catégorie quand elle existe ; dollars de 2026, avec n et période), prix par 12 mois des services récurrents, écart attendu entre le plus bas et le deuxième prix, ratio prix gagnant sur estimation du donneur d'ouvrage, et position de prix des soumissions passées (avis ouverts). De l'information calculée sur l'historique, jamais une recommandation ni une garantie.

Arguments

  • tender_idstringobligatoire

    Numéro SEAO de l'avis, par exemple « 20158453 ».

get_likely_biddersLecture seule

Entreprises susceptibles de soumissionner sur un avis : soumissionnaires des avis conclus les plus semblables (ou 36 mois d'historique SEAO chez ce donneur d'ouvrage, pour ce type d'avis et cette région), avec leurs chances de soumissionner quand le modèle de Discer les a calculées, soumissions et contrats obtenus chez ce donneur d'ouvrage, et duels avec votre entreprise.

Arguments

  • tender_idstringobligatoire

    Numéro SEAO de l'avis, par exemple « 20158453 ».

get_buyer_profileLecture seule

Fiche d'un donneur d'ouvrage public : achats par type d'avis UNSPSC (5 ans), principaux gagnants, fourchettes de prix, contrats de gré à gré et avenants. Donnez buyer_id, ou un nom : plusieurs résultats renvoient les candidats avec leur buyer_id.

Arguments

  • buyer_idintegerfacultatif

    Id Discer du donneur d'ouvrage (venant d'un résultat précédent).

  • namestringfacultatif

    Nom du donneur d'ouvrage à chercher, par exemple « Ville de Québec ».

get_company_profileLecture seule

Historique SEAO d'une entreprise : soumissions, contrats obtenus, taux de succès, principaux donneurs d'ouvrage, types d'avis, régions, principaux concurrents avec duels, dernières soumissions et leurs prix. Donnez un NEQ, ou un nom : plusieurs résultats renvoient les candidats avec leur NEQ.

Arguments

  • neqstringfacultatif

    Numéro d'entreprise du Québec (10 chiffres).

    Motif : ^\d{10}$

  • namestringfacultatif

    Nom de l'entreprise à chercher.

list_my_bidsLecture seule

Pipeline du compte (avis par étape, sans les cartes écartées) : avis, donneur d'ouvrage, étape, prix soumis, date de fermeture, notes, pertinence, avis suivis et leurs nouveautés (titres des addendas, changements de fermeture, résultat publié et gagnant, annulation).

Arguments

  • statusstringfacultatif

    Étape du Pipeline : to_evaluate, preparing, submitted, won ou lost.

    Valeurs : to_evaluate, preparing, submitted, won, lost

  • limitintegerfacultatif

    Nombre de cartes, de 1 à 100.

    Défaut : 50De 1 à 100

list_upcoming_renewalsLecture seule

Contrats issus d'appels d'offres dont la fin prévue tombe dans l'horizon, avec le titulaire : appels d'offres possibles (non confirmés). Donneur d'ouvrage, titre, fin prévue (AAAA-MM-JJ), montant, titulaires ; les contrats de votre entreprise d'abord (is_you). Sans family, region ni buyer_id : votre créneau (for_me).

Arguments

  • familystringfacultatif

    Début de code UNSPSC, 2 ou 4 chiffres, par exemple « 7214 ».

    Motif : ^\d{2,4}$

  • regionstringfacultatif

    Code de région du Québec (1 à 17) ou nom, par exemple « Laurentides ».

  • buyer_idintegerfacultatif

    Id Discer du donneur d'ouvrage (venant de get_buyer_profile).

    Au moins 1

  • horizon_monthsintegerfacultatif

    Fin prévue dans les N prochains mois.

    Défaut : 12De 1 à 24

  • for_mebooleanfacultatif

    Seulement le créneau du compte (profil de veille), comme la page Renouvellements.

    Défaut : false

  • limitintegerfacultatif

    Nombre de contrats, de 1 à 50.

    Défaut : 20De 1 à 50

search_concluded_tendersLecture seule

Cherche les avis du SEAO conclus depuis 2015 : gagnant, montant gagnant (dollars canadiens), nombre de soumissionnaires, écart entre les deux plus bas prix soumissionnés, résultat du compte, et le nombre total de résultats. Donnez au moins un filtre.

Arguments

  • querystringfacultatif

    Mots du titre, en français de préférence, par exemple « pavage ».

  • unspscstringfacultatif

    Type d'avis UNSPSC (4 chiffres) ou segment (2 chiffres), par exemple « 7214 ».

    Motif : ^\d{2}(\d{2})?$

  • regionstringfacultatif

    Région administrative du Québec : code 1 à 17 ou nom, par exemple « Montérégie ».

  • buyer_idintegerfacultatif

    Id Discer du donneur d'ouvrage (venant de get_buyer_profile).

    Au moins 1

  • company_neqstringfacultatif

    Seulement les avis où cette entreprise a soumissionné.

    Motif : ^\d{10}$

  • won_onlybooleanfacultatif

    Avec company_neq : seulement les avis qu'elle a gagnés.

    Défaut : false

  • minebooleanfacultatif

    Seulement les avis où l'entreprise du compte a soumissionné.

    Défaut : false

  • concluded_within_monthsintegerfacultatif

    Conclus dans les N derniers mois.

    De 1 à 144

  • sortstringfacultatif

    recent, amount (montant le plus élevé d'abord) ou gap (plus grand écart d'abord).

    Défaut : recentValeurs : recent, amount, gap

  • limitintegerfacultatif

    Nombre d'avis, de 1 à 25.

    Défaut : 10De 1 à 25

get_concluded_tenderLecture seule

Un avis conclu : chaque soumissionnaire avec son prix (dollars canadiens), son rang et son écart au gagnant, deuxième plus bas prix, avenants du contrat. Compte comme une fiche d'avis distincte.

Arguments

  • tender_idstringobligatoire

    Numéro SEAO d'un avis conclu.

    Motif : ^\d{1,12}$

list_subcontracting_opportunitiesLecture seule

Sous-traitance, d'après les métiers des réglages de sous-traitance du compte : avis ouverts où un métier peut être requis, ou avis adjugés avec l'entreprise gagnante à contacter (nom, NEQ, ville ; son contact publié se lit dans Discer seulement).

Arguments

  • kindstringfacultatif

    open : avis ouverts où l'un des métiers du compte peut être requis ; awarded : avis adjugés dans ses métiers, avec le gagnant à contacter.

    Défaut : openValeurs : open, awarded

  • tradestringfacultatif

    Un code de métier du compte (voir trade_codes dans un résultat précédent).

  • regionstringfacultatif

    Code de région du Québec (1 à 17) ou nom.

  • since_daysintegerfacultatif

    open : publiés depuis N jours ; awarded : 30, 90 ou 365 (90 par défaut).

    De 1 à 365

  • limitintegerfacultatif

    Nombre d'avis, de 1 à 25.

    Défaut : 10De 1 à 25

get_niche_marketLecture seule

Le créneau du compte (ses soumissions, sinon son profil de veille) : les entreprises qui y gagnent le plus en 36 mois (contrats obtenus, soumissions, taux de victoire) et les chiffres du marché pour ses 3 premiers types d'avis UNSPSC (avis publiés, soumissionnaires par avis, montants, principaux donneurs d'ouvrage). Utile aussi à une entreprise qui soumissionne peu ou jamais.

list_private_tendersLecture seule

Avis privés publiés sur Discer par des donneurs d'ouvrage (publics ou privés) : titre, donneur d'ouvrage, ville, date de fermeture, statut, invitation de l'organisation du compte et dépôt. Lecture seule.

Arguments

  • viewstringfacultatif

    for_you : invité ou ciblé ; all : tous les avis privés ouverts.

    Défaut : for_youValeurs : for_you, all

get_private_tenderLecture seule

Un avis privé tel que l'organisation du compte le voit : portée, contraintes, dates, noms des documents, addendas, questions et réponses publiées, analyse des documents par Discer ; après l'ouverture, le résultat du compte et, au forfait Équipe, les soumissionnaires, les prix et le gagnant. Le lire ici n'enregistre aucun intérêt (l'ouvrir dans Discer le fait).

Arguments

  • private_tender_idstringobligatoire

    id venant de list_private_tenders.

10.Version et changements

Version actuelle : 1.2.0.

  1. 3 octobre 2026/mcp/ (barre finale) accepté sans redirection ; filtres de dates à l'heure du Québec ; paramètre source limité aux sources qui publient des avis (seao, canadabuys, toronto) ; erreurs 405, 500 et caractère nul au format error ; schémas de réponse détaillés dans l'OpenAPI.
  2. 29 septembre 2026 · 1.0.0Première version : 12 chemins, 8 outils MCP.