Gere a programação do evento e detecte conflitos de horário
Transforme uma lista de sessões, horários de início e durações em uma programação organizada sem fazer contas manualmente.
Executar grátis
O gerador ordena cada sessão, calcula o término exato, sinaliza atividades que avançam além da meia-noite e informa todos os conflitos com sua duração. É útil para congressos, oficinas, eventos comunitários, treinamentos e qualquer agenda em que um erro de horário possa confundir palestrantes, equipe ou participantes.
Informe uma programação de origem confiável
Comece pelo nome do evento e inclua um registro para cada sessão que você pretende publicar. Cada registro precisa de um nome claro, um horário inicial no formato HH:MM de 24 horas e uma duração positiva em minutos inteiros. O relógio de 24 horas elimina a ambiguidade entre manhã e noite, enquanto a duração em minutos descreve com a mesma precisão pausas curtas e oficinas longas. O gerador ordena os registros pelo início, portanto a entrada não precisa estar em ordem cronológica. Mesmo assim, use nomes distintos e fáceis de reconhecer, pois eles aparecem no relatório e ajudam a encontrar rapidamente um conflito. Considere a lista enviada como o plano oficial de um dia do evento. Se uma sessão começar tarde e ultrapassar a meia-noite, o término passa para o dia seguinte e o deslocamento de dia deixa essa transição explícita. Agendas vazias, horários inválidos, nomes ausentes e durações não positivas são recusados para evitar uma programação apenas aparentemente correta.
Entenda os horários finais e os alertas de conflito
O resultado traz o nome do evento, o total de sessões, uma lista cronológica, um indicador geral de conflitos e uma relação detalhada das sobreposições. Cada sessão mantém o início e a duração e recebe o horário final calculado. Um deslocamento de dia igual a zero indica término no mesmo dia; o valor um indica término depois da meia-noite seguinte. Duas sessões se sobrepõem quando a posterior começa antes de a anterior terminar. Se uma acabar exatamente às 10:30 e outra começar às 10:30, não há conflito. Quando existe sobreposição, o registro identifica as duas sessões e informa os minutos compartilhados, facilitando a decisão de encurtar uma palestra, mudar um início ou separar atividades em salas diferentes. O gerador verifica todos os pares relevantes, não apenas linhas vizinhas. Assim, uma oficina longa que atravesse várias sessões menores gera cada alerta aplicável.
Use a programação no fluxo do evento
Gere novamente o programa sempre que um horário mudar e use a resposta estruturada como fonte revisada para o site, o e-mail aos participantes, a agenda impressa, a sinalização ou as orientações aos palestrantes. Em um processo manual, cole o plano atual no executor do navegador e confira o indicador de conflitos antes da publicação. Em um processo automatizado, chame a API por US$ 0,002 quando uma pessoa salvar a agenda, bloqueie a publicação se has_overlaps for verdadeiro e leve os campos calculados ao modelo do documento. Como o algoritmo não usa rede, data atual, valores aleatórios nem pressupostos ocultos de calendário, a mesma entrada sempre produz a mesma saída. Essa previsibilidade ajuda a comparar revisões e descobrir quais horários mudaram. A ferramenta não escolhe salas, adiciona intervalos de deslocamento, deduz fusos horários nem corrige conflitos. Ela fornece aritmética precisa e um relatório completo para que a organização decida com informações confiáveis.
Casos de uso
Revisão da agenda de um congresso
Calcule o fim das palestras e detecte conflitos de pessoas ou salas antes de publicar a programação.
Planejamento de um dia de oficinas
Reúna aulas, exercícios, refeições e pausas em um cronograma com limites exatos.
Publicação automática da programação
Valide a agenda em um aplicativo e envie o resultado estruturado para modelos web, de e-mail ou impressos.
Perguntas frequentes
Quanto custa?
Cada solicitação à API custa US$ 0,002, e a versão do navegador pode ser executada localmente nesta página.
Qual formato de horário devo usar?
Use o formato HH:MM de 24 horas, como 09:30 ou 17:05.
O que acontece quando uma sessão passa da meia-noite?
O término avança para o dia seguinte, e day_offset informa quantos dias depois do início ele ocorre.
Sessões consecutivas são consideradas sobrepostas?
Não. Se uma começar no minuto exato em que a outra termina, ambas ficam na agenda sem alerta.
O gerador pode corrigir um conflito automaticamente?
Não. Ele informa cada par afetado e a duração da sobreposição; a organização decide sobre salas, palestrantes e horários.
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
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/doc/event-program-generate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"event_name":"Product Leadership Summit","sessions":[{"name":"Opening keynote","start_time":"09:00","duration_minutes":60},{"name":"Strategy panel","start_time":"09:45","duration_minutes":45},{"name":"Networking break","start_time":"10:30","duration_minutes":20}]}'const res = await fetch("https://api.kit.forhosting.com/doc/event-program-generate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"event_name": "Product Leadership Summit",
"sessions": [
{
"name": "Opening keynote",
"start_time": "09:00",
"duration_minutes": 60
},
{
"name": "Strategy panel",
"start_time": "09:45",
"duration_minutes": 45
},
{
"name": "Networking break",
"start_time": "10:30",
"duration_minutes": 20
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/doc/event-program-generate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"event_name": "Product Leadership Summit",
"sessions": [
{
"name": "Opening keynote",
"start_time": "09:00",
"duration_minutes": 60
},
{
"name": "Strategy panel",
"start_time": "09:45",
"duration_minutes": 45
},
{
"name": "Networking break",
"start_time": "10:30",
"duration_minutes": 20
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/doc/event-program-generate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"event_name":"Product Leadership Summit","sessions":[{"name":"Opening keynote","start_time":"09:00","duration_minutes":60},{"name":"Strategy panel","start_time":"09:45","duration_minutes":45},{"name":"Networking break","start_time":"10:30","duration_minutes":20}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"event_name":"Product Leadership Summit","sessions":[{"name":"Opening keynote","start_time":"09:00","duration_minutes":60},{"name":"Strategy panel","start_time":"09:45","duration_minutes":45},{"name":"Networking break","start_time":"10:30","duration_minutes":20}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/doc/event-program-generate", 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
{
"event_name": "Product Leadership Summit",
"sessions": [
{
"name": "Opening keynote",
"start_time": "09:00",
"duration_minutes": 60
},
{
"name": "Strategy panel",
"start_time": "09:45",
"duration_minutes": 45
},
{
"name": "Networking break",
"start_time": "10:30",
"duration_minutes": 20
}
]
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "doc.event_program_generate",
"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.
Limites
max_mb | 25 |
max_pages | 200 |
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. |