For integrators
Every number carries the band it was measured over.
These endpoints turn a photograph into millimetres, a pin into a screen, and a frame into a redacted frame. What makes them usable in a compliance record is not the numbers — it is that each one states how wrong it can be, and refuses outright when the photograph cannot answer. This page is generated from the running service, so it cannot drift from what the API actually does.
§ 1
Endpoints
agents integrating geo.qa perception into their own pipeline — 10 endpoints, as the service lists them now.
/api/produce/measure — measure produce in a photograph against a marketing standard/api/redact/people — mosaic every person in a photograph before it is stored/api/stack/count — count the crate faces in a stack photograph/api/ppe/spraying — read a spray photograph for respirator, gloves and coverall, keeping no face -- ppe_spraying@1, eudr#172/api/prescreen — rank candidate farms from their pins, before anyone drives out/api/water/distance — find the nearest recurring surface water, for a spray buffer/api/crop/agree — check whether a photograph could be of the field it claims/api/decide — rank candidates on typed features, renormalising over what is known/api/produce/card.png — the printable scale card — print at 100%, lay it flat beside the fruit, and send the photo with no mm_per_px/api/produce/selftest — score the measurement against geometry whose answer is exact, live, and return every case§ 2
The board you can gate on
Three states, not two. undetermined is not a failure — it means we could not find out, because an upstream archive was unreachable or somebody else’s box was slow. Gate on fails, not on the absence of green, or an outage you do not own will hold your release.
Not holding right now
witness-is-a-vouched-operator — geo.qa's co-signature counts as an independent OPERATOR on emem.dev.receipts-carry-a-time-bound — a receipt we sign now is bounded by somebody else's clock, not only ours.prescreen-reads-real-pins — /prescreen reads real coordinates and reports what it could not read.crop-agreement-separates-three-answers — /crop/agree keeps `disagrees` and `cannot_say` apart on the live route.fail on counts.fails > 0. Do NOT fail on counts.undetermined: that means the check did not run, which is a different fact from the claim being broken, and a board that reds on both is a board people stop reading. DO fail on `stale` -- a cached green whose refresh has died is the one answer worse than a red
§ 3
Run it in your region
Calling these endpoints sends the photograph across a border. For a photo of a person that is the thing the requirement is trying to avoid, so the same code ships as a wheel you install where the photograph already is.
/api/partner/dist. The wheel, the detector weights, and a sha256 for each. Pin both — a redaction is only as trustworthy as the weights, and those do not change when the version does.model_identity() returns two hashes: the module alone, identical on any machine, and one that also pins OpenCV and NumPy. Both are computed, never declared — an OpenCV upgrade can move a distance transform while the source is untouched, and a version string somebody remembers to bump would not show it.
Full reference in the docs, § 6.