API Reference / Attività

Attività

Le attività sono task e appuntamenti: un oggetto, una scadenza, uno stato, e, tratto distintivo, un collegamento polimorfico che le aggancia a qualunque record (un account, un contatto, una trattativa, un modulo custom…).

Prima di iniziare

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

01L'oggetto Attività

Ogni attività restituita dall'API ha questa forma. Le date sono stringhe ISO 8601 in UTC; i campi non leggibili dal tuo ruolo vengono omessi. La coppia related_module + related_record_id è il collegamento polimorfico (entrambi null se l'attività non è agganciata).

AttributoTipoDescrizione
idintegerIdentificativo univoco dell'attività.
typestringTipo (default task; es. call, meeting).
subjectstringOggetto dell'attività.
descriptionstring | nullNote libere.
statusstringStato (default open).
due_datestring | nullScadenza (ISO 8601).
completed_atstring | nullData/ora di completamento (ISO 8601).
related_modulestring | nullModulo del record collegato: vedi Collegamento.
related_record_idinteger | nullId del record collegato.
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 Attività
{
  "id": 512,
  "type": "call",
  "subject": "Richiamare il cliente",
  "description": null,
  "status": "open",
  "due_date": "2026-07-15T00:00:00.000Z",
  "completed_at": null,
  "related_module": "deals",
  "related_record_id": 88,
  "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/activitiesreadElenco paginato e filtrabile.
GET/api/activities/:idreadUna singola attività.
GET/api/activities/:id/historyreadStorico modifiche del record.
POST/api/activitiescreateCrea un'attività.
PATCH/api/activities/:idupdateModifica parziale.
PATCH/api/activities/bulkupdateAggiornamento massivo.
DELETE/api/activities/:iddeleteSoft delete.
GET/api/activities/export.csv · .xlsxexportEsporta l'elenco filtrato.
POST/api/activities/import/preview · /executecreateImport CSV.

03Collegamento a un record

Un'attività si aggancia a qualsiasi record indicando la coppia related_module + related_record_id. I moduli base ammessi sono:

Nota

Fornisci sempre related_module e related_record_id insieme: ometterne solo uno restituisce 422. L'esistenza del record collegato è verificata lato server: un id inesistente o fuori dal tuo scope viene rifiutato.

04Elencare le attività

GET /api/activities bearer richiesto

Restituisce le attività visibili all'utente (secondo lo scope del ruolo), paginate. Per filtrare quelle di un record usa advanced_filters su related_module e related_record_id.

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

05Recuperare un'attività

GET /api/activities/:id bearer richiesto
Parametri path
ParametroTipoDescrizione
idintegerId dell'attività.
Esiti
StatoCorpo
200{ success: true, data: { …activity } }
404NOT_FOUND: inesistente o fuori dal tuo scope.

06Creare un'attività

POST /api/activities bearer richiesto
Parametri body
CampoTipoNote
subjectstringrichiestoOggetto dell'attività. 1–255 caratteri.
typestringopzionaleTipo. Default task. Max 40.
descriptionstringopzionaleNote libere. Max 5000.
statusstringopzionaleStato. Default open. Max 40.
due_datedateopzionaleScadenza.
completed_atdateopzionaleData di completamento.
related_moduleenumopzionaleModulo del record collegato. Va insieme a related_record_id.
related_record_idintegeropzionaleId del record collegato. Va insieme a related_module.
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/activities \
  -H "Authorization: Bearer <accessToken>" \
  -H "Content-Type: application/json" \
  -d '{ "subject": "Richiamare il cliente", "type": "call", "due_date": "2026-07-15", "related_module": "deals", "related_record_id": 88 }'
const res = await fetch("https://crm.tuodominio.it/api/activities", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${accessToken}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    subject: "Richiamare il cliente", type: "call", due_date: "2026-07-15",
    related_module: "deals", related_record_id: 88,
  }),
});
const { data } = await res.json();
Risposta · 201
json
{ "success": true, "data": { "id": 512, "subject": "Richiamare il cliente", "related_module": "deals", "related_record_id": 88,  } }
Esiti
StatoCodiceQuando
201·Attività creata; nel corpo l'oggetto completo.
422VALIDATION_ERRORsubject mancante, related_* forniti solo a metà o record collegato inesistente.
403FORBIDDENCampo non scrivibile dal ruolo (nei details l'elenco dei campi negati).

07Aggiornare un'attività

PATCH/api/activities/:idbearer richiesto

Modifica parziale: invia solo i campi da cambiare (gli stessi del body di creazione, tutti opzionali). Esempio tipico: chiudere il task impostando status e completed_at. Risponde 200 con l'oggetto aggiornato, 404 se fuori scope, 422 in validazione.

curl
curl -X PATCH https://crm.tuodominio.it/api/activities/512 \
  -H "Authorization: Bearer <accessToken>" \
  -H "Content-Type: application/json" \
  -d '{ "status": "done", "completed_at": "2026-07-15T10:30:00.000Z" }'

08Eliminare

DELETE/api/activities/:idbearer richiesto

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

09Aggiornamento massivo

PATCH/api/activities/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": [512, 511, 509], "changes": { "status": "done" } }
Risposta · 200
json
{ "success": true, "data": { "requested": 3, "updated": 2 } }

10Import ed export