Retour au centre d'aide

Campagnes & Publication auto

Brancher Redax sur ton site via n8n

Tutoriel complet pour les sites Next.js custom déployés sur Vercel

Niveau : dev confirmé~30 minutes de setup

Comment ça marche

Quand Redax génère un article (manuellement ou via une campagne programmée), il envoie un webhook signé HMAC vers ton workflow n8n. Le workflow vérifie la signature, puis forward le contenu vers une route API sur ton site, qui publie l'article.

Redaxgénération article
webhook signé HMAC SHA256
n8nvérification + routing
POST /api/articles avec auth Bearer
Ton site Next.jsroute API
écriture dans repo GitHub OU INSERT Supabase
Article publié sur ton site

Avant de commencer

  • Un compte Redax actif avec au moins un client configuré
  • Un site Next.js déployé sur Vercel (App Router)
  • Un compte n8n (cloud ou self-hosted) accessible publiquement
  • Selon ton stockage : un repo GitHub avec accès écriture OU un projet Supabase

Choisir ta stack de publication

Comment ton site stocke-t-il ses articles actuellement ? La réponse détermine quel template de route API utiliser.

Fichiers MDX dans ton repo GitHub

Tes articles sont des fichiers .mdx dans content/articles/ versionnés dans Git. Idéal pour un blog statique.

  • Articles versionnés (rollback gratuit)
  • Re-deploy auto sur push Vercel
  • Pas de DB à setup
Voir le tutoriel MDX

Base de données Supabase

Tes articles sont stockés dans une table Postgres et lus dynamiquement par tes pages. Idéal pour un blog avec beaucoup d'articles.

  • Pas de re-deploy à chaque article
  • Requêtes filtrables (catégories, tags, etc.)
  • Scalable à grand volume
Voir le tutoriel Supabase

Tu utilises une autre stack (CMS headless, Vercel KV, autre) ? Voir la section "Adapter à ta stack" plus bas.

Tutoriel : publication MDX dans GitHub

Pour les sites qui stockent leurs articles comme fichiers .mdx dans le repo GitHub.

1

Créer un Personal Access Token GitHub

Va sur la page de création de token GitHub :

github.com/settings/tokens/new

Configure le token :

  • Note : Redax — publication articles
  • Scope requis : repo (full control of private repositories)
  • Expiration : 90 jours minimum
Copie le token (commence par ghp_) immédiatement — tu ne pourras plus le revoir après.
2

Télécharger le template de route API

Télécharge le fichier route.ts prêt à l'emploi :

Télécharger redax-api-articles-mdx.ts

Place ce fichier dans ton projet à :

app/api/articles/route.ts
3

Configurer les env vars Vercel

Dans le dashboard Vercel > Settings > Environment Variables, ajoute :

VariableValeur
GITHUB_TOKENton token ghp_…
GITHUB_OWNERton username GitHub
GITHUB_REPOnom du repo de ton site
GITHUB_BRANCHmain (ou master)
REDAX_API_KEYune chaîne aléatoire (voir astuce ci-dessous)

💡 Génère une clé aléatoire avec :

openssl rand -hex 32

Redeploy ton site une fois les vars ajoutées (Vercel le fait auto à chaque commit, sinon force via le dashboard).

4

Tester la route en local

Vérifie que ta route fonctionne avec un curl de test :

curl -X POST https://ton-site.vercel.app/api/articles \
  -H "Authorization: Bearer <ta-redax-api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "event": "article.generated",
    "data": {
      "id": "test-123",
      "title": "Mon premier article via Redax",
      "content_html": "<p>Hello world</p>",
      "meta_description": "Article de test",
      "created_at": "2026-05-18T12:00:00Z"
    }
  }'

Tu devrais voir :

  • Un nouveau commit dans ton repo GitHub
  • Un fichier content/articles/mon-premier-article-via-redax.mdx
  • Vercel qui redéploie automatiquement
5

Setup n8n (voir section ci-dessous)

Une fois la route API en place, passe au setup du workflow n8n dans la section suivante.

Continuer avec n8n

Tutoriel : publication dans Supabase

Pour les sites qui utilisent une base de données Supabase pour leurs articles.

1

Créer la table articles

Dans Supabase > SQL Editor, exécute :

CREATE TABLE articles (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  redax_article_id TEXT UNIQUE NOT NULL,
  title TEXT NOT NULL,
  slug TEXT UNIQUE NOT NULL,
  content_html TEXT NOT NULL,
  excerpt TEXT,
  cover_image_url TEXT,
  seo_score INT,
  geo_score INT,
  word_count INT,
  published_at TIMESTAMPTZ DEFAULT now(),
  created_at TIMESTAMPTZ DEFAULT now()
);
CREATE INDEX idx_articles_slug ON articles(slug);
2

