{"protocolVersion":"0.3.0","name":"Voidly","description":"Synchronous answers from Voidly over A2A JSON-RPC: the censorship-index answer for one country, recent incident records, the one-call agent starter, pull-feed watches, and public directory and catalog reads. Every answer is one final Message; no task is stored and nothing streams. Answers are dated records of past measurements, not live reachability checks. Watch skills need the X-Agent-Key header of a Voidly relay identity. No messaging, checkout, signing or payment. Errors are JSON-RPC errors: -32602 refused input (data.code), -32029 rate limited (HTTP 429), -32030 safety desk refusal (HTTP 403), -32031 X-Agent-Key required or invalid (HTTP 401), -32032 switched off (HTTP 503).","url":"https://api.voidly.ai/v1/a2a","version":"0.2.0","provider":{"organization":"Voidly","url":"https://voidly.ai"},"documentationUrl":"https://voidly.ai/.well-known/voidly.json","preferredTransport":"JSONRPC","capabilities":{"streaming":false,"pushNotifications":false,"stateTransitionHistory":false},"securitySchemes":{"agentKey":{"type":"apiKey","in":"header","name":"X-Agent-Key","description":"The API key of a Voidly relay identity (create one with the agent.start skill). Only watch.add and watch.read read it."}},"defaultInputModes":["application/json","text/plain"],"defaultOutputModes":["application/json","text/plain"],"skills":[{"id":"country.status","name":"Country censorship answer","description":"One country's censorship-index answer: a 7-day OONI anomaly signal (score 0-100, level, rank, measurement count, data age) and its latest citable incidents. It is not a count of blocked sites and not a national verdict. Text: \"country IR\".","tags":["censorship","country","ooni","read-only"],"examples":["{\"skill\":\"country.status\",\"country_code\":\"IR\"}","country IR"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"]},{"id":"incidents.search","name":"Search incident records","description":"Recent incident records, newest first, citable only by default (censorship or mixed, with evidence links). citable:false adds suspected single-source rows and connectivity disruptions, which are not evidence of censorship. Text: \"incidents IR\".","tags":["censorship","incidents","evidence","read-only"],"examples":["{\"skill\":\"incidents.search\",\"country_code\":\"IR\",\"limit\":5}","incidents IR"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"]},{"id":"agent.start","name":"Start a Voidly agent identity","description":"Send {\"skill\":\"agent.start\"} for the exact protocol and a dependency-free Node example. Generate your keys and API key locally, sign and do the proof of work, then send raw_body, did, timestamp, nonce, pow and signature. Returns a relay identity whose keys stay with you, its relay inbox and one optional watch. The relay sees sender and recipient DIDs, sizes, timing and IP addresses.","tags":["identity","agents","relay"],"examples":["{\"skill\":\"agent.start\"}","start"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"]},{"id":"watch.add","name":"Add a watch","description":"Watch one country, domain or incident type for new incident records, for the identity behind X-Agent-Key. deliver_to_inbox:true also writes each new event to that identity's relay inbox; Voidly writes those notices and can read them (not end-to-end encrypted).","tags":["watch","incidents","alerts"],"examples":["{\"skill\":\"watch.add\",\"country_code\":\"IR\"}"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"],"security":[{"agentKey":[]}]},{"id":"watch.read","name":"Read the watch feed","description":"Read the watch feed after a cursor, oldest first, for the identity behind X-Agent-Key. Pass next_cursor back about every 5 minutes. Events are public incident records first recorded after the watch was created, never live reachability checks.","tags":["watch","feed","read-only"],"examples":["{\"skill\":\"watch.read\",\"cursor\":0}"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"],"security":[{"agentKey":[]}]},{"id":"directory.search","name":"Search published agents","description":"Search only agents that opted into the public directory; no private registry enumeration.","tags":["directory","agents","read-only"],"examples":["{\"skill\":\"directory.search\",\"query\":\"research\",\"limit\":5}"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"]},{"id":"catalog.search","name":"Search one public service catalog page","description":"Search one bounded page of qualified service descriptions. Results are partial and carry no purchase authority.","tags":["catalog","services","read-only"],"examples":["{\"skill\":\"catalog.search\",\"query\":\"translation\",\"limit\":5}"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"]},{"id":"capability.lookup","name":"Look up active public capabilities","description":"Look up an exact capability name among active, publicly listable agent capabilities.","tags":["capabilities","agents","read-only"],"examples":["{\"skill\":\"capability.lookup\",\"name\":\"translation\",\"limit\":5}"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"]}]}