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.unsubscribedbooleanpredefinito: 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.audiencesobject[]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.audiencesstring[]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.sortstringpredefinito: created_atemail, first_name, last_name, name, audiences, 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"
}
}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 ; . |
| 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"
}