Texto de entrada → texto de salida. Envía un fragmento en JSON y recibe el resultado minificado, formateado o convertido. Funciona con las mismas herramientas de Node (Terser, clean-css, html-minifier-terser, prettier, svgo) que nuestras herramientas web, así que el resultado coincide exactamente.

# Minify a JavaScript snippet
curl -X POST https://jinero.online/api/v1/code/minify \
  -H "Content-Type: application/json" \
  -d '{"code": "function add(a, b) { return a + b; }", "type": "js"}'
const r = await fetch("https://jinero.online/api/v1/code/minify", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ code: source, type: "js", mode: "minify" }),
});
const { output, savings_percent } = await r.json();

Todos los endpoints son públicos: no se necesita clave. Las operaciones son simples transformaciones de texto (sin GPU ni procesamiento de imágenes), así que los límites son más altos que en la Images API.

# Anonymous limits (per IP):
#   POST /code/minify    30 req/min
#   POST /code/detect    30 req/min
#   POST /code/convert   30 req/min
#   GET  /code/converters 30 req/min

# Max snippet size: 200,000 chars (~200 KB)

Comprime o formatea de forma legible un fragmento. El mismo endpoint funciona en ambos sentidos con el parámetro mode: útil cuando tienes archivos de configuración JSON o CSS minificado en una sola línea que quieres leer.

POST https://jinero.online/api/v1/code/minify
ParámetroTipoDescripción
code string Código fuente. Máximo 200.000 caracteres.
type string Uno de: js, css, html, svg, json, xml, auto. Usa "auto" para que el servidor detecte el contenido.
mode string minify (predeterminado) o beautify.
keep_license boolean Conserva los comentarios de licencia /*! ... */ al minificar. Predeterminado: true.
curl -X POST https://jinero.online/api/v1/code/minify \
  -H "Content-Type: application/json" \
  -d @- <<JSON
{
  "code": ".btn { color: red;  padding: 8px 12px; }",
  "type": "css",
  "mode": "minify"
}
JSON
const r = await fetch("https://jinero.online/api/v1/code/minify", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    code: cssSource,
    type: "css",
    mode: "minify",
    keep_license: true,
  }),
});
const data = await r.json();
$response = Http::post("https://jinero.online/api/v1/code/minify", [
    "code" => $jsSource,
    "type" => "js",
    "mode" => "minify",
]);
$minified = $response->json("output");
Ejemplo de respuesta
{
  "success": true,
  "type": "css",
  "mode": "minify",
  "output": ".btn{color:red;padding:8px 12px}",
  "original_size": 46,
  "output_size": 27,
  "savings_percent": 41.3,
  "line_count": 1
}

Detecta automáticamente el lenguaje de un fragmento. Devuelve el tipo detectado y la lista de formatos de destino de los convertidores que lo aceptan como entrada: útil para crear menús desplegables de “convertir a…”.

POST https://jinero.online/api/v1/code/detect
ParámetroTipoDescripción
code string Código fuente. Máximo 200.000 caracteres.
curl -X POST https://jinero.online/api/v1/code/detect \
  -H "Content-Type: application/json" \
  -d '{"code": "{\"name\": \"jinero\"}"}'
const r = await fetch("https://jinero.online/api/v1/code/detect", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ code: snippet }),
});
const { detected_type, available_targets } = await r.json();
Ejemplo de respuesta
{
  "success": true,
  "detected_type": "json",
  "confidence": 0.97,
  "available_targets": ["yaml", "toml", "xml", "csv"]
}

Consulta todas las conversiones admitidas (from → to) con el esquema de opciones de cada par. Úsalo para crear interfaces que se adapten automáticamente cuando añadamos nuevos convertidores.

GET https://jinero.online/api/v1/code/converters
curl https://jinero.online/api/v1/code/converters
const r = await fetch("https://jinero.online/api/v1/code/converters");
const { converters } = await r.json();
// converters is a flat list of { id, from, to, label, optionsSchema }
Ejemplo de respuesta
{
  "success": true,
  "converters": [
    { "id": "json-to-yaml", "from": "json", "to": "yaml", "label": "JSON → YAML", "optionsSchema": {} },
    { "id": "css-to-scss",  "from": "css",  "to": "scss", "label": "CSS → SCSS",  "optionsSchema": {} },
    { "id": "html-to-pug",  "from": "html", "to": "pug",  "label": "HTML → Pug",  "optionsSchema": {} }
  ]
}

