← Agro GPS

API, webhooks e MCP: conecta o teu ERP ao caderno

Se levas a explotación cun ERP, unha folla de custos ou o programa da túa asesoría, non ten sentido teclear os labores dúas veces. Esta é a documentación para sacar o caderno, os custos e o estado de cumprimento desde fóra, e para meter labores desde o sistema que xa usas.

A base é https://agrogps-api.fly.dev/api/v1. Está en produción desde o 17 de setembro de 2026. Responde sempre JSON, tamén nos erros.

Dúas formas de identificarse

Quen chamaCabeceiraQue pode facer
A app ou a webAuthorization: Bearer <sesión>Todo, incluído crear e revogar chaves
Un sistema externoX-API-Key: agk_…Ler, ou ler e escribir segundo o ámbito da chave

A chave créase unha vez desde a túa sesión e só se ensina unha vez: despois só gardamos o seu hash. Se a perdes, revógase e créase outra. Unha chave de só lectura que tente escribir recibe 403 AUT_004. As chaves non poden crear nin borrar outras chaves nin webhooks: iso sempre vai coa sesión dunha persoa.

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"}'

Que podes ler

EndpointDevolve
GET /farmsAs explotacións do titular da chave, co seu rol
GET /sync/entries?farm_id=…&since=0Todos os labores co anexo II completo, paxinados por next
GET /groups/:id/overviewPanel do grupo: labores, custo, ingresos, marxe, hectáreas tratadas e cultivo por explotación
GET /advisor/portfolioCarteira do asesor: que explotacións están ao día e cales non
GET /advisor/farms/:id/pendingOs campos que faltan por encher, labor a labor
GET /notebook/entries/:id/historyQuen cambiou que e cando nun labor

Cunha chave de escritura ademais podes rexistrar labores con POST /sync/entries, co mesmo corpo que usa a app. A sincronización vai por since, así que un proceso nocturno só trae o que cambiou.

Comezar gratis

Webhooks asinados

En vez de preguntar cada cinco minutos, avisámoste nós. Damos de alta unha URL https pública e mandamos un aviso cando pasa algo nunha explotación onde es dono ou encargado.

EventoCando se dispara
entry.pushedSincronízanse labores e polo menos un acéptase
entry.reviewedUn asesor ou o titular aproba ou marca un labor
webhook.testPremes probar

Cada entrega leva X-Agro-Event, X-Agro-Timestamp en segundos Unix e X-Agro-Signature co HMAC-SHA256 de "<timestamp>.<cuerpo>". Comproba as dúas cousas: a sinatura e que o reloxo non se desviase máis de cinco minutos.

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"])

Regras de entrega, ditas claras para que non leves sorpresas: un intento, seis segundos de espera e sen reintentos. Non seguimos redireccións e rexeitamos enderezos privados, de ligazón local e de metadatos de nube, tanto ao dar de alta a URL como ao resolver o DNS de cada entrega. Se o teu sistema precisa garantías, usa o webhook como aviso e GET /sync/entries con since como rede de seguridade: o aviso é cortesía, a API é a verdade.

MCP para asistentes de IA

A mesma API está exposta como servidor MCP, o protocolo que usan os asistentes para conectarse a ferramentas. Serve para preguntarlle a un asistente cousas como que explotacións levan atraso, canto custou a campaña ou que falta por encher antes dunha inspección.

{ "mcpServers": { "agro-gps": {
  "command": "npx", "args": ["-y", "agro-gps-mcp"],
  "env": { "AGROGPS_API_KEY": "agk_…" } } } }

Ferramentas dispoñibles: list_farms, list_entries, entry_history, list_groups, group_overview, advisor_portfolio, advisor_pending e record_entry. A última só funciona con chave de escritura, queda marcada no historial como escritura por API e nunca envía nada á administración.

Por que a API non serve para facer trampas

Unha API sobre un rexistro con valor legal ten que poder mirarse de fronte. O RD 1054/2022 permite levar o caderno con calquera sistema informático que cumpra os requisitos do anexo II e sexa interoperable co SIEX, e deixa claro que o responsable da veracidade é o titular, non o programa. A nosa parte é a integridade, e está posta no código.

O que alguén podería intentarQue fai a API
Anotar hoxe con data de hai mesesCada labor garda a data declarada e a de chegada real ao servidor, e o historial anota os días de atraso
Anotar con data futuraRexéitase se supera as 24 horas desde agora
Escribir sen unha persoa detrásTodo labor leva autor, e os que entran por chave quedan marcados co prefixo desa chave
Borrar o que estorbaNon se borra nada: os borrados son lápidas con data
Enviar á administración en automáticoO envío oficial esixe a sesión dunha persoa con permiso: unha chave recibe 403 SIE_403

Erros

Sempre {"code":"INT_NNN","message":"…"}, nunca unha traza. Os que máis vas ver: AUT_003 chave non válida, AUT_004 chave de só lectura, AUT_429 demasiados intentos, AUT_503 autenticación non dispoñible (que non é o mesmo que chave mala: téntao de novo), INT_003 URL que non é https, INT_403 operación que esixe sesión, INT_404 chave ou webhook que non é teu.

Como se consegue unha chave

A API vai cos plans de empresa e de asesoría. Se xa tes conta, a chave créase desde a propia app. Se estás a valorar a integración antes de contratar, escribe a support@agrogps.eu contando que sistema queres conectar e dámosche acceso de probas. A documentación é pública e de balde: preferimos que a mires antes de pagar.

Comezar gratis

Preguntas frecuentes

Podo levar o caderno enteiro desde o meu ERP sen abrir a app? Si para rexistrar e ler. Non para o envío oficial á administración, que esixe a sesión dunha persoa con permiso para enviar. É unha decisión deliberada: ese acto ten consecuencias legais e non debe disparalo un proceso automático.

Os datos son meus? Si. A exportación completa é de balde sempre, tamén se te dás de baixa, e pola API levas exactamente o mesmo que ves na pantalla, incluídos os históricos e o rastro de cambios.

Hai límite de chamadas? Non hai cota publicada para o uso normal dun ERP. Probar un webhook si está limitado a vinte veces por usuario e IP cada dez minutos, para que ninguén use a función como emisor de tráfico.

Que pasa se cambiades a API? A versión vai na URL. Mentres v1 siga publicada, non quitamos campos nin cambiamos o significado dos que hai; o novo engádese. Se algún día houbese unha v2, convivirían.

O servidor MCP está en npm? Aínda non. Hoxe execútase desde o repositorio; a publicación está pendente de decidirse. A configuración de enriba é a que funcionará o día que se publique.

Isto vale para un asesor con moitos clientes? Para iso está advisor/portfolio: unha chamada dite que explotacións están ao día e cales teñen labores incompletos, sen entrar unha por unha.