Scheduling API-first: teu calendário é uma base de dados, não uma app

A maioria das ferramentas de scheduling trata a UI como o produto. O calendário vive dentro da app e a única forma de chegar nele é fazer login e clicar. Se queres fazer algo que o designer não imaginou — puxar as reuniões da próxima semana para a tua revisão semanal, criar horários de atendimento automaticamente a partir de um CSV, deixar a extensão Raycast de um colega marcar algo por ti — ficas preso.

O WhenToMeet adota a visão contrária. O calendário é uma base de dados. A UI é uma vista dele. Se queres outra vista, escreve-a.

É para isso que existe a REST API v1.

O que há na API

A superfície v1 em /api/v1/ é pequena de propósito. Cobre as coisas que as pessoas realmente automatizam:

  • Events — listar, ler e criar scheduling polls e direct events. /api/v1/polls
  • Bookings — ler os agendamentos que entraram pelas tuas booking pages. /api/v1/bookings
  • Calendar events — uma vista unificada de todos os calendários que ligaste, mais os teus scheduling events e bookings. /api/v1/calendar/events
  • Conflict checks — perguntar se um intervalo proposto colide com algo que já tens
  • Profile — buscar o teu perfil, fuso horário, tier e preferências

A autenticação é um Bearer token. Geras uma chave sk_… nas tuas definições, envias como Authorization: Bearer sk_…, e estás dentro. Cada endpoint é scoped — uma chave só vê o que tem permissão para ver.

Há um OpenAPI spec. Os docs em docs.whentomeet.io listam todos os endpoints com as formas de request e response, portanto podes apontar-lhe um gerador de código e obter um cliente tipado na linguagem que já usas.

Porquê gated para Pro

O acesso à API é uma feature Pro. A razão honesta é que uma API é uma superfície de suporte — as chaves vazam, os scripts fazem loop, os rate limits batem — e preferimos dar suporte cuidadoso a quem realmente precisa, em vez de espalhar por todas as contas gratuitas. Os rate limits são por chave e intencionalmente folgados para automação normal. Com um digest semanal não lá chegas.

O que isto muda

Quando o calendário é um endpoint real, o trabalho que ele gerava desaparece em scripts:

  • O estagiário já não copia as reuniões da próxima semana para a wiki da equipa. Um cron job faz isso.
  • Já não reencaminhas as notificações de booking para o teu CRM. Um poll estilo webhook escreve-as.
  • O engineering lead já não é o PM de scheduling. Um script partilhado cria o standup semanal com um comando.

Nada disto é novo em espírito — programadores colam SaaS com APIs há quinze anos. O que é novo é que ferramentas de scheduling historicamente recusaram estar nessa pilha. Tinhas o Calendly produto e mais nada. Com uma API a sério, o produto passa a ser um cliente entre muitos.

Se estás a construir algo

Começa em docs.whentomeet.io, gera uma chave, chama GET /api/v1/polls com ela, e vais ver os teus próprios scheduling polls a voltar em JSON. Tudo o resto é composição a partir daí.

Se preferes entregar as chaves a um agente em vez de escrever o script — Claude, ChatGPT, Cursor — o servidor MCP em /api/mcp embrulha os mesmos endpoints num protocolo que esses clientes já falam. Mesma auth, mesmos rate limits. Cobrimos isso no próximo post.