“CENTRAL JOURNAL”
API RUNNING
Bienvenue sur l'API Central Journal.
Documentation complète pour l'intégration de vos applications.
Démarrage rapide
-
Créer un compteEnvoyez une requête POST à
/api/v2/auth/registeravec votre email et mot de passe. -
Récupérer votre clé APILors de l'inscription, une clé API
cj_live_...est générée. Conservez-la précieusement. -
Authentifier vos requêtesAjoutez l'en-tête
X-API-Key: cj_live_...ouAuthorization: Bearer <jwt_token>à chaque appel. -
Créer votre premier articleEnvoyez une requête POST à
/api/v2/articlesavec 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 :
Permissions associées : read, write.
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.
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)
| Champ | Type | Requis | Description |
|---|---|---|---|
email | string | Requis | Adresse email unique |
password | string | Requis | Min. 8 caractères |
username | string | Optionnel | Nom 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)
| Champ | Type | Requis | Description |
|---|---|---|---|
email | string | Requis | Email du compte |
password | string | Requis | Mot 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ètre | Type | Défaut | Description |
|---|---|---|---|
page | integer | 1 | Numéro de page |
per_page | integer | 20 | Articles 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)
| Champ | Type | Requis | Description |
|---|---|---|---|
title | string | Requis | Titre de l'article (max 200 car.) |
body_html | string | Requis | Contenu HTML de l'article |
meedoo_api_key | string | Requis* | Clé API MeeDoo (ou header X-Meedoo-Key) |
subtitle | string | Optionnel | Sous-titre |
excerpt | string | Optionnel | Résumé |
tags | array | Optionnel | Liste de tags |
category_name | string | Optionnel | Nom de la catégorie |
status | string | Optionnel | draft, published (défaut: draft) |
featured | boolean | Optionnel | Article vedette |
language | string | Optionnel | Langue (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 :
| Limite | Valeur | Description |
|---|---|---|
Default | 100 req/h | Utilisateurs standards |
Production | 100 req/h | Environnement de production |
Development | 1000 req/h | Environnement 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