Campanhas
Crie campanhas, escolha as listas de contatos delas e envie ou agende o envio.
Criar uma campanha
Cria uma campanha com o status draft. Requer uma chave de API com escopo full. Emite um evento campaign.created.
Uma campanha nova não tem destinatários. Escolha as listas de contatos dela com Atualizar uma campanha e depois envie ou agende o envio. Os créditos são cobrados quando a campanha é enviada: 2 créditos por e-mail.
/campaignsParâmetros do corpo
namestringobrigatóriosubjectstring{{first_name}}.from_emailstringnews@acme.com.from_namestringAcme. A mensagem é enviada de Acme <news@acme.com>.reply_tostringfrom_email quando a campanha é enviada.htmlstring{{first_name}}, {{last_name}}, {{email}}, {{unsubscribe_url}} e {{cf.<key>}} para campos personalizados. Defina o corpo ao criar a campanha.textstringhtml.preview_textstringhtml se precisar de um.contentstringhtml e text, não content.content_typestringpadrão: htmlcontent: html, text ou mjml. O Emailit não compila MJML; envie o HTML compilado em html.Retorno
Retorna 201 Created com o objeto de campanha. status é draft. A resposta não devolve html, text nem content.
Retorna 400 se name estiver ausente e 403 se a chave de API não tiver o escopo full.
{
"object": "campaign",
"id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
"name": "October newsletter",
"status": "draft",
"subject": "October news for {{first_name}}",
"from_email": "news@acme.com",
"from_name": "Acme",
"reply_to": "support@acme.com",
"preview_text": null,
"content_type": "html",
"created_at": "2026-10-01T09:30:12.482193Z",
"updated_at": "2026-10-01T09:30:12.482193Z"
}{
"error": "Bad Request"
}{
"statusCode": 403,
"error": "Forbidden",
"message": "Permission denied: campaigns:create"
}Obter uma campanha
Obtém uma campanha pelo ID ou pelo nome. Requer uma chave de API com escopo full.
/campaigns/{id}Parâmetros de caminho
idstringobrigatóriocmp_…) ou o nome da campanha. Codifique para URL os nomes que contêm espaços ou caracteres especiais.Retorno
Retorna o objeto de campanha.
objectstringcampaign.idstringcmp_.statusstringdraft, scheduled, queued, sending, sent, canceled ou archived. queued significa que uma campanha agendada chegou ao horário de envio e está aguardando um worker.namestringsubjectstringfrom_emailstring"" até ser definido.from_namestring"" até ser definido.reply_tostring"" significa que as respostas vão para from_email.preview_textstring | nullcontent_typestringhtml, text ou mjml para campanhas criadas pela API.scheduled_atstring | nullsent_atstring | nullrecipientsobject[]audience_id (aud_…) e exclude (true para uma lista excluída).O corpo (html, text e content) não é incluído na resposta. As estatísticas de engajamento estão disponíveis no painel, em Email MarketingCampaigns.
Retorna 404 se nenhuma campanha do workspace corresponder a id.
{
"object": "campaign",
"id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
"name": "October newsletter",
"status": "scheduled",
"subject": "October news for {{first_name}}",
"from_email": "news@acme.com",
"from_name": "Acme",
"reply_to": "support@acme.com",
"preview_text": null,
"content_type": "html",
"sent_at": null,
"scheduled_at": "2026-10-08 09:00:00+00",
"created_at": "2026-10-01 09:30:12.482193+00",
"updated_at": "2026-10-01 10:02:47.118204+00",
"recipients": [
{ "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV", "exclude": false },
{ "audience_id": "aud_3hRmYTSQ4ca6y9tbPI0IQPjVTL9", "exclude": true }
]
}{
"error": "Campaign not found"
}Atualizar uma campanha
Atualiza os campos que você passar e deixa os outros como estão. Use-o para escolher as listas de contatos da campanha antes de enviá-la. Requer uma chave de API com escopo full. Emite um evento campaign.updated.
Uma campanha agendada envia o que estiver salvo no horário de envio, então você ainda pode editá-la depois de agendar.
/campaigns/{id}Parâmetros de caminho
idstringobrigatóriocmp_…) ou o nome da campanha.Parâmetros do corpo
namestringsubjectstringfrom_emailstringfrom_namestringreply_tostringfrom_email.preview_textstringcontentstringcontent_typestringcontent: html, text ou mjml.recipientsobject[]As listas de contatos de destino. Substitui a relação atual. Inclua pelo menos uma lista com exclude definido como false.
audience_id(string, obrigatório): um ID de lista de contatos (aud_…) deste workspace.exclude(booleano, padrãofalse):truesalva a lista como exclusão. O painel subtrai as listas excluídas da estimativa de destinatários, mas o envio em si não aplica exclusões no momento, então remova também esses contatos das listas incluídas.
IDs de listas duplicados são ignorados. No momento do envio, o Emailit envia um e-mail uma única vez a cada contato inscrito nas listas incluídas e ignora contatos descadastrados e endereços suprimidos.
O corpo HTML e o de texto são definidos quando você cria a campanha. Campos desconhecidos no corpo são ignorados.
Retorno
Retorna o objeto de campanha atualizado, incluindo recipients.
Retorna 422 se recipients não tiver nenhuma lista incluída ou fizer referência a uma lista de fora do workspace, e 404 se a campanha não existir.
{
"object": "campaign",
"id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
"name": "October newsletter",
"status": "draft",
"subject": "Your October update, {{first_name}}",
"from_email": "news@acme.com",
"from_name": "Acme",
"reply_to": "support@acme.com",
"preview_text": null,
"content_type": "html",
"scheduled_at": null,
"created_at": "2026-10-01 09:30:12.482193+00",
"updated_at": "2026-10-01 10:02:47.118204+00",
"recipients": [
{ "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV", "exclude": false },
{ "audience_id": "aud_3hRmYTSQ4ca6y9tbPI0IQPjVTL9", "exclude": true }
]
}{
"message": "Validation failed.",
"errors": {
"recipients": ["One or more audiences are invalid."]
}
}{
"error": "Campaign not found"
}Listar campanhas
Retorna as campanhas do workspace, das mais recentes para as mais antigas. Requer uma chave de API com escopo full.
/campaignsParâmetros de consulta
pageintegerpadrão: 1limitintegerpadrão: 10searchstringstatusstringdraft, scheduled, sending (também corresponde a queued), sent, canceled, archived ou all.matchstringall (padrão) exige todos os filtros. or corresponde a qualquer filtro. Consulte Filtragem.
orderstringChave de ordenação desta lista. Consulte as chaves de ordenação abaixo.
directionstringasc ou desc.
Chaves de filtro
Os filtros usam parâmetros de consulta key.condition=value, por exemplo status.exact=sent ou created_at.after=2026-09-01. Consulte Filtragem para ver as condições de cada tipo.
| Chave | Tipo | Observações |
|---|---|---|
name |
string | |
subject |
string | |
status |
enum | draft, scheduled, queued, sending, sent, archived |
created_at |
date | |
sent_at |
date |
Chaves de ordenação para order: name, subject, status, created_at, sent_at.
Retorno
Retorna uma página de objetos de campanha sem reply_to, preview_text, content_type e recipients. Use Obter uma campanha para obtê-los.
dataobject[]total_recordsintegernext_page_urlstring | nullnull na última página. Ele leva apenas page e limit, então adicione de novo a sua busca e os seus filtros ao segui-lo.previous_page_urlstring | nullnull na primeira página.{
"data": [
{
"object": "campaign",
"id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
"name": "October newsletter",
"status": "sent",
"subject": "Your October update, {{first_name}}",
"from_email": "news@acme.com",
"from_name": "Acme",
"sent_at": "2026-10-08 09:00:04+00",
"scheduled_at": "2026-10-08 09:00:00+00",
"created_at": "2026-10-01 09:30:12.482193+00",
"updated_at": "2026-10-08 09:00:31+00"
}
],
"total_records": 34,
"next_page_url": "/v2/campaigns?page=2&limit=20",
"previous_page_url": null
}Enviar ou agendar uma campanha
Envia a campanha agora ou a agenda quando você passa um scheduled_at futuro. Requer uma chave de API com escopo full e um workspace verificado: workspaces não verificados não podem enviar campanhas e recebem 403.
Antes de enviar, confira se a campanha tem um from_email em um domínio verificado, um assunto, um corpo html ou text e pelo menos uma lista de contatos incluída (definida com Atualizar uma campanha). Cada e-mail custa 2 créditos.
/campaigns/{id}/sendParâmetros de caminho
idstringobrigatóriocmp_…) ou o nome da campanha.Parâmetros do corpo
scheduled_atstringQuando enviar. Aceita ISO 8601 (2026-10-08T09:00:00Z), um timestamp Unix em segundos ou linguagem natural em inglês, como tomorrow at 9am (interpretada em UTC). O horário deve estar no futuro e a campanha deve ser um draft.
Omita-o para enviar agora. Para enviar antes uma campanha agendada, chame este endpoint sem scheduled_at.
Retorno
Enviar agora: o status muda para sending e o Emailit emite campaign.sending. Em seguida, o Emailit cria um e-mail por destinatário: cada contato inscrito nas listas de contatos incluídas, sem duplicar endereços, excluindo contatos descadastrados e endereços suprimidos. Quando todos os destinatários tiverem sido passados ao pipeline de envio, o status muda para sent e o Emailit emite campaign.sent. Acompanhe a entrega no painel ou com os eventos de e-mail.
Agendar: o status muda para scheduled e o Emailit emite campaign.scheduled. No horário agendado, a campanha passa a queued (campaign.queued) e depois é enviada como descrito acima.
A resposta contém object, id, name e o novo status, além de scheduled_at quando você agenda.
| Status | Quando |
|---|---|
403 |
O workspace não está verificado ou a chave de API não tem o escopo full. |
404 |
Nenhuma campanha corresponde a id. |
422 |
scheduled_at não pode ser interpretado ou não está no futuro, ou você tentou agendar uma campanha que não é um rascunho. |
{
"object": "campaign",
"id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
"name": "October newsletter",
"status": "scheduled",
"scheduled_at": "2026-10-08T09:00:00.000000Z"
}{
"object": "campaign",
"id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
"name": "October newsletter",
"status": "sending"
}{
"code": "unverified_workspace_recipient",
"error": "Workspace not verified",
"message": "Unverified workspaces cannot send campaigns. You can send individual emails only to workspace members' account emails."
}{
"error": "Campaign cannot be scheduled",
"message": "Campaign status is 'sent'. Only draft campaigns can be scheduled."
}Cancelar uma campanha
Define o status da campanha como canceled e emite um evento campaign.canceled. Requer uma chave de API com escopo full.
Só é possível cancelar campanhas com o status draft ou sending; qualquer outro status retorna 422. Cancelar uma campanha em envio não recolhe os e-mails que já estão na fila de entrega.
/campaigns/{id}/cancelParâmetros de caminho
idstringobrigatóriocmp_…) ou o nome da campanha.Retorno
Retorna object, id, name e status (canceled).
Retorna 422 se o status da campanha não for draft nem sending, e 404 se a campanha não existir.
{
"object": "campaign",
"id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
"name": "October newsletter",
"status": "canceled"
}{
"error": "Campaign cannot be canceled",
"message": "Campaign status is 'scheduled'. Only 'draft' or 'sending' campaigns can be canceled."
}{
"error": "Campaign not found"
}Excluir uma campanha
Exclui permanentemente uma campanha. Requer uma chave de API com escopo full. Emite um evento campaign.deleted.
Excluir uma campanha não afeta os e-mails que já foram enviados ou colocados na fila. Para interromper uma campanha em envio, cancele-a primeiro.
/campaigns/{id}Parâmetros de caminho
idstringobrigatóriocmp_…) ou o nome da campanha.Retorno
Retorna object, id, name e deleted: true. Retorna 404 se a campanha não existir.
{
"object": "campaign",
"id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
"name": "October newsletter",
"deleted": true
}{
"error": "Campaign not found"
}