Référence développeur

API REST TJM Antilles-Guyane

Intégrez les grilles tarifaires indicatives (JSON, GET, CORS ouvert). Les montants tarifs.* sont des entiers (euros / jour), lus comme les pages HTML depuis SQLite (storage/database/tjm.sqlite) avec repli sur la grille statique si la base est indisponible.

Vérification de l’API en cours…

URL de base

Toutes les routes sont en HTTPS GET, sans authentification. Préférez l’en-tête Accept: application/json.

https://tjm.webmonster.tech/api

Endpoints

GET

/api/stats

Statistiques globales, nombre de métiers distincts, TJM moyen « confirmé » indicatif, moyennes par niveau (agrégat Martinique), liste des régions.

Exemple cURL

curl -sS "https://tjm.webmonster.tech/api/stats" -H "Accept: application/json"

Schéma de réponse (extrait)

{
  "success": true,
  "data": {
    "total_regions": 3,
    "total_jobs": 42,
    "average_tjm": 485,
    "average_tjm_by_level": {
      "debutant": 0,
      "junior": 380,
      "confirme": 485,
      "senior": 620,
      "expert": 780
    },
    "last_update": "2026-05-06",
    "api_version": "1.0",
    "data_source": "sqlite_or_static_grid"
  },
  "regions": [
    { "code": "martinique", "name": "Martinique", "flag": "🇲🇶" }
  ]
}
GET

/api/tjm/{region}

regionmartinique · guadeloupe · guyane. Paramètre optionnel ?refresh=1 pour forcer le recalcul (cache serveur).

Exemple cURL

curl -sS "https://tjm.webmonster.tech/api/tjm/martinique" -H "Accept: application/json"

Schéma de réponse (extrait)

{
  "success": true,
  "region": {
    "code": "martinique",
    "name": "Martinique",
    "flag": "🇲🇶",
    "postal_code": "972",
    "main_city": "Fort-de-France"
  },
  "metadata": {
    "last_update": "2026-05-06 12:00:00",
    "total_jobs": 40,
    "data_sources": { "silkhom": "https://…", "codeur": "https://…" },
    "average_tjm": { "junior": 350, "confirme": 450, "senior": 600, "expert": 720 },
    "confidence_level": 0.85
  },
  "metiers": [
    {
      "metier": "Développeur PHP",
      "tarifs": {
        "debutant": null,
        "junior": 380,
        "confirme": 520,
        "senior": 650,
        "expert": 800
      },
      "description": "…",
      "competences": ["Symfony", "MySQL"],
      "source": "aggregated",
      "last_update": "2026-05-06 12:00:00",
      "average_tjm": 588
    }
  ],
  "statistics": {
    "highest_tjm": 1200,
    "lowest_tjm": 250,
    "most_demanded_skills": ["PHP", "JavaScript"],
    "salary_ranges": { "min": 250, "q1": 400, "median": 500, "q3": 650, "max": 1200 }
  }
}
GET

/api/comparison

Comparaison par métier entre régions. Option ?regions=martinique,guyane pour restreindre la liste (sinon les trois).

Exemple cURL

curl -sS "https://tjm.webmonster.tech/api/comparison" -H "Accept: application/json"

Schéma de réponse (extrait)

{
  "success": true,
  "comparison_date": "2026-05-06 12:00:00",
  "regions": [
    { "code": "martinique", "name": "Martinique", "flag": "🇲🇶" }
  ],
  "jobs_comparison": {
    "Data Scientist": {
      "martinique": { "metier": "Data Scientist", "tarifs": { "junior": 400, "confirme": 580 } },
      "guadeloupe": { "metier": "Data Scientist", "tarifs": { "junior": 390, "confirme": 560 } }
    }
  },
  "summary": {
    "total_jobs": 35,
    "best_region_for_seniors": "guyane",
    "most_affordable_region": "guadeloupe",
    "biggest_gaps": []
  }
}
GET

Paramètre q obligatoire (min. 2 caractères). region optionnelle pour filtrer.

Exemple cURL

curl -sS "https://tjm.webmonster.tech/api/search?q=data" -H "Accept: application/json"

Schéma de réponse (extrait)

{
  "success": true,
  "search_term": "développeur",
  "results_count": 2,
  "results": [
    {
      "region": "Martinique",
      "region_code": "martinique",
      "tjm_data": {
        "metier": "Développeur PHP",
        "tarifs": { "junior": 380, "confirme": 520, "senior": 650, "expert": 800 },
        "description": null,
        "competences": [],
        "source": null,
        "last_update": null,
        "average_tjm": 588
      }
    }
  ]
}

Au moins 2 caractères — validation côté API.

Codes HTTP

200

Succès

Corps JSON conforme au schéma de l’endpoint.

400

Requête invalide

Paramètres manquants ou trop courts (q pour la recherche).

404 / 500

Erreur

Route inconnue ou erreur serveur ; corps JSON avec success: false.

429

Limite

Plafond de requêtes par adresse IP (voir ci-dessous).

Exemples d’intégration

Remplacez l’URL par celle de votre environnement si vous testez en local.

Fetch (navigateur ou Deno)

const base = 'https://tjm.webmonster.tech/api';
const res = await fetch(base + '/tjm/martinique', { headers: { Accept: 'application/json' } });
const json = await res.json();
if (json.success) {
  console.table(json.metiers.map(m => ({ metier: m.metier, confirme: m.tarifs?.confirme })));
}

Limites et bonnes pratiques

Limites

  • Quota : 100 requêtes par heure et par adresse IP.
  • Format : JSON UTF-8, lecture seule (GET).
  • CORS : en-tête Access-Control-Allow-Origin: * pour les appels cross-origin.
  • Cache : réponses métier mises en cache côté serveur (TTL typique 1 h) ; ?refresh=1 sur /api/tjm/… uniquement.

Bonnes pratiques

  • Vérifier le champ success avant d’utiliser les données.
  • Mettre en cache côté client pour limiter la charge.
  • Utiliser un timeout réseau (10–15 s).
  • Les valeurs sont indicatives (marché DROM) — pas un conseil juridique ou fiscal.

Support

Questions sur l’intégration ou suggestions d’évolution de l’API.