{"protocolVersion":"0.3.0","name":"geo.qa","description":"A managed deployment of the open emem protocol. Ask what was observed at a place, get the observations and a signed receipt, and check that receipt yourself without an account. Satellite facts are signed by emem.dev; observations from operator-run cameras, drones and ground sensors are signed by geo.qa. Both keys are published.","url":"https://geo.qa/api/world-model/a2a","preferredTransport":"JSONRPC","version":"1.1.0","documentationUrl":"https://geo.qa/llms.txt","iconUrl":"https://geo.qa/icon.png","provider":{"organization":"Vortx AI","url":"https://vortx.ai"},"additionalInterfaces":[{"protocol":"a2a-jsonrpc","transport":"JSONRPC","url":"https://geo.qa/api/world-model/a2a"},{"protocol":"mcp-streamable-http","transport":"JSONRPC","url":"https://geo.qa/api/mcp"},{"protocol":"openapi-3.0","transport":"HTTP+JSON","url":"https://geo.qa/api/public-docs/openapi"},{"protocol":"oauth-protected-resource","transport":"HTTP+JSON","url":"https://geo.qa/.well-known/oauth-protected-resource"},{"protocol":"well-known-json","transport":"HTTP+JSON","url":"https://geo.qa/.well-known/geoqa.json"}],"supportsAuthenticatedExtendedCard":false,"capabilities":{"streaming":false,"pushNotifications":false,"stateTransitionHistory":false,"extensions":[{"uri":"https://geo.qa/spec/verify/v1","required":false,"description":"Unauthenticated verification. Re-check any receipt this service issued, fetch the ed25519 root of trust, pull RFC 6962 inclusion and consistency proofs from the append-only log, and check the signature on THIS CARD. No credential, now or ever. A receipt a stranger cannot check without an account is not a receipt, and a card a stranger cannot check is not evidence of anything.","params":{"verify_token":"https://geo.qa/api/world-model/verify","verify_receipt":"https://geo.qa/api/world-model/verify/receipt","verify_batch":"https://geo.qa/api/world-model/verify/batch","verify_agent_card":"https://geo.qa/api/world-model/verify/agent-card","log_head":"https://geo.qa/api/world-model/verify/log/sth","inclusion_proof":"https://geo.qa/api/world-model/verify/log/proof/{cid}","consistency_proof":"https://geo.qa/api/world-model/verify/log/consistency?first=&second=","root_of_trust":"https://geo.qa/.well-known/geoqa.json","jwks":"https://geo.qa/.well-known/jwks.json"}},{"uri":"https://geo.qa/spec/access-ladder/v1","required":false,"description":"A refusal from a metered route is an offer, not a dead end. The body lists every way to reach that exact resource, marked by whether a machine can take it alone. Over A2A the same refusal arrives as a task in state auth-required carrying the ladder; over MCP as a 401 whose WWW-Authenticate names the metadata document below.","params":{"x402Version":"1","settlement_status":"https://geo.qa/.well-known/oauth-protected-resource","resource_metadata":"https://geo.qa/.well-known/oauth-protected-resource"}}]},"defaultInputModes":["application/json"],"defaultOutputModes":["application/json"],"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","bearerFormat":"on_","description":"A long-lived key minted at https://geo.qa/chat/account/api-keys. Accepted as Authorization: Bearer on_… or X-API-Key: on_…"}},"security":[{"apiKey":[]}],"skills":[{"id":"read_world","name":"Read a place: what is there now, and the proof","description":"Read a whole place at once. Returns what geo.qa's cameras see there right now, how that compares with three hours ago, and the signed evidence under every number: the sha256 of the clip each count came from, the detector's function id, and a receipt cid that verifies with no key. Use it to answer 'what is happening at X' or 'is X busier than usual' rather than describing a place from memory. Places with no camera get the distance to the nearest one, not a number.","tags":["world","cameras","live","signed","open"],"examples":["tools/call {\"name\":\"read_world\",\"arguments\":{\"world\":\"london\",\"place\":\"trafalgar-square\"}}","message/send {\"message\":{\"role\":\"user\",\"parts\":[{\"kind\":\"text\",\"text\":\"what is happening at Trafalgar Square\"}]}}","GET https://geo.qa/api/worlds/london"],"inputModes":["application/json"],"outputModes":["application/json"],"security":[]},{"id":"verify_receipt","name":"Check a receipt this service did not have to issue","description":"Re-check any geo.qa or emem receipt and get back one uniform verdict: valid true, false, or null. null means nothing was checked -- it is never dressed up as a pass. A geoqa receipt is verified locally by recomputing its canonical preimage against the published key, so it stands up with this service offline; an emem receipt is checked by emem, whose key is also published. No credential, now or ever.","tags":["verify","receipts","signed","open"],"examples":["tools/call {\"name\":\"verify_receipt\",\"arguments\":{\"receipt\":{\"signer\":\"geoqa\",\"...\":\"...\"}}}","message/send {\"message\":{\"role\":\"user\",\"parts\":[{\"kind\":\"data\",\"data\":{\"skill\":\"verify_receipt\",\"receipt\":{\"signer\":\"geoqa\"}}}]}}","POST https://geo.qa/api/world-model/verify/receipt"],"inputModes":["application/json"],"outputModes":["application/json"],"security":[]},{"id":"detect_objects","name":"Detect objects in an image","description":"Open-vocabulary detection on one image. Give an image_url or image_base64 plus the labels to look for; get boxes, labels and confidences. Needs no credential, bounded per IP.","tags":["vision","detection","open"],"examples":["tools/call {\"name\":\"detect_objects\",\"arguments\":{\"image_url\":\"https://emem.dev/v1/cells/defi.zb4e6.fIsI.hujO/scene.png\",\"prompts\":[\"person\",\"vehicle\"]}}","message/send {\"message\":{\"role\":\"user\",\"parts\":[{\"kind\":\"data\",\"data\":{\"skill\":\"detect_objects\",\"image_url\":\"https://…/scene.png\",\"prompts\":[\"person\"]}}]}}"],"inputModes":["application/json"],"outputModes":["application/json"],"security":[]},{"id":"classify_land_cover","name":"Classify land cover","description":"Land use and land cover for a bounding box or polygon, from satellite. Returns class labels with fractional coverage. Metered.","tags":["satellite","landcover","metered"],"examples":["tools/call {\"name\":\"classify_land_cover\",\"arguments\":{\"bounds\":{\"north\":25.28,\"south\":25.27,\"east\":55.30,\"west\":55.29}}}"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"analyze_scene","name":"Describe a scene","description":"Vision-language description of one frame, optionally answering a question about it. Prose from a language model: it is returned unasserted and carries no signature. Metered.","tags":["vision","vlm","metered"],"examples":["tools/call {\"name\":\"analyze_scene\",\"arguments\":{\"image_url\":\"https://emem.dev/v1/cells/defi.zb4e6.fIsI.hujO/scene.png\",\"prompt\":\"is the road flooded?\"}}"],"inputModes":["application/json"],"outputModes":["application/json"]}],"geoqa:interfaces":{"a2a":{"url":"https://geo.qa/api/world-model/a2a","auth":"none","serves":["read_world","verify_receipt","detect_objects"],"auth_required":["classify_land_cover","analyze_scene"],"how_to_select":"a DataPart with {\"skill\":\"<id>\", …its arguments} selects a skill explicitly; a text part naming a watched place is read_world","note":"auth_required skills answer with a Task in state auth-required whose data part is the access ladder: every rung to that exact resource, marked by whether a machine can take it alone."},"mcp":{"url":"https://geo.qa/api/mcp","auth":"optional; metered tools answer 401 with WWW-Authenticate","serves":["read_world","verify_receipt","detect_objects","classify_land_cover","analyze_scene"]}},"geoqa:provenance":{"satellite":{"signer":"emem.dev","protocol":"https://emem.dev","note":"Satellite observations are emem-signed. geo.qa does not re-sign them."},"derived":{"signer":"geoqa","kid":"geoqa-2026-06","key":"https://geo.qa/.well-known/geoqa.json","jwks":"https://geo.qa/.well-known/jwks.json","note":"Fused units, alerts, answers and operator-sensor observations."},"unasserted":{"note":"Prose written by a language model is returned with answer_verified: false and carries no signature. Only claims and receipts are asserted."}},"signatures":[{"protected":"eyJhbGciOiJFZERTQSIsImprdSI6Imh0dHBzOi8vZ2VvLnFhLy53ZWxsLWtub3duL2p3a3MuanNvbiIsImtpZCI6Imdlb3FhLTIwMjYtMDYiLCJ0eXAiOiJKT1NFIn0","signature":"4SNygg9i_3rfmzjBN3TDbjTOdxNRTEywZnP8vpRnnSZrG_GIAsHENY7s-gEb9w0jrFTd1csHEzlopVompbPiBQ","header":{"payload":"this document as served, with `signatures` removed, canonicalized per RFC 8785","spec":"https://geo.qa/api/world-model/verify/agent-card"}}]}