API REST, webhook e server MCP
Specifica di riferimento per sviluppatori e agenti AI. Ogni oggetto del CRM è una risorsa REST, ogni cambiamento è un evento webhook, ogni capacità è anche un tool MCP con gli stessi permessi dell'utente che lo autorizza.
Convenzioni dell'API
Le regole valgono per tutte le risorse: impara una volta, usa ovunque.
https://nido.logicaltech.it/api/v1Tutte le risorse sono sotto /api/v1Authorization: Bearer <token>Chiavi API (server) o OAuth 2.1 + PKCE (app, MCP)Nido-Version: 2026-09-01Versioni datate, breaking change solo in nuove date100 req/10 s per tokenHeader X-RateLimit-Remaining · 429 + Retry-After?limit=50&cursor=eyJvIjo1MH0Risposta: { data, next_cursor, has_more }?filter[stage]=proposta&sort=-amountOperatori: eq, ne, gt, gte, lt, lte, in, containsIdempotency-Key: <uuid>Su POST/PATCH, valida 24 h{ error: { type, code, message } }400 · 401 · 403 · 404 · 409 · 422 · 429 · 5xxcurl https://nido.logicaltech.it/api/v1/contacts?limit=2&filter[lifecycle_stage]=customer \ -H "Authorization: Bearer nido_sk_live_…" \ -H "Nido-Version: 2026-09-01"
const res = await fetch("https://nido.logicaltech.it/api/v1/contacts", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.NIDO_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({ email: "[email protected]", first_name: "Anna" }),
})Risorse e metodi
Ogni endpoint indica lo scope OAuth richiesto. 177 endpoint in 25 gruppi, generati dallo stesso registry che serve l'API. Parametri ed esempi →
Oggetti principali
Tutti gli oggetti condividono id con prefisso, timestamp ISO 8601, proprietà personalizzate in «properties» e associazioni esplicite.
{
"id": "ct_29f1",
"object": "contact",
"email": "[email protected]",
"first_name": "Marco",
"last_name": "Ferraro",
"lifecycle_stage": "opportunity",
"owner_id": "usr_giulia",
"lead_score": 92,
"properties": {
"lead_source": "fiera",
"gdpr_newsletter": true
},
"associations": {
"companies": ["co_4471"],
"deals": ["deal_8841"]
},
"created_at": "2026-08-14T09:12:00Z",
"updated_at": "2026-10-03T10:14:03Z"
}{
"id": "deal_8841",
"object": "deal",
"name": "Rinnovo licenze 2027",
"amount": 24000,
"currency": "EUR",
"pipeline_id": "pl_vendite_b2b",
"stage": "negoziazione",
"probability": 0.8,
"close_date": "2026-10-12",
"status": "open",
"owner_id": "usr_giulia",
"line_items": [
{ "sku": "NIDO-BIZ", "qty": 25,
"unit_price": 840, "discount": 0.1 }
],
"associations": {
"contacts": ["ct_29f1", "ct_31aa"],
"companies": ["co_4471"]
}
}HTTP/1.1 422 Unprocessable Entity
{
"error": {
"type": "validation_error",
"code": "invalid_property",
"message": "La fase «firmato» non esiste
nella pipeline vendite-b2b.",
"param": "stage",
"doc_url": "https://nido.logicaltech.it/developers/errors
#invalid_property",
"request_id": "req_9f2c11ab"
}
}Eventi e consegne
Ogni evento arriva come POST JSON firmato. Rispondi 2xx entro 10 s; in caso di errore riproviamo fino a 5 volte con backoff esponenziale (1 min → 5 min → 30 min → 2 h → 6 h).
Catalogo eventi
contact.createdcontact.updatedcontact.deletedcontact.mergedcompany.createdcompany.updatedcompany.deleteddeal.createddeal.updateddeal.stage_changeddeal.wondeal.lostdeal.deletedtask.createdtask.completedmeeting.bookedcall.loggednote.createdemail.sentemail.openedemail.repliedconversation.assignedworkflow.run_failedform.submitteduser.invitedai.action_executedPOST /tuo-endpoint
Content-Type: application/json
X-Nido-Event: deal.won
X-Nido-Delivery: dlv_7hq2k…
X-Nido-Signature: t=1791018734,
v1=5f2a9c…c91e
{
"id": "evt_01jb7q2k9x",
"type": "deal.won",
"api_version": "2026-09-01",
"created_at": "2026-10-03T10:14:03Z",
"workspace_id": "005683c9-…",
"data": {
"object": { …Deal },
"previous": { "stage": "negoziazione" }
}
}import crypto from "node:crypto";
export function verify(req, secret) {
const [t, v1] = req.headers["x-nido-signature"]
.split(",").map((p) => p.split("=")[1]);
// rifiuta richieste più vecchie di 5 min
if (Date.now() / 1000 - Number(t) > 300)
return false;
const expected = crypto
.createHmac("sha256", secret)
.update(`${t}.${req.rawBody}`)
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(v1), Buffer.from(expected));
}Server MCP di Nido
Il Model Context Protocol permette a Claude, ChatGPT, Cursor e ai tuoi agenti di leggere e aggiornare il CRM con tool tipizzati. Il server è remoto (streamable HTTP), autenticato via OAuth 2.1 e rispetta ruoli e permessi dell'utente che lo collega.
ClaudeChatGPTCursorOAuth 2.1scopesHTTPv1idempotencyaudit_logUE{
"mcpServers": {
"nido": {
"type": "http",
"url": "https://nido.logicaltech.it/api/mcp",
"oauth": {
"scopes": [
"contacts:read",
"contacts:write",
"deals:read",
"deals:write",
"activities:write"
]
}
}
}
}Collegare un client in 4 passi
| Tool | Cosa fa | Parametri principali | Tipo | Conferma utente |
|---|---|---|---|---|
| search_crm | Cerca nel CRM | query, types, limit | Lettura | — Configurabile |
| get_record | Leggi record | object, id, include | Lettura | — Configurabile |
| get_timeline | Cronologia attività | object, id, since, limit | Lettura | — Configurabile |
| list_deals | Elenca deal | pipeline, stage, owner, close_before | Lettura | — Configurabile |
| pipeline_summary | Riepilogo pipeline | pipeline, period | Lettura | — Configurabile |
| run_report | Esegui report | report_id, filters | Lettura | — Configurabile |
| create_contact | Crea contatto | email, first_name, last_name, company | Scrittura | — Configurabile |
| update_record | Aggiorna record | object, id, properties | Scrittura | Sempre |
| move_deal_stage | Sposta fase del deal | deal_id, stage, reason | Scrittura | Sempre |
| log_activity | Registra attività | object, id, type, body | Scrittura | — Configurabile |
| create_task | Crea task | title, due_at, owner_id, related | Scrittura | — Configurabile |
| draft_email | Prepara bozza email | to, subject, body, context_id | Lettura | — Configurabile |
| send_email | Invia email | draft_id | Scrittura | Sempre |
| enroll_in_workflow | Iscrivi a workflow | workflow_id, object, id | Scrittura | Sempre |
Risorse
nido://contacts/{id}Scheda contatto in markdownnido://companies/{id}Azienda con deal e personenido://deals/{id}Deal, prodotti e cronologianido://pipelinesPipeline e fasi del workspacenido://reports/{id}Risultato di un report salvatonido://schema/{object}Proprietà disponibili e tipiPrompt pronti
/prepara_meetingBrief di 1 pagina prima di una call: contesto, persone, rischi, domande/riassumi_accountStoria del cliente, valore, stato dei deal e prossimi passi/revisione_pipelineDeal fermi, a rischio o senza prossima attività/follow_upEmail di follow-up dopo un meeting registratoSicurezza e controllo
Permessi dell'utenteL'AI non vede né modifica più di chi l'ha collegata.Umano nel loopScritture sensibili richiedono conferma esplicita.Audit logClient, tool, parametri e risultato per ogni chiamata.Revoca immediataToken a scadenza, revocabili in un clic.Dati in UENessun addestramento su dati dei clienti.Da una domanda a tre azioni nel CRM.
Claude combina tool di lettura e scrittura. Lo spostamento di fase richiede conferma: l'utente approva dentro la chat e l'azione finisce nell'audit log di Nido.
{ "query": "Ferraro", "types": ["deal"] }1 risultato · deal_8841 Rinnovo licenze 2027{ "deal_id": "deal_8841", "stage": "vinto" }Richiede conferma · Approva / Rifiuta{ "title": "Kickoff Ferraro", "due_at": "2026-10-06", "deal_id": "deal_8841" }Task creato per Giulia RinaldiScope e permessi
Gli stessi scope valgono per chiavi API, token OAuth e tool MCP. Un token non può mai superare i permessi del ruolo dell'utente che l'ha autorizzato.