Télécharger le template

Télécharge le fichier route.ts pour Supabase :

Télécharger redax-api-articles-supabase.ts

Place-le dans : app/api/articles/route.ts

Installe le client Supabase si pas déjà fait :

pnpm add @supabase/supabase-js
3

Configurer les env vars Vercel

VariableOù la trouver
NEXT_PUBLIC_SUPABASE_URLSupabase > Project Settings > API > Project URL
SUPABASE_SERVICE_ROLE_KEYSupabase > Project Settings > API > service_role
REDAX_API_KEYopenssl rand -hex 32
Ne JAMAIS exposer la SERVICE_ROLE_KEY côté client. Cette clé bypasse les RLS et donne accès complet à la DB. Garde-la uniquement côté serveur (Server Components, Server Actions, Route Handlers).
4

Tester la route en local

Même curl que pour la variante MDX :

curl -X POST https://ton-site.vercel.app/api/articles \
  -H "Authorization: Bearer <ta-redax-api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "event": "article.generated",
    "data": {
      "id": "test-123",
      "title": "Mon premier article via Redax",
      "content_html": "<p>Hello world</p>",
      "meta_description": "Article de test",
      "created_at": "2026-05-18T12:00:00Z"
    }
  }'

Vérifie dans Supabase > Table Editor que la row apparaît dans la table articles.

5

Setup n8n (voir section ci-dessous)

Une fois la route API en place, passe au setup du workflow n8n dans la section suivante.

Continuer avec n8n

Setup du workflow n8n

Ce workflow reçoit les webhooks Redax, vérifie la signature HMAC, et forward les articles vers ta route API.

1

Télécharger et importer le workflow

Télécharger le workflow n8n

Dans n8n : Workflows > Import from File > sélectionne n8n.json

2

