Changelog
Subscribe to the RSS feed to be notified of every entry.
Adding a field is never a breaking change - clients must ignore unknown fields.
Removing a field or changing its meaning gets a new API version with a
deprecation notice at least 12 months ahead and a Sunset header on the old
version. method_version values change independently of the API version and
are never applied retroactively.
v1 hardening after the launch audit
· API version v1
109 audited defects processed. The OpenAPI document now declares every error response, all timestamps are RFC 3339 UTC, CAP POSTs require Idempotency-Key, webhook URLs are policy checked and secrets stored encrypted, SAR events are newest first, indices accept a quality filter, portfolios have a ranked parcel list - and more.
No field was removed and no meaning changed, so nothing on your side has to be updated; the items below are what you may notice.
Contract and documents
/v1/openapi.jsondeclares the real error contract: every status an operation can return, with the sharedErrorEnvelopeschema anderror.typeas an enum of the catalog; POSTs that answer201/202also declare the200of an idempotent replay. Generated SDKs no longer need a hand-written error path.- New error type
method_not_allowed(405) - the catalog now has 34 types.validation_errorrows name the field without abody./query.prefix. - Every timestamp (
created_at,computed_at,issued_at, …) is UTC in RFC 3339 form with aZsuffix and is declaredformat: date-time. x-agrovisio-lifecyclein the OpenAPI document and theDeprecation/Sunset/Linkheaders describe version retirement.- Security headers on every
/v1response; the API’s own HTML pages refuse to be framed.
Behaviour
Idempotency-Keyis required on the CAP POSTs (/cap/subsidy/calculate,/cap/eco-schemes/optimize) as on every other POST. Concurrent requests with the same key answer409 idempotency_conflictwithdetail.state: "in_progress"andRetry-After(at most 120 s). The key of a job stays bound to it for the job’s 180 day retention.POST /v1/indices/batchanswers200on the first call as well as on a replay (it was201).GET /v1/parcels/{id}/indices?quality=filters observations by class. Observations below 50 % valid pixels arecloud_maskedwithvalue: null(no undocumentedpoorclass). Multi-year windows compare each observation with the norm of its own season.GET /v1/parcels/{id}/sar/eventsreturns events newest first.GET /v1/portfolios/{id}/parcels: ranked, filterable parcel list for a portfolio.GET /v1/jobs/{id}:eta_secondscounts down and isnullwhen finished;attemptsis reported;erroris{type, message}with catalog types ortimeout; failed attempts are retried after 30 s, 2 min and 10 min.- The four “no honest number”
422responses (insufficient_data,baseline_not_ready,insufficient_resolution,vegetation_masked) carry theX-Agrovisio-Not-Billableheader, as documented. GET /v1/parcelsand the portfolio list validate every filter and reject unknown query parameters (offset, misspelt filters) with400 validation_error.POST /v1/parcelsderivescountryfrom the geometry and rejects a contradicting declared country; geometry repairs (unclosed ring, bow-tie) are reported inwarnings, never applied silently.- Rate limit
429caused by the per-second burst carriesX-RateLimit-Burst-Limit/X-RateLimit-Burst-Reset; the minute headers keep describing the minute window. - Damage: an
event_datewhose 14 day post-event window has not closed is400 date_range_invalidwithdetail.reason: post_window_openanddetail.available_from. - Yield forecast: the confidence interval follows the growth phase of the
requested
season(with a +/-30 % emergence step and aharvestedphase), and an unknown?crop=is a400 validation_errorlisting the supported codes. - CAP rotation: at most three consecutive seasons of the same crop; a fourth is a violation. Years are validated (four digits, 1990 to next year).
Webhooks
- Endpoint URLs must be
https://, at most 2048 characters, without credentials and on a public host; the check is repeated before every delivery and redirects are not followed. - Signing secrets are stored encrypted and shown once; an idempotent retry of the registration returns the same response.
- Retry schedule 1 min, 5 min, 30 min, 2 h, 12 h (six attempts). An endpoint
is disabled only when one delivery exhausts all attempts with no success in
between;
webhook.disabledgoes to your other endpoints. New event typewebhook.testfor the portal’s test button.
Sandbox
- The synthetic history is anchored to a fixed epoch, so demo results are
stable across nightly reseeds.
parcel_quotais 10 own parcels. Shared parcels carryshared: truefor every key except the owning demo account.
v1 launch
· API version v1
First public version of the Data API - thirteen endpoint groups, one error envelope, sandbox with 20 seeded parcels, signed webhooks and generated SDKs.
The Data API is mounted at /v1 and documented by /v1/openapi.json (OpenAPI 3.1).
Endpoint groups
- Account -
GET /v1/account: plan, products, rate limits and current period usage. - Parcels - create from GeoJSON or cadastral number, bulk import (async), list with cursor pagination, delete;
GET /v1/cadastre/lookup. - Indices - NDVI / NDWI / EVI series with per observation anomaly and five season baseline;
latest; batch of up to 500 parcels. - Weather - 7 day forecast, daily history from 1981, agroclimate indicators per season.
- SAR - Sentinel-1 backscatter series, detected events (lodging, mowing, harvest, tillage, regrowth), relative soil moisture.
- Thermal - Sentinel-3 land surface temperature with anomaly, water stress index (parcels of 5 ha and more).
- Yield - forecast with a mandatory confidence interval (
/yield-forecast, alias/yield). - Damage - asynchronous before/after assessment, stored result, deterministic PDF certificate.
- Risk - explainable 0-100 parcel score with six components, portfolio summary and refresh.
- CAP - direct payment calculation, eco-scheme optimisation, rotation compliance.
- Parametric Index - definitions (draft, publish, supersede), evaluation, backtest.
- Jobs - polling for every
202job. - Webhooks - subscriptions, event catalog, HMAC-SHA256 signed delivery with a 300 s replay window.
Conventions fixed at launch
- Error envelope
{error: {type, message, detail, request_id, doc_url}}with 33 stableerror.typevalues. Idempotency-Keyrequired on every POST, stored for 24 hours, replays markedIdempotent-Replay: true.- Three rate limit pools (
standard,write,expensive) withX-RateLimit-*headers on every response. method_versionandconfig_hashon every computed result; never changed retroactively.X-Data-Attribution: Contains modified Copernicus Sentinel dataon every satellite-derived response.
Tooling
- Sandbox with 20 shared Lithuanian parcels and five years of history, rebuilt nightly, never billed.
- Postman collection, static endpoint list and this documentation site are generated from the live OpenAPI document.
- Python (
agrovisio-data-api) and TypeScript (@agrovisio/data-api) SDKs generated from the same document.
