Lanzar cientos de peticiones HTTP
Recorrer quinientas llamadas a una API desde su propio servidor significa quinientas conexiones abiertas, quinientas oportunidades de que algo se agote, y un script que tiene que vigilar reintentos a mano. Este endpoint toma la lista completa, la dispara, y le entrega cada respuesta en un solo lugar cuando todas están listas.
El script que no debería vivir en su servidor de aplicación
En casi todo código hay, en algún lugar, un bucle que llama a una API externa varios cientos de veces seguidas: verificar una lista de URLs para saber si siguen activas, obtener precios de una lista de endpoints de productos, notificar a una lista de webhooks de suscriptores. Ejecutado dentro del mismo proceso que atiende tráfico de usuarios, ese bucle compite por conexiones y CPU con las peticiones que realmente pagan las cuentas, y un solo endpoint lento en la lista puede frenar todo el lote. dev.http_batch saca ese bucle por completo de ahí.
Qué hace realmente una sola llamada
Envíe POST a /dev/http-batch con una lista de peticiones —cada una con su propia URL, método, encabezados y cuerpo según haga falta— y reciba un task_id de inmediato. Las peticiones corren de forma concurrente en segundo plano, cada una con su propio manejo de reintentos, sin tocar en ningún momento el pool de conexiones ni el ciclo de eventos de su propio servidor mientras están en vuelo.
Cómo regresan juntos los resultados
Una vez que cada petición del lote se resuelve —exitosa, fallida, o con sus reintentos agotados— el conjunto completo de resultados llega como un solo payload, emparejado con la petición que produjo cada uno, entregado mediante una llamada de webhook firmada o disponible detrás de un enlace firmado válido por 24 horas. No hay que construir un sondeo de resultados parciales; recibe el panorama completo en una sola entrega.
Reintentos, fallos y un precio honesto
Cualquier petición individual del lote que falle se reintenta automáticamente hasta tres veces antes de marcarse como un fallo claro en los resultados, y una petición que nunca se completa jamás se cobra; solo las peticiones completadas cuentan para el precio plano de $0.002 por petición. Eso importa a escala: un lote de quinientas peticiones donde veinte apuntan a un endpoint de terceros inestable no lo castiga a usted por la caída de otro.
Dónde reemplaza a un cron job frágil
Un script nocturno que revisa dos mil URLs de webhook de clientes para confirmar que siguen respondiendo, o un trabajo que consulta tasas de cambio de una docena de proveedores antes de conciliar libros, es exactamente el tipo de despliegue masivo para el que se construyó este endpoint: envíe la lista una vez, deje que el lote corra sin supervisión, y lea los resultados cuando lleguen en lugar de mantener un cliente HTTP con límites de concurrencia hecho a mano.
Qué puede hacer con ella
Verificación de salud de URLs de webhook de clientes
Una plataforma que entrega webhooks a cientos de clientes agrupa una verificación de disponibilidad contra cada URL registrada de forma periódica, marcando los endpoints que fallan.
Obtención de precios de varios proveedores
Un motor de precios llama a una docena de APIs de proveedores a la vez para actualizar precios de productos, en lugar de recorrerlas una por una dentro de la aplicación.
Notificaciones masivas simultáneas
Una plataforma de eventos envía la misma actualización a cientos de URLs de retorno registradas por socios en un solo lote, en lugar de encolar llamadas HTTP individuales.
Monitoreo del estado de terceros
Un panel operativo interno agrupa verificaciones de estado contra decenas de servicios externos de los que depende, y revisa los resultados una vez que el lote termina.
Preguntas frecuentes
¿Cómo envío un lote de peticiones HTTP con esta API?
Envíe por POST una lista de peticiones —cada una con su propia URL, método, encabezados y cuerpo— a /dev/http-batch, guarde el task_id devuelto y reciba todos los resultados por webhook o mediante un enlace firmado válido por 24 horas.
¿Es gratis la API de peticiones HTTP en lote?
No, no hay plan gratuito ni prueba; cuesta una tarifa plana de $0.002 por petición completada dentro del lote, y las peticiones fallidas nunca se cobran.
¿Cuántas peticiones puede contener un lote?
El lote acepta una lista extensa de peticiones en una sola llamada; las listas muy grandes simplemente se procesan de forma concurrente y se devuelven juntas una vez que cada petición se resuelve.
¿Qué pasa si falla una petición dentro del lote?
Se reintenta automáticamente hasta tres veces, y si sigue fallando, los resultados la marcan claramente como fallida mientras el resto de las respuestas exitosas del lote no se ven afectadas.
¿Recibo los resultados a medida que terminan, o todos juntos?
Los resultados se entregan como un solo payload completo una vez que todo el lote se resuelve, emparejados con la petición que produjo cada uno.
¿Cada petición del lote puede usar un método o encabezados distintos?
Sí, cada petición de la lista es independiente, con su propia URL, método HTTP, encabezados y cuerpo según haga falta.
¿Sirve para hacer scraping o sondeo programado?
Está construido para un despliegue controlado y con propósito, como verificaciones de salud, obtención de precios o entrega de notificaciones; no es una herramienta general de scraping.
¿Ya está disponible este endpoint?
Sí, /dev/http-batch está disponible y aceptando solicitudes ahora mismo.
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/http-batch \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"input":"…"}'const res = await fetch("https://api.kit.forhosting.com/dev/http-batch", {
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/http-batch",
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/http-batch", 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/http-batch", 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.http_batch",
"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. |