Primeros pasos
En menos de cinco minutos harás tu primera petición autenticada y leerás el contenido publicado de un blog. Todo lo que necesitas es la clave de API del blog y un cliente HTTP.
Requisitos previos
- Un blog creado en DraftIn con al menos un post publicado.
-
La clave de API del blog (cabecera
X-API-Key). Consulta Autenticación. -
Un cliente HTTP:
curl, elfetchdel navegador o Node 22+.
1. Guarda tu clave de forma segura
La clave de API concede acceso de lectura al contenido del blog. Mantenla fuera del código fuente — usa una variable de entorno:
# Nunca subas este archivo al repositorio. Añade ".env" a tu .gitignore.
DRAFTIN_API_KEY=dra_xxxxxxxxxxxxxxxxxxxxxxxxxxx 2. Conoce la base URL
Todos los endpoints públicos viven bajo el prefijo /public a partir
de la base de producción
https://api.draftin.io. Una ruta completa se ve así:
https://api.draftin.io/public/posts 3. Haz la primera llamada
Lista los cinco posts publicados más recientes. La clave va en la cabecera X-API-Key; ninguna otra cabecera es obligatoria para peticiones GET.
curl https://api.draftin.io/public/posts?limit=5 \
-H "X-API-Key: $DRAFTIN_API_KEY" const BASE = "https://api.draftin.io";
const res = await fetch(`${BASE}/public/posts?limit=5`, {
headers: { "X-API-Key": process.env.DRAFTIN_API_KEY },
});
if (!res.ok) throw new Error(`Fallo: ${res.status}`);
const { data: posts } = await res.json();
console.log(`${posts.length} posts cargados`); const BASE = "https://api.draftin.io";
interface Post {
id: string;
title: string;
slug: string;
status: "PUBLISHED";
publishedAt: string | null;
content: string;
}
const res = await fetch(`${BASE}/public/posts?limit=5`, {
headers: { "X-API-Key": process.env.DRAFTIN_API_KEY as string },
});
const { data: posts } = (await res.json()) as { data: Post[] };
posts.forEach((p) => console.log(p.title, "→", p.slug)); // Node 22+ — fetch es global, no hace falta ninguna dependencia.
// Ejecuta con: DRAFTIN_API_KEY=tuclave node listar-posts.js
const BASE = "https://api.draftin.io";
async function main() {
const res = await fetch(`${BASE}/public/posts?limit=5`, {
headers: { "X-API-Key": process.env.DRAFTIN_API_KEY },
});
if (res.status === 401) {
console.error("Clave de API inválida o ausente.");
process.exit(1);
}
const { data: posts } = await res.json();
console.table(posts.map((p) => ({ title: p.title, slug: p.slug })));
}
main().catch(console.error);
Una respuesta correcta (200 OK) es un envelope { success, data } con el array de objetos Post en data:
{
"success": true,
"data": [
{
"id": "clxxx101",
"title": "Mi Primer Post",
"subtitle": "Subtítulo del post",
"slug": "mi-primer-post",
"status": "PUBLISHED",
"publishedAt": "2026-06-01T12:00:00.000Z",
"content": "Contenido del post en HTML o Markdown",
"blogId": "clxxx789",
"authorId": "clxxx123",
"categories": [],
"tags": []
}
]
} 4. Maneja la autenticación ausente
Si la clave es incorrecta o falta, la API responde 401 Unauthorized. Verifica siempre res.ok (o el estado) antes de consumir el cuerpo:
const res = await fetch("https://api.draftin.io/public/posts", {
headers: { "X-API-Key": process.env.DRAFTIN_API_KEY },
});
switch (res.status) {
case 200:
return (await res.json()).data; // el payload viene en data
case 401:
throw new Error("Clave de API inválida o ausente.");
default:
throw new Error(`Error inesperado: ${res.status}`);
}