API·Ka
La donnée de l'écosystème, par API
API·Ka (www.api-ka.com) est la plateforme de données centrale de l'écosystème Groupe KA. Chaque jour, 11 collecteurs (lou-ka, immo-ka, food-ka, auto-ka, fabri-ka, resto-ka, sorti-ka, crea-ka, job-ka, house-ka, rent-ka) sauvegardent les données des plateformes dans une base PostgreSQL unifiée (fetch → validation → checksum → insertion → backup → journal de run, retry 3× avec backoff 30 s → 2 min → 10 min), puis les exposent via une API FastAPI publique : données paginées, historiques par date, statistiques, rapports PDF.
Elle héberge aussi le KA Agent — l'assistant IA central du groupe (Claude Haiku 4.5, SSE, boucle de 34 outils branchés sur les API publiques des plateformes) servi en widget (/ka-agent.js) aux 13 domaines de l'écosystème — et sert de superviseur des connecteurs (~4 460 connecteurs suivis au 2026-08-28 : historique des collectes /api/v1/runs, santé par service, alertes). L'accès à l'API produit exige une authentification : session KA ID ou jeton personnel (kapi_, généré sur groupe-ka.com/compte).
Chiffres live (au 2026-08-28)
Instantané de GET /api/stats et GET /health — les pastilles dynamiques ci-dessus restent à jour en continu.
| Métrique | Valeur |
|---|---|
| Collectes sur 7 jours | 70 / 74 réussies (4 échecs, rattrapées par le backfill) |
| Enregistrements collectés sur 7 jours | 4 522 761 |
| Appels API sur 7 jours | 5 680 |
| Services collectés | 11 (house-ka et rent-ka intégrés les 2026-08-27/28) |
| Connecteurs supervisés (écosystème) | 4 458 — 4 179 OK · 133 dégradés · 3 en panne · 85 périmés · 58 retirés |
Dernière collecte par service (2026-08-28) :
| Service | Enregistrements | Service | Enregistrements | |
|---|---|---|---|---|
| fabrika | 384 574 | jobka | 2 297 | |
| rentka | 55 241 | immoka | 36 | |
| sortika | 17 168 | autres* | 0 | |
| louka | 7 365 | Total du jour | 466 681 |
* creaka, restoka, autoka, foodka et houseka rapportaient 0 enregistrement pour la date du jour au moment de la capture (collectes différentielles / heure de passage) — le statut du run restait success. Les valeurs live sont sur /health.
Visite guidée
10 captures du 2026-08-28 (desktop 1440×900 · mobile 390×844), versionnées dans docs/screenshots/.
![]() Accueil — « Toutes les données KA, centralisées chaque jour » Le héros de www.api-ka.com : badge « API opérationnelle · M3U96B », réponse live de GET /health (nœud, base, dernières collectes) et compteurs en direct. |
|
![]() Accueil · 01 — Sources Les services collectés en cartes : vocation, route /api/v1/{service}, enregistrements historisés et lien vers chaque plateforme Ka. |
![]() Accueil · 02 — Référence des endpoints Chaque endpoint documenté en place : description, paramètres, extraits curl / Python / JavaScript copiables et bouton « Essayer ». |
![]() Accueil — les endpoints d'historique /api/v1/{service}/latest et /api/v1/{service}/date/{YYYY-MM-DD} : paramètres requis/optionnels, pagination (limit max 500). |
![]() /stats — la supervision de la plateforme Appels API, latences moyenne et p95, taux d'erreur, collectes réussies/échouées, enregistrements — filtres de période et rapports PDF (complet, personnalisés). |
![]() /docs — l'API interactive (Swagger, OpenAPI 3.1) Tous les routeurs (health, auth, runs, monitoring, stats, services, agent…) avec schémas et essais en direct. |
![]() /doc — « Comment fonctionne API·Ka » Le guide public : vue d'ensemble (collecteurs quotidiens, retry 3× + backfill, backups 90 jours, KA Agent), téléchargeable en PDF. |
![]() /doc — la même page servie sur la route sans barre oblique finale Le guide reste accessible aux deux chemins ( /doc et /doc/). |
![]() /contact — « Nous joindre » Les trois courriels officiels du Groupe KA (projets/partenariats, médias, légal & Loi 25) et le rappel que la connexion « Se connecter avec KA » est déléguée au hub KA ID. |
![]() Accueil — version mobile (390×844) Le même héros et le statut /health live, en colonne unique avec la nav mobile v2. |
|
🗄️ Les captures du guide et du Swagger en WebP restent dans
docs/screenshots/desktop/etdocs/screenshots/mobile/; les captures d'époque sont conservées dansdocs/archive/.
Nouveautés
- 2026-08-28 — Rent-Ka devient le 11ᵉ service : collecteur
rentka(pagination offset/2000 comme lou-ka), tablerentka_data, supervision des ~680 sources du connecteur au premier run (6c64acd). - 2026-08-27 — House-Ka devient le 10ᵉ service : collecteur + modèle + CORS + supervision (17 sources) (
eb543c9). - KA Agent v3.2 — 34 outils (recherche fédérée, annuaires déménageurs/inspecteurs, agences immobilières, historique/coût réel/TAL logement, ValoPlex, KA Scores) ; cartes d'annonces construites côté serveur (
afficher_cartes), lien publiclien_fichesur chaque résultat, reprise automatique après coupuremax_tokens. - Widget ka-agent v4 servi aux 13 domaines — cartes cliquables (
ka-card) et choix en boutons (ka-choix). - Monitoring des connecteurs — statut
retiredpour les sources désactivées ou disparues. - Nav mobile v2 sur les pages web.
Rôle central dans l'écosystème
API·Ka est le système nerveux du Groupe KA, avec trois missions :
- API unifiée des plateformes — un seul point d'entrée versionné (
/api/v1/{service}) pour les données quotidiennes historisées des 11 services : mêmes conventions de pagination, mêmes enveloppes JSON, mêmes checksums, quel que soit le service interrogé. C'est ce qui alimente l'app iOS KA, Ka·Stats, les rapports PDF et les intégrations internes. - Superviseur des connecteurs — la santé des ~4 460 connecteurs de collecte de tout l'écosystème (les sources de lou-ka, immo-ka, rent-ka, etc.) est agrégée ici (
/api/v1/monitoring/connectors), avec statutsok / degraded / broken / stale / retired, fenêtres de fraîcheur par service et alertes journalisées. - Agent conversationnel central — le KA Agent répond en langage naturel sur les 13 sites via un seul backend (SSE), en s'appuyant sur les données live des plateformes plutôt que sur la base historisée : ce que l'agent dit est ce que les sites affichent.
Fonctionnalités
- 11 collecteurs quotidiens — un par plateforme Ka (Job-Ka intégré le 2026-08-18, House-Ka le 2026-08-27, Rent-Ka le 2026-08-28), avec validation, checksum, retry 3× (backoff exponentiel) et journal de run ; tout échec après 3 tentatives est loggé (
collection_runs,logs/alerts.log). - Scheduler APScheduler — job quotidien à 02:00 (collecteurs en parallèle et indépendants) + backfill automatique des dates manquées (7 derniers jours).
- API publique de données —
GET /api/v1/{service}(pagination, limit max 500),/latest,/date/{YYYY-MM-DD},/stats,/api/v1/runs(historique des collectes), pour{service}∈ louka, immoka, foodka, autoka, fabrika, restoka, sortika, creaka, jobka, houseka, rentka. - Authentification obligatoire sur l'API produit — session KA ID ou jeton Bearer
kapi_; monitoring, stats et agent restent ouverts. - KA Agent (IA) —
POST /api/agent/chaten SSE (Claude Haiku 4.5, boucle de 34 outils sur les données live des plateformes : logements, propriétés, véhicules, rappels, emplois, épicerie et comparateur de prix, produits et boutiques QC, restos, plats, menus, inspections MAPAQ, sorties, créateurs, recherche web Québec, recherche globale fédérée, suggestions, facettes, fiches détail, estimateurs Vrai-Prix et ValoPlex, annuaires déménageurs/inspecteurs, agences immobilières, historique/coût réel/TAL logement, KA Scores, cartes d'annonces serveur, stats et état des services) + recherche floue en cascade + widget embarquableGET /ka-agent.js(v4 : bulle déplaçable, position mémorisée par site, cartes cliquables et boutons de choix), CORS ouvert aux 13 domaines. - SSO KA ID —
GET /api/auth/ka/{login,callback}, session/api/auth/me, et échange de jeton pour les apps natives (POST /api/ios/auth/exchange, vérification HS256,aud∈ ka-ios, ka-android). - Stats & rapports — tableau de bord
/stats,GET /api/stats(KPI compact JSON),GET /api/stats/report(PDF de la plateforme) etGET /api/stats/ecosystem-report(rapport PDF consolidé de l'écosystème, liste dynamique viaecosystem.json) + rapports PDF personnalisés (catalogue + constructeur). - Recherche transversale —
GET /api/v1/search+GET /api/v1/suggest(proxy du moteur Trouve-Ka, pivot moteur de recherche Groupe KA). - Backups quotidiens horodatés par service (
data/backups/YYYY-MM-DD/, rétention 90 jours). - Santé & supervision —
GET /health(nœud, état DB, dernière collecte par service, compteurs de connecteurs) ; chaque service vérifie le hostname au démarrage et refuse de tourner en production ailleurs que surm3u96b. - SEO du site de doc — robots.txt, sitemap.xml, canonical/hreflang/JSON-LD.
Authentification
Deux façons d'accéder à l'API produit — aucun secret n'est stocké dans ce repo :
- Session KA ID (SSO) — le bouton « Se connecter avec KA » délègue au hub groupe-ka.com (compte unique de l'écosystème) :
GET /api/auth/ka/login→ callback → session serveur, introspectable viaGET /api/auth/me. - Jeton personnel
kapi_— généré (et révocable) sur groupe-ka.com/compte, passé en en-têteAuthorization: Bearer kapi_…. C'est la voie recommandée pour les scripts et intégrations. - Endpoints exemptés (publics sans authentification) :
GET /health,GET /api/stats, la supervision (/api/v1/runs,/api/v1/monitoring/*), les pages web et le KA Agent (/api/agent/chat,/ka-agent.js). - Apps natives :
POST /api/ios/auth/exchangeéchange le jeton du hub contre une session API (HS256,audka-ios / ka-android). - Rate-limit global : 120 req/min.
API (endpoints principaux)
Référence interactive complète : Swagger sur /docs. 🔒 = session KA ID ou jeton Bearer kapi_ requis.
| Méthode & endpoint | Description |
|---|---|
GET /health |
santé : nœud, état DB, dernière collecte par service, compteurs de connecteurs |
GET /api/stats |
KPI compact JSON : collectes 7 j, enregistrements, appels API, connecteurs (alimente les pastilles ci-dessus) |
🔒 GET /api/v1/{service} |
données paginées (limit max 500) — service ∈ louka, immoka, foodka, autoka, fabrika, restoka, sortika, creaka, jobka, houseka, rentka |
🔒 GET /api/v1/{service}/latest |
dernière collecte du service |
🔒 GET /api/v1/{service}/date/{YYYY-MM-DD} |
collecte d'une date précise |
🔒 GET /api/v1/{service}/stats |
statistiques du service |
🔒 GET /api/v1/louka/fairvalue/{uid} |
juste prix d'une annonce Lou·Ka (proxy live, utilisé par l'app iOS KA) |
GET /api/v1/runs |
historique des runs de collecte (supervision) |
GET /api/v1/monitoring/connectors · /connectors/{service} |
santé des connecteurs de l'écosystème (~4 460 suivis, statuts ok/degraded/broken/stale/retired) |
GET /api/stats/dashboard · /report · /catalog · POST /api/stats/report/custom |
tableau de bord + rapports PDF (catalogue, personnalisés) |
GET /api/stats/ecosystem-report |
rapport PDF consolidé des 13 plateformes |
POST /api/agent/chat (SSE) · GET /ka-agent.js |
KA Agent (Claude Haiku 4.5 + 34 outils live) et son widget embarquable |
GET /api/v1/search · GET /api/v1/suggest |
recherche transversale (incl. recherche floue) et suggestions — proxy Trouve-Ka |
GET /api/auth/config · /ka/login · /ka/callback · /me · POST /api/auth/logout |
SSO KA ID |
POST /api/ios/auth/exchange |
échange de jeton pour les apps natives (aud ka-ios / ka-android) |
Architecture
- FastAPI + Uvicorn (
src/api/) : 9 routeurs (health, auth, runs, monitoring, stats, search, services, agent, iosauth) + pages web et PDF (fpdf2). - PostgreSQL via SQLAlchemy 2 (+ Alembic pour les migrations,
psycopg2) : une table de données par service ({service}_data) + journalcollection_runs. - Collecteurs (
src/collectors/) : classe abstraitebase_collector(fetch, validate, save, retry) + 11 collecteurs concrets, httpx. - Scheduler (
src/scheduler/) :daily_job.py(02:00) +backfill.py. - Utils (
src/utils/) : backups quotidiens, rétention 90 jours ;src/monitoring/pour la supervision (connector_healthsonde les 11 apps). - anthropic SDK pour le KA Agent.
Collecteurs et cadence :
| Collecteur | Source | Cadence |
|---|---|---|
louka · immoka · foodka · autoka · fabrika · restoka · sortika · creaka · jobka · houseka · rentka |
API publique de chaque plateforme Ka ({SERVICE}_SOURCE_URL) |
quotidien 02:00 (parallèle, indépendants) |
| backfill | dates manquées des 7 derniers jours | au démarrage du job quotidien |
| backups | dump horodaté par service (data/backups/YYYY-MM-DD/) |
quotidien, rétention 90 jours |
Processus PM2 sur le nœud (commandes de start réelles) :
| Processus | Commande | Rôle |
|---|---|---|
apika-api |
venv/bin/uvicorn src.api.main:app --host 127.0.0.1 --port 8000 |
l'API FastAPI/Uvicorn sur le port 8000 (liée à 127.0.0.1) |
apika-scheduler |
venv/bin/python -m src.scheduler.daily_job |
le job quotidien 02:00 + backfill |
apika-ngrok |
ngrok http --domain=www.api-ka.com 8000 --log stdout |
tunnel vers www.api-ka.com |
Démarrage rapide
git clone gitsrv:api-ka.git && cd api-ka
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # puis remplir les valeurs
python -m src.database.db --init # initialiser la base PostgreSQL
uvicorn src.api.main:app --reload --port 8000 # API en dev → http://127.0.0.1:8000
python -m src.scheduler.daily_job --now # collecte manuelle immédiate
python -m src.scheduler.backfill --date 2026-08-15
pytest tests/ -v # modules de tests (api, collectors, retry, backfill, search, stats, connector_health)Variables d'environnement
Déclarées dans .env.example (copier vers .env, jamais commité — aucun secret dans le repo) :
| Variable | Rôle |
|---|---|
APP_ENV · NODE_NAME |
environnement + garde-fou de hostname (m3u96b en prod) |
DATABASE_URL |
connexion PostgreSQL (SQLAlchemy) |
API_PORT · RATE_LIMIT_PER_MINUTE |
port de l'API (8000) et rate-limit |
DAILY_RUN_HOUR · BACKUP_RETENTION_DAYS |
heure du job quotidien (02) et rétention des backups (90) |
NGROK_AUTHTOKEN · NGROK_DOMAIN |
tunnel ngrok (www.api-ka.com) |
LOUKA_SOURCE_URL … RENTKA_SOURCE_URL (×11) |
URL source de chaque collecteur |
TROUVEKA_SEARCH_URL · TROUVEKA_SUGGEST_URL |
proxy du moteur de recherche Trouve-Ka |
KA_HUB_URL · KA_SSO_SECRET · KA_IOS_SSO_SECRET · SESSION_SECRET |
SSO KA ID (hub groupe-ka.com) + sessions |
ANTHROPIC_API_KEY |
clé du KA Agent (lue par le SDK anthropic) |
APIKA_BASE_URL |
base URL publique de l'API |
Données & conformité
- Provenance : les données proviennent exclusivement des API publiques des 11 plateformes Ka (aucun scraping tiers dans ce repo) ; chaque enregistrement passe par validation + checksum avant insertion.
- Cadence : resynchronisation quotidienne à 02:00 (collecteurs parallèles) + backfill automatique des 7 derniers jours ; backups quotidiens horodatés, rétention 90 jours.
- Accès : l'API produit exige une authentification (session KA ID ou jeton
kapi_révocable sur groupe-ka.com/compte) ; monitoring, stats et agent restent publics ; rate-limit 120 req/min. - Traçabilité : chaque run de collecte est journalisé (
collection_runs, exposé via/api/v1/runs) ; alertes danslogs/alerts.log.
Structure du repo
/opt/api-ka
├── src/ # api/ (routes, web, PDF), collectors/ (11), scheduler/, database/, monitoring/, utils/, config.py
├── scripts/ # deploy_m3u96b.sh, healthcheck.sh, run_daily_backup.sh, start_ngrok.sh…
├── systemd/ # unités historiques (le déploiement actuel utilise PM2)
├── tests/ # pytest (api, backfill, collectors, connector_health, retry, search, stats)
├── data/ # backups/YYYY-MM-DD/ (rétention 90 jours)
├── logs/ # logs centralisés + alerts.log
├── docs/ # screenshots/ (visite guidée + desktop/mobile WebP) · archive/
└── alembic.ini · pyproject.toml · requirements.txt · CLAUDE.mdDocumentation
- Guide en ligne : www.api-ka.com/doc/ — à quoi sert la plateforme, le parcours en 3 étapes (site de doc → Swagger
/docs→ supervision/stats), d'où viennent les données, FAQ. - Guide PDF : api-ka-documentation.pdf — la même documentation, téléchargeable.
- Swagger interactif : www.api-ka.com/docs — tous les endpoints, schémas et essais en direct.
- Les captures du guide sont versionnées dans
src/api/web/doc/img/(etape1 → etape3).
Historique
| Date | Jalon |
|---|---|
| 2026-08-17 | naissance de la plateforme : collecte quotidienne des 8 services KA + API publique (d8b3b82), design Groupe KA + SSO KA ID, page /stats, rapport écosystème PDF, KA Agent v1 (Claude Haiku, SSE, 12 outils, CORS 13 domaines) |
| 2026-08-18 | Job-Ka devient le 9ᵉ service (collecteur + supervision, 609d6bb) ; supervision centralisée des connecteurs de l'écosystème ; auth mobile ka-ios/ka-android |
| 2026-08-19 | KA Agent v2 : 24 outils + recherche floue en cascade + widget v2 (e548e0d) ; socle mobile (anti-zoom 16 px) |
| 2026-08-22 | ka-agent v3 : bulle déplaçable, position mémorisée par site ; standard header KA |
| 2026-08-23 | authentification obligatoire sur l'API produit (KA ID / jeton kapi_, 99ebb9e) ; stats v3 (rapports PDF personnalisés) ; recherche /api/v1/search (proxy Trouve-Ka) ; SEO complet ; monitoring affiné (fenêtre 6 h, sources vides ≠ pannes) |
| 2026-08-24 | page documentation /doc + guide PDF ; README v2 puis v3 (chiffres live, pastilles dynamiques) |
| 2026-08-25 | KA Agent v3.2 (33 → 34 outils, cartes serveur afficher_cartes, reprise après max_tokens) ; widget ka-agent v4 ; statut retired au monitoring ; nav mobile v2 |
| 2026-08-27 | House-Ka devient le 10ᵉ service (eb543c9) — collecteur, modèle, CORS, supervision (17 sources) |
| 2026-08-28 | Rent-Ka devient le 11ᵉ service (6c64acd) — collecteur offset/2000, supervision (~680 sources) ; README v4 + visite guidée en 10 captures |
Développement (remote-first)
La source de vérité est le repo git sur le nœud M3U96b (/opt/api-ka) — on n'édite jamais les copies laptop. Toute modification se fait sur le nœud via SSH : édition, tests, pm2 restart, puis commit/push depuis le nœud.
- Remote
origin= spbgit (git perso git.spboucher.ai, bare repos sur M3U96a). Pas GitHub. - L'agent forwarding SSH est actif : le
git push origin mainfonctionne pendant une session SSH depuis le laptop. - Chaque fichier du dépôt porte l'en-tête d'auteur obligatoire (voir
CLAUDE.md).
pm2 restart apika-api # après un changement en productionDéploiement
- Nœud : M3U96b (Mac Studio, cluster MacLustr) — répertoire
/opt/api-ka(hostname vérifié au démarrage) - Port : 8000 (API liée à 127.0.0.1, exposée uniquement via le tunnel)
- Processus PM2 :
apika-api(API) +apika-scheduler(collectes) +apika-ngrok(tunnel) - Domaine : https://www.api-ka.com (tunnel ngrok)
Écosystème Groupe KA
| Plateforme | Vocation |
|---|---|
| groupe-ka.com | portail du groupe et compte unique KA ID |
| lou-ka.com | logements à louer (Québec) |
| immo-ka.com | propriétés à vendre (Québec) |
| vrai-prix.com | estimation immobilière |
| auto-ka.com | véhicules |
| fabri-ka.com | produits québécois |
| food-ka.com | épicerie et alimentation |
| resto-ka.com | restaurants |
| sorti-ka.com | sorties et événements |
| job-ka.com | emplois |
| crea-ka.com | créateurs de contenu |
| trouve-ka.com | petites annonces |
| house-ka.com | maisons à vendre (Canada hors Québec) |
| rent-ka.com | loyers (Canada hors Québec) |
| api-ka.com | API de données (ce repo) |
Contact
Simon-Pierre Boucher — fondateur, Groupe KA 📧 contact@spboucher.ai
© Groupe KA — Simon-Pierre Boucher · contact@spboucher.ai Ce repo vit sur spbgit (git.spboucher.ai).










