Requisições HTTP em lote
Entregue uma lista de até 100 chamadas web, cada uma com seu endereço, método, cabeçalhos e corpo, e elas rodam em paralelo com suas próprias novas tentativas. Todos os resultados voltam juntos em uma única entrega. Você paga pelo uso, sem assinatura.
Substitui aquele script de loop com retry e paralelismo que alguém escreveu às pressas e que hoje ninguém quer manter.
Por que vale tirar da sua aplicação um laço de chamadas externas
Quase toda aplicação tem em algum lugar um laço que chama serviços externos centenas de vezes seguidas: verificar se uma lista de endereços está no ar, buscar preços de muitos fornecedores ou enviar avisos para uma lista de assinantes. Rodando no mesmo processo que atende os seus usuários, esse laço disputa com eles conexões e tempo de processamento, e um único serviço lento pode travar a rodada inteira. Entregar a lista como um lote tira esse laço da sua aplicação.
Como um lote roda e volta
Você envia uma lista de até 100 chamadas, cada uma com seu endereço e, quando necessário, método, cabeçalhos e corpo, e recebe na hora uma referência da tarefa. As chamadas rodam ao mesmo tempo em segundo plano, cada uma com suas próprias novas tentativas. Quando todas terminam, com sucesso, com erro ou sem mais tentativas, os resultados chegam juntos. Assim um sistema de preços atualiza uma dúzia de fornecedores de uma vez, e um painel de operações confere dezenas de serviços externos num só lugar.
Preço simples
A cobrança é por uso: você paga quando dispara um lote e mais nada. Para quem hoje mantém uma função serverless só para fazer esse trabalho, a conta inclui também o custo que deixa de existir: deploy, log, monitoramento e manutenção do código do loop.
Use com responsabilidade
O lote é ferramenta para as suas URLs e para APIs públicas que aceitam esse uso. Respeite os termos de serviço e os limites de requisição dos sites de destino: disparar volume contra servidor alheio sem autorização é abuso — e costuma terminar em bloqueio do lado de lá. Para consultas em massa a serviços de terceiros, confirme antes que o volume é permitido.
Casos de uso
Pós-migração de site
Depois de migrar o site da empresa, o dev monta a lista com as 800 URLs do sitemap antigo e dispara o lote: o relatório mostra o status de cada uma, e os 404 e redirecionamentos quebrados aparecem de uma vez — antes que o Google os encontre.
Sincronização multiponto
A Distribuidora Horizonte Verde replica a atualização de preços para os sistemas das três filiais. Em vez de três integrações separadas, um lote com três POSTs — e o relatório confirma quem recebeu e quem falhou.
Perguntas frequentes
E se uma das requisições falhar?
O resultado traz a situação de cada requisição da lista individualmente: as que responderam, com status e corpo; as que falharam, com o erro. Um item quebrado não derruba o lote — você identifica exatamente o que refazer.
Existe limite de requisições por lote?
Não há limite publicado. O bom senso operacional continua valendo: lotes gigantes demoram mais para concluir, e o limite real costuma ser o do servidor de destino, não o do serviço.
Posso usar contra qualquer site?
Os termos de uso do destino valem mais que a capacidade técnica de chamar.
Como recebo o resultado?
Para listas grandes, é o desenho certo — nada de conexão pendurada esperando a última resposta.
Quanto custa e como se paga?
O valor está publicado em dólares americanos nesta página, sem taxa escondida.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Um POST autenticado cria a tarefa; o resultado chega por webhook ou por um link assinado. Esta capacidade está disponível pela API, não como ferramenta web interativa.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/dev/http-batch \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"requests":[{"url":"https://api.example.com/a","method":"GET"}]}'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({
"requests": [
{
"url": "https://api.example.com/a",
"method": "GET"
}
]
})
});
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={
"requests": [
{
"url": "https://api.example.com/a",
"method": "GET"
}
]
},
)
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" => '{"requests":[{"url":"https://api.example.com/a","method":"GET"}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"requests":[{"url":"https://api.example.com/a","method":"GET"}]}`)
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)Exemplo de requisição
{
"requests": [
{
"url": "https://api.example.com/a",
"method": "GET"
}
]
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.http_batch",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
Mande uma lista de requisições HTTP — URLs, métodos, cabeçalhos e corpos — em uma única chamada e receba as respostas reunidas no final.
Uma chamada, todas as respostas
O serviço executa as chamadas e agrega os resultados: para cada requisição da lista, o status, os cabeçalhos e o corpo da resposta. Em vez de disparar cem requisições do seu código e administrar fila, erro e espera, você envia a lista inteira para a API e recebe um task_id. Seu código faz um POST e lê um relatório — o trabalho sujo de orquestrar fica do lado de cá.
Para que serve na prática
Sempre que a tarefa é “repita esta requisição para esta lista”, o lote resolve sem você escrever o laço. Checar uma lista de URLs depois de uma migração de site, consultar uma API pública para cada linha de uma planilha, disparar o mesmo POST de sincronização para vários endpoints do seu próprio sistema, aquecer o cache das páginas mais importantes depois do deploy.
Preço simples
US$ 0,002 por chamada, em dólares americanos, com o valor publicado nesta página — sem mensalidade, sem plano, sem mínimo.
Casos de integração
Consulta de CEP em massa
O e-commerce precisa completar o endereço de 300 cadastros antigos. Uma requisição por CEP contra a API pública de consulta, tudo em um lote só — e as respostas voltam reunidas, prontas para preencher a planilha.