API Reference / Contatti

Contatti

I contatti sono le persone: referenti che possono essere collegati a un account. Stessa CRUD completa degli account, con in più il legame verso l'azienda.

Prima di iniziare

Envelope, errori, paginazione e advanced_filters sono comuni: vedi Introduzione alle API. Ogni richiesta richiede Authorization: Bearer <accessToken>.

01L'oggetto Contatto

Ogni contatto restituito dall'API ha questa forma. Le date sono stringhe ISO 8601 in UTC; i campi non leggibili dal tuo ruolo vengono omessi dalla risposta.

AttributoTipoDescrizione
idintegerIdentificativo univoco del contatto.
account_idinteger | nullAccount collegato (lookup verso Account).
first_namestringNome del referente.
last_namestring | nullCognome.
emailstring | nullEmail del contatto.
phonestring | nullTelefono.
job_titlestring | nullRuolo/mansione.
owner_user_idinteger | nullUtente proprietario del record.
assigned_user_idinteger | nullUtente assegnatario.
created_byinteger | nullUtente che ha creato il record.
updated_byinteger | nullUltimo utente che l'ha modificato.
is_deletedbooleantrue se in cestino (soft delete).
created_atstringData/ora di creazione (ISO 8601).
updated_atstringData/ora ultima modifica (ISO 8601).
json · l'oggetto Contatto
{
  "id": 341,
  "account_id": 128,
  "first_name": "Giulia",
  "last_name": "Bianchi",
  "email": "g.bianchi@acme.it",
  "phone": "+39 02 7654321",
  "job_title": "Responsabile acquisti",
  "owner_user_id": 7,
  "assigned_user_id": 7,
  "created_by": 7,
  "updated_by": 7,
  "is_deleted": false,
  "created_at": "2026-07-07T15:24:00.000Z",
  "updated_at": "2026-07-07T15:24:00.000Z"
}

02Endpoint

MetodoPathAzioneCosa fa
GET/api/contactsreadElenco paginato e filtrabile.
GET/api/contacts/:idreadUn singolo contatto.
GET/api/contacts/:id/historyreadStorico modifiche del record.
GET/api/contacts/lookupreadOpzioni per i campi lookup (id + etichetta).
POST/api/contactscreateCrea un contatto.
PATCH/api/contacts/:idupdateModifica parziale.
PATCH/api/contacts/bulkupdateAggiornamento massivo.
DELETE/api/contacts/:iddeleteSoft delete.
POST/api/contacts/:id/restoreupdateRipristina un record eliminato.
GET/api/contacts/export.csv · .xlsxexportEsporta l'elenco filtrato.
POST/api/contacts/import/preview · /executecreateImport CSV.

03Elencare i contatti

GET /api/contacts bearer richiesto

Restituisce i contatti visibili all'utente (secondo lo scope del ruolo), paginati.

Parametri query
ParametroTipoDescrizione
limitintegeropzionaleRighe per pagina. Default 50, max 200.
offsetintegeropzionaleRighe da saltare (default 0).
sort_bystringopzionaleColonna di ordinamento (es. last_name, created_at).
sort_dirstringopzionaleasc o desc.
advanced_filtersstring (JSON)opzionaleArray di condizioni: vedi Filtri avanzati.
Richiesta
curl "https://crm.tuodominio.it/api/contacts?limit=2&sort_by=created_at&sort_dir=desc" \
  -H "Authorization: Bearer <accessToken>"
const res = await fetch("https://crm.tuodominio.it/api/contacts?limit=2&sort_by=created_at&sort_dir=desc", {
  headers: { Authorization: `Bearer ${accessToken}` },
});
const { data } = await res.json();
Risposta · 200
json
{
  "success": true,
  "data": {
    "items": [ { "id": 341, "first_name": "Giulia", "account_id": 128,  }, { "id": 340,  } ],
    "pagination": { "limit": 2, "offset": 0, "count": 2, "sortBy": "created_at", "sortDir": "desc" }
  }
}

04Recuperare un contatto

GET /api/contacts/:id bearer richiesto
Parametri path
ParametroTipoDescrizione
idintegerId del contatto.
Esiti
StatoCorpo
200{ success: true, data: { …contatto } }
404NOT_FOUND: inesistente o fuori dal tuo scope.

05Creare un contatto

POST /api/contacts bearer richiesto
Parametri body
CampoTipoNote
first_namestringrichiestoNome. 1–120 caratteri.
last_namestringopzionaleCognome. Max 120.
emailstringopzionaleEmail, validata.
phonestringopzionaleMax 40 caratteri.
job_titlestringopzionaleRuolo/mansione. Max 120.
account_idintegeropzionaleAccount a cui collegare il contatto (lookup verso Account).
owner_user_idintegeropzionaleProprietario. Assegnabile solo a sé o a un sottoposto nella gerarchia dei ruoli (admin: chiunque). Vedi Utenti e team.
assigned_user_idintegeropzionaleUtente assegnatario.
Richiesta
curl -X POST https://crm.tuodominio.it/api/contacts \
  -H "Authorization: Bearer <accessToken>" \
  -H "Content-Type: application/json" \
  -d '{ "first_name": "Giulia", "last_name": "Bianchi", "account_id": 128, "job_title": "Responsabile acquisti" }'
const res = await fetch("https://crm.tuodominio.it/api/contacts", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${accessToken}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ first_name: "Giulia", last_name: "Bianchi", account_id: 128, job_title: "Responsabile acquisti" }),
});
const { data } = await res.json();
Risposta · 201
json
{ "success": true, "data": { "id": 341, "first_name": "Giulia", "account_id": 128, "is_deleted": false,  } }
Esiti
StatoCodiceQuando
201·Contatto creato; nel corpo l'oggetto completo.
422VALIDATION_ERRORfirst_name mancante, campo fuori misura, o account_id inesistente/fuori scope.
403FORBIDDENCampo non scrivibile dal ruolo (nei details l'elenco dei campi negati).
Nota · collegamento all'account

Se passi un account_id inesistente o fuori dal tuo scope, la richiesta fallisce in validazione (422). Le liste restituiscono il nome dell'account già risolto accanto all'id, così non devi fare una seconda chiamata per mostrarlo.

06Aggiornare un contatto

PATCH/api/contacts/:idbearer richiesto

Modifica parziale: invia solo i campi da cambiare (gli stessi del body di creazione, tutti opzionali). Risponde 200 con l'oggetto aggiornato, 404 se fuori scope, 422 in validazione.

curl
curl -X PATCH https://crm.tuodominio.it/api/contacts/341 \
  -H "Authorization: Bearer <accessToken>" \
  -H "Content-Type: application/json" \
  -d '{ "job_title": "Direttore acquisti" }'

07Eliminare e ripristinare

DELETE/api/contacts/:idbearer richiesto

Soft delete: il record viene marcato eliminato (is_deleted: true), non cancellato. Risponde 200 { deleted: true, id }.

POST/api/contacts/:id/restorebearer richiesto

Ripristina un contatto eliminato (richiede il permesso update). Risponde 200 con l'oggetto ripristinato.

08Aggiornamento massivo

PATCH/api/contacts/bulkbearer richiesto

Applica gli stessi valori a una lista di record. Gli id fuori dal tuo scope vengono saltati; la risposta riporta quanti record sono stati effettivamente aggiornati.

Body
json
{ "ids": [341, 340, 339], "changes": { "account_id": 128 } }
Risposta · 200
json
{ "success": true, "data": { "requested": 3, "updated": 2 } }

09Import ed export