Convierte un fragmento de un lenguaje a otro. Admite JSON↔YAML↔TOML↔XML, CSS↔SCSS, HTML↔Pug, SVG↔JSX y más: llama a /code/converters para ver la lista completa.

POST https://jinero.online/api/v1/code/convert
ParámetroTipoDescripción
code string Código fuente. Máximo 200.000 caracteres.
from string Identificador del lenguaje de origen, tomado de /code/converters.
to string Identificador del lenguaje de destino.
options object Ajustes específicos de cada convertidor (consulta optionsSchema en /code/converters).
curl -X POST https://jinero.online/api/v1/code/convert \
  -H "Content-Type: application/json" \
  -d '{"code": "{\"name\": \"jinero\"}", "from": "json", "to": "yaml"}'
const r = await fetch("https://jinero.online/api/v1/code/convert", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    code: jsonSource,
    from: "json",
    to: "yaml",
  }),
});
const { output } = await r.json();
$res = Http::post("https://jinero.online/api/v1/code/convert", [
    "code" => $cssSource,
    "from" => "css",
    "to" => "scss",
]);
$scss = $res->json("output");
Ejemplo de respuesta
{
  "success": true,
  "from": "json",
  "to": "yaml",
  "output": "name: jinero\n",
  "notes": null
}

Semántica HTTP estándar. Los errores devuelven un JSON con el campo "message", que describe el fallo.

// 422 — validation (unknown type, oversize snippet, unsupported converter)
{ "message": "The type field must be one of: js, css, html, svg, json, xml, auto." }

// 422 — minification/conversion error from the underlying tool
{ "message": "Unexpected token at line 12" }

// 429 — rate limit exceeded
{ "message": "Too Many Attempts." }

// 500 — registry unreachable (Node helper crashed)
{ "message": "Registry unavailable" }

Acerca de la Code API de jinero.online

API REST gratuita para minificar, formatear y convertir código (JS, CSS, HTML, SVG, JSON, YAML, TOML, XML, Pug, SCSS) con un único contrato JSON limpio.

Herramientas probadas

Terser, clean-css, html-minifier-terser, prettier, svgo: los mismos motores que usa todo el mundo, disponibles mediante un contrato REST limpio.

Matriz de conversiones

Más de 20 pares de lenguajes: JSON↔YAML↔TOML↔XML, CSS↔SCSS, HTML↔Pug, SVG↔JSX. Consúltalos en /code/converters.

Límites de solicitudes altos

30 solicitudes/minuto por IP: texto de entrada, texto de salida y ningún archivo guardado del que preocuparse.

Sin estado y privada

Los fragmentos se procesan en memoria y nunca se registran. No hay nada que limpiar después.

Preguntas frecuentes

No. La Code API es pública y tiene un límite de solicitudes por IP: 30 solicitudes/minuto en cada endpoint. Regístrate y obtén un token si necesitas límites más altos.

200.000 caracteres (~200 KB) por solicitud. Es suficiente incluso para archivos CSS empaquetados o configuraciones JSON muy grandes. Para trabajos de minificación enormes, usa Terser en local.

Sí. Ambos llaman a los mismos scripts auxiliares de Node (resources/node/minify.js y resources/node/converter.js) con los mismos parámetros, así que el comportamiento es idéntico.

Ahora mismo, más de veinte pares: JSON↔YAML↔TOML↔XML, CSV↔JSON, CSS↔SCSS, HTML↔Pug, SVG↔JSX y otros. Llama a GET /code/converters para obtener la lista actualizada y legible por máquinas, que incluye el esquema de opciones de cada par.

No. El cuerpo de la solicitud se escribe en un archivo temporal para el script auxiliar de Node, se procesa y se elimina de inmediato. No registramos el contenido del código, solo los metadatos de la solicitud (tamaño, tipo, código de estado) para aplicar los límites.