API, webhooks og MCP: forbind dit ERP med journalen
Hvis du styrer bedriften med et ERP, et regneark over omkostninger eller din rådgivers program, giver det ingen mening at taste opgaverne ind to gange. Her er dokumentationen til at hente journalen, omkostningerne og status for overholdelse ud udefra, og til at lægge opgaver ind fra det system, du allerede bruger.
Basen er https://agrogps-api.fly.dev/api/v1. Den har været i produktion siden 17. september 2026. Den svarer altid i JSON, også ved fejl.
To måder at identificere sig på
| Hvem kalder | Header | Hvad den kan |
|---|---|---|
| Appen eller webben | Authorization: Bearer <sesión> | Alt, også at oprette og tilbagekalde nøgler |
| Et eksternt system | X-API-Key: agk_… | Læse, eller læse og skrive alt efter nøglens omfang |
Nøglen oprettes én gang fra din session og vises kun én gang: bagefter gemmer vi kun dens hash. Mister du den, tilbagekalder du den og opretter en ny. En skrivebeskyttet nøgle, der forsøger at skrive, får 403 AUT_004. Nøgler kan ikke oprette eller slette andre nøgler eller webhooks: det kræver altid en persons session.
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"}'
Hvad du kan læse
| Endpoint | Returnerer |
|---|---|
GET /farms | Nøgleindehaverens bedrifter, med rolle |
GET /sync/entries?farm_id=…&since=0 | Alle opgaver med alle registreringsfelter, pagineret med next |
GET /groups/:id/overview | Gruppens oversigt: opgaver, omkostning, indtægter, margin, behandlede hektar og afgrøde pr. bedrift |
GET /advisor/portfolio | Rådgiverens portefølje: hvilke bedrifter er ajour, og hvilke er ikke |
GET /advisor/farms/:id/pending | De felter, der mangler at blive udfyldt, opgave for opgave |
GET /notebook/entries/:id/history | Hvem ændrede hvad og hvornår i en opgave |
Med en skrivenøgle kan du også registrere opgaver med POST /sync/entries, med samme body som appen bruger. Synkroniseringen går efter since, så en natlig kørsel kun henter det, der er ændret.
Signerede webhooks
I stedet for at spørge hvert femte minut giver vi dig besked. Du registrerer en offentlig https-URL, og vi sender en besked, når der sker noget på en bedrift, hvor du er ejer eller ansvarlig.
| Hændelse | Hvornår den udløses |
|---|---|
entry.pushed | Opgaver synkroniseres, og mindst én bliver accepteret |
entry.reviewed | En rådgiver eller ejeren godkender eller markerer en opgave |
webhook.test | Du trykker på test |
Hver levering har X-Agro-Event, X-Agro-Timestamp i Unix-sekunder og X-Agro-Signature med HMAC-SHA256 af "<timestamp>.<cuerpo>". Tjek begge dele: signaturen, og at uret ikke er mere end fem minutter ved siden af.
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"])
Leveringsreglerne, sagt klart, så du ikke bliver overrasket: ét forsøg, seks sekunders ventetid og ingen genforsøg. Vi følger ikke omdirigeringer og afviser private adresser, link-lokale adresser og cloud-metadataadresser, både når URL'en registreres, og når DNS slås op ved hver levering. Har dit system brug for garantier, så brug webhooken som besked og GET /sync/entries med since som sikkerhedsnet: beskeden er en høflighed, API'et er sandheden.
MCP til AI-assistenter
Det samme API er tilgængeligt som MCP-server, den protokol assistenter bruger til at forbinde sig med værktøjer. Du kan spørge en assistent om fx hvilke bedrifter der er bagud, hvad sæsonen har kostet, eller hvad der mangler før en kontrol.
{ "mcpServers": { "agro-gps": {
"command": "npx", "args": ["-y", "agro-gps-mcp"],
"env": { "AGROGPS_API_KEY": "agk_…" } } } }
Tilgængelige værktøjer: list_farms, list_entries, entry_history, list_groups, group_overview, advisor_portfolio, advisor_pending og record_entry. Det sidste virker kun med en skrivenøgle, markeres i historikken som skrevet via API og sender aldrig noget til myndighederne.
Hvorfor API'et ikke kan bruges til at snyde
Et API oven på en registrering med juridisk værdi skal kunne tåle at blive set efter i sømmene. I Spanien tillader RD 1054/2022 at føre journalen i ethvert IT-system, der opfylder kravene i bilag II og kan udveksle data med SIEX, og loven gør det klart, at det er ejeren og ikke programmet, der står inde for oplysningerne. Vores del er integriteten, og den ligger i koden, i alle lande.
| Hvad nogen kunne forsøge | Hvad API'et gør |
|---|---|
| Registrere i dag med en dato for måneder siden | Hver opgave gemmer den angivne dato og den faktiske ankomst til serveren, og historikken noterer antal dages forsinkelse |
| Registrere med en fremtidig dato | Afvises, hvis den ligger mere end 24 timer ude i fremtiden |
| Skrive uden en person bag | Enhver opgave har en forfatter, og dem der kommer ind via nøgle, markeres med nøglens præfiks |
| Slette det, der er i vejen | Intet slettes: sletninger er gravsten med dato |
| Indsende til myndighederne automatisk | Officiel indsendelse kræver en persons session med tilladelse: en nøgle får 403 SIE_403 |
Officiel indsendelse findes i dag kun i Spanien, og den afventer godkendelse region for region. I Danmark forbereder Agro GPS den årlige indberetning til SJI, men indsendelsen fra appen er endnu ikke i produktion. Via API'et læser og skriver du journalen.
Fejl
Altid {"code":"INT_NNN","message":"…"}, aldrig en stack trace. Dem du oftest vil se: AUT_003 ugyldig nøgle, AUT_004 skrivebeskyttet nøgle, AUT_429 for mange forsøg, AUT_503 godkendelse utilgængelig (ikke det samme som en forkert nøgle: prøv igen), INT_003 URL der ikke er https, INT_403 handling der kræver en session, INT_404 nøgle eller webhook der ikke er din.
Sådan får du en nøgle
API'et følger med virksomheds- og rådgiverplanerne. Har du allerede en konto, opretter du nøglen i selve appen. Overvejer du integrationen, før du køber, så skriv til support@agrogps.eu, fortæl hvilket system du vil forbinde, så giver vi dig testadgang. Dokumentationen er offentlig og gratis: vi vil hellere have, at du ser den, før du betaler.
Ofte stillede spørgsmål
Kan jeg føre hele journalen fra mit ERP uden at åbne appen? Ja til at registrere og læse. Nej til officiel indsendelse til myndighederne, som kræver en persons session med tilladelse til at indsende. Det er et bevidst valg: den handling har juridiske konsekvenser og må ikke udløses af en automatisk proces.
Er dataene mine? Ja. Den fulde eksport er altid gratis, også hvis du opsiger, og via API'et får du præcis det samme, som du ser på skærmen, inklusive historik og ændringsspor.
Er der en grænse for kald? Der er ingen offentliggjort kvote for normal brug fra et ERP. Test af en webhook er begrænset til tyve gange pr. bruger og IP hvert tiende minut, så ingen bruger funktionen til at sende trafik.
Hvad sker der, hvis I ændrer API'et? Versionen står i URL'en. Så længe v1 er udgivet, fjerner vi ingen felter og ændrer ikke betydningen af dem, der findes; nyt bliver tilføjet. Hvis der en dag kommer en v2, vil de to leve side om side.
Ligger MCP-serveren på npm? Endnu ikke. I dag køres den fra repositoriet; udgivelsen er ikke besluttet endnu. Konfigurationen ovenfor er den, der vil virke den dag, den udgives.
Kan en rådgiver med mange kunder bruge det? Det er det, advisor/portfolio er til: ét kald fortæller, hvilke bedrifter der er ajour, og hvilke der har ufuldstændige opgaver, uden at gå ind i dem én for én.