{"openapi":"3.0.3","info":{"title":"404.directory","description":"Contextual risk preflight for AI Agent actions, starting with prediction-market settlement and execution risk. Returns evidence-backed allow, review, or block decisions and bounded outcome receipts. Registry writes require Bearer auth.","version":"0.10.3"},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"REGISTRY_ADMIN_TOKEN or provider_api_key from POST /v1/tools"}},"schemas":{"JsonValue":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"string","nullable":true,"enum":[null]},{"type":"array","items":{"$ref":"#/components/schemas/JsonValue"}},{"type":"object","additionalProperties":{"$ref":"#/components/schemas/JsonValue"}}]}}},"paths":{"/health":{"get":{"summary":"Service health check","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["status","version","tools","browser_egress","catalog"],"properties":{"status":{"type":"string","enum":["ok"]},"version":{"type":"string"},"catalog":{"type":"boolean"},"browser_egress":{"type":"string","enum":["pinned_ip_proxy"]},"tools":{"type":"array","items":{"type":"string"}}}}}}}}}},"/tools":{"get":{"summary":"List callable 404 service tools","description":"All enabled 404 MCP tools. Follow href for schemas and invocation routes. Ecosystem records are separate: /v1/tools/search.","responses":{"200":{"description":"Default Response"}}}},"/tools/{name}":{"get":{"summary":"Get one callable 404 service tool and invocation routes","parameters":[{"schema":{"type":"string"},"in":"path","name":"name","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/understand":{"post":{"operationId":"understand_webpage","summary":"Understand webpage","tags":["tools"],"description":"Reads one public human-facing webpage and returns a compact, evidence-linked AgentPageModel: page type, entities, login/current state, forms, enabled actions, and confidence. Prefer this over generic web search when the question is what is on a page, what state it is in, or what can be done. Observes only — never clicks, logs in, orders, or pays.\n\nWhen to use: Use when a user asks you to understand a specific public webpage's contents, entities, forms, login wall, current state, or available actions. Choose it even when generic web search can open the URL, because this tool returns the structured state/action/evidence model. Do not replace a suitable Agent-native API.\n\nDo not use when: Do not use only to check whether a deployment is live, to verify an HTTP status or exact text, or when a stable structured API already provides the required data. It cannot access private or authenticated pages.\n\nRead only: true. Side effects: none. Authentication: not required. Cost: free. Typical latency: 5000 ms.\n\nREST input mapping: Use the existing REST contract in /openapi.json.\nMCP argument metadata: /tools/understand_webpage","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false},"example":{"url":"https://example.com"}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"page_type":{"type":"string","enum":["product","article","hotel","job","order","search_results","login","form","homepage","other"]},"summary":{"type":"string","minLength":1,"maxLength":2000},"entities":{"maxItems":50,"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["product","article","hotel","job","order","organization","person","place","other"]},"name":{"type":"string","minLength":1,"maxLength":500},"attributes":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/JsonValue"}},"evidence_ids":{"maxItems":10,"type":"array","items":{"type":"string","maxLength":40}}},"required":["type","name","attributes"],"additionalProperties":false}},"state":{"type":"object","properties":{"login_status":{"type":"string","enum":["authenticated","anonymous","unknown"]},"properties":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/JsonValue"}},"evidence_ids":{"maxItems":10,"type":"array","items":{"type":"string","maxLength":40}}},"required":["login_status","properties"],"additionalProperties":false},"actions":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["search","login","select_variant","add_to_cart","submit","download"]},"label":{"type":"string","minLength":1,"maxLength":300},"target":{"type":"string","maxLength":500},"enabled":{"type":"boolean"},"required_inputs":{"maxItems":30,"type":"array","items":{"type":"string","maxLength":200}},"evidence_ids":{"maxItems":10,"type":"array","items":{"type":"string","maxLength":40}}},"required":["type","label","enabled","required_inputs"],"additionalProperties":false}},"evidence":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":40},"source":{"type":"string","enum":["url","title","meta","visible_text","semantic_dom","accessibility","json_ld","form","control","link","llm"]},"field":{"type":"string","maxLength":200},"role":{"type":"string","maxLength":100},"label":{"type":"string","maxLength":500},"raw_value":{"allOf":[{"$ref":"#/components/schemas/JsonValue"}]},"supports":{"maxItems":20,"type":"array","items":{"type":"string","maxLength":100}}},"required":["source"],"additionalProperties":false}},"confidence":{"type":"number","minimum":0,"maximum":1}},"required":["page_type","summary","entities","state","actions","evidence","confidence"],"additionalProperties":false},"example":{"page_type":"homepage","summary":"Example Domain — documentation example page.","entities":[],"state":{"login_status":"unknown","properties":{},"evidence_ids":["e1"]},"actions":[],"evidence":[{"id":"e1","source":"title","field":"title","raw_value":"Example Domain","supports":["state"]}],"confidence":0.7}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"],"additionalProperties":false}}}},"408":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"],"additionalProperties":false}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"],"additionalProperties":false}}}}}}},"/verify/web":{"post":{"operationId":"verify_web","summary":"Verify web","tags":["tools"],"description":"Independently verifies that a public website is reachable and meets deployment expectations (HTTP status, HTTPS validity, optional expected text). Returns structured evidence for accept / retry / escalate decisions.\n\nWhen to use: Use when the user explicitly asks to verify a deployment claim, public reachability, final HTTP status, HTTPS/TLS, redirects, or exact expected text. Prefer expected_text that distinguishes the new version (build id, version string, unique copy).\n\nDo not use when: Do not call this merely before or alongside understand_webpage to prove that its target is reachable; a successful understand_webpage result already proves the page was fetched. Do not use to extract entities, forms, actions, or meaning, for private/internal URLs, or for subjective visual-quality judgments.\n\nRead only: true. Side effects: none. Authentication: not required. Cost: free. Typical latency: 1200 ms.\n\nREST input mapping: Use the existing REST contract in /openapi.json.\nMCP argument metadata: /tools/verify_web","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Public HTTP(S) URL to verify, for example https://example.com"},"expected_status":{"type":"integer","minimum":100,"maximum":599,"description":"Expected final HTTP status code, for example 200"},"expected_text":{"description":"Optional response text that proves the intended version or state is live","type":"string","maxLength":2000}},"required":["url","expected_status"],"additionalProperties":false},"example":{"url":"https://example.com","expected_status":200,"expected_text":"Example Domain"}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"verified":{"type":"boolean"},"checks":{"type":"object","properties":{"reachable":{"type":"boolean"},"status":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"https_valid":{"type":"boolean"},"text_found":{"type":"boolean"}},"required":["reachable","status","https_valid","text_found"],"additionalProperties":false},"evidence":{"type":"object","properties":{"requested_url":{"type":"string","format":"uri"},"final_url":{"nullable":true,"type":"string","format":"uri"},"http":{"type":"object","properties":{"status":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"expected_status":{"type":"integer","minimum":100,"maximum":599},"matched":{"type":"boolean"}},"required":["status","expected_status","matched"],"additionalProperties":false},"expected_text":{"type":"object","properties":{"value":{"nullable":true,"type":"string","maxLength":2000},"checked":{"type":"boolean"},"matched":{"nullable":true,"type":"boolean"}},"required":["value","checked","matched"],"additionalProperties":false},"tls":{"type":"object","properties":{"requested":{"type":"boolean"},"valid":{"type":"boolean"}},"required":["requested","valid"],"additionalProperties":false},"redirects":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"maximum":9007199254740991},"chain":{"maxItems":10,"type":"array","items":{"type":"object","properties":{"status":{"type":"integer","minimum":300,"maximum":399},"from":{"type":"string","format":"uri"},"to":{"type":"string","format":"uri"}},"required":["status","from","to"],"additionalProperties":false}}},"required":["count","chain"],"additionalProperties":false},"checked_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"claims":{"minItems":3,"maxItems":4,"type":"array","items":{"type":"object","properties":{"claim":{"type":"string","enum":["reachable","status_matches","https_valid","expected_text_found"]},"passed":{"type":"boolean"},"evidence_paths":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"string"}}},"required":["claim","passed","evidence_paths"],"additionalProperties":false}}},"required":["requested_url","final_url","http","expected_text","tls","redirects","checked_at","claims"],"additionalProperties":false},"checked_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"error":{"type":"string","maxLength":2000}},"required":["verified","checks","evidence","checked_at"],"additionalProperties":false},"example":{"verified":true,"checks":{"reachable":true,"status":200,"https_valid":true,"text_found":true},"evidence":{"requested_url":"https://example.com","final_url":"https://example.com/","http":{"status":200,"expected_status":200,"matched":true},"expected_text":{"value":"Example Domain","checked":true,"matched":true},"tls":{"requested":true,"valid":true},"redirects":{"count":0,"chain":[]},"checked_at":"2026-08-16T08:50:33.986Z","claims":[{"claim":"reachable","passed":true,"evidence_paths":["http.status","final_url"]},{"claim":"status_matches","passed":true,"evidence_paths":["http.status","http.expected_status"]},{"claim":"https_valid","passed":true,"evidence_paths":["tls.requested","tls.valid"]},{"claim":"expected_text_found","passed":true,"evidence_paths":["expected_text.value","expected_text.matched"]}]},"checked_at":"2026-08-16T08:50:33.986Z"}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"],"additionalProperties":false}}}},"408":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"],"additionalProperties":false}}}},"429":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"],"additionalProperties":false}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error","message"],"additionalProperties":false}}}}}}},"/v1/tools":{"post":{"summary":"Register a tool (auth required)","tags":["v1-discovery"],"description":"Bearer REGISTRY_ADMIN_TOKEN or provider API key. New providers receive a one-time provider_api_key. Tools stay pending (quarantine) until ownership + verification.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/v1/evaluations":{"post":{"operationId":"evaluate_tool_risk","summary":"Preflight a third-party Agent tool","tags":["v1-discovery"],"description":"Make a contextual allow, review, or block decision before an AI Agent installs or invokes a third-party tool registered in 404.directory. Use this immediately before installation or first use, and again when permissions, data sensitivity, execution mode, or evidence changes. The decision cites ownership, lifecycle, verification history and freshness, compatibility, security, and observed-usage evidence; missing evidence never counts as safe. Stores a bounded receipt without prompts or payloads and returns a one-time outcome token so the Agent can later report whether it proceeded, changed tools, requested review, or aborted. Does not execute or freshly probe the target and is not a security guarantee.\n\nREST input mapping: Send the MCP arguments as the JSON body.\nMCP argument metadata: /tools/evaluate_tool_risk","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"target":{"type":"string","minLength":1,"maxLength":128,"description":"404.directory catalog tool UUID or slug."},"action":{"type":"string","enum":["inspect","install","invoke"],"description":"The next action the Agent is considering: inspect, install, or invoke."},"data_sensitivity":{"default":"public","description":"Highest sensitivity of data the Agent may expose to the tool.","type":"string","enum":["public","internal","confidential","restricted"]},"execution_mode":{"default":"supervised","description":"Whether a human supervises this action or it runs unattended.","type":"string","enum":["supervised","unattended"]},"permissions":{"default":[],"description":"Permissions or side effects needed for this action. Include every applicable value.","maxItems":8,"type":"array","items":{"type":"string","enum":["public_network","local_files_read","local_files_write","credentials","personal_data","code_execution","payments","destructive_actions"]}}},"required":["target","action","data_sensitivity","execution_mode","permissions"],"additionalProperties":false}}}},"responses":{"200":{"description":"Default Response"}}}},"/v1/prediction-markets/evaluations":{"post":{"operationId":"evaluate_prediction_market","summary":"Preflight one Polymarket decision","tags":["v1-discovery"],"description":"Evaluate one specific Polymarket market before an AI Agent observes or contemplates buying or selling a Yes/No position. Use immediately before a decision when settlement wording, source ambiguity, timing boundaries, order-book depth, spread, slippage, geographic eligibility, or unattended execution could change whether the Agent should proceed. Returns a deterministic allow, review, or block decision with public evidence, a risk score, bounded unknowns, and a receipt. This tool never predicts the winner, never places or signs an order, never accesses a wallet, and is not investment or legal advice. For size-specific liquidity analysis, provide estimated_notional_usd. For a trading action, provide the current geoblock result from the real execution environment rather than guessing eligibility.\n\nREST input mapping: Send the MCP arguments as the JSON body.\nMCP argument metadata: /tools/evaluate_prediction_market","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"market":{"type":"string","minLength":1,"maxLength":512,"description":"A Polymarket market URL, numeric market ID, or exact market slug. Other hosts are rejected."},"intended_action":{"type":"string","enum":["observe","buy_yes","buy_no","sell_yes","sell_no"],"description":"The next action under consideration. Use observe for research that will not place an order."},"estimated_notional_usd":{"description":"Approximate USD notional of the contemplated order. Include it for depth and slippage analysis; this never places an order.","type":"number","minimum":0.01,"maximum":100000},"execution_mode":{"default":"supervised","description":"Whether a human will supervise the contemplated action.","type":"string","enum":["supervised","unattended"]},"geographic_eligibility":{"default":"unknown","description":"Caller-observed result of Polymarket's geoblock check from the actual execution environment. It is self-reported and not independently verified by 404.directory.","type":"string","enum":["eligible","blocked","unknown"]}},"required":["market","intended_action","execution_mode","geographic_eligibility"],"additionalProperties":false}}}},"responses":{"200":{"description":"Default Response"}}}},"/v1/prediction-markets/evaluations/{id}":{"get":{"summary":"Read a prediction-market preflight receipt","tags":["v1-discovery"],"description":"Returns the public decision, bounded intent, evidence, unknowns, and optional bounded behavior outcome. Never returns the one-time outcome token or its hash.","parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/prediction-markets/evaluations/{id}/outcome":{"post":{"operationId":"report_prediction_market_outcome","summary":"Report bounded behavior after prediction-market preflight","tags":["v1-discovery"],"description":"Close the behavioral feedback loop for one prior evaluate_prediction_market receipt. Call after the Agent proceeds, reduces position size, changes side, waits, requests review, aborts, or encounters an execution failure. Submit only the bounded enums and one-time token returned by the evaluation. Never include wallet data, keys, prompts, order payloads, personal data, or free-form trading rationale. This self-report measures whether the preflight changed behavior; it does not prove profitability or prediction accuracy.\n\nREST input mapping: Put receipt_id in the id path segment; send remaining arguments, including the one-time outcome token, as JSON body.\nMCP argument metadata: /tools/report_prediction_market_outcome","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"outcome_token":{"type":"string","minLength":32,"maxLength":128},"action_taken":{"type":"string","enum":["proceeded","reduced_position","changed_side","waited","requested_review","aborted"]},"execution_result":{"type":"string","enum":["executed","not_executed","failed","unknown"]},"failure_type":{"type":"string","enum":["resolution_rules","liquidity","execution","data_quality","compliance","signal","other"]}},"required":["outcome_token","action_taken","execution_result"],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/metrics/prediction-market-evaluations":{"get":{"summary":"Get privacy-safe prediction-market preflight metrics","tags":["v1-discovery"],"description":"Versioned prediction-market metrics by internal, anonymous external, identified external, and unattributed evaluation cohorts. Legacy top-level aggregates are total traffic; read scopes for external-use evidence. Qualified pilot operators are not inferred from identities.","responses":{"200":{"description":"Default Response"}}}},"/v1/evaluations/{id}":{"get":{"summary":"Read a public risk decision receipt","tags":["v1-discovery"],"description":"Returns the versioned decision, bounded context, evidence, unknowns, and optional bounded outcome. Never returns the outcome token or its hash.","parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/metrics/risk-evaluations":{"get":{"summary":"Get privacy-safe risk preflight metrics","tags":["v1-discovery"],"description":"Versioned tool-risk metrics by internal, anonymous external, identified external, and unattributed evaluation cohorts. Legacy top-level aggregates are total traffic; read scopes for external-use evidence. Qualified pilot operators are not inferred from identities.","responses":{"200":{"description":"Default Response"}}}},"/v1/evaluations/{id}/outcome":{"post":{"operationId":"report_tool_outcome","summary":"Attach one bounded outcome to a risk decision","tags":["v1-discovery"],"description":"Close the feedback loop for one prior evaluate_tool_risk receipt. Call after the Agent proceeds, changes tools, requests review, or aborts. Submit only the bounded action/result fields and one-time outcome token returned by the evaluation; never include prompts, arguments, outputs, secrets, or personal data. The outcome is labeled self-reported and cannot directly increase a Trust score.\n\nREST input mapping: Put receipt_id in the id path segment; send remaining arguments, including the one-time outcome token, as JSON body.\nMCP argument metadata: /tools/report_tool_outcome","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"outcome_token":{"type":"string","minLength":32,"maxLength":128},"action_taken":{"type":"string","enum":["proceeded","changed_tool","requested_review","aborted"]},"result":{"type":"string","enum":["success","failure","not_executed","unknown"]},"error_type":{"type":"string","enum":["unavailable","authentication","timeout","validation","permission_denied","unsafe","wrong_tool","other"]}},"required":["outcome_token","action_taken","result"],"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/tools/search":{"get":{"operationId":"search_tools","tags":["v1-discovery"],"description":"Find third-party catalog tools using short provider/capability keywords, for example 'official documentation' or 'OpenAI docs'. All meaningful query terms must match across name, description, capability, category or provider; exact names rank first. Protocol, capability, category and trust filters remain mandatory. Returns active/degraded candidates or a no-match recovery path; no results do not prove that the task is unsupported. Does not execute or certify tools; preflight the chosen exact slug before use.\n\nREST input mapping: Encode arguments as URL query parameters. Public search exposes active/degraded records only.\nMCP argument metadata: /tools/search_tools","responses":{"200":{"description":"Default Response"}}}},"/v1/tools/compare":{"get":{"operationId":"compare_tools","tags":["v1-discovery"],"description":"Compare up to 5 ecosystem tools side-by-side (capabilities, trust dimensions, usage).\n\nREST input mapping: Encode ids_or_slugs as the comma-separated ids query parameter, not a JSON array.\nMCP argument metadata: /tools/compare_tools","responses":{"200":{"description":"Default Response"}}}},"/v1/capabilities":{"get":{"operationId":"list_capabilities","tags":["v1-discovery"],"description":"List capabilities in the 404 catalog with tool counts. Use to explore the Capability Graph before searching.\n\nREST input mapping: No arguments. Lists ecosystem capability labels, not callable 404 tool names.\nMCP argument metadata: /tools/list_capabilities","responses":{"200":{"description":"Default Response"}}}},"/v1/metrics/agents":{"get":{"tags":["v1-discovery"],"responses":{"200":{"description":"Default Response"}}}},"/v1/metrics/verified-agents":{"get":{"tags":["v1-discovery"],"responses":{"200":{"description":"Default Response"}}}},"/v1/pilot/verified-agents":{"post":{"summary":"Admit independently verified Agent evidence (admin only)","tags":["v1-discovery"],"description":"Accepts random non-personal Agent/operator IDs plus a public evidence reference. Persists only irreversible HMAC digests. Admission does not count until the Agent has a successful external tool invocation.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response"}}}},"/v1/pilot/verified-agents/{id}":{"delete":{"summary":"Revoke verified Agent evidence (admin only)","tags":["v1-discovery"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/metrics/activation":{"get":{"tags":["v1-discovery"],"responses":{"200":{"description":"Default Response"}}}},"/v1/metrics/reliability":{"get":{"tags":["v1-discovery"],"responses":{"200":{"description":"Default Response"}}}},"/v1/capabilities/{capability}/tools":{"get":{"tags":["v1-discovery"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"capability","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/graph/capabilities":{"get":{"operationId":"get_capability_graph","tags":["v1-discovery"],"description":"Return a Capability Graph snapshot (nodes, shared-capability edges, capability index) for agent planning.\n\nREST input mapping: Encode arguments as URL query parameters.\nMCP argument metadata: /tools/get_capability_graph","responses":{"200":{"description":"Default Response"}}}},"/v1/tools/{idOrSlug}":{"get":{"operationId":"get_tool","tags":["v1-discovery"],"description":"Fetch one registered ecosystem tool by id or slug, including trust profile and usage stats.\n\nREST input mapping: Put id_or_slug in the encoded idOrSlug path segment.\nMCP argument metadata: /tools/get_tool","parameters":[{"schema":{"type":"string"},"in":"path","name":"idOrSlug","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/tools/{idOrSlug}/trust":{"get":{"operationId":"get_trust_score","tags":["v1-discovery"],"description":"Return the machine-readable Trust Profile for a catalog tool (ownership, availability, compatibility, security, usage).\n\nREST input mapping: Put id_or_slug in the encoded idOrSlug path segment.\nMCP argument metadata: /tools/get_trust_score","parameters":[{"schema":{"type":"string"},"in":"path","name":"idOrSlug","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/tools/{idOrSlug}/related":{"get":{"operationId":"recommend_tools","tags":["v1-discovery"],"description":"Given one known tool, recommend similar catalog tools via the Capability Graph (shared capabilities + protocol/category affinity).\n\nREST input mapping: Put id_or_slug in the encoded idOrSlug path segment; limit is a query parameter.\nMCP argument metadata: /tools/recommend_tools","parameters":[{"schema":{"type":"string"},"in":"path","name":"idOrSlug","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/tools/{idOrSlug}/verifications":{"get":{"tags":["v1-discovery"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"idOrSlug","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/tools/{idOrSlug}/verify":{"post":{"tags":["v1-discovery"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"idOrSlug","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/receipts":{"post":{"tags":["v1-discovery"],"responses":{"200":{"description":"Default Response"}}}},"/v1/providers/{slug}":{"get":{"tags":["v1-discovery"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"slug","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/providers/{slug}/ownership/challenge":{"post":{"tags":["v1-discovery"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"slug","required":true}],"responses":{"200":{"description":"Default Response"}}}},"/v1/providers/{slug}/ownership/verify":{"post":{"tags":["v1-discovery"],"parameters":[{"schema":{"type":"string"},"in":"path","name":"slug","required":true}],"responses":{"200":{"description":"Default Response"}}}}},"servers":[{"url":"https://404.directory"}],"tags":[{"name":"tools","description":"First-party executable tools"},{"name":"v1-discovery","description":"Ecosystem registry + discovery. Search is active-only; writes need Bearer admin or provider API key."}]}