Real-world data your AI agents can prove.
Name a place. Read what was seen. Check the receipt.
Free, no account. Built on the open emem protocol.
How busy is Trafalgar Square right now?
above this camera's median at 95% confidence
# No key. No account. A live London camera frame.
curl -X POST https://geo.qa/api/v1/object-detection \
-H "Content-Type: application/json" \
-d '{
"image_url": "https://s3-eu-west-1.amazonaws.com/jamcams.tfl.gov.uk/00001.06508.jpg",
"prompts": ["car", "person", "bicycle"]
}'{
"detections": [
{
"label": "car",
"confidence": 0.967,
"bbox": [37.4, 120.0, 83.2, 140.6],
"bbox_normalized": [0.106, 0.417, 0.236, 0.488],
"area": 938.95
}
],
"total_objects": 14,
"model": "fasterrcnn_mobilenet_v3_large_fpn (cpu_detect@3)",
"processing_time_ms": 1005
}Detect anything in any image. No key, no account. Name the classes at call time; one the detector has no head for comes back in refused_prompts, named and reasoned, never as an empty list you would read as 'nothing there'.
Why it exists
Models guess. This one checks.
Ship an agent and it will answer about somewhere it has never seen. Fluently, and wrong. Hand it the observations instead.
1
Name it
One stable cell, about ten metres, anywhere on Earth. Every sensor files against it, so two agents get one address rather than two descriptions.
2
Read it
Satellites, your cameras, drones and ground sensors write to one record. An answer is the observations behind it. When there are none, it says so.
3
Check it
Every fact signed and logged. Re-check any receipt offline, against the open protocol. You pay to ask; checking is free.
The API
Thirty-one routes. Twenty-six need no key.
This is the whole published surface. Everything below is in the OpenAPI spec, and it speaks MCP, so an agent can pick it up without an integration.
Perceive
Send an image, a tile or a live feed. Get structured objects back.
- GET
/api/worlds/londonno keyRead a whole city at once. What London's cameras see now, the trend, and the receipt under each count.
- POST
/api/v1/object-detectionno keyDetect and segment anything in an image. Name the classes at call time.
- POST
/api/mcp · analyze_scenekeyDescribe what is actually in the frame.
- POST
/api/tool/camera-stream/detectionskeyTrack detections across a live feed, not one frame.
Ground
Turn a place into an answer. Every result resolves to one cell64, so two agents asking about the same ground get the same address.
- GET
/api/tool/satellite/lulc/analyzekeyRead land cover at a point, from Sentinel-2, Landsat or Sentinel-1.
- POST
/api/tool/satellite/lulc/bboxkeyCover a bounding box, as a fraction per class.
- POST
/api/tool/satellite/lulc/polygonkeyClip to any polygon: a field, a concession, a district.
Measure
Send a photograph or a pin, get a number with its accuracy under it. All fifteen need no key, and each one refuses in a named way rather than guessing.
- POST
/api/produce/measureno keyMeasure produce against the EU marketing standard. Length, grade, colour stage, blemish — each with its own accuracy and a signed receipt.
- GET
/api/produce/card.pngno keyPrint the scale card. Lay it beside the fruit and the millimetres are measured, not typed.
- GET
/api/produce/selftestno keyScore our measurement against geometry whose answer is exact. The accuracy claim, run live.
- POST
/api/redact/peopleno keyMosaic every person before the photograph is stored. Says plainly what it does not catch.
- POST
/api/stack/countno keyCount the crate faces in a stack. Abstains with a reason rather than guessing a load.
- POST
/api/ppe/sprayingno keyRead a spray photograph for respirator, gloves and coverall, keeping no face. Uncalibrated today, and says so.
- POST
/api/prescreenno keyRank candidate farms from their pins, before anyone drives out.
- POST
/api/water/distanceno keyFind the nearest recurring surface water, for a spray buffer. A bracket, never an invented metre.
- POST
/api/crop/agreeno keyCheck whether a photograph could be of the field it claims.
- POST
/api/decideno keyRank candidates on typed features, renormalising over what is known. Refuses to price what nobody measured.
- GET
/api/partnerno keyRead the measurement index: what each route does, needs, returns and refuses, in its own words.
- GET
/api/partner/distno keyStop calling us. The same measuring code as a pinnable wheel, to run where the photograph already is.
- GET
/api/verify/keyno keyRead the key every receipt is signed with, and what each signature binds — and does not bind.
- GET
/api/partner/dist/{name}no keyDownload an artefact by name. X-SHA256 over the bytes actually sent, so the pin checks itself.
- GET
/api/probesno keyGate your deploy on ours. Every claim re-checked against the running code: holds, fails, or undetermined.
Prove
Check any answer. These nine routes need no key, so an auditor confirms a receipt without an account.
- POST
/api/world-model/verifyno keyVerify any token or receipt through one door. Fact, bundle, card, bare content id. No key.
- GET
/api/world-model/verify/by-cid/{cid}no keyVerify by content id and read the per-step verdict. The path the London page uses.
- POST
/api/world-model/verify/receiptno keyRe-check one receipt. ed25519, offline, no account.
- POST
/api/world-model/verify/batchno keyBatch up to 256 receipts. Over that it refuses rather than truncating.
- GET
/api/world-model/verify/log/sthno keyPin the signed log head. Every inclusion proof resolves to it.
- GET
/api/world-model/verify/log/proof/{cid}no keyProve inclusion, RFC 6962: this fact, this position.
- GET
/api/world-model/verify/log/consistencyno keyProve consistency between two tree sizes: append-only, never rewritten.
- POST
/api/world-model/verify/agent-cardno keyCheck the agent card's signature before trusting anything else here. Detached JWS over RFC 8785; key at /.well-known/jwks.json.
- GET
/api/world-model/media/receipt/{sha256}no keyHash a file and ask whether we hold custody of those exact bytes. Proves it has not changed since we received it, not that what it shows is true.
Pricing
Priced per answer.
Compare one number. Real-world data costs more than a web fetch, because a satellite pass is not a page load.
You pay per answer. A detection, a land-cover read or a recall each count as one. Anything that returns signed data is an answer.
Checking costs nothing, on every tier. Verifying a receipt, pulling an inclusion proof or auditing the transparency log is free forever, because an answer you have to pay us to re-check was never proof.
- Answers
- 30,000 / month
- Storage
- 50 GB
For one person putting an agent into production
Start Pro- Answers
- 250,000 / month
- Storage
- 500 GB
For a team watching many places at once
Start Max- Answers
- Unmetered
- Storage
- Unlimited
For a deployment that has to run inside your boundary
Talk to salesTeam seats and annual billing are on the full pricing page. Prices in USD, billed through Razorpay.
Give your model a memory.
Let it cite what was seen instead of guessing what is likely.
geo.qa · the managed deployment of the emem protocol