Contatti
Gestisci i profili dei contatti e i campi personalizzati, in blocco o uno alla volta.
Crea un contatto
Crea un contatto e, facoltativamente, lo iscrive a delle liste.
/contactsRichiede una chiave API full. Gli indirizzi email sono univoci nel workspace e vengono salvati in minuscolo; creare un contatto che esiste già restituisce 409 con il contatto esistente in existing. Genera contact.created e un subscriber.created per ogni lista. Vedi Contatti.
Parametri del corpo
emailstringobbligatoriofirst_namestringlast_namestringcustom_fieldsobjectValori per chiave del campo personalizzato, ad esempio {"company": "Analytical Engines"}. I valori dei campi di tipo data devono essere nel formato YYYY-MM-DD. Le chiavi che non corrispondono a un campo personalizzato vengono salvate così come sono.
audiencesstring[]aud_…) a cui iscrivere il contatto. Gli ID che non esistono nel workspace vengono saltati.tagsstring[]scoreintegerpredefinito: 0unsubscribedbooleanpredefinito: falsetrue per creare il contatto come disiscritto. Le campagne saltano i contatti disiscritti, e la loro appartenenza alle liste parte come disiscritta.
Restituisce
Restituisce 201 con l’oggetto contatto. Qui audiences elenca ogni lista con id, name e lo stato subscribed. Per tutti i campi, vedi Recupera un contatto.
Restituisce 422 con usage quando una lista ha raggiunto il limite di iscritti del piano. In quel caso non viene creato nessun contatto.
{
"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"
}
}Recupera un contatto
Recupera un contatto con i campi personalizzati e le sue appartenenze alle liste.
/contacts/{id}Richiede una chiave API full.
Parametri di percorso
idstringobbligatoriocon_…) o l’indirizzo email del contatto, codificato per l’URL.Restituisce
Restituisce l’oggetto contatto.
objectstringcontact.idstringemailstringfirst_namestring | nulllast_namestring | nullcustom_fieldsobject{} quando non ce ne sono.unsubscribedbooleantrue se il contatto si è disiscritto da tutte le campagne.tagsstring[]scoreintegeraudiencesobject[]Le liste a cui appartiene il contatto, ciascuna con id, name e un oggetto 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"
}Aggiorna un contatto
Aggiorna un contatto. Cambiano solo i campi che invii.
/contacts/{id}Richiede una chiave API full. Genera contact.updated, con i valori precedenti dei campi modificati in previous. La modifica di audiences genera anche subscriber.created e subscriber.deleted per le appartenenze alle liste che aggiunge e rimuove.
Parametri di percorso
idstringobbligatoriocon_…) o l’indirizzo email del contatto, codificato per l’URL.Parametri del corpo
emailstringfirst_namestringlast_namestringcustom_fieldsobjectunsubscribedbooleantrue per disiscrivere il contatto da tutte le campagne, false per reiscriverlo. Le appartenenze alle liste esistenti mantengono il proprio stato.tagsstring[][] li rimuove tutti.add_tagsstring[]remove_tagsstring[]scoreintegeraudiencesstring[]L’elenco completo degli ID delle liste a cui il contatto deve appartenere. Il contatto viene aggiunto alle liste di cui non fa ancora parte e rimosso da quelle che non sono nel tuo elenco. Invia [] per rimuoverlo da tutte le liste. Per aggiungere o rimuovere una sola lista senza elencarle tutte, usa Aggiungi un iscritto o Elimina un iscritto.
Restituisce
Restituisce il contatto aggiornato nello stesso formato di Recupera un contatto. Una richiesta senza nessuno di questi campi restituisce 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"
}Elenca i contatti
Restituisce una pagina di contatti, a partire dal più recente.
/contactsRichiede una chiave API full. Usa gli stessi parametri con Esporta i contatti per scaricare tutti i risultati come file.
Parametri di query
pageintegerpredefinito: 1limitintegerpredefinito: 10searchstringq.audience_idstringaud_…).unsubscribedbooleantrue o false. Solo i contatti con questo stato di disiscrizione.filter[tag]stringtag.filter[score][gte], filter[score][lte]integersortstringpredefinito: created_atemail, first_name, last_name, name, audiences, score, created_at o updated_at.orderstringpredefinito: descasc o desc. In questo endpoint order è la direzione dell’ordinamento, non la chiave di ordinamento.matchstringpredefinito: allall o or. Come si combinano i filtri qui sotto.Filtri
Aggiungi i filtri nella forma key.condition=value, ad esempio email.ends_with=@acme.com o custom_fields.plan.exact=pro. Vedi Filtri e ordinamento.
| Chiave | Tipo | Note |
|---|---|---|
email |
string | |
first_name |
string | |
last_name |
string | |
name |
string | Nome e cognome uniti da uno spazio. |
audiences |
string | Il primo nome di lista del contatto in ordine alfabetico. |
unsubscribed |
boolean | |
created_at |
date | |
updated_at |
date | |
audience_id |
string | Solo exact e not_exact. Il valore è l’ID di una lista. |
custom_fields.<key> |
string | Sostituisci <key> con la chiave di un campo personalizzato. I valori vengono confrontati come testo. |
I parametri precedenti filter[audience_id], filter[unsubscribed] e filter[custom_fields][<key>] funzionano ancora.
Restituisce
dataobject[]audiences come id, name e subscribed. Vedi Recupera un contatto.total_recordsintegernext_page_urlstring | nullnull. Vedi Paginazione.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
}Aggiorna i contatti in blocco
Esegue un’azione su un massimo di 100 contatti in una sola richiesta.
/contacts/bulkRichiede una chiave API full. Ogni ID deve appartenere a un contatto del workspace, altrimenti non viene modificato nulla e la risposta elenca gli ID mancanti in missing. Ogni contatto genera gli stessi eventi degli endpoint per i singoli contatti. Se durante add_to_audience la lista raggiunge il limite di iscritti del piano, la richiesta si interrompe con 422 e i contatti elaborati fino a quel momento restano aggiunti.
| Azione | Cosa fa |
|---|---|
delete |
Elimina i contatti e la loro appartenenza alle liste, come Elimina un contatto. |
add_to_audience |
Aggiunge i contatti a audience_id. I contatti che ne fanno già parte restano come sono. |
remove_from_audience |
Rimuove i contatti da audience_id. |
unsubscribe |
Imposta unsubscribed su true, così le campagne saltano i contatti. |
resubscribe |
Imposta unsubscribed su false. |
Parametri del corpo
actionstringobbligatoriodelete, add_to_audience, remove_from_audience, unsubscribe o resubscribe.idsstring[]obbligatoriocon_…), da 1 a 100. Qui gli indirizzi email non sono accettati. I duplicati vengono ignorati.audience_idstringadd_to_audience e remove_from_audience.Restituisce
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"
}
}Aggiungi tag a un contatto
Aggiunge tag a un contatto. I tag che il contatto ha già restano invariati. Richiede una chiave API con il permesso full.
I tag vengono ripuliti dagli spazi iniziali e finali e salvati in minuscolo, con gli spazi consecutivi ridotti a uno, e possono avere fino a 64 caratteri. Quando almeno un tag è nuovo, Emailit genera un evento contact.updated con i nuovi tags e quelli precedenti in previous.tags, che avvia le automazioni Tag added. Vedi Tag e lead score.
/contacts/{id}/tagsParametri di percorso
idstringobbligatoriocon_…) o l’indirizzo email del contatto, codificato per l’URL.Parametri del corpo
tagsstring[]obbligatorioRestituisce
dataobjectid ed email del contatto, tutti i suoi tags dopo la modifica, e changed, i tag che sono stati aggiunti.
messagestring1 tag added. o No tags changed.Restituisce 400 quando un tag è vuoto o supera i 64 caratteri, e 404 se il contatto non esiste.
{
"data": {
"id": "con_2kq8Vt4xLm7Rz",
"email": "ada@example.com",
"tags": ["customer", "vip", "webinar-2026"],
"changed": ["customer", "webinar-2026"]
},
"message": "2 tags added."
}Rimuovi tag da un contatto
Rimuove tag da un contatto. I tag che il contatto non ha vengono ignorati. Richiede una chiave API con il permesso full.
Quando viene rimosso almeno un tag, Emailit genera un evento contact.updated con previous.tags, che avvia le automazioni Tag removed. Vedi Tag e lead score.
/contacts/{id}/tagsParametri di percorso
idstringobbligatoriocon_…) o l’indirizzo email del contatto, codificato per l’URL.Parametri del corpo
tagsstring[]obbligatorioRestituisce
dataobjectid ed email del contatto, i tags rimasti, e changed, i tag che sono stati rimossi.
messagestring1 tag removed. o No tags changed.Restituisce 404 se il contatto non esiste.
Elenca i tag
Restituisce i tag usati sui contatti del workspace, in ordine alfabetico, con il numero di contatti che ha ciascun tag. Richiede una chiave API con il permesso full. Per elencare i contatti con un tag, usa Elenca i contatti con filter[tag].
/contacts/tagsParametri di query
searchstringlimitintegerpredefinito: 200Restituisce
dataobject[]Ogni tag nella forma { "object": "tag", "tag": "customer", "contacts": 42 }.
Modifica il lead score di un contatto
Aggiunge punti al lead score di un contatto, li sottrae oppure imposta il punteggio. Richiede una chiave API con il permesso full.
La modifica è atomica, quindi le chiamate in parallelo non si sovrascrivono a vicenda. Il punteggio parte da 0, può essere negativo e resta entro ±1.000.000.000. Quando il punteggio cambia, Emailit genera un evento contact.updated con score e previous.score, che avvia le automazioni Score changed. Vedi Tag e lead score.
/contacts/{id}/scoreParametri di percorso
idstringobbligatoriocon_…) o l’indirizzo email del contatto, codificato per l’URL.Parametri del corpo
operationstringpredefinito: addadd, subtract o set.valueintegerobbligatorioRestituisce
dataobjectid ed email del contatto, il nuovo score e il previous_score.messagestringScore is now 55.Restituisce 400 quando operation o value non è valido, e 404 se il contatto non esiste.
{
"data": { "id": "con_2kq8Vt4xLm7Rz", "email": "ada@example.com", "score": 55, "previous_score": 45 },
"message": "Score is now 55."
}Esporta i contatti
Scarica i contatti corrispondenti come file CSV o XLSX.
/contacts/exportRichiede una chiave API full. Accetta gli stessi parametri di ricerca, filtro e ordinamento di Elenca i contatti, passati nella query string, senza paginazione. POST /contacts/export funziona allo stesso modo. Un’esportazione può includere fino a 10.000 contatti; se ne corrispondono di più, la richiesta restituisce 422, quindi restringi i filtri.
Parametri di query
formatstringpredefinito: csvcsv o xlsx.search, audience_id, unsubscribed, sort, order, match, key.conditionstringRestituisce
Restituisce il file come allegato: contacts.csv (text/csv; charset=utf-8) o contacts.xlsx. Ogni riga è un contatto con queste colonne:
| Colonna | Contenuto |
|---|---|
email |
L’indirizzo email. |
first_name, last_name |
Il nome e il cognome. |
unsubscribed |
true o false. |
audiences |
I nomi delle liste del contatto, separati da ; . |
tags |
I tag del contatto, separati da ; . |
score |
Il lead score. |
| Una colonna per ogni campo personalizzato | Il valore di ogni campo personalizzato definito nel workspace, con la sua chiave come nome. I valori di tipo elenco sono uniti con ;. |
created_at, updated_at |
Timestamp 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."
}Elimina un contatto
Elimina definitivamente un contatto e tutte le sue appartenenze alle liste.
/contacts/{id}Richiede una chiave API full. L’eliminazione non si può annullare. Per smettere di inviare email a qualcuno ma conservarne i dati, aggiorna il contatto con unsubscribed: true, oppure aggiungi l’indirizzo alle soppressioni. Genera un subscriber.deleted per ogni appartenenza a una lista, poi contact.deleted.
Parametri di percorso
idstringobbligatoriocon_…) o l’indirizzo email del contatto, codificato per l’URL.Restituisce
objectstringcontact.idstringemailstringdeletedbooleantrue.{
"object": "contact",
"id": "con_4Kt4ZXloQR8WGcMsYx8PFCUjokM",
"email": "alan@example.com",
"deleted": true
}{
"error": "Contact not found"
}