Contatos
Gerencie os contatos em Contatos > Todos os contatos no painel, com bird contacts pelo terminal, pela API de contatos ou com qualquer um dos SDKs.
Alcançar contatos
Para enviar um e-mail a uma pessoa, use o endereço dela com a API de envio; o registro do contato guarda suas informações, prontas para reutilização. Para alcançar várias pessoas de uma vez, envie um lote ou agrupe-as em um público e envie uma transmissão. Armazenar um contato não envia nada por si só.
A página Contatos
A página Contatos mostra o nome do contato, seus identificadores, os públicos aos quais pertence e as informações de criação. Pesquise por nome, e-mail ou telefone e selecione uma linha para abrir o contato. Use as ações do cabeçalho para adicionar um contato ou importar vários. A visualização exige a permissão de leitura de email_marketing. Adicionar, editar e excluir exige permissão de escrita.

O que um contato contém
Cada contato tem um endereço de e-mail, um número de telefone ou ambos, cada um exclusivo no seu espaço de trabalho, além de um nome e um identificador próprio opcionais:
| Campo | Descrição |
|---|---|
| O endereço, exclusivo no seu espaço de trabalho. Ele é armazenado em letras minúsculas e sem espaços no início ou no fim, então Sam@Acme.com e sam@acme.com são normalizados para o mesmo identificador. | |
| phone_number | O número de telefone, exclusivo no seu espaço de trabalho. A formatação é normalizada para o formato internacional. O armazenamento não verifica metadados do plano de numeração, titularidade, possibilidade de alcançar o número ou consentimento. |
| first_name | Nome opcional, usado para personalizar um envio. |
| last_name | Sobrenome opcional. |
| external_id | Opcional. Sua própria chave primária para a pessoa (um ID de usuário do seu banco de dados), exclusiva no seu espaço de trabalho quando definida. Ela permite associar um contato aos seus próprios registros sem depender do e-mail. |
| data | Valores de propriedades personalizadas, um para cada propriedade de contato registrada. |
O painel deriva os rótulos Email e SMS dos identificadores presentes. A API retorna email e phone_number; não retorna um campo channels. Esses rótulos não comprovam permissão de envio nem que o contato pode ser alcançado pelo canal.
Cada contato também tem um ID com o prefixo con_ e os registros de data e hora de criação e atualização. A especificação completa dos campos está na referência da API.
Propriedades de contato
As propriedades de contato definem o esquema tipado dos campos personalizados de um contato. Registre uma propriedade para o seu espaço de trabalho e, a partir daí, cada contato poderá ter um valor para ela em data. Declarar o esquema antecipadamente torna a personalização e a segmentação confiáveis: um valor sempre chega com o tipo que você declarou, então um modelo ou filtro pode contar com isso.

