Programar un webhook
Ejecutar una tarea recurrente solía significar mantener un servidor o un contenedor vivo solo para vigilar un reloj. Esta API de tareas programadas cron le permite registrar un webhook contra una expresión cron y que se llame según ese horario desde nuestra infraestructura en vez de la suya, así lo único que mantiene es el endpoint que hace el trabajo real.
El costo de mantener su propio programador
Un equipo pequeño construyendo un producto SaaS, una persona desarrollando un proyecto personal, o un equipo de herramientas internas en una empresa más grande, todos terminan necesitando que algo suceda en un horario: un reporte nocturno, una revisión de renovaciones de suscripción, un precalentamiento de caché, y la respuesta tradicional es un proceso persistente en algún lugar: un demonio cron en una máquina virtual, un contenedor programado, una función sin servidor con su propia configuración de programación. Cada una de esas opciones necesita monitoreo, necesita sobrevivir reinicios, y necesita que alguien note cuando deja de dispararse en silencio. Para una sola tarea recurrente, esa infraestructura es desproporcionada frente al trabajo que hace.
Registrar un horario en una sola llamada
POST /dev/cron-webhook acepta una expresión cron y una URL de webhook destino, junto con el contenido a enviar en cada disparo; una vez registrado, el horario se guarda y el webhook se dispara automáticamente en cada momento correspondiente, sin sondeo ni conexión persistente de su lado. La solicitud de registro en sí se pone en cola de forma asíncrona y devuelve un task_id que confirma que el horario está activo, con confirmación entregada por webhook firmado o por un enlace firmado válido por 24 horas.
Una sintaxis cron que sobrevivió a las razones por las que se inventó
El formato de expresión cron se construyó para la utilidad cron original de Unix en los años setenta, para que los administradores listaran tareas recurrentes en una tabla de texto plano sin un programador gráfico. Décadas después, esa misma sintaxis compacta sigue siendo el lenguaje común para describir horarios recurrentes en casi cualquier plataforma, razón por la cual construir sobre ella, en vez de inventar una sintaxis de programación nueva, significa que las expresiones cron existentes, y el conocimiento de cómo escribirlas, se trasladan directamente a este endpoint.
Qué reemplaza en un sistema real
En vez de un proceso en segundo plano cuyo único trabajo es despertar, revisar la hora y disparar una solicitud HTTP, esa lógica se traslada por completo al registro del horario, y su aplicación solo necesita exponer un endpoint que reciba el webhook y haga el trabajo real cuando se le llame. Esto encaja de forma limpia con el resto de un flujo de tareas: un webhook disparado según un horario puede a su vez iniciar otras tareas asíncronas. A $0.002 por solicitud, el costo de mantener un disparador programado es insignificante frente a la infraestructura que reemplaza.
Acceso, confiabilidad y estado actual
Usar el endpoint requiere saldo prepago; sin saldo, la solicitud de registro devuelve HTTP 402 en vez de un horario que nunca se dispara en silencio. Una entrega fallida del disparo se reintenta automáticamente hasta tres veces antes de reportar un error claro, y un intento fallido nunca se cobra. El endpoint está activo ahora, y los datos del contenido asociados a cada horario se manejan bajo las mismas reglas de retención y borrado que el resto de la API, nunca se usan para entrenamiento.
Qué puede hacer con ella
Generación de reportes nocturnos
Dispare un webhook cada noche a una hora fija para iniciar un trabajo de reportes sin mantener un proceso programador corriendo.
Revisiones de suscripción y facturación
Dispare un webhook recurrente el primero de cada mes para revisar próximas renovaciones, sin un proceso dedicado en segundo plano.
Precalentamiento de caché y datos
Programe un webhook cada pocas horas para refrescar una caché o precalcular un conjunto de datos antes de un pico de tráfico.
Automatización de proyectos personales
Agregue un disparador programado a una aplicación pequeña sin aprovisionar un servidor solo para correr una tarea recurrente.
Preguntas frecuentes
¿Cómo funciona esta api de tareas programadas cron?
Envía una expresión cron y una URL de webhook a POST /dev/cron-webhook, y el webhook se llama automáticamente según ese horario a partir de entonces.
¿Necesito mantener un servidor corriendo para que funcione el horario?
No, el horario se almacena y dispara desde nuestra infraestructura; de su lado solo necesita exponer el endpoint que recibe la llamada del webhook.
¿Hay un nivel gratuito para esta api?
No hay capa gratuita: las capas gratis se abusan y ralentizan a todos. El acceso funciona con un saldo prepago de ForHosting KIT: se recarga desde $10.00 (no caduca) y cada solicitud se cobra a su precio publicado, así que una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens ni créditos inventados, y una tarea fallida no se cobra.
¿Cuánto cuesta la api de cron con webhook?
Cuesta un plano $0.002 por solicitud para registrar y administrar un horario.
¿Qué pasa si mi endpoint de webhook no responde?
Una entrega fallida se reintenta automáticamente hasta tres veces antes de reportar un error claro, y un intento fallido nunca se cobra.
¿Puedo usar cualquier expresión cron estándar?
Sí, acepta sintaxis cron estándar, así que las expresiones que ya usa en otros programadores generalmente se pueden reutilizar directamente.
¿Está activa la api de cron con webhook ahora mismo?
Sí, está activa y aceptando registros de horarios.
¿Puedo programar varios webhooks a la vez?
Sí, registre un horario por solicitud; cada uno es independiente, así puede correr varios disparadores recurrentes en paralelo.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/dev/cron-webhook \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"input":"…"}'const res = await fetch("https://api.kit.forhosting.com/dev/cron-webhook", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"input": "…"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/cron-webhook",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"input": "…"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/cron-webhook", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"input":"…"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"input":"…"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/cron-webhook", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"input": "…"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.cron_webhook",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |