API, webhook e MCP: collega il tuo gestionale al quaderno
Se gestisci l'azienda con un gestionale, un foglio dei costi o il programma del tuo consulente, non ha senso digitare ogni lavorazione due volte. Questa è la documentazione per tirare fuori il quaderno, i costi e lo stato di conformità dall'esterno, e per far entrare lavorazioni dal sistema che usi già.
La base è https://agrogps-api.fly.dev/api/v1. È in produzione dal 17 settembre 2026. Risponde sempre in JSON, anche negli errori.
Due modi per identificarsi
| Chi chiama | Intestazione | Cosa può fare |
|---|---|---|
| L'app o il web | Authorization: Bearer <sesión> | Tutto, anche creare e revocare chiavi |
| Un sistema esterno | X-API-Key: agk_… | Leggere, oppure leggere e scrivere secondo l'ambito della chiave |
La chiave si crea una volta dalla tua sessione e si mostra una sola volta: dopo conserviamo solo il suo hash. Se la perdi, si revoca e se ne crea un'altra. Una chiave di sola lettura che prova a scrivere riceve 403 AUT_004. Le chiavi non possono creare né cancellare altre chiavi o webhook: per questo serve sempre la sessione di una persona.
curl -X POST https://agrogps-api.fly.dev/api/v1/api-keys \
-H "Authorization: Bearer $SESION" \
-H "Content-Type: application/json" \
-d '{"name":"ERP Sage","scope":"read"}'
Cosa puoi leggere
| Endpoint | Restituisce |
|---|---|
GET /farms | Le aziende del titolare della chiave, con il suo ruolo |
GET /sync/entries?farm_id=…&since=0 | Tutte le lavorazioni con tutti i campi, paginate con next |
GET /groups/:id/overview | Pannello del gruppo: lavorazioni, costi, ricavi, margine, ettari trattati e coltura per azienda |
GET /advisor/portfolio | Il portafoglio del consulente: quali aziende sono in regola e quali no |
GET /advisor/farms/:id/pending | I campi ancora da compilare, lavorazione per lavorazione |
GET /notebook/entries/:id/history | Chi ha cambiato cosa e quando in una lavorazione |
Con una chiave di scrittura puoi anche registrare lavorazioni con POST /sync/entries, con lo stesso corpo che usa l'app. La sincronizzazione va per since, quindi un processo notturno scarica solo ciò che è cambiato.
Webhook firmati
Invece di chiedere ogni cinque minuti, ti avvisiamo noi. Registri un URL https pubblico e mandiamo un avviso quando succede qualcosa in un'azienda di cui sei titolare o gestore.
| Evento | Quando scatta |
|---|---|
entry.pushed | Si sincronizzano lavorazioni e almeno una viene accettata |
entry.reviewed | Un consulente o il titolare approva o segnala una lavorazione |
webhook.test | Premi prova |
Ogni invio porta X-Agro-Event, X-Agro-Timestamp in secondi Unix e X-Agro-Signature con l'HMAC-SHA256 di "<timestamp>.<cuerpo>". Controlla entrambe le cose: la firma e che l'orologio non si sia spostato di più di cinque minuti.
import hmac, hashlib, time
ts = request.headers["X-Agro-Timestamp"]
assert abs(time.time() - int(ts)) < 300
esperada = "sha256=" + hmac.new(
secreto.encode(), ts.encode() + b"." + cuerpo, hashlib.sha256
).hexdigest()
ok = hmac.compare_digest(esperada, request.headers["X-Agro-Signature"])
Le regole di consegna, dette chiaramente per evitare sorprese: un tentativo, sei secondi di attesa e nessun nuovo tentativo. Non seguiamo reindirizzamenti e rifiutiamo indirizzi privati, link-local e di metadati cloud, sia quando registri l'URL sia quando risolviamo il DNS di ogni invio. Se il tuo sistema ha bisogno di garanzie, usa il webhook come avviso e GET /sync/entries con since come rete di sicurezza: l'avviso è una cortesia, l'API è la verità.
MCP per assistenti IA
La stessa API è esposta come server MCP, il protocollo che gli assistenti usano per collegarsi agli strumenti. Serve a chiedere a un assistente quali aziende sono in ritardo, quanto è costata la campagna o cosa manca prima di un controllo.
{ "mcpServers": { "agro-gps": {
"command": "npx", "args": ["-y", "agro-gps-mcp"],
"env": { "AGROGPS_API_KEY": "agk_…" } } } }
Strumenti disponibili: list_farms, list_entries, entry_history, list_groups, group_overview, advisor_portfolio, advisor_pending e record_entry. L'ultimo funziona solo con una chiave di scrittura, resta segnato nello storico come scrittura via API e non invia mai nulla alla pubblica amministrazione.
Perché l'API non serve per imbrogliare
Un'API su un registro con valore legale deve poter essere guardata in faccia. In Spagna, il RD 1054/2022 permette di tenere il quaderno con qualsiasi programma che rispetti l'allegato II e sia interoperabile con il SIEX, e chiarisce che della veridicità risponde il titolare, non il programma. In Italia vale lo stesso principio: il registro è responsabilità dell'azienda. La nostra parte è l'integrità, ed è scritta nel codice.
| Cosa si potrebbe tentare | Cosa fa l'API |
|---|---|
| Annotare oggi con una data di mesi fa | Ogni lavorazione conserva la data dichiarata e quella di arrivo reale al server, e lo storico annota i giorni di ritardo |
| Annotare con una data futura | Viene rifiutata se supera le 24 ore da adesso |
| Scrivere senza una persona dietro | Ogni lavorazione ha un autore, e quelle che entrano con una chiave restano segnate con il prefisso di quella chiave |
| Cancellare ciò che dà fastidio | Non si cancella nulla: le cancellazioni sono lapidi con data |
| Inviare alla pubblica amministrazione in automatico | L'invio ufficiale esiste solo in Spagna, dove attende ancora l'omologazione di ogni regione, ed esige la sessione di una persona autorizzata: una chiave riceve 403 SIE_403. In Italia oggi non inviamo nulla al SIAN |
Errori
Sempre {"code":"INT_NNN","message":"…"}, mai una traccia. Quelli che vedrai di più: AUT_003 chiave non valida, AUT_004 chiave di sola lettura, AUT_429 troppi tentativi, AUT_503 autenticazione non disponibile (non è una chiave sbagliata: riprova), INT_003 URL che non è https, INT_403 operazione che richiede una sessione, INT_404 chiave o webhook che non è tuo.
Come si ottiene una chiave
L'API è inclusa nei piani per aziende e per consulenti. Se hai già un account, la chiave si crea dall'app. Se stai valutando l'integrazione prima di abbonarti, scrivi a support@agrogps.eu raccontando quale sistema vuoi collegare e ti diamo un accesso di prova. La documentazione è pubblica e gratuita: preferiamo che tu la legga prima di pagare.
Domande frequenti
Posso tenere tutto il quaderno dal mio gestionale senza aprire l'app? Sì per registrare e leggere. No per un invio ufficiale, che esiste solo in Spagna e lì richiede la sessione di una persona autorizzata. È una scelta voluta: quell'atto ha conseguenze legali e non deve partire da un processo automatico.
I dati sono miei? Sì. L'esportazione completa è sempre gratuita, anche dopo la disdetta, e con l'API ti porti via esattamente ciò che vedi a schermo, storico e traccia delle modifiche compresi.
C'è un limite di chiamate? Non c'è una quota pubblicata per l'uso normale di un gestionale. La prova di un webhook è limitata a venti volte per utente e IP ogni dieci minuti, perché nessuno usi la funzione per generare traffico.
Cosa succede se cambiate l'API? La versione è nell'URL. Finché v1 resta pubblicata non togliamo campi né cambiamo il significato di quelli esistenti; il nuovo si aggiunge. Se un giorno ci fosse una v2, convivrebbero.
Il server MCP è su npm? Non ancora. Oggi si esegue dal repository; la pubblicazione è ancora da decidere. La configurazione qui sopra è quella che funzionerà il giorno in cui sarà pubblicato.
Serve a un consulente con molti clienti? È a questo che serve advisor/portfolio: una chiamata ti dice quali aziende sono in regola e quali hanno lavorazioni incomplete, senza aprirle una per una.