Contatos
Gerencie perfis de contato e campos personalizados, em massa ou um por vez.
Criar um contato
Cria um contato e, opcionalmente, inscreve-o em listas de contatos.
/contactsRequer uma chave de API com escopo full. Os endereços de e-mail são únicos por workspace e armazenados em minúsculas; criar um contato que já existe retorna 409 com o contato existente em existing. Dispara contact.created e subscriber.created para cada lista de contatos. Consulte Contatos.
Parâmetros do corpo
emailstringobrigatóriofirst_namestringlast_namestringcustom_fieldsobjectValores por chave de campo personalizado, como {"company": "Analytical Engines"}. Os valores de campos de data devem estar no formato YYYY-MM-DD. Chaves que não correspondem a um campo personalizado são armazenadas como estão.
audiencesstring[]aud_…) em que o contato será inscrito. IDs que não existem no workspace são ignorados.unsubscribedbooleanpadrão: falsetrue para criar o contato como descadastrado. As campanhas ignoram contatos descadastrados, e a participação deles em listas começa como descadastrada.
Retorno
Retorna 201 com o objeto de contato. Aqui, audiences lista cada lista de contatos com id, name e o status subscribed. Consulte Obter um contato para ver todos os campos.
Retorna 422 com usage quando uma lista de contatos está no limite de inscritos do seu plano. Nesse caso, nenhum contato é criado.
{
"object": "contact",
"id": "con_4K9kQdrXth7am0TPKvPrR5yd2oo",
"email": "ada@example.com",
"first_name": "Ada",
"last_name": "Lovelace",
"custom_fields": {
"company": "Analytical Engines",
"plan": "pro"
},
"unsubscribed": false,
"audiences": [
{
"id": "aud_4KbFmQPy1feMCGAY8F8pAhiZ1u2",
"name": "Newsletter",
"subscribed": true
}
],
"created_at": "2026-10-01T10:20:31.704113Z",
"updated_at": "2026-10-01T10:20:31.704113Z"
}{
"error": "Custom field \"Birthday\" must be a date in YYYY-MM-DD format"
}{
"error": "Contact with this email already exists",
"existing": {
"object": "contact",
"id": "con_4K9kQdrXth7am0TPKvPrR5yd2oo",
"email": "ada@example.com",
"first_name": "Ada",
"last_name": "Lovelace",
"custom_fields": {
"company": "Analytical Engines",
"plan": "pro"
},
"unsubscribed": false,
"audiences": [
{
"id": "aud_4KbFmQPy1feMCGAY8F8pAhiZ1u2",
"name": "Newsletter",
"subscribed": true
}
],
"created_at": "2026-10-01T10:20:31.704113Z",
"updated_at": "2026-10-01T10:20:31.704113Z"
}
}{
"error": "Pro includes 50,000 subscribers per audience.",
"usage": {
"used": 50000,
"limit": 50000,
"plan": "pro"
}
}Obter um contato
Obtém um contato com os campos personalizados e a participação dele em listas de contatos.
/contacts/{id}Requer uma chave de API com escopo full.
Parâmetros de caminho
idstringobrigatóriocon_…) ou o endereço de e-mail do contato, codificado para URL.Retorno
Retorna o objeto de contato.
objectstringcontact.idstringemailstringfirst_namestring | nulllast_namestring | nullcustom_fieldsobject{} quando não há nenhum.unsubscribedbooleantrue se o contato se descadastrou de todas as campanhas.audiencesobject[]As listas de contatos de que o contato participa, cada uma com id, name e um objeto subscriber: id (sub_…), subscribed, subscribed_at, unsubscribed_at, created_at e updated_at.
created_atstringupdated_atstring{
"object": "contact",
"id": "con_4K9kQdrXth7am0TPKvPrR5yd2oo",
"email": "ada@example.com",
"first_name": "Ada",
"last_name": "Lovelace",
"custom_fields": {
"company": "Analytical Engines",
"plan": "pro"
},
"unsubscribed": false,
"audiences": [
{
"id": "aud_4KbFmQPy1feMCGAY8F8pAhiZ1u2",
"name": "Newsletter",
"subscriber": {
"id": "sub_4KECYl5AwXEy8ezswYRhuddttxo",
"subscribed": true,
"subscribed_at": "2026-10-01T10:20:31.000000Z",
"unsubscribed_at": null,
"created_at": "2026-10-01T10:20:31.000000Z",
"updated_at": "2026-10-01T10:20:31.000000Z"
}
}
],
"created_at": "2026-10-01T10:20:31.000000Z",
"updated_at": "2026-10-01T10:20:31.000000Z"
}{
"error": "Contact not found"
}Atualizar um contato
Atualiza um contato. Só mudam os campos que você enviar.
/contacts/{id}Requer uma chave de API com escopo full. Dispara contact.updated, com os valores anteriores dos campos alterados em previous. Alterar audiences também dispara subscriber.created e subscriber.deleted para as participações em listas que forem adicionadas e removidas.
Parâmetros de caminho
idstringobrigatóriocon_…) ou o endereço de e-mail do contato, codificado para URL.Parâmetros do corpo
emailstringfirst_namestringlast_namestringcustom_fieldsobjectunsubscribedbooleantrue para descadastrar o contato de todas as campanhas, false para reinscrevê-lo. As participações existentes em listas mantêm o próprio status.audiencesstring[]A lista completa de IDs das listas de contatos de que o contato deve participar. O contato é adicionado às listas em que ainda não está e removido das listas que não estão na sua relação. Envie [] para removê-lo de todas as listas. Para adicionar ou remover uma lista sem relacionar todas, use Adicionar um inscrito ou Excluir um inscrito.
Retorno
Retorna o contato atualizado no mesmo formato de Obter um contato. Uma requisição sem nenhum desses campos retorna 400.
curl -X POST https://api.emailit.com/v2/contacts/ada%40example.com \
-H "Authorization: Bearer $EMAILIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"custom_fields": { "company": "Analytical Engines", "plan": "business" },
"audiences": ["aud_4KbFmQPy1feMCGAY8F8pAhiZ1u2", "aud_4KOlh9t2uw5od4qypqCtyrZyDq2"]
}'{
"object": "contact",
"id": "con_4K9kQdrXth7am0TPKvPrR5yd2oo",
"email": "ada@example.com",
"first_name": "Augusta",
"last_name": "Lovelace",
"custom_fields": {
"company": "Analytical Engines",
"plan": "pro"
},
"unsubscribed": false,
"audiences": [
{
"id": "aud_4KbFmQPy1feMCGAY8F8pAhiZ1u2",
"name": "Newsletter",
"subscriber": {
"id": "sub_4KECYl5AwXEy8ezswYRhuddttxo",
"subscribed": true,
"subscribed_at": "2026-10-01T10:20:31.000000Z",
"unsubscribed_at": null,
"created_at": "2026-10-01T10:20:31.000000Z",
"updated_at": "2026-10-01T10:20:31.000000Z"
}
}
],
"created_at": "2026-10-01T10:20:31.000000Z",
"updated_at": "2026-10-02T09:03:17.000000Z"
}{
"error": "No valid fields provided for update. Provide at least one of: email, first_name, last_name, custom_fields, unsubscribed, audiences"
}{
"error": "Contact not found"
}{
"error": "Another contact with this email already exists"
}Listar contatos
Retorna uma página de contatos, dos mais recentes para os mais antigos.
/contactsRequer uma chave de API com escopo full. Use os mesmos parâmetros com Exportar contatos para baixar todas as correspondências como arquivo.
Parâmetros de consulta
pageintegerpadrão: 1limitintegerpadrão: 10searchstringq também funciona.audience_idstringaud_…).unsubscribedbooleantrue ou false. Apenas os contatos com este status de descadastro.sortstringpadrão: created_atemail, first_name, last_name, name, audiences, created_at ou updated_at.orderstringpadrão: descasc ou desc. Neste endpoint, order é a direção da ordenação, não a chave de ordenação.matchstringpadrão: allall ou or. Como os filtros abaixo se combinam.Filtros
Adicione filtros no formato key.condition=value, por exemplo email.ends_with=@acme.com ou custom_fields.plan.exact=pro. Consulte Filtragem.
| Chave | Tipo | Observações |
|---|---|---|
email |
string | |
first_name |
string | |
last_name |
string | |
name |
string | Nome e sobrenome unidos por um espaço. |
audiences |
string | O nome da lista do contato que vem primeiro em ordem alfabética. |
unsubscribed |
boolean | |
created_at |
date | |
updated_at |
date | |
audience_id |
string | Apenas exact e not_exact. O valor é um ID de lista de contatos. |
custom_fields.<key> |
string | Substitua <key> pela chave de um campo personalizado. Os valores são comparados como texto. |
Os parâmetros antigos filter[audience_id], filter[unsubscribed] e filter[custom_fields][<key>] continuam funcionando.
Retorno
dataobject[]audiences no formato id, name e subscribed. Consulte Obter um contato.total_recordsintegernext_page_urlstring | nullnull. Consulte Paginação.previous_page_urlstring | nullnull.curl -G https://api.emailit.com/v2/contacts \
-H "Authorization: Bearer $EMAILIT_API_KEY" \
--data-urlencode "audience_id=aud_4KbFmQPy1feMCGAY8F8pAhiZ1u2" \
--data-urlencode "custom_fields.plan.exact=pro" \
--data-urlencode "sort=email" \
--data-urlencode "order=asc" \
--data-urlencode "limit=100"{
"data": [
{
"object": "contact",
"id": "con_4K9kQdrXth7am0TPKvPrR5yd2oo",
"email": "ada@example.com",
"first_name": "Ada",
"last_name": "Lovelace",
"custom_fields": {
"company": "Analytical Engines",
"plan": "pro"
},
"unsubscribed": false,
"audiences": [
{
"id": "aud_4KbFmQPy1feMCGAY8F8pAhiZ1u2",
"name": "Newsletter",
"subscribed": true
}
],
"created_at": "2026-10-01T10:20:31.704113Z",
"updated_at": "2026-10-01T10:20:31.704113Z"
},
{
"object": "contact",
"id": "con_4KiXIs4xLTcJIAHnKJaLcnMZYh7",
"email": "grace@example.com",
"first_name": "Grace",
"last_name": "Hopper",
"custom_fields": {},
"unsubscribed": true,
"audiences": [],
"created_at": "2026-09-28T07:55:02.118342Z",
"updated_at": "2026-09-30T18:11:40.902215Z"
}
],
"total_records": 2,
"next_page_url": null,
"previous_page_url": null
}Atualizar contatos em massa
Executa uma ação em até 100 contatos em uma única requisição.
/contacts/bulkRequer uma chave de API com escopo full. Todos os IDs devem pertencer a contatos do workspace; caso contrário, nada é alterado e a resposta lista os IDs ausentes em missing. Cada contato dispara os mesmos eventos que os endpoints de um único contato. Se a lista de contatos atingir o limite de inscritos do seu plano durante add_to_audience, a requisição para com 422, e os contatos processados até então continuam adicionados.
| Ação | O que faz |
|---|---|
delete |
Exclui os contatos e a participação deles em listas, como Excluir um contato. |
add_to_audience |
Adiciona os contatos a audience_id. Os contatos que já estão na lista ficam como estão. |
remove_from_audience |
Remove os contatos de audience_id. |
unsubscribe |
Define unsubscribed como true, para que as campanhas ignorem os contatos. |
resubscribe |
Define unsubscribed como false. |
Parâmetros do corpo
actionstringobrigatóriodelete, add_to_audience, remove_from_audience, unsubscribe ou resubscribe.idsstring[]obrigatóriocon_…), de 1 a 100. Endereços de e-mail não são aceitos aqui. IDs duplicados são ignorados.audience_idstringadd_to_audience e remove_from_audience.Retorno
objectstringcontact_bulk.actionstringprocessedintegeridsstring[]{
"object": "contact_bulk",
"action": "add_to_audience",
"processed": 2,
"ids": ["con_4K9kQdrXth7am0TPKvPrR5yd2oo", "con_4KiXIs4xLTcJIAHnKJaLcnMZYh7"]
}{
"error": "A maximum of 100 contacts can be updated per request"
}{
"error": "One or more contacts were not found",
"missing": ["con_4K3pZc1Q9nWm2LrT8vYb5Hd0XaE"]
}{
"error": "Pro includes 50,000 subscribers per audience.",
"usage": {
"used": 50000,
"limit": 50000,
"plan": "pro"
}
}Exportar contatos
Baixa os contatos correspondentes como arquivo CSV ou XLSX.
/contacts/exportRequer uma chave de API com escopo full. Aceita os mesmos parâmetros de busca, filtro e ordenação que Listar contatos, passados na query string, sem paginação. POST /contacts/export funciona da mesma forma. Uma exportação pode incluir até 10.000 contatos; se houver mais correspondências, a requisição retorna 422, então restrinja os filtros.
Parâmetros de consulta
formatstringpadrão: csvcsv ou xlsx.search, audience_id, unsubscribed, sort, order, match, key.conditionstringRetorno
Retorna o arquivo como anexo: contacts.csv (text/csv; charset=utf-8) ou contacts.xlsx. Cada linha é um contato, com estas colunas:
| Coluna | Contém |
|---|---|
email |
O endereço de e-mail. |
first_name, last_name |
Os nomes. |
unsubscribed |
true ou false. |
audiences |
Os nomes das listas de contatos do contato, separados por ; . |
| Uma coluna por campo personalizado | O valor de cada campo personalizado definido no workspace, com a chave dele como nome. Listas de valores são unidas com ;. |
created_at, updated_at |
Timestamps ISO 8601. |
email,first_name,last_name,unsubscribed,audiences,company,plan,created_at,updated_at
ada@example.com,Ada,Lovelace,false,Newsletter,Analytical Engines,pro,2026-10-01T10:20:31.000000Z,2026-10-01T10:20:31.000000Z{
"error": "format must be csv or xlsx"
}{
"error": "Export is limited to 10000 contacts. Narrow your filters and try again."
}Excluir um contato
Exclui permanentemente um contato e toda a participação dele em listas de contatos.
/contacts/{id}Requer uma chave de API com escopo full. A exclusão não pode ser desfeita. Para parar de enviar e-mails a alguém, mas manter o registro da pessoa, atualize o contato com unsubscribed: true ou adicione o endereço às suas supressões. Dispara subscriber.deleted para cada participação em lista e depois contact.deleted.
Parâmetros de caminho
idstringobrigatóriocon_…) ou o endereço de e-mail do contato, codificado para URL.Retorno
objectstringcontact.idstringemailstringdeletedbooleantrue.{
"object": "contact",
"id": "con_4Kt4ZXloQR8WGcMsYx8PFCUjokM",
"email": "alan@example.com",
"deleted": true
}{
"error": "Contact not found"
}