Atualiza events
PUT/api/events/{id}
- Auth
- Jeton requis
- Qui peut l’appeler:
- owner
- admin
- moderator
- Clé d’API:
- events:write
- X-CommunityId
X-CommunityIdEnvoyez le X-CommunityId de la communauté où l’opération a lieu.
Sujeito a verificação de papel (RBAC). O item precisa ser da comunidade do `X-CommunityId`: de outra comunidade, responde 404, como se não existisse.
**Slug:** só é recalculado quando o título muda. Reenviar o slug gerado a partir do título atual, sem mudar o título, é ignorado (não colide com outro evento de mesmo título); o próprio slug do evento nunca colide consigo mesmo. Um slug personalizado diferente continua sendo validado (400 se estiver em uso).
**Certificado:** `certificate` `{ enabled, templateId?, text? }` é opcional e **mescla**: o que não vem mantém o estado, e gravar outros campos do evento nunca mexe no certificado. O servidor grava `certificateEnabledAt` na virada de desligado para ligado e o zera ao desligar. Só owner e admin enviam o bloco (moderador que edita o evento recebe 403 se o enviar). Ligar exige que o evento tenha `endTime` (400). Erros em `errors[].param`: `certificate.templateId` (outro tenant, 404; inativo, 400), `certificate.text`, `certificate.enabled`. Fim igual ou anterior ao início (também quando muda só um dos dois, contra o valor gravado), 400. `bannerUrl` e `featuredImageUrl` aceitam `null` para remover a imagem. A resposta traz `data.certificate` (owner e admin) e `data.issuesCertificate`.
Paramètres
| Nom | Emplacement | Type | Description |
|---|---|---|---|
idobligatoire | path | string (uuid) |
En-têtes
| Nom | Type | Description |
|---|---|---|
If-Unmodified-Sincefacultatif | string | Opcional: a versão lida (`updatedAt` do `GET`), como data HTTP, se não vier `updatedAt` no corpo. Outra gravação depois dela responde 409. |
X-CommunityIdfacultatif | string (uuid) | ID da comunidade em que a operação acontece. Obrigatório na maioria dos endpoints com escopo de comunidade. |
Corps de la requête application/json
| Nom | Type | Description |
|---|---|---|
updatedAtfacultatif | string (date-time) | Opcional: a versão lida (`updatedAt` do `GET`). Diferente da atual responde 409; sem ela grava sem conferir. |
spaceIdfacultatif | string (uuid) | Valid space ID required if provided |
startTimefacultatif | string | Início. Sem fuso, é o horário da comunidade; com `Z` ou deslocamento, é esse instante. Mudando só um dos dois, o outro vale o que está gravado. |
endTimefacultatif | string | Fim, com a mesma regra de fuso do início. Igual ou antes do início, 400 com `errors[].param`. |
certificatefacultatif | object | Certificado de evento: bloco opcional de `POST` e `PUT /api/events`. Quem confirma presença (`going`) até o fim do evento recebe o certificado cerca de 1 hora depois. **Ausente** não mexe em nada: gravar outros campos do evento nunca muda o certificado, e evento novo sem o bloco nasce desligado. `certificateEnabledAt` é do servidor e **não** é enviado: ele grava na virada de desligado para ligado (religar grava de novo) e zera ao desligar; só eventos que terminam a partir dele emitem, sem emissão retroativa. Desligar mantém o modelo e o texto. **Só owner e admin** (e SuperAdmin) enviam o bloco: moderador e membro recebem 403, mesmo que possam editar o evento. Ligar exige `endTime` (400 sem ele, `errors[].param = certificate.enabled`). |
certificate.enabledfacultatif | boolean | Liga ou desliga. Ausente mantém o estado atual (desligado num evento novo). |
certificate.templateIdfacultatif | string (uuid) | Modelo do módulo Certificados. Tem de ser ATIVO e da mesma comunidade: de outra comunidade, 404; rascunho, arquivado ou apagado, 400 (`errors[].param = certificate.templateId`). Ausente mantém; `null` ou sem modelo vale o padrão do sistema (criado sob demanda, com o espaço Certificados se a comunidade não tem um). |
certificate.textfacultatif | string | Texto do certificado: texto simples (sem HTML), com as variáveis `{nome}`, `{assunto}` (o título do evento), `{data}` (a data do evento no fuso do evento, ou o da comunidade: "12 de outubro de 2026"; em dias diferentes "12 a 14 de outubro de 2026") e `{cargaHoraria}`; `[...]` entre colchetes some quando a variável dentro está vazia. Vazio ou `null` usa `certificate.defaultText`. · max 5000 |
checkInEnabledfacultatif | boolean | Liga ou desliga o check-in (ver `POST /api/events`). Ao ligar, quem já confirmou "Vou" ganha o ingresso na hora. |
checkInBadgeIdfacultatif | string (uuid) | "Badge ao fazer check-in": um badge do catálogo da comunidade (só owner e admin; moderador ou financeiro que o enviam, 403). Quem faz check-in recebe o badge (origem `rule`, `sourceRef` `event:<id>`), uma vez só e sem workflow. `null` tira. Badge que não existe ou de outra comunidade, 422 no campo. A resposta traz `data.checkInBadge`; desfazer o check-in não tira o badge. |
bannerUrlfacultatif | string | `null` remove o banner (e apaga o arquivo antigo). Uma URL só vale se vier do upload de banner desta comunidade; ao trocar, o arquivo antigo é apagado. |
featuredImageUrlfacultatif | string | `null` remove a imagem de destaque (e apaga o arquivo antigo). Uma URL só vale se vier do upload de destaque desta comunidade. |
hostIdsfacultatif | —[] | hostIds must be an array |
hostIds.*facultatif | string (uuid) | Each hostId must be a valid UUID |
organizerIdsfacultatif | —[] | organizerIds must be an array |
organizerIds.*facultatif | string (uuid) | Each organizerId must be a valid UUID |
visibilityfacultatif | public | members | plan | private | `public` (qualquer pessoa), `members` (membros da comunidade), `plan` (**assinantes** de um plano, e a equipe) ou `private` (só a equipe: owner, admin, moderador, financeiro). O "Privado" das telas é `private`; `plan` abre o evento para quem assina. |
bannerFocalXfacultatif | number | Ponto focal da capa, horizontal (0 = esquerda, 1 = direita). `null` limpa. · ≥ 0, ≤ 1 |
bannerFocalYfacultatif | number | Ponto focal da capa, vertical (0 = topo, 1 = base). · ≥ 0, ≤ 1 |
featuredFocalXfacultatif | number | Ponto focal da imagem do card, horizontal. · ≥ 0, ≤ 1 |
featuredFocalYfacultatif | number | Ponto focal da imagem do card, vertical. · ≥ 0, ≤ 1 |
Réponses
| Statut | Description |
|---|---|
200 | Operação realizada com sucesso. |
400 | Requisição inválida — falha de validação. |
401 | Token ausente, inválido ou expirado; token de outra comunidade (o `X-CommunityId` ou o `communityId` do corpo não é o do token); token antigo ou de uma sessão encerrada (troca de senha, convite aceito). Nesses casos a mensagem pede para entrar de novo (`auth.signInAgain`). |
403 | Autenticado, mas sem permissão para esta operação. |
404 | Recurso não encontrado. |
409 | Outra gravação veio antes da versão enviada (`updatedAt` no corpo ou `If-Unmodified-Since`); `data.updatedAt` é a versão atual: recarregue e repita. Cada gravação avisa os editores abertos (`item.saved`, ver `POST /api/realtime/ticket`). |
500 | Erro interno do servidor. |
Exemple curl
curl -X PUT "https://api.memberfy.net/api/events/<id>" \
-H "Authorization: Bearer $TOKEN" \
-H "X-CommunityId: $COMMUNITY_ID" \
-H "Content-Type: application/json" \
-d '{}'