Programa una tarea
Una tarea que corre una vez es una solicitud; una tarea que corre todas las noches a las 2am es infraestructura. La API de Tareas Programadas le permite asignar una expresión cron a cualquier tarea del KIT para que se dispare sola, sin que tenga que montar un servidor de cron o un servicio programador solo para mantenerla viva.
Por qué los trabajos recurrentes merecen su propia pieza
Mucho trabajo real es periódico por naturaleza: una sincronización nocturna de traducciones, un barrido horario de transcripción de grabaciones nuevas, un resumen semanal de documentos para un reporte. Hacer esto manualmente, o armar su propio cron que llame a la API, significa que ahora es dueño de una pieza extra de infraestructura cuyo único propósito es acordarse de hacer una solicitud, y cuyo modo de falla —un demonio cron muerto en silencio— es fácil de pasar por alto hasta que alguien nota datos desactualizados. POST /flow/schedule elimina esa pieza por completo al convertir el horario en parte de la definición de la tarea.
Cómo funciona la programación
Envía una expresión cron estándar junto con cualquier tipo de tarea y sus parámetros, y la plataforma se encarga de dispararla en cada momento que coincida. Cada ejecución corre de forma independiente en nuestra red perimetral global, exactamente como lo haría una solicitud puntual, con su propio resultado y su propia entrega, así que no hay nada especial que aprender más allá de la sintaxis cron que ya conoce de cualquier otro programador que haya usado.
Qué pasa en cada ejecución
Cada corrida programada genera su propio task_id, así un trabajo nocturno produce un registro rastreable distinto cada noche, en vez de un solo proceso de larga duración que tenga que interpretar. Los resultados de cada corrida llegan igual que en cualquier otra tarea: por webhook firmado, o por un enlace firmado válido por 24 horas si prefiere consultarlo usted mismo, lo que significa que el mismo código de integración que escribiría para una solicitud puntual funciona sin cambios para una recurrente.
Confiabilidad sin cobros sorpresa
Si una corrida programada falla, recibe los mismos tres reintentos que cualquier otra tarea del KIT antes de devolver un error claro para esa ocurrencia específica, y una corrida fallida nunca se cobra. Una mala corrida el martes no cancela ni afecta la del miércoles, ya que cada ejecución es independiente, así un contratiempo pasajero en los datos de origen de una noche nunca pone en riesgo el resto del horario.
Dónde encaja la programación en el panorama general
Como un horario puede disparar cualquier tipo de tarea, incluyendo una cadena, un fan-out o un lote, es la pieza que convierte un flujo puntual en un proceso permanente: una traducción por lote cada noche de las entradas nuevas del catálogo, una cadena programada cada semana que resume y envía un reporte por correo, una revisión condicional cada hora sobre archivos entrantes.
Qué puede hacer con ella
Sincronización nocturna de traducción de catálogo
Programe una tarea de traducción en lote para que corra cada noche a una hora fija, manteniendo una tienda multilingüe sincronizada con los productos nuevos o modificados de forma automática.
Barrido horario de transcripción
Active una tarea de transcripción cada hora para procesar grabaciones recién subidas sin que una persona o un script aparte tenga que iniciarla.
Cadena de reporte semanal
Ejecute una cadena programada cada lunes por la mañana que resume los documentos de la semana y entrega el resultado por webhook a un sistema de reportes.
Revisión recurrente de calidad de contenido
Programe una tarea condicional diaria para marcar contenido que cae por debajo de un umbral de calidad, enrutándolo automáticamente a revisión en cuanto se detecta.
Preguntas frecuentes
¿Qué formato usa el horario?
Una expresión cron estándar, enviada junto con el tipo de tarea y sus parámetros a POST /flow/schedule.
¿La API de Tareas Programadas es gratis de configurar?
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.
¿Cada corrida programada tiene su propio resultado?
Sí, cada ejecución produce su propio task_id y su propio resultado, entregado de forma independiente, así puede rastrear y auditar cada corrida por separado.
¿Puedo programar cualquier tarea, incluidas cadenas y lotes?
Sí, un horario puede disparar cualquier tipo de tarea del KIT, incluyendo una cadena, un fan-out paralelo, un flujo condicional o un trabajo en lote.
¿Qué pasa si una corrida programada falla?
Recibe hasta tres reintentos automáticos como cualquier otra tarea, y luego devuelve un error específico para esa ocurrencia, sin cobro por la corrida fallida, sin afectar las corridas programadas posteriores.
¿Cómo me entero cuando termina una corrida programada?
Registre un webhook firmado para que le avisen al completarse cada corrida, o recupere el resultado desde un enlace firmado que permanece válido por 24 horas.
¿Puedo cambiar o cancelar un horario después de crearlo?
Sí, un horario se puede actualizar o eliminar cuando ya no se necesite, deteniendo las corridas futuras sin afectar las que ya se completaron.
¿Programar es lo mismo que ejecutar yo mismo una tarea en un bucle?
No, correr su propio bucle o cron significa mantener esa infraestructura usted mismo; aquí la recurrencia vive dentro de la definición de la tarea, sin necesidad de un servidor propio.
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/flow/schedule \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"input":"…"}'const res = await fetch("https://api.kit.forhosting.com/flow/schedule", {
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/flow/schedule",
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/flow/schedule", 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/flow/schedule", 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": "flow.schedule",
"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. |