emailIdfacultatif | string (uuid) | Um e-mail da biblioteca (sem `subject` e `blocks`) |
nameobligatoire | string | max 200 |
subjectfacultatif | string | max 300 |
preheaderfacultatif | string | max 300 |
blocksfacultatif | object[] | |
blocks[].typeobligatoire | text | button | image | latestPosts | upcomingEvents | course | event | product | newCourses | newClassifieds | |
blocks[].htmlfacultatif | string | Só em `text`. HTML rico, sanitizado como nos posts. `{{nome}}` vira o primeiro nome de cada pessoa. |
blocks[].textfacultatif | string | Só em `button`. · max 80 |
blocks[].urlfacultatif | string | Em `button` (destino) e `image` (endereço; use o de `POST /api/upload/campaigns/image` ou outro https). Só http ou https. |
blocks[].altfacultatif | string | Só em `image`. · max 200 |
blocks[].countfacultatif | integer | Em `latestPosts`, `upcomingEvents`, `newCourses` e `newClassifieds`: quantos itens. · ≥ 1, ≤ 10 |
blocks[].spaceIdfacultatif | string (uuid) | Em `latestPosts`: o espaço de conteúdo (nulo = todos os abertos). |
blocks[].withinDaysfacultatif | integer | Em `upcomingEvents`: janela a partir do dia do envio. · ≥ 1, ≤ 90 |
blocks[].headingfacultatif | string | Em `latestPosts` e `upcomingEvents`: título da seção (padrão traduzido). · max 80 |
blocks[].courseIdsfacultatif | string (uuid)[] | Em `course`: de 1 a 6 cursos, na ordem em que aparecem. Ver `productIds`. |
blocks[].eventIdsfacultatif | string (uuid)[] | Em `event`: de 1 a 6 eventos, na ordem em que aparecem. Ver `productIds`. |
blocks[].productIdsfacultatif | string (uuid)[] | Em `product`: de 1 a 6 produtos, sem repetidos, na ordem em que aparecem. Um item mostra o cartão de largura inteira; dois ou mais viram uma grade de 2 por linha no computador e 1 por linha no celular. Ao salvar, todos precisam ser visíveis a todos (senão 422 em `blocks[i]`); no envio, o que deixou de ser visível some e o bloco sem nenhum item some inteiro. Lista inválida (vazia, mais de 6, repetida, id malformado) devolve 422 em `blocks[i].productIds`. Vale igual para `eventIds` e `courseIds`.
|
blocks[].courseIdfacultatif | string (uuid) | Em `course`: forma antiga, de um curso só (equivale a `courseIds` com um item). Na resposta, espelha o primeiro de `courseIds`. |
blocks[].eventIdfacultatif | string (uuid) | Em `event`: forma antiga, de um evento só (equivale a `eventIds` com um item). Na resposta, espelha o primeiro de `eventIds`. |
blocks[].productIdfacultatif | string (uuid) | Em `product`: forma antiga, de um produto só (equivale a `productIds` com um item). Se `productIds` vier junto, vale a lista. Na resposta, espelha o primeiro de `productIds`. |
audiencefacultatif | object | Público: a união de todos os critérios, cada pessoa uma vez, menos quem cai em qualquer item de `exclude`. Quem se descadastrou, teve bounce permanente ou reclamou nunca entra. |
audience.allfacultatif | boolean | Toda a base da comunidade. |
audience.groupIdsfacultatif | string (uuid)[] | |
audience.tagsfacultatif | string[] | Nomes das tags. |
audience.memberIdsfacultatif | string (uuid)[] | Pessoas escolhidas na mão. Quem se descadastrou é recusado com erro no campo `audience.memberIds`. |
audience.fieldsfacultatif | object[] | Opcional. Condições por campo customizado: cada uma é mais uma parte da união, como um grupo ou uma tag (quem está no grupo X **ou** marcou Cloud). Até 10 condições somando as de `exclude.fields`. Só se aplicam no momento da prévia e de cada envio. Quem não tem valor no campo não entra.
|
audience.fields[].fieldIdfacultatif | string (uuid) | Id do campo (`GET /api/member-fields`). Informe este ou `key`. |
audience.fields[].keyfacultatif | string | Chave do campo (aceita também `campo_interesses`). Informe esta ou `fieldId`. |
audience.fields[].operatorfacultatif | oneOf | containsAny | containsAll | isTrue | isFalse | Sem operador: `oneOf` na escolha única e `containsAny` na múltipla; no sim/não é obrigatório. |
audience.fields[].valuesfacultatif | string[] | Valores (`value`) das opções; o rótulo também é aceito, sem diferenciar maiúsculas. Vazio no sim/não. |
audience.excludefacultatif | object | Opcional. Quem está em qualquer um destes grupos, tem qualquer uma destas tags ou é uma destas pessoas sai do público, mesmo que também esteja num grupo ou tag incluído. Sozinho não escolhe ninguém: precisa de `all` ou de algum critério de inclusão. Grupos e pessoas precisam ser da comunidade (senão 422 em `audience.exclude.groupIds` ou `audience.exclude.memberIds`). Só aparece na resposta quando há alguma exclusão.
|
audience.exclude.groupIdsfacultatif | string (uuid)[] | |
audience.exclude.tagsfacultatif | string[] | Nomes das tags. |
audience.exclude.memberIdsfacultatif | string (uuid)[] | |
audience.exclude.fieldsfacultatif | object[] | As mesmas condições de `fields`, para tirar do público ("menos quem marcou Linux"). |
audience.itemAccessfacultatif | object | Opcional. Modo "quem tem acesso a este conteúdo": o público é quem abre o conteúdo no app **no momento** da prévia e de cada envio (agendado ou recorrente, cada disparo recalcula): as regras do espaço (visibilidade, seção, grupos, produtos, planos, cadeado) e a visibilidade do conteúdo (`public`, `members`, `plan`; na comunidade paga, quem está sem plano só lê o que é `public`). A equipe (owner, admin, moderador, financeiro) sempre entra; o autor sem acesso, não. É um modo exclusivo, como `all`: com `all`, `groupIds`, `tags`, `memberIds` ou `fields` junto volta 422 em `audience.itemAccess`; `exclude` continua valendo. Só `type: content` por enquanto (outro tipo: 422 em `audience.itemAccess.type`). Conteúdo de outra comunidade ou apagado: 404; rascunho ou `private`: 422. Se o conteúdo for apagado ou fechado depois, o envio é recusado com 422. Não existe em workflows (422).
|
audience.itemAccess.typeobligatoire | content | Tipo do item. `event` chega na fase 2. |
audience.itemAccess.idobligatoire | string (uuid) | Id do conteúdo (post ou artigo). |