Pular para o conteúdo

Cria um e-mail na biblioteca (sem disparar nada)

POST/api/emails

Auth
Exige token
Quem pode:
owner
admin
moderator
finance
Chave de API:
reports:write
X-CommunityId
X-CommunityId Envie o X-CommunityId da comunidade em que a operação acontece.

Owner, admin, moderador e financeiro (o de e-mail padrão, `usage: DEFAULT_OVERRIDE`, só owner e admin). `versions` traz uma versão por idioma; sem ela, `subject`, `preheader`, `blocks` e `intro` são a versão do idioma principal (`mainLanguage`, padrão: o da comunidade). As regras dos blocos e das variáveis são as das campanhas (422, um erro por campo); num e-mail padrão, as do e-mail substituído (blocos travados, só variáveis baratas, sem blocos dinâmicos).

Headers

NomeTipoDescrição
X-CommunityIdopcionalstring (uuid)ID da comunidade em que a operação acontece. Obrigatório na maioria dos endpoints com escopo de comunidade.

Corpo da requisição application/json

NomeTipoDescrição
nameobrigatóriostringmax 200
usageopcionalFREE | DEFAULT_OVERRIDE
emailKeyopcionalstringSó com DEFAULT_OVERRIDE (ver `GET /api/email-overrides`)
mainLanguageopcionalstring
subjectopcionalstringmax 300
preheaderopcionalstringmax 300
blocksopcionalobject[]
blocks[].typeobrigatóriotext | button | image | latestPosts | upcomingEvents | course | event | product | newCourses | newClassifieds
blocks[].htmlopcionalstringSó em `text`. HTML rico, sanitizado como nos posts. `{{nome}}` vira o primeiro nome de cada pessoa.
blocks[].textopcionalstringSó em `button`. · max 80
blocks[].urlopcionalstringEm `button` (destino) e `image` (endereço; use o de `POST /api/upload/campaigns/image` ou outro https). Só http ou https.
blocks[].altopcionalstringSó em `image`. · max 200
blocks[].countopcionalintegerEm `latestPosts`, `upcomingEvents`, `newCourses` e `newClassifieds`: quantos itens. · ≥ 1, ≤ 10
blocks[].spaceIdopcionalstring (uuid)Em `latestPosts`: o espaço de conteúdo (nulo = todos os abertos).
blocks[].withinDaysopcionalintegerEm `upcomingEvents`: janela a partir do dia do envio. · ≥ 1, ≤ 90
blocks[].headingopcionalstringEm `latestPosts` e `upcomingEvents`: título da seção (padrão traduzido). · max 80
blocks[].courseIdsopcionalstring (uuid)[]Em `course`: de 1 a 6 cursos, na ordem em que aparecem. Ver `productIds`.
blocks[].eventIdsopcionalstring (uuid)[]Em `event`: de 1 a 6 eventos, na ordem em que aparecem. Ver `productIds`.
blocks[].productIdsopcionalstring (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[].courseIdopcionalstring (uuid)Em `course`: forma antiga, de um curso só (equivale a `courseIds` com um item). Na resposta, espelha o primeiro de `courseIds`.
blocks[].eventIdopcionalstring (uuid)Em `event`: forma antiga, de um evento só (equivale a `eventIds` com um item). Na resposta, espelha o primeiro de `eventIds`.
blocks[].productIdopcionalstring (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`.
versionsopcionalobject[]
versions[].languageopcionalstring
versions[].subjectopcionalstringmax 300
versions[].preheaderopcionalstringmax 300
versions[].introopcionalstring
versions[].blocksopcionalobject[]
versions[].blocks[].typeobrigatóriotext | button | image | latestPosts | upcomingEvents | course | event | product | newCourses | newClassifieds
versions[].blocks[].htmlopcionalstringSó em `text`. HTML rico, sanitizado como nos posts. `{{nome}}` vira o primeiro nome de cada pessoa.
versions[].blocks[].textopcionalstringSó em `button`. · max 80
versions[].blocks[].urlopcionalstringEm `button` (destino) e `image` (endereço; use o de `POST /api/upload/campaigns/image` ou outro https). Só http ou https.
versions[].blocks[].altopcionalstringSó em `image`. · max 200
versions[].blocks[].countopcionalintegerEm `latestPosts`, `upcomingEvents`, `newCourses` e `newClassifieds`: quantos itens. · ≥ 1, ≤ 10
versions[].blocks[].spaceIdopcionalstring (uuid)Em `latestPosts`: o espaço de conteúdo (nulo = todos os abertos).
versions[].blocks[].withinDaysopcionalintegerEm `upcomingEvents`: janela a partir do dia do envio. · ≥ 1, ≤ 90
versions[].blocks[].headingopcionalstringEm `latestPosts` e `upcomingEvents`: título da seção (padrão traduzido). · max 80
versions[].blocks[].courseIdsopcionalstring (uuid)[]Em `course`: de 1 a 6 cursos, na ordem em que aparecem. Ver `productIds`.
versions[].blocks[].eventIdsopcionalstring (uuid)[]Em `event`: de 1 a 6 eventos, na ordem em que aparecem. Ver `productIds`.
versions[].blocks[].productIdsopcionalstring (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`.
versions[].blocks[].courseIdopcionalstring (uuid)Em `course`: forma antiga, de um curso só (equivale a `courseIds` com um item). Na resposta, espelha o primeiro de `courseIds`.
versions[].blocks[].eventIdopcionalstring (uuid)Em `event`: forma antiga, de um evento só (equivale a `eventIds` com um item). Na resposta, espelha o primeiro de `eventIds`.
versions[].blocks[].productIdopcionalstring (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`.
versions[].updatedAtopcionalstring (date-time)

Respostas

CódigoDescrição
201O e-mail criado.
401Token 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`).
403Autenticado, mas sem permissão para esta operação.
422Campo inválido (um erro por campo).
500Erro interno do servidor.

Exemplo com curl

curl -X POST "https://api.memberfy.net/api/emails" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-CommunityId: $COMMUNITY_ID" \
  -H "Content-Type: application/json" \
  -d '{"name":"string"}'