Activer le webhook n8n

  1. Ouvre le workflow importé
  2. Clique sur le node "Webhook Redax"
  3. Copie la "Production URL" (ressemble à https://ton-n8n.com/webhook/redax-generic)
  4. Active le workflow via le toggle en haut à droite
3

Configurer la vérification HMAC

Dans le node "Verify HMAC", remplace la constante :

const REDAX_WEBHOOK_SECRET = 'whsec_REPLACE_WITH_YOUR_SECRET';

Tu obtiendras ce secret à l'étape suivante (création du webhook dans Redax). Reviens compléter ce node après.

4

Configurer le HTTP Request

Dans le node "HTTP Request — Customize Me" :

  • URL : remplace https://CUSTOMIZE_ME.example.com/articles par https://ton-site.vercel.app/api/articles
  • Headers > Authorization : remplace Bearer YOUR_API_KEY par Bearer <ta-redax-api-key> (la même que dans tes env vars Vercel)
  • Body JSON : adapte si besoin (voir astuce ci-dessous)

💡 Si tu utilises notre template de route API tel quel, modifie le Body JSON du node HTTP pour transmettre le payload complet :

{
  "event": "{{ $json.body.event }}",
  "delivery_id": "{{ $json.body.delivery_id }}",
  "timestamp": "{{ $json.body.timestamp }}",
  "data": {{ $json.body.data }}
}

Créer le webhook dans Redax

Maintenant qu'n8n est prêt à recevoir, on crée côté Redax le webhook qui va lui envoyer les events.

1

Aller sur /settings/webhooks

Connecte-toi à Redax et va sur la page Webhooks :

Ouvrir /settings/webhooks

Clique sur "Ajouter un webhook".

2

Configurer le webhook

  • URL: colle la "Production URL" de ton webhook n8n (étape 6.2)
  • Events : coche article.generated
  • Clique sur "Créer"

Redax affiche un secret unique (commence par whsec_) — copie-le immédiatement.

Ce secret n'est affiché qu'UNE seule fois. Si tu le perds, tu devras supprimer le webhook et en créer un nouveau.
3

Synchroniser le secret dans n8n

Retourne dans n8n > node "Verify HMAC" et remplace la valeur de la constante :

const REDAX_WEBHOOK_SECRET = 'whsec_TON_SECRET_RÉEL';

Save le workflow.

4

Tester le webhook

Dans Redax > /settings/webhooks, clique sur le bouton de test à côté de ton webhook.

Va dans l'onglet "Deliveries" pour voir le résultat :

  • Status 200: tout est OK, ton site a reçu et publié l'article test
  • Status 401: problème d'auth (secret HMAC ou Bearer key)
  • Status 502 : ta route API a planté (voir logs Vercel)

Si test OK, tu devrais voir un nouveau fichier MDX (ou row Supabase) sur ton site.

Lancer une campagne de test

Maintenant que tout est branché, teste avec une vraie campagne pour valider le pipeline complet.

1

Créer la campagne

  1. Va sur /campaigns/new
  2. Choisis un client de test
  3. Saisis 2-3 briefs simples, un par ligne (ex : Article sur les tendances SEO 2026)
  4. Cadence : 1 article tous les 1 jour
  5. Heure : actuelle + 5 minutes (pour voir le premier article rapidement)
  6. Date de démarrage : aujourd'hui
  7. Clique sur "Activer la campagne"
2

Suivre l'exécution

Dans les 5 minutes après l'heure programmée, le premier article devrait :

  • Apparaître dans /articles
  • Déclencher le webhook → n8n → ta route API
  • Être publié sur ton site (commit GitHub ou row Supabase)

Surveille en temps réel :

  • Page détail de la campagne : status des articles individuels en live
  • /settings/webhooks > Deliveries : status des webhooks envoyés
  • Logs Vercel de ton site : pour debugger côté route API
3

Si quelque chose plante

Voir la section "Debug courant" ci-dessous pour les erreurs fréquentes.

Voir le debug

Adapter à une autre stack

Tu utilises Sanity, Contentful, Strapi, Vercel KV, Vercel Blob, ou un autre système ? Adapte la route API à ton cas. Voici le contrat à respecter.

Endpoint

Configure n'importe quelle route HTTP qui accepte POST. Pointe le node "HTTP Request" de n8n vers cette URL.

Auth

Header attendu :

Authorization: Bearer <REDAX_API_KEY>

La clé est arbitraire — choisis-la côté toi, mets-la dans tes env vars + dans le node HTTP n8n.

Body reçu

Structure du payload (typé TypeScript) :

type RedaxPayload = {
  event: "article.generated" | "article.published" | "audit.completed"
  delivery_id: string
  timestamp: string
  data: {
    id: string
    title: string
    content_html: string
    meta_description: string
    cover_image_url?: string
    seo_score?: number
    geo_score?: number
    word_count?: number
    created_at: string
  }
}

Réponses attendues

Ta route doit retourner :

StatusCasRéaction Redax
200Publication réussieDelivery marquée success
200 + { skipped: <event> }Event ignoré (ex: non géré)Delivery success, pas de retry
4xxErreur côté ton serveur (auth, payload invalide)Retry 2 fois, puis failed
5xxErreur serveurRetry 2 fois, puis failed

💡 Après 10 échecs consécutifs, Redax désactive automatiquement le webhook pour éviter de spammer un endpoint cassé. Tu peux le réactiver dans /settings/webhooks après avoir corrigé le problème.

Debug courant

Les erreurs les plus fréquentes et leurs solutions.

SymptômeCause probableSolution
Delivery 401 dans /settings/webhooksHMAC secret pas synchronisé entre Redax et n8nRecopie le secret webhook Redax dans le node "Verify HMAC" de ton workflow n8n
Logs Vercel : 401 UnauthorizedREDAX_API_KEY différente entre Vercel et le node HTTP n8nVérifie que la même clé est dans les 2 endroits
Delivery 502 "GitHub commit failed"Token GitHub expiré ou scope insuffisantRégénère un token avec scope repo et expiration 90j+
Delivery 502 "Database insert failed"Table articles inexistante ou contrainte UNIQUE violéeVérifie la migration SQL + unicité du slug
Commit GitHub OK mais site pas à jourVercel n'a pas redéployéVérifie l'onglet Deployments de Vercel + force un redeploy
Article créé en DB Supabase mais pas affichéPage de listing pas revalidéeAjoute revalidatePath() ou utilise ISR sur tes pages blog
Le webhook n'est jamais déclenchéEvent non émis — vérifie /settings/webhooks DeliveriesLes events sont émis uniquement quand un article est généré (manuel ou campagne)
Workflow n8n ne reçoit rienWebhook n8n inactif (toggle off)Active le workflow dans n8n (toggle en haut à droite)

💡 Pour chaque delivery échouée, Redax affiche le response body de ton serveur dans /settings/webhooks > Deliveries > détail. C'est ton meilleur ami pour debugger.

Aller plus loin

Documentation API publique

Endpoints REST pour interroger tes articles, audits, campagnes depuis ton propre code.

Voir la doc API

Autres intégrations

Templates pour WordPress, Notion et autres CMS prêts à l'emploi.

Voir les intégrations

Besoin d'aide pour setup ?

On peut configurer tout ça pour toi en 30 minutes Zoom (149€, ou 99€ pour les plans Team/Business).

Contacter le support