Docs

Integraciones de publicación

Next.js y sitios personalizados (webhook)

Última actualización:

Recibe los artículos publicados como JSON en tu propio endpoint: estructura del payload, verificación de la firma y un ejemplo con Next.js.

Si tu sitio es una aplicación Next.js, un front end headless o cualquier otra cosa sin una API de contenido, Clodix puede enviar mediante POST cada artículo publicado como JSON a una URL que controlas. Es la integración que conviene usar en sitios hechos a medida, y además funciona muy bien como disparador para Zapier o Make.

Conéctala

  1. Abre Settings → Publishing integrations y haz clic en Next.js / Webhook.
  2. Rellena:
    • Webhook URL: una dirección https:// de tu servidor que acepte una solicitud POST.
    • Signing secret (opcional): defínelo y Clodix firmará cada solicitud para que puedas verificar que realmente viene de nosotros.
  3. Haz clic en Connect. Clodix envía un ping de prueba de inmediato: tu endpoint debe responder con un estado 2xx para que la conexión se realice con éxito.

El payload

Cada solicitud se envía con POST como JSON con el encabezado content-type: application/json. El envoltorio siempre tiene un campo event; la estructura del cuerpo depende del evento.

article.published: se envía cuando un artículo sale en línea:

{
  "event": "article.published",
  "article": {
    "title": "Best pour over coffee makers in 2026",
    "slug": "best-pour-over",
    "bodyHtml": "<p>...</p>",
    "metaDescription": "A guide to the best pour over coffee makers.",
    "imageUrl": "https://cdn.clodix.ai/covers/best-pour-over.jpg",
    "publishedAt": "2026-08-01T10:00:00.000Z"
  }
}

metaDescription, imageUrl y publishedAt solo se incluyen cuando el artículo los tiene.

article.unpublished: se envía cuando anulas la publicación de un artículo:

{ "event": "article.unpublished", "article": { "slug": "best-pour-over" } }

clodix.ping: la prueba de conexión que se envía una sola vez, cuando haces clic en Connect:

{ "event": "clodix.ping" }

Encabezados

EncabezadoValor
content-typeapplication/json
x-clodix-eventEl mismo valor que el campo event del cuerpo.
x-clodix-signatureSolo se envía cuando defines un signing secret; consulta más abajo.

Verificar la firma

Cuando defines un signing secret, Clodix firma el cuerpo exacto sin procesar de la solicitud con HMAC-SHA256, usando tu secreto como clave, y lo envía como x-clodix-signature: sha256=<hex digest>.

// app/api/clodix/route.ts
import { createHmac, timingSafeEqual } from "crypto";
import { NextRequest, NextResponse } from "next/server";

const SECRET = process.env.CLODIX_WEBHOOK_SECRET!;

export async function POST(req: NextRequest) {
  const rawBody = await req.text(); // read as text BEFORE parsing JSON
  const signature = req.headers.get("x-clodix-signature") ?? "";

  const expected =
    "sha256=" + createHmac("sha256", SECRET).update(rawBody).digest("hex");

  const ok =
    signature.length === expected.length &&
    timingSafeEqual(Buffer.from(signature), Buffer.from(expected));

  if (!ok) {
    return NextResponse.json({ error: "invalid signature" }, { status: 401 });
  }

  const payload = JSON.parse(rawBody);
  // payload.event is "article.published" | "article.unpublished" | "clodix.ping"
  // ... upsert payload.article into your database/CMS by slug ...

  return NextResponse.json({ ok: true });
}

Responde con 2xx

Tu endpoint debe responder con un estado de éxito (200–299) para que Clodix cuente la publicación como correcta, incluida la prueba de conexión. Una respuesta que no sea 2xx (o la ausencia de respuesta) se trata como una publicación fallida: el artículo permanece como borrador en Clodix y la pantalla de conexión (o el botón Publish del artículo) muestra el estado que tu endpoint devolvió realmente.

El endpoint debe tener una dirección pública en los puertos web estándar (https://… o http://… sin :port). Una dirección en una red local o privada, o una que redirija allí, se rechaza con «This address isn't reachable from Clodix», antes de enviarle nada.

Devolver una URL en vivo (opcional)

Si tu endpoint responde con { "url": "https://yoursite.com/blog/best-pour-over" }, Clodix la guarda como la URL publicada del artículo y la usa para avisar a los motores de búsqueda de que la página es nueva. Es opcional: tu endpoint puede simplemente devolver { "ok": true } sin URL.

Preguntas frecuentes

¿Necesito un signing secret?

Es opcional, pero se recomienda para cualquier cosa de cara al público: es la única forma de que tu endpoint confirme que una solicitud realmente viene de Clodix y no de alguien que adivinó tu URL.

¿Qué pasa si mi servidor está caído cuando Clodix intenta publicar?

La publicación falla y el artículo permanece como borrador. Consulta Problemas de publicación para saber qué hace Clodix a continuación y cómo reintentar de forma segura.

¿Puedo usar esto con Zapier o Make en lugar de mi propio servidor?

Sí: pega la URL del webhook que te dan Zapier o Make para un disparador «Catch Hook» / «Custom Webhook» en el campo Webhook URL y construye tu automatización desde ahí.

Temas relacionados

Next.js y sitios personalizados (webhook) — Clodix Docs