CENTRAL JOURNAL
API RUNNING

Bienvenue sur l'API Central Journal.
Documentation complète pour l'intégration de vos applications.

Démarrage rapide
  1. Créer un compte
    Envoyez une requête POST à /api/v2/auth/register avec votre email et mot de passe.
  2. Récupérer votre clé API
    Lors de l'inscription, une clé API cj_live_... est générée. Conservez-la précieusement.
  3. Authentifier vos requêtes
    Ajoutez l'en-tête X-API-Key: cj_live_... ou Authorization: Bearer <jwt_token> à chaque appel.
  4. Créer votre premier article
    Envoyez une requête POST à /api/v2/articles avec le titre et le contenu. N'oubliez pas la clé MeeDoo.
Authentification

Toutes les requêtes vers l'API doivent être authentifiées. Deux méthodes sont supportées :

🔑 Clé API
Ajoutez l'en-tête HTTP à chaque requête :
X-API-Key: cj_live_xxxxxxxxxxxxxxxx
Format : cj_live_ suivi de 32+ caractères.
Permissions associées : read, write.
🛡️ Jeton JWT (Bearer)
Obtenu via /api/v2/auth/login. Ajoutez :
Authorization: Bearer eyJhbGciOiJIUz...
Durée de vie : 1 heure.
Rafraîchissement via un nouveau login.
Référence des endpoints
GET /health Vérifier le statut de l'API
POST /api/v2/auth/register Créer un compte utilisateur
POST /api/v2/auth/login Obtenir un jeton JWT
GET /api/v2/auth/me Profil utilisateur courant
GET /api/v2/auth/verify Vérifier la validité d'un token
GET /api/v2/articles Lister les articles
POST /api/v2/articles Créer un article
GET /api/v2/articles/:id Récupérer un article par ID
GET /api/v2/articles/slug/:slug Récupérer un article par slug
GET /api/v2/articles/featured Articles vedettes
GET /api/v2/articles/search Rechercher des articles
GET /api/v2/articles/stats Statistiques globales
PUT /api/v2/articles/:id Mettre à jour un article
DELETE /api/v2/articles/:id Supprimer un article
POST /api/v2/articles/:id/publish Publier un article
POST /api/v2/articles/:id/like Liker un article
Authentification — Inscription
POST /api/v2/auth/register Public
Créer un nouveau compte utilisateur et obtenir une clé API.
Corps de la requête (JSON)
ChampTypeRequisDescription
emailstringRequisAdresse email unique
passwordstringRequisMin. 8 caractères
usernamestringOptionnelNom d'utilisateur (auto-généré si vide)
Exemple de requête
// Inscription d'un nouvel utilisateur
curl -X POST https://api.centraljournal.fr/api/v2/auth/register \
  -H "Content-Type: application/json" \
  -d '{
    "email": "journaliste@exemple.fr",
    "password": "MonMotDePasse123!",
    "username": "j_dupont"
  }'
Réponse 201 — Succès
// ⚠️ Sauvegardez la clé API, elle ne sera plus jamais affichée
{
  "data": {
    "user": {
      "id": "65f1a...",
      "email": "journaliste@exemple.fr",
      "username": "j_dupont",
      "role": "user",
      "created_at": "2026-04-15T10:30:00"
    },
    "api_key": "cj_live_Ubk6mqj1R-4qTeJ5Ls_iKWBbNK7zptO4O...",
    "message": "Save your API key! It will not be shown again."
  }
}
Authentification — Connexion
POST /api/v2/auth/login Public
Obtenir un jeton JWT pour l'authentification.
Corps de la requête (JSON)
ChampTypeRequisDescription
emailstringRequisEmail du compte
passwordstringRequisMot de passe du compte
Réponse 200 — Succès
{
  "data": {
    "user": { ... },
    "jwt_token": "eyJhbGciOiJIUzI1NiIs...",
    "token_type": "Bearer",
    "expires_in": 3600,
    "has_api_key": true
  }
}
Articles — Lister & Rechercher
GET /api/v2/articles 🔒 Auth requis
Récupérer la liste paginée des articles publiés.
Paramètres de requête
ParamètreTypeDéfautDescription
pageinteger1Numéro de page
per_pageinteger20Articles par page (max 100)
Exemple de requête
curl https://api.centraljournal.fr/api/v2/articles?page=2&per_page=10 \
  -H "X-API-Key: cj_live_xxxxx"
