Saltar al contenido
Horóscopo de Bardo

La API del Bardo

Pública, sin clave y con CORS abierto (Access-Control-Allow-Origin: *). Devuelve JSON en UTF-8. El día es el de Madrid y cambia a medianoche: ninguna ruta enseña un día posterior a hoy.

Rutas

RutaDevuelve
GET /api/v1/signosLos doce signos: slug, nombre, emoji y alias
GET /api/v1/hoyLas doce profecías de hoy
GET /api/v1/signos/{signo}La profecía de un signo hoy; con ?fecha=AAAA-MM-DD, la de ese día
GET /api/v1/dias/{fecha}Un día completo del archivo

Los signos son rust, javascript, python, java, csharp, go, php, cobol, typescript, sql, kotlin y haskell. Los alias (js, ts, py, cs, rs, golang, kt, hs, c-sharp) redirigen con un 308 al slug.

La especificación completa está en /openapi.json (OpenAPI 3.1).

Ejemplos

Las doce profecías de hoy:

curl https://bardo.webninja.fyi/api/v1/hoy

La de un signo, con las cabeceras. Mira X-Bardo-Consejo:

curl -i https://bardo.webninja.fyi/api/v1/signos/rust

Responde algo así:

{
  "fecha": "2026-12-01",
  "signo": "rust",
  "texto": "Hoy el compilador os hablará con crueldad, y tendrá razón. Un lifetime que creíais domado volverá a por vos antes de la comida.",
  "puerto": { "numero": 8080, "servicio": "HTTP alternativo" },
  "compatible": { "signo": "go", "matiz": "a regañadientes" },
  "evita": "hacer clone() para callarlo",
  "origen": "banco"
}

El campo origen

Cada profecía dice de dónde sale:

Caché y ETag

Todas las respuestas llevan ETag y responden 304 si mandas If-None-Match y nada ha cambiado.

Errores

En JSON y con la voz del Bardo: { "error": "signo_desconocido", "mensaje": "…" }.

CódigoEstadoCuándo
signo_desconocido404El signo no es de los doce
fecha_invalida400La fecha no es AAAA-MM-DD
fuera_de_rango404Una fecha futura o anterior al lanzamiento
ruta_desconocida404La ruta no existe
metodo405Solo se admiten GET, HEAD y OPTIONS
demasiadas429Demasiadas peticiones seguidas; vuelve al cabo de Retry-After segundos

La tarjeta para tu README

GET /tarjeta/{signo}.svg devuelve la profecía de hoy en una tarjeta SVG de 495 px de ancho. Con ?tema=claro u ?tema=oscuro fija los colores; sin él, sigue al sistema. El fragmento listo para copiar está en la página de cada signo, por ejemplo la de Rust.