Reservar horário

POST/api/v1/agenda/:slug/bookings

Cria a reserva no tipo de evento do seu workspace. O organizador sai do rodízio configurado, o convidado recebe o convite do Google e a reserva entra no funil como na página pública. A origem vem de utm (aparece no negócio como "Origem"). Sem desafio anti-robô e sem teto por IP; no lugar, a API key e um teto de 60 reservas por hora por chave.

Parâmetros de path

slugobrigatório
string
Slug do tipo de evento do seu workspace (senão 404).

Body (JSON)

startobrigatório
string (ISO 8601)
Início escolhido, com fuso (um dos valores de days do GET de horários).
timezoneobrigatório
string (IANA)
Fuso do convidado (vai no convite e no e-mail).
nameobrigatório
string
Nome do convidado (2-120 caracteres).
emailobrigatório
string
E-mail do convidado · recebe o convite.
phone
string
WhatsApp do convidado (DDD + número). Vale mesmo sem pergunta de telefone no tipo de evento.
answers
object
Respostas { chave: valor } das perguntas do tipo de evento · pergunta obrigatória vazia retorna 422 com details.field.
default: {}
guests
string[]
Até 5 e-mails extras · só valem se o tipo de evento permite convidados.
utm
object
{ source, medium, campaign, content, term } · a origem da reserva.
referrer
string
Opcional · página de origem.

Headers

Idempotency-Key
string
Opcional, recomendado (8-200 caracteres, ex.: um UUID). A primeira request é processada normalmente; requests com a mesma key e mesmo body em até 24h retornam a resposta cacheada (header Idempotency-Replay: true), sem criar duplicata. Mesma key com body diferente retorna 422 IDEMPOTENCY_CONFLICT. Só respostas 2xx são cacheadas.
Status 201 · mesmo corpo de POST /api/agenda/:slug/book (página pública).
409 CONFLICT: o horário acabou de ser preenchido · busque os horários de novo e ofereça outro.
Mesma pessoa no mesmo horário devolve a reserva já existente (sem manageToken nem meetUrl). Cada pessoa (e-mail ou telefone) tem no máximo 3 reservas em 24h; a quarta retorna 422 em email.
Suporta Idempotency-Key · replays com mesmo body em até 24h retornam a resposta cacheada sem duplicar (útil pra retries de n8n/Zapier).

Autenticação: header Authorization: Bearer rmk_... · veja Introdução e autenticação.

curl -X POST "https://crmdojordao.com.br/api/v1/agenda/:slug/bookings" \
  -H "Authorization: Bearer rmk_SUA_CHAVE" \
  -H "Content-Type: application/json" \
  -d '{ "start": "2026-10-20T13:00:00.000Z", "timezone": "America/Sao_Paulo", "name": "Ana Souza", "email": "ana@empresaexemplo.com.br", "phone": "31999990000", "answers": {}, "utm": { "source": "ligacao_ia", "medium": "telefone" } }'
Request body
{
  "start": "2026-10-20T13:00:00.000Z",
  "timezone": "America/Sao_Paulo",
  "name": "Ana Souza",
  "email": "ana@empresaexemplo.com.br",
  "phone": "31999990000",
  "answers": {},
  "utm": { "source": "ligacao_ia", "medium": "telefone" }
}
Resposta · POST /api/v1/agenda/:slug/bookings
{
  "id": "bk_abc123",
  "manageToken": "tok_exemplo",
  "status": "CONFIRMED",
  "eventName": "Demonstração",
  "eventSlug": "demonstracao",
  "hostName": "Maria Vendas",
  "start": "2026-10-20T13:00:00.000Z",
  "end": "2026-10-20T14:00:00.000Z",
  "timezone": "America/Sao_Paulo",
  "inviteeName": "Ana Souza",
  "inviteeEmail": "ana@empresaexemplo.com.br",
  "meetUrl": "https://meet.google.com/abc-defg-hij",
  "googleHtmlLink": null,
  "confirmRedirectUrl": null,
  "rescheduledToToken": null
}