Pular para o conteúdo

Agenda

Agendas, horários livres, compromissos e bloqueios.

Leitura usa agenda:ler e escrita usa agenda:escrever. A API segue as mesmas regras do app e do agente de IA: horário de trabalho, bloqueios, intervalo e antecedência mínima. O módulo Agenda precisa estar no plano; se o plano perder o módulo, a chave deixa de funcionar na hora.

  • Datas e horas sempre com o fuso, como 2026-10-12T14:00:00-03:00 (ou Z). Sem o deslocamento a API recusa, nunca chuta o fuso. As respostas trazem inicio e fim em UTC e inicio_local e fim_local no fuso da agenda.
  • Veja os horários livres em GET /disponibilidade (janela de até 62 dias) e marque em POST /compromissos. Duas chamadas ao mesmo tempo para o mesmo horário: uma marca e a outra recebe 409 horario_ocupado, mesmo com muitas chamadas em paralelo.
  • Sem agenda_id, o compromisso vai para a primeira agenda com o horário livre. O contato vem de contato_id, conversa_id ou telefone (só um deles). Pelo telefone, o contato é criado se ainda não existir.
  • Duração: mande fim ou duracao_min; sem nenhum, vale a duração padrão da agenda.
  • Remarcar, cancelar e confirmar têm rota própria. Compromisso cancelado não volta: marque um novo. Cancelar duas vezes é seguro. PATCH marca presença (estado: concluido ou faltou) e edita título, local, link e notas.
  • Eventos de webhook: agendamento.criado, agendamento.remarcado (traz também anterior), agendamento.cancelado e agendamento.confirmado. Disparam para qualquer origem: app, agente de IA ou API.
  • Fora da API de propósito: apagar agenda, apagar compromisso (só cancelar), encaixe fora do horário, operações em massa e trocar o profissional de uma agenda. Apagar bloqueio existe, um por chamada.
  • Não existe cadastro de serviços: cada agenda tem a sua duração padrão (duracao_min).
Com contato que já existe e fim explícito
{
  "agenda_id": "f7233bb7-10b6-49d2-aa3b-8c2e7d88064d",
  "inicio": "2026-10-12T14:00:00-03:00",
  "fim": "2026-10-12T14:45:00-03:00",
  "contato_id": "08054a7f-a752-481e-9915-cf4cf944df39",
  "titulo": "Avaliação",
  "local": "Rua das Flores, 120 - sala 4"
}

Endpoints#

Códigos de erro#

Além dos gerais (chave, limite, JSON), estes podem vir em erro.codigo nas rotas daqui. Todos estão em Erros.

Códigos de erro
codigoO que significa
horario_invalidoData e hora inválidas. Use o formato 2026-10-12T14:00:00-03:00 (sempre com o fuso), com o fim depois do início.
janela_grandeA janela de consulta passa do máximo (62 dias).
duracao_invalidaDuração inválida: de 5 a 720 minutos (compromisso de até 12 horas).
campo_longoUm dos textos passa do tamanho máximo. O campo vem em "detalhe".
campo_invalidoCampo obrigatório ou inválido. O campo vem em "detalhe".
link_invalidoO link precisa começar com https://.
contato_ambiguoInforme só um entre contato_id, conversa_id e telefone.
conversa_de_outro_contatoA conversa informada é de outro contato.
evento_canceladoO compromisso está cancelado e não pode ser alterado. Marque um novo.
evento_finalizadoO compromisso já foi encerrado (concluído ou faltou) e não pode ser alterado.
horario_ocupadoEsse horário já está ocupado nessa agenda.
horario_bloqueadoEsse horário está bloqueado (folga, almoço ou feriado).
fora_do_horarioEsse horário está fora do horário de trabalho da agenda.
antecedenciaEsse horário está mais perto do que a antecedência mínima da agenda.
compromisso_estado_invalidoestado só pode ser concluido ou faltou. Para confirmar ou cancelar, use as rotas próprias.
nada_para_atualizarMande ao menos um campo para atualizar.
fuso_invalidoFuso inválido. Use um nome IANA, como America/Sao_Paulo.
cor_invalidaCor inválida. Use slate, blue, violet, amber, emerald, green, rose, cyan ou orange.
lembretes_invalidosLembretes inválidos: até 5 itens, cada um só com antes_min (1 a 43200).
usuario_inexistenteusuario_id não é de uma pessoa desta equipe.
agenda_inexistenteAgenda não encontrada (ou inativa, para marcar compromisso).
evento_inexistenteCompromisso não encontrado.
bloqueio_inexistenteBloqueio não encontrado.
agenda_repetidaEssa pessoa já tem uma agenda.
limite_agendasLimite de 100 agendas por organização.
limite_bloqueiosLimite de 500 bloqueios por organização.
bloqueio_tipo_invalidotipo deve ser folga, almoco, feriado ou outro.
repeticao_invalidarepetir deve ser nunca, diario, semanal ou anual; repetir_ate só vale com repetição.