Réponse 200
{
  "data": [
    { "id": "...", "title": "...", ... }
  ],
  "pagination": {
    "page": 2,
    "per_page": 10,
    "total": 342,
    "total_pages": 35,
    "has_next": true,
    "has_prev": true
  }
}
GET /api/v2/articles/search?q= 🔒 Auth requis
Recherche en texte intégral dans les articles publiés (min. 2 caractères).
GET /api/v2/articles/featured 🔒 Auth requis
Récupérer les articles vedettes. Paramètre : limit (défaut 5, max 10).
GET /api/v2/articles/stats 🔒 Auth requis
Statistiques globales (total, par statut, publiés, brouillons).
Articles — Créer
POST /api/v2/articles 🔒 Auth + Permission write
Créer un nouvel article. Clé API MeeDoo obligatoire dans le header X-Meedoo-Key ou le body meedoo_api_key.
Corps de la requête (JSON)
ChampTypeRequisDescription
titlestringRequisTitre de l'article (max 200 car.)
body_htmlstringRequisContenu HTML de l'article
meedoo_api_keystringRequis*Clé API MeeDoo (ou header X-Meedoo-Key)
subtitlestringOptionnelSous-titre
excerptstringOptionnelRésumé
tagsarrayOptionnelListe de tags
category_namestringOptionnelNom de la catégorie
statusstringOptionneldraft, published (défaut: draft)
featuredbooleanOptionnelArticle vedette
languagestringOptionnelLangue (défaut: fr)
Exemple de requête
curl -X POST https://api.centraljournal.fr/api/v2/articles \
  -H "Content-Type: application/json" \
  -H "X-API-Key: cj_live_xxxxx" \
  -H "X-Meedoo-Key: sk-votre-cle-meedoo" \
  -d '{
    "title": "L\'avenir de l\'IA en 2026",
    "body_html": "<h2>Introduction</h2><p>Contenu...</p>",
    "tags": ["intelligence artificielle", "technologie"],
    "category_name": "Technologie",
    "status": "published"
  }'
Réponse 201 — Article créé
{
  "data": {
    "id": "65f1a...",
    "message": "Article created successfully"
  }
}
Articles — Modifier, Supprimer, Interagir
PUT /api/v2/articles/:id 🔒 Auth + write
Mettre à jour un article existant. Envoyez uniquement les champs à modifier.
DELETE /api/v2/articles/:id 🔒 Admin/Editor
Supprimer un article (rôle admin ou editor requis).
POST /api/v2/articles/:id/publish 🔒 Admin/Editor
Publier un article (passe du statut draft à published).
POST /api/v2/articles/:id/like 🔒 Auth requis
Incrémenter le compteur de likes d'un article.
Gestion des clés API
GET /api/v2/auth/me/api-keys 🔒 Auth requis
Lister vos clés API (la valeur complète n'est jamais renvoyée).
POST /api/v2/auth/me/api-keys 🔒 Auth requis
Générer une nouvelle clé API. Corps optionnel : {"name": "Ma clé"}.
DELETE /api/v2/auth/me/api-keys/:key_id 🔒 Auth requis
Révoquer (désactiver) une clé API.
Codes d'erreur
400
Requête invalide ou paramètres manquants
401
Authentification requise ou échouée
403
Permissions insuffisantes
404
Ressource introuvable
429
Trop de requêtes (rate limiting)
500
Erreur interne du serveur
Format des erreurs
{
  "error": {
    "code": 401,
    "message": "Invalid API key",
    "type": "authentication_error"
  }
}
Limites de requêtes

L'API applique un rate limiting pour garantir la stabilité du service :

LimiteValeurDescription
Default100 req/hUtilisateurs standards
Production100 req/hEnvironnement de production
Development1000 req/hEnvironnement de développement

Les en-têtes X-RateLimit-Limit, X-RateLimit-Remaining et X-RateLimit-Reset sont inclus dans chaque réponse.

Version
2.1.0
Status
Healthy
Framework
Flask 3.0
API
v2