Gerencie-as em Contatos > Propriedades de contato. Cada propriedade tem uma chave, um tipo e um valor de fallback opcional:
- A chave é o nome usado para referenciar o valor, como plan_tier. Ela deve usar letras minúsculas e começar com uma letra (^[a-z][a-z0-9_]*$), e não pode ser alterada após a criação.
- O tipo é um destes: string, number, boolean ou datetime, e também não pode ser alterado após a criação. Um datetime aceita um registro de data e hora RFC 3339 com um deslocamento explícito, como 2026-01-15T11:30:00+02:00, que normalizamos para UTC com precisão de segundos. Assim, esse valor é armazenado e retornado como 2026-01-15T09:30:00Z. Uma data sem horário é rejeitada. O painel identifica esses tipos como Texto, Número, Verdadeiro / falso e Data e hora.
- O valor de fallback é o valor lido para um contato que não tem um valor próprio. Assim, se plan_tier estiver ausente, o resultado pode ser free em vez de um valor em branco.
As propriedades são arquivadas em vez de excluídas. O arquivamento impede novas gravações na chave, mas mantém todos os valores já armazenados. A chave continua reservada, então nunca poderá ser reutilizada com outro tipo. Desarquive a propriedade para reativá-la. Essa reserva também explica por que o tipo é imutável: um number armazenado nunca deve passar a ser lido como uma string. Um espaço de trabalho pode registrar até 200 propriedades, e as arquivadas contam para esse limite porque suas chaves continuam reservadas.
Defina os valores das propriedades onde você edita um contato. O formulário de contato no painel mostra um campo de entrada tipado para cada propriedade ativa, e a CLI e a API aceitam as mesmas chaves em data.
Importar e sincronizar contatos
Para importar uma lista pela página Contatos, selecione Importar e carregue um arquivo CSV, TSV ou Excel. Inclua um contato por linha e uma linha de cabeçalho com os nomes das colunas. Um arquivo pode conter até 50.000 contatos. Arquivos CSV podem ter até 50 MB, e arquivos de planilha podem ter até 10 MB.
A linha de cabeçalho ajuda a identificar cada campo do contato. As colunas chamadas "Email Address", "E-Mail" ou "Correo electrónico" são todas mapeadas para o campo de e-mail. Uma coluna com o nome completo é dividida em nome e sobrenome. Quando duas colunas podem preencher o mesmo campo, a escolhida é aquela cujos valores confirmam seu nome. Cada coluna mostra alguns dos próprios valores para você ver o conteúdo, e um nome dividido é exibido junto ao valor original. Altere qualquer mapeamento no menu suspenso de cada coluna. Todas as pessoas do arquivo podem ser adicionadas a um ou mais públicos na mesma importação.
Cada linha é associada a um contato existente pelos identificadores que contém e o atualiza, ou cria um contato se ele for novo. Assim, reimportar o mesmo arquivo faz um upsert em vez de acumular duplicatas. Antes de gravar qualquer dado, o painel informa quantas linhas iniciais não podem ser importadas com o mapeamento atual. Após a execução, cada linha ignorada mostra seu número de linha no arquivo de origem e o erro.
Para sincronizar a partir do seu banco de dados, automatize a CLI com um script ou chame o endpoint de processamento em lote. bird contacts create <email> adiciona um contato. bird contacts batch cria ou atualiza até 1.000 em uma única chamada. Use um lote por execução em vez de uma solicitação por pessoa para manter sua lista de contatos sincronizada com o sistema.
const contact = await bird.contacts.create({
email: "jane@acme.com",
first_name: "Jane",
});
console.log(contact.id); // "con_…"contact = client.contacts.create(email="jane@acme.com", first_name="Jane")
print(contact.id, contact.email)contact, err := client.Contacts.Create(context.Background(), bird.ContactCreateParams{
Email: bird.Ptr("jane@acme.com"),
FirstName: bird.Ptr("Jane"),
})
if err != nil {
log.Fatal(err)
}
fmt.Println(contact.Id)$contact = $bird->contacts->create(
(new ContactCreateRequest())
->setEmail('jane@acme.com')
->setFirstName('Jane'),
);
echo $contact->getId(); // "con_…"bird contacts create alice@acme.com \
--first-name Alice \
--last-name Anderson \
--phone-number +31612345678{
"name": "contacts_create",
"arguments": {
"email": "alice@acme.com",
"first_name": "Alice",
"last_name": "Anderson",
"phone_number": "+31612345678"
}
}curl -X POST "https://{region}.platform.bird.com/v1/contacts" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"email": "alice@acme.com",
"phone_number": "+31612345678",
"first_name": "Alice",
"last_name": "Anderson"
}'Cada entrada do lote é associada automaticamente pelos identificadores fornecidos (endereço de e-mail, número de telefone ou ID externo). O campo opcional match_on obriga a correspondência a usar apenas um desses identificadores. Uma entrada também pode definir valores de propriedades personalizadas e adicionar diretamente todos os contatos da solicitação aos públicos por meio de audience_ids. Cada entrada tem sucesso ou falha de forma independente, e a resposta informa um resultado por entrada na ordem de envio:
Exemplo de código
{
"data": [
{
"contact_id": "con_01ky7q5t51echr7mqj5c08423b",
"entry": { "email": "alex@example.com", "phone_number": null, "external_id": null },
"matched_on": "email",
"status": "updated"
},
{
"contact_id": "con_01ky7q6mxdfhe86c9dqyt866pz",
"entry": { "email": "jamie@example.com", "phone_number": null, "external_id": null },
"matched_on": null,
"status": "created"
},
{
"contact_id": "con_01ky7q7rv9e9pt4vkr0w0gxq5e",
"entry": { "email": "casey@example.com", "phone_number": null, "external_id": "user_2214" },
"matched_on": "external_id",
"status": "updated"
}
]
}Se os identificadores de uma entrada apontarem para contatos existentes diferentes, a entrada falha com um conflito que precisa ser revisado. Resolva o registro de origem antes de tentar novamente; o lote não mescla esses contatos.
Dois comportamentos padrão são úteis para uma sincronização. Um lote mescla as chaves de data com os dados existentes do contato, então uma importação que altera um atributo nunca apaga os demais. Envie um valor null para limpar uma chave ou defina data_mode: "replace" para substituir todo o mapa. Defina seu próprio external_id em cada contato para que uma sincronização posterior encontre a mesma pessoa mesmo após uma mudança de e-mail. No exemplo do lote, user_2214 já existe, então a entrada é associada àquele contato e substitui o e-mail pelo novo.
Excluir um contato
Excluir um contato é permanente: o registro e suas participações nos públicos são removidos e não podem ser recuperados. Supressões e preferências, porém, permanecem intactas. Um endereço que gerou um hard bounce continua na sua lista de supressão, e um endereço que cancelou a inscrição mantém a preferência de não receber mensagens após a exclusão do contato. Portanto, excluir alguém nunca reabilita silenciosamente o envio para seu endereço.
Próximos passos
- Públicos: agrupe contatos em listas reutilizáveis
- Supressões: a lista do espaço de trabalho com os endereços para os quais não entregamos mensagens, separada dos seus contatos
- Envio em lote: alcance vários destinatários em uma única chamada, com até 100 mensagens por solicitação
- CLI: automatize contatos, propriedades e públicos por script com o comando bird
- Referência da API: os esquemas completos de solicitações e respostas
Recursos relacionados
Continue com a documentação, guias e exemplos sobre este tópico. Os recursos estão em inglês.
Assista ao guiaGetting started with emailExplore a funcionalidadeEmailSiga o percurso de aprendizagemBuild your first integrationGuia de implementaçãoSend your first email
Experimente na prática e obtenha um resumo de implementação