Axuz Developers

POST /teams/{teamId}/calendar/events

Cria event em calendar do team.

  • Acesso: Membro da equipe
  • Serviço: https://api-calendar.axuz.net

Autenticação aceita

  • sessionCookie — Sessão plena Axuz (cookie de sessão da casa). Sessão restrita é 403 enrollment_required.
  • bearerSession — JWT de acesso da sessão em `Authorization: Bearer`.

Responde POST /teams/{teamId}/calendar/events.

Motivo: criar event (single ou recorrente) em um calendar do team ou personal do caller.

Comportamento: valida body (summary obrigatório, calendar_id UUID, dtend >= dtstart, rrule parseável por rrule-go, tz IANA-válido); verifica ownership do calendar (CalendarOwnership) — team calendar deve pertencer ao teamId da URL, personal deve pertencer ao caller; delega repo.CreateEvent; 201 com entity.

Entradas: URL teamId, JSON eventInput.

Retorno: JSON 201 ou erro (400/403/404/500).

Parâmetros

NomeEmTipoObrigatórioDescrição
teamIdpathstringsim

Corpo da requisição

application/json · Obrigatório

NomeTipoObrigatórioDescrição
calendar_idstring<uuid>sim
summarystringsim
descriptionstring | nullnão
locationstring | nullnão
dtstartstring<date-time>sim
dtendstring<date-time>sim

Deve ser >= dtstart.

all_daybooleannão
rrulestring | nullnão

Validado por rrule-go antes de persistir.

tzstring | nullnão

IANA timezone name. Rejeita aliases (EST, GMT-3). '' ou nil = UTC.

remindersarray<CalendarReminderInput> | nullnão

R-007. Ausente/null/[] = evento sem lembretes (não há default no servidor). Gravado na MESMA transação do evento. 400 (nunca 500) para: mais de 10 itens, offset ausente/null/fracionário/string ou fora de ±43200, kind fora do enum (comparação exata), par (offset, kind) repetido.

{
  "calendar_id": "00000000-0000-0000-0000-000000000000",
  "summary": "string",
  "description": "string",
  "location": "string",
  "dtstart": "2026-01-15T12:00:00Z",
  "dtend": "2026-01-15T12:00:00Z",
  "all_day": false,
  "rrule": "string",
  "tz": "string",
  "reminders": [
    {
      "trigger_offset_minutes": 1,
      "kind": "email"
    }
  ]
}

Respostas

201

Criado.

NomeTipoObrigatórioDescrição
idstring<uuid>sim
calendar_idstring<uuid> | nullnão
calendar_namestringnão
calendar_colorstringnão
team_idstring<uuid> | nullnão
summarystringsim
descriptionstring | nullnão
locationstring | nullnão
dtstartstring<date-time>sim
dtendstring<date-time>sim
all_daybooleansim
rrulestring | nullnão

RFC5545 RRULE (ex: FREQ=WEEKLY;BYDAY=MO,WE).

tzstringnão

IANA timezone name (Region/City). '' = UTC.

is_recurring_instancebooleannão

True quando é ocorrência expandida (não master row).

recurrence_idstring<date-time> | nullnão

dtstart canônico da ocorrência dentro da série.

parent_event_idstring<uuid> | nullnão

Aponta pro master quando é override.

is_overriddenbooleannão
created_bystring<uuid>não
created_atstring<date-time>não
updated_atstring<date-time>não
meet_room_idstring<uuid>não

Sala de vídeo vinculada ao evento (F-063). AUSENTE quando o evento não tem sala — o cliente testa presença da chave, não string vazia. Só é devolvido em GET .../events/{id}; a listagem não o traz. Com ele o cliente monta a URL do membro, <MEET_URL>/<teamId>/<meet_room_id>, e distingue "criar sala" de "entrar na sala" sem precisar POSTar para descobrir (O-005).

meet_room_slugstringnão

Slug da mesma sala. É a chave da entrada de CONVIDADO (<MEET_URL>/convidado/<slug>, sem conta nem team) — por isso vale como link de compartilhamento externo, e o meet_room_id não.

remindersarray<CalendarEventReminder>não

Lembretes do evento (R-007). Devolvido em GET .../events/{id} e na resposta de POST/PATCH que trouxe reminders; a listagem por janela NÃO o traz. AUSENTE quando o evento não tem lembretes.

reminders[].idstring<uuid>sim
reminders[].trigger_offset_minutesintegersim
reminders[].kindstringsim

enum: "email", "push", "inapp"

reminders[].fired_atstring<date-time>não

AUSENTE enquanto pendente; presente quando terminal.

400

Input inválido.

NomeTipoObrigatórioDescrição
errorstringsim

Mensagem humana curta; sem stack.

401

Faltando ou token inválido.

NomeTipoObrigatórioDescrição
errorstringsim

Mensagem humana curta; sem stack.

403

Sem permissão para o recurso.

NomeTipoObrigatórioDescrição
errorstringsim

Mensagem humana curta; sem stack.

404

Recurso não encontrado.

NomeTipoObrigatórioDescrição
errorstringsim

Mensagem humana curta; sem stack.

429

Limite de requisições excedido.

NomeTipoObrigatórioDescrição
errorstringsim

500

Erro interno. Tente de novo com backoff; reporte o X-Request-Id.

NomeTipoObrigatórioDescrição
errorstringsim

Exemplos

O "Try it" está desligado nesta referência. Use os exemplos com a sua credencial de teste.

curl

curl -sS -X POST 'https://api-calendar.axuz.net/teams/TEAM_ID/calendar/events' \
  -H "Authorization: Bearer $AXUZ_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"calendar_id":"00000000-0000-0000-0000-000000000000","summary":"string","description":"string","location":"string","dtstart":"2026-01-15T12:00:00Z","dtend":"2026-01-15T12:00:00Z","all_day":false,"rrule":"string","tz":"string","reminders":[{"trigger_offset_minutes":1,"kind":"email"}]}'

Node.js

const res = await fetch("https://api-calendar.axuz.net/teams/TEAM_ID/calendar/events", {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.AXUZ_TOKEN}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "calendar_id": "00000000-0000-0000-0000-000000000000",
    "summary": "string",
    "description": "string",
    "location": "string",
    "dtstart": "2026-01-15T12:00:00Z",
    "dtend": "2026-01-15T12:00:00Z",
    "all_day": false,
    "rrule": "string",
    "tz": "string",
    "reminders": [
      {
        "trigger_offset_minutes": 1,
        "kind": "email"
      }
    ]
  }),
});
if (!res.ok) throw new Error(`HTTP ${res.status}: ${await res.text()}`);
console.log(await res.json());

Python

import os
import requests

res = requests.request(
    "POST",
    "https://api-calendar.axuz.net/teams/TEAM_ID/calendar/events",
    headers={
        "Authorization": f"Bearer {os.environ['AXUZ_TOKEN']}",
    },
    json={
        "calendar_id": "00000000-0000-0000-0000-000000000000",
        "summary": "string",
        "description": "string",
        "location": "string",
        "dtstart": "2026-01-15T12:00:00Z",
        "dtend": "2026-01-15T12:00:00Z",
        "all_day": False,
        "rrule": "string",
        "tz": "string",
        "reminders": [
            {
                "trigger_offset_minutes": 1,
                "kind": "email",
            },
        ],
    },
    timeout=30,
)
res.raise_for_status()
print(res.json())