{"id":11257,"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.","card_url":"https://geo.qa/.well-known/agent-card.json","endpoint":"https://geo.qa/api/world-model/a2a","protocol_version":"0.3.0","first_seen":"2026-10-10T12:40:50.904603+00:00","last_verified":"2026-10-10T15:32:28.937652+00:00","card":{"url":"https://geo.qa/api/world-model/a2a","name":"geo.qa","skills":[{"id":"read_world","name":"Read a place: what is there now, and the proof","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"],"security":[],"inputModes":["application/json"],"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.","outputModes":["application/json"]},{"id":"verify_receipt","name":"Check a receipt this service did not have to issue","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"],"security":[],"inputModes":["application/json"],"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.","outputModes":["application/json"]},{"id":"detect_objects","name":"Detect objects in an image","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\"]}}]}}"],"security":[],"inputModes":["application/json"],"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.","outputModes":["application/json"]},{"id":"classify_land_cover","name":"Classify land cover","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"],"description":"Land use and land cover for a bounding box or polygon, from satellite. Returns class labels with fractional coverage. Metered.","outputModes":["application/json"]},{"id":"analyze_scene","name":"Describe a scene","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"],"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.","outputModes":["application/json"]}],"iconUrl":"https://geo.qa/icon.png","version":"1.1.0","provider":{"url":"https://vortx.ai","organization":"Vortx AI"},"security":[{"apiKey":[]}],"signatures":[{"header":{"spec":"https://geo.qa/api/world-model/verify/agent-card","payload":"this document as served, with `signatures` removed, canonicalized per RFC 8785"},"protected":"eyJhbGciOiJFZERTQSIsImprdSI6Imh0dHBzOi8vZ2VvLnFhLy53ZWxsLWtub3duL2p3a3MuanNvbiIsImtpZCI6Imdlb3FhLTIwMjYtMDYiLCJ0eXAiOiJKT1NFIn0","signature":"4SNygg9i_3rfmzjBN3TDbjTOdxNRTEywZnP8vpRnnSZrG_GIAsHENY7s-gEb9w0jrFTd1csHEzlopVompbPiBQ"}],"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.","capabilities":{"streaming":false,"extensions":[{"uri":"https://geo.qa/spec/verify/v1","params":{"jwks":"https://geo.qa/.well-known/jwks.json","log_head":"https://geo.qa/api/world-model/verify/log/sth","verify_batch":"https://geo.qa/api/world-model/verify/batch","verify_token":"https://geo.qa/api/world-model/verify","root_of_trust":"https://geo.qa/.well-known/geoqa.json","verify_receipt":"https://geo.qa/api/world-model/verify/receipt","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=","verify_agent_card":"https://geo.qa/api/world-model/verify/agent-card"},"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."},{"uri":"https://geo.qa/spec/access-ladder/v1","params":{"x402Version":"1","resource_metadata":"https://geo.qa/.well-known/oauth-protected-resource","settlement_status":"https://geo.qa/.well-known/oauth-protected-resource"},"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."}],"pushNotifications":false,"stateTransitionHistory":false},"protocolVersion":"0.3.0","securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"A long-lived key minted at https://geo.qa/chat/account/api-keys. Accepted as Authorization: Bearer on_… or X-API-Key: on_…","bearerFormat":"on_"}},"documentationUrl":"https://geo.qa/llms.txt","geoqa:interfaces":{"a2a":{"url":"https://geo.qa/api/world-model/a2a","auth":"none","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.","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"},"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":{"derived":{"key":"https://geo.qa/.well-known/geoqa.json","kid":"geoqa-2026-06","jwks":"https://geo.qa/.well-known/jwks.json","note":"Fused units, alerts, answers and operator-sensor observations.","signer":"geoqa"},"satellite":{"note":"Satellite observations are emem-signed. geo.qa does not re-sign them.","signer":"emem.dev","protocol":"https://emem.dev"},"unasserted":{"note":"Prose written by a language model is returned with answer_verified: false and carries no signature. Only claims and receipts are asserted."}},"defaultInputModes":["application/json"],"defaultOutputModes":["application/json"],"preferredTransport":"JSONRPC","additionalInterfaces":[{"url":"https://geo.qa/api/world-model/a2a","protocol":"a2a-jsonrpc","transport":"JSONRPC"},{"url":"https://geo.qa/api/mcp","protocol":"mcp-streamable-http","transport":"JSONRPC"},{"url":"https://geo.qa/api/public-docs/openapi","protocol":"openapi-3.0","transport":"HTTP+JSON"},{"url":"https://geo.qa/.well-known/oauth-protected-resource","protocol":"oauth-protected-resource","transport":"HTTP+JSON"},{"url":"https://geo.qa/.well-known/geoqa.json","protocol":"well-known-json","transport":"HTTP+JSON"}],"supportsAuthenticatedExtendedCard":false},"signature_status":"verified","signature_detail":"Card signature matches a key at its advertised or same-host key source","signature_key_url":"https://geo.qa/.well-known/jwks.json","signature_checked_at":"2026-10-10T15:32:28.937652+00:00","domain_claimed_at":null,"domain_proof_checked_at":null,"source_name":"Agenstry federation","source_url":"https://agenstry.com/docs","last_check":{"checked_at":"2026-10-10T15:32:28.937652+00:00","success":true,"http_status":200,"detail":"Agent Card validated"},"also_published_at":[],"history_urls":["https://geo.qa/.well-known/agent-card.json"],"skills":[{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false}],"quality_flags":[],"check_history":{"checks":2,"passed":2},"recent_checks":[{"card_url":"https://geo.qa/.well-known/agent-card.json","checked_at":"2026-10-10T15:32:28.937652+00:00","success":true,"http_status":200,"detail":"Agent Card validated"},{"card_url":"https://geo.qa/.well-known/agent-card.json","checked_at":"2026-10-10T12:40:50.904603+00:00","success":true,"http_status":200,"detail":"Agent Card validated"}],"endpoint_tls_check":{"checked_at":"2026-10-10T15:32:28.937652+00:00","success":true,"detail":"Valid TLS connection to advertised endpoint host; no A2A request sent"},"protocol_check":{"checked_at":"2026-10-10T12:40:50.904603+00:00","state":"a2a_response","http_status":200,"detail":"A2A task-not-found response to a read-only task lookup"},"events":[],"relationships":[{"id":11852,"relation":"shared_provider_website","evidence":{"claim":"Both cards declare the same provider website","provider_url":"https://vortx.ai","source_card_url":"https://emem.dev/.well-known/agent-card.json","target_card_url":"https://geo.qa/.well-known/agent-card.json"},"evidence_url":"https://emem.dev/.well-known/agent-card.json","first_seen":"2026-10-10T12:41:40.443865+00:00","last_seen":"2026-10-10T14:25:15.184700+00:00","source_agent_id":1179,"source_agent_name":"emem","target_agent_id":11257,"target_agent_name":"geo.qa"},{"id":12714,"relation":"shared_provider_website","evidence":{"claim":"Both cards declare the same provider website","provider_url":"https://vortx.ai","source_card_url":"https://geo.qa/.well-known/agent-card.json","target_card_url":"https://vortx.ai/.well-known/agent-card.json"},"evidence_url":"https://geo.qa/.well-known/agent-card.json","first_seen":"2026-10-10T13:50:35.029365+00:00","last_seen":"2026-10-10T14:25:15.184700+00:00","source_agent_id":11257,"source_agent_name":"geo.qa","target_agent_id":11572,"target_agent_name":"Vortx AI"}],"verification":{"agent_card_url":"https://geo.qa/.well-known/agent-card.json","last_successful_card_check":"2026-10-10T15:32:28.937652+00:00","latest_card_check":{"checked_at":"2026-10-10T15:32:28.937652+00:00","success":true,"http_status":200,"detail":"Agent Card validated"},"signature_status":"verified","signature_checked_at":"2026-10-10T15:32:28.937652+00:00","task_endpoint_tested":true,"task_execution_tested":false,"endpoint_tls_checked_at":"2026-10-10T15:32:28.937652+00:00","endpoint_tls_reachable":true,"protocol_check_state":"a2a_response","protocol_checked_at":"2026-10-10T12:40:50.904603+00:00","provider_identity_verified":false,"domain_claimed_at":null,"domain_proof_checked_at":null}}