{"ok":true,"schema_version":1,"data":{"agent_readiness":{"blocker_level":"none","blockers":[],"missing_fields":[],"status":"callable"},"categories":["agent-memory","baseline-augmented","baseline-curated","identity-reviewed","official-docs","official-website"],"completeness_score":86,"contract_version":"2026-07-03.2","example_count":0,"examples":[],"generated_at":"2026-07-27T10:51:25.049Z","integration_readiness":100,"name":"Ditto","netuid":118,"readiness":{"components":{"active_lifecycle":true,"auth_clarity":true,"callable_now":true,"documented":true,"has_callable_api":true,"has_candidate_api":true,"has_public_docs":true,"has_source_repo":true,"profile_complete":true},"readiness_tier":"buildable","readiness_version":2,"score":100,"readiness_verified":true},"schema_version":1,"service_count":16,"services":[{"auth":{"location":"header","name":"Authorization","scheme":"api-key","scopes_note":"Derived from the subnet's own Swagger securityDefinitions (AdminKey), which every operation in the spec requires."},"auth_required":true,"auth_schemes":["apiKey"],"authority":"official","base_url":"https://api.heyditto.ai/api/admin/v1/agent-accounts/%7Baccount_id%7D","capability":"Ditto admin agent-account by id","description":"Get a single agent account created by this app operation on the Ditto Admin API (GET, PATCH /agent-accounts/{account_id}), declared in the subnet's own Swagger 2.0 spec at /api/admin/v1/swagger/doc.json. Every operation in that spec requires the AdminKey security definition, so it is registered auth_required:true with the probe disabled (Phase 3). Path-parameterized on {account_id}, so there is no single fixed callable URL; the template is registered per the registry's catalog-everything policy (Phase 2).","eligibility":{"callable":false,"reasons":["not-bittensor-base-layer","status-unknown","auth-required"],"live_status":"unknown"},"fixture_status":{"artifact_path":null,"captured_at":null,"reason":"fixture capture skips credentialed services","status":"auth-required"},"health":{"status":"unknown","classification":null,"latency_ms":null,"last_ok":null,"last_checked":null,"stale":false,"observed_by":"unavailable"},"kind":"subnet-api","provider":"ditto-assistant","schema_artifact":"/metagraph/schemas/sn-118-ditto-admin-openapi.json","schema_source":{"artifact":"/metagraph/schemas/sn-118-ditto-admin-openapi.json","hash":"1ab50028010698c52a23b47a4ec9544d40991a0ebef31fbe74a7c40057916289","match":"same-origin-openapi","observed_at":"2026-07-27T10:51:25.372Z","status":"captured","surface_id":"sn-118-ditto-admin-openapi","url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json"},"schema_status":"machine-readable","schema_url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json","snippets":{"curl":"curl -sS 'https://api.heyditto.ai/api/admin/v1/agent-accounts/%7Baccount_id%7D' \\\n  -H 'Authorization: YOUR_API_KEY'","python":"import requests\n\nresp = requests.get(\"https://api.heyditto.ai/api/admin/v1/agent-accounts/%7Baccount_id%7D\", headers={\"Authorization\": \"YOUR_API_KEY\"})\nresp.raise_for_status()\nprint(resp.json())","typescript":"const resp = await fetch(\"https://api.heyditto.ai/api/admin/v1/agent-accounts/%7Baccount_id%7D\", {\n  headers: { \"Authorization\": \"YOUR_API_KEY\" },\n});\nif (!resp.ok) throw new Error(`HTTP ${resp.status}`);\nconst data = await resp.json();"},"surface_id":"sn-118-ditto-admin-agent-account-by-id"},{"auth":{"location":"header","name":"Authorization","scheme":"api-key","scopes_note":"Derived from the subnet's own Swagger securityDefinitions (AdminKey), which every operation in the spec requires."},"auth_required":true,"auth_schemes":["apiKey"],"authority":"official","base_url":"https://api.heyditto.ai/api/admin/v1/agent-accounts/%7Baccount_id%7D/link","capability":"Ditto admin agent-account link","description":"Link an agent account to a user operation on the Ditto Admin API (POST /agent-accounts/{account_id}/link), declared in the subnet's own Swagger 2.0 spec at /api/admin/v1/swagger/doc.json. Every operation in that spec requires the AdminKey security definition, so it is registered auth_required:true with the probe disabled (Phase 3). Path-parameterized on {account_id}, so there is no single fixed callable URL; the template is registered per the registry's catalog-everything policy (Phase 2).","eligibility":{"callable":false,"reasons":["not-bittensor-base-layer","status-unknown","auth-required"],"live_status":"unknown"},"fixture_status":{"artifact_path":null,"captured_at":null,"reason":"fixture capture skips credentialed services","status":"auth-required"},"health":{"status":"unknown","classification":null,"latency_ms":null,"last_ok":null,"last_checked":null,"stale":false,"observed_by":"unavailable"},"kind":"subnet-api","provider":"ditto-assistant","schema_artifact":"/metagraph/schemas/sn-118-ditto-admin-openapi.json","schema_source":{"artifact":"/metagraph/schemas/sn-118-ditto-admin-openapi.json","hash":"1ab50028010698c52a23b47a4ec9544d40991a0ebef31fbe74a7c40057916289","match":"same-origin-openapi","observed_at":"2026-07-27T10:51:25.372Z","status":"captured","surface_id":"sn-118-ditto-admin-openapi","url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json"},"schema_status":"machine-readable","schema_url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json","snippets":{"curl":"curl -sS 'https://api.heyditto.ai/api/admin/v1/agent-accounts/%7Baccount_id%7D/link' \\\n  -H 'Authorization: YOUR_API_KEY'","python":"import requests\n\nresp = requests.get(\"https://api.heyditto.ai/api/admin/v1/agent-accounts/%7Baccount_id%7D/link\", headers={\"Authorization\": \"YOUR_API_KEY\"})\nresp.raise_for_status()\nprint(resp.json())","typescript":"const resp = await fetch(\"https://api.heyditto.ai/api/admin/v1/agent-accounts/%7Baccount_id%7D/link\", {\n  headers: { \"Authorization\": \"YOUR_API_KEY\" },\n});\nif (!resp.ok) throw new Error(`HTTP ${resp.status}`);\nconst data = await resp.json();"},"surface_id":"sn-118-ditto-admin-agent-account-link"},{"auth":{"location":"header","name":"Authorization","scheme":"api-key","scopes_note":"Derived from the subnet's own Swagger securityDefinitions (AdminKey), which every operation in the spec requires."},"auth_required":true,"auth_schemes":["apiKey"],"authority":"official","base_url":"https://api.heyditto.ai/api/admin/v1/agent-accounts/%7Baccount_id%7D/readable-threads","capability":"Ditto admin agent-account readable threads","description":"List an agent account's readable threads operation on the Ditto Admin API (GET, PUT /agent-accounts/{account_id}/readable-threads), declared in the subnet's own Swagger 2.0 spec at /api/admin/v1/swagger/doc.json. Every operation in that spec requires the AdminKey security definition, so it is registered auth_required:true with the probe disabled (Phase 3). Path-parameterized on {account_id}, so there is no single fixed callable URL; the template is registered per the registry's catalog-everything policy (Phase 2).","eligibility":{"callable":false,"reasons":["not-bittensor-base-layer","status-unknown","auth-required"],"live_status":"unknown"},"fixture_status":{"artifact_path":null,"captured_at":null,"reason":"fixture capture skips credentialed services","status":"auth-required"},"health":{"status":"unknown","classification":null,"latency_ms":null,"last_ok":null,"last_checked":null,"stale":false,"observed_by":"unavailable"},"kind":"subnet-api","provider":"ditto-assistant","schema_artifact":"/metagraph/schemas/sn-118-ditto-admin-openapi.json","schema_source":{"artifact":"/metagraph/schemas/sn-118-ditto-admin-openapi.json","hash":"1ab50028010698c52a23b47a4ec9544d40991a0ebef31fbe74a7c40057916289","match":"same-origin-openapi","observed_at":"2026-07-27T10:51:25.372Z","status":"captured","surface_id":"sn-118-ditto-admin-openapi","url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json"},"schema_status":"machine-readable","schema_url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json","snippets":{"curl":"curl -sS 'https://api.heyditto.ai/api/admin/v1/agent-accounts/%7Baccount_id%7D/readable-threads' \\\n  -H 'Authorization: YOUR_API_KEY'","python":"import requests\n\nresp = requests.get(\"https://api.heyditto.ai/api/admin/v1/agent-accounts/%7Baccount_id%7D/readable-threads\", headers={\"Authorization\": \"YOUR_API_KEY\"})\nresp.raise_for_status()\nprint(resp.json())","typescript":"const resp = await fetch(\"https://api.heyditto.ai/api/admin/v1/agent-accounts/%7Baccount_id%7D/readable-threads\", {\n  headers: { \"Authorization\": \"YOUR_API_KEY\" },\n});\nif (!resp.ok) throw new Error(`HTTP ${resp.status}`);\nconst data = await resp.json();"},"surface_id":"sn-118-ditto-admin-agent-account-readable-threads"},{"auth":{"location":"header","name":"Authorization","scheme":"api-key","scopes_note":"Derived from the subnet's own Swagger securityDefinitions (AdminKey), which every operation in the spec requires."},"auth_required":true,"auth_schemes":["apiKey"],"authority":"official","base_url":"https://api.heyditto.ai/api/admin/v1/agent-accounts/%7Baccount_id%7D/unlink","capability":"Ditto admin agent-account unlink","description":"Unlink an agent account from its user operation on the Ditto Admin API (POST /agent-accounts/{account_id}/unlink), declared in the subnet's own Swagger 2.0 spec at /api/admin/v1/swagger/doc.json. Every operation in that spec requires the AdminKey security definition, so it is registered auth_required:true with the probe disabled (Phase 3). Path-parameterized on {account_id}, so there is no single fixed callable URL; the template is registered per the registry's catalog-everything policy (Phase 2).","eligibility":{"callable":false,"reasons":["not-bittensor-base-layer","status-unknown","auth-required"],"live_status":"unknown"},"fixture_status":{"artifact_path":null,"captured_at":null,"reason":"fixture capture skips credentialed services","status":"auth-required"},"health":{"status":"unknown","classification":null,"latency_ms":null,"last_ok":null,"last_checked":null,"stale":false,"observed_by":"unavailable"},"kind":"subnet-api","provider":"ditto-assistant","schema_artifact":"/metagraph/schemas/sn-118-ditto-admin-openapi.json","schema_source":{"artifact":"/metagraph/schemas/sn-118-ditto-admin-openapi.json","hash":"1ab50028010698c52a23b47a4ec9544d40991a0ebef31fbe74a7c40057916289","match":"same-origin-openapi","observed_at":"2026-07-27T10:51:25.372Z","status":"captured","surface_id":"sn-118-ditto-admin-openapi","url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json"},"schema_status":"machine-readable","schema_url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json","snippets":{"curl":"curl -sS 'https://api.heyditto.ai/api/admin/v1/agent-accounts/%7Baccount_id%7D/unlink' \\\n  -H 'Authorization: YOUR_API_KEY'","python":"import requests\n\nresp = requests.get(\"https://api.heyditto.ai/api/admin/v1/agent-accounts/%7Baccount_id%7D/unlink\", headers={\"Authorization\": \"YOUR_API_KEY\"})\nresp.raise_for_status()\nprint(resp.json())","typescript":"const resp = await fetch(\"https://api.heyditto.ai/api/admin/v1/agent-accounts/%7Baccount_id%7D/unlink\", {\n  headers: { \"Authorization\": \"YOUR_API_KEY\" },\n});\nif (!resp.ok) throw new Error(`HTTP ${resp.status}`);\nconst data = await resp.json();"},"surface_id":"sn-118-ditto-admin-agent-account-unlink"},{"auth":{"location":"header","name":"Authorization","scheme":"api-key","scopes_note":"Derived from the subnet's own Swagger securityDefinitions (AdminKey), which every operation in the spec requires."},"auth_required":true,"auth_schemes":["apiKey"],"authority":"official","base_url":"https://api.heyditto.ai/api/admin/v1/agent-accounts","capability":"Ditto admin agent-accounts collection","description":"List all agent accounts created by this app (paginated) operation on the Ditto Admin API (GET, POST /agent-accounts), declared in the subnet's own Swagger 2.0 spec at /api/admin/v1/swagger/doc.json. Every operation in that spec requires the AdminKey security definition, so it is registered auth_required:true with the probe disabled (Phase 3). Live-verified 2026-07-21: GET https://api.heyditto.ai/api/admin/v1/agent-accounts without credentials -> HTTP 401 {\"message\":\"unauthorized\",\"status\":401}, confirming the gate.","eligibility":{"callable":false,"reasons":["not-bittensor-base-layer","status-unknown","auth-required"],"live_status":"unknown"},"fixture_status":{"artifact_path":null,"captured_at":null,"reason":"fixture capture skips credentialed services","status":"auth-required"},"health":{"status":"unknown","classification":null,"latency_ms":null,"last_ok":null,"last_checked":null,"stale":false,"observed_by":"unavailable"},"kind":"subnet-api","provider":"ditto-assistant","schema_artifact":"/metagraph/schemas/sn-118-ditto-admin-openapi.json","schema_source":{"artifact":"/metagraph/schemas/sn-118-ditto-admin-openapi.json","hash":"1ab50028010698c52a23b47a4ec9544d40991a0ebef31fbe74a7c40057916289","match":"same-origin-openapi","observed_at":"2026-07-27T10:51:25.372Z","status":"captured","surface_id":"sn-118-ditto-admin-openapi","url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json"},"schema_status":"machine-readable","schema_url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json","snippets":{"curl":"curl -sS 'https://api.heyditto.ai/api/admin/v1/agent-accounts' \\\n  -H 'Authorization: YOUR_API_KEY'","python":"import requests\n\nresp = requests.get(\"https://api.heyditto.ai/api/admin/v1/agent-accounts\", headers={\"Authorization\": \"YOUR_API_KEY\"})\nresp.raise_for_status()\nprint(resp.json())","typescript":"const resp = await fetch(\"https://api.heyditto.ai/api/admin/v1/agent-accounts\", {\n  headers: { \"Authorization\": \"YOUR_API_KEY\" },\n});\nif (!resp.ok) throw new Error(`HTTP ${resp.status}`);\nconst data = await resp.json();"},"surface_id":"sn-118-ditto-admin-agent-accounts"},{"auth":{"location":"header","name":"Authorization","scheme":"api-key","scopes_note":"Derived from the subnet's own Swagger securityDefinitions (AdminKey), which every operation in the spec requires."},"auth_required":true,"auth_schemes":["apiKey"],"authority":"official","base_url":"https://api.heyditto.ai/api/admin/v1/consent-requests","capability":"Ditto admin consent requests","description":"Create an OAuth consent request (returnable consent URL) operation on the Ditto Admin API (POST /consent-requests), declared in the subnet's own Swagger 2.0 spec at /api/admin/v1/swagger/doc.json. Every operation in that spec requires the AdminKey security definition, so it is registered auth_required:true with the probe disabled (Phase 3).","eligibility":{"callable":false,"reasons":["not-bittensor-base-layer","status-unknown","auth-required"],"live_status":"unknown"},"fixture_status":{"artifact_path":null,"captured_at":null,"reason":"fixture capture skips credentialed services","status":"auth-required"},"health":{"status":"unknown","classification":null,"latency_ms":null,"last_ok":null,"last_checked":null,"stale":false,"observed_by":"unavailable"},"kind":"subnet-api","provider":"ditto-assistant","schema_artifact":"/metagraph/schemas/sn-118-ditto-admin-openapi.json","schema_source":{"artifact":"/metagraph/schemas/sn-118-ditto-admin-openapi.json","hash":"1ab50028010698c52a23b47a4ec9544d40991a0ebef31fbe74a7c40057916289","match":"same-origin-openapi","observed_at":"2026-07-27T10:51:25.372Z","status":"captured","surface_id":"sn-118-ditto-admin-openapi","url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json"},"schema_status":"machine-readable","schema_url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json","snippets":{"curl":"curl -sS 'https://api.heyditto.ai/api/admin/v1/consent-requests' \\\n  -H 'Authorization: YOUR_API_KEY'","python":"import requests\n\nresp = requests.get(\"https://api.heyditto.ai/api/admin/v1/consent-requests\", headers={\"Authorization\": \"YOUR_API_KEY\"})\nresp.raise_for_status()\nprint(resp.json())","typescript":"const resp = await fetch(\"https://api.heyditto.ai/api/admin/v1/consent-requests\", {\n  headers: { \"Authorization\": \"YOUR_API_KEY\" },\n});\nif (!resp.ok) throw new Error(`HTTP ${resp.status}`);\nconst data = await resp.json();"},"surface_id":"sn-118-ditto-admin-consent-requests"},{"auth":{"location":"header","name":"Authorization","scheme":"api-key","scopes_note":"Derived from the subnet's own Swagger securityDefinitions (AdminKey), which every operation in the spec requires."},"auth_required":true,"auth_schemes":["apiKey"],"authority":"official","base_url":"https://api.heyditto.ai/api/admin/v1/graphs","capability":"Ditto admin graphs collection","description":"List graphs provisioned by this app operation on the Ditto Admin API (GET, POST /graphs), declared in the subnet's own Swagger 2.0 spec at /api/admin/v1/swagger/doc.json. Every operation in that spec requires the AdminKey security definition, so it is registered auth_required:true with the probe disabled (Phase 3). Live-verified 2026-07-21: GET https://api.heyditto.ai/api/admin/v1/graphs without credentials -> HTTP 401 {\"message\":\"unauthorized\",\"status\":401}, confirming the gate.","eligibility":{"callable":false,"reasons":["not-bittensor-base-layer","status-unknown","auth-required"],"live_status":"unknown"},"fixture_status":{"artifact_path":null,"captured_at":null,"reason":"fixture capture skips credentialed services","status":"auth-required"},"health":{"status":"unknown","classification":null,"latency_ms":null,"last_ok":null,"last_checked":null,"stale":false,"observed_by":"unavailable"},"kind":"subnet-api","provider":"ditto-assistant","schema_artifact":"/metagraph/schemas/sn-118-ditto-admin-openapi.json","schema_source":{"artifact":"/metagraph/schemas/sn-118-ditto-admin-openapi.json","hash":"1ab50028010698c52a23b47a4ec9544d40991a0ebef31fbe74a7c40057916289","match":"same-origin-openapi","observed_at":"2026-07-27T10:51:25.372Z","status":"captured","surface_id":"sn-118-ditto-admin-openapi","url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json"},"schema_status":"machine-readable","schema_url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json","snippets":{"curl":"curl -sS 'https://api.heyditto.ai/api/admin/v1/graphs' \\\n  -H 'Authorization: YOUR_API_KEY'","python":"import requests\n\nresp = requests.get(\"https://api.heyditto.ai/api/admin/v1/graphs\", headers={\"Authorization\": \"YOUR_API_KEY\"})\nresp.raise_for_status()\nprint(resp.json())","typescript":"const resp = await fetch(\"https://api.heyditto.ai/api/admin/v1/graphs\", {\n  headers: { \"Authorization\": \"YOUR_API_KEY\" },\n});\nif (!resp.ok) throw new Error(`HTTP ${resp.status}`);\nconst data = await resp.json();"},"surface_id":"sn-118-ditto-admin-graphs"},{"auth":{"location":"header","name":"Authorization","scheme":"api-key","value_format":"<api-key>"},"auth_required":true,"auth_schemes":["apiKey"],"authority":"community","base_url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json","capability":"Ditto Admin API OpenAPI schema","description":"Public no-auth Swagger 2.0 schema (info.title \"Ditto Admin API\", 13 paths, basePath /api/admin/v1) served by the SN118 Ditto backend at api.heyditto.ai. The official Ditto developer docs (heyditto.ai/docs/building-apps-on-ditto) instruct developers to open the Swagger UI at /api/admin/v1/swagger/, which this doc.json backs. The schema document itself is public and unauthenticated (the API it describes uses an AdminKey). Fills the manifest gap: no machine-readable schema was recorded before.","eligibility":{"callable":false,"reasons":["not-bittensor-base-layer"],"live_status":"unknown"},"fixture":{"artifact_path":"/metagraph/fixtures/sn-118-ditto-admin-openapi.json","captured_at":"2026-07-27T10:51:25.372Z","request":{"method":"GET","url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json"},"response":{"content_type":"application/json; charset=utf-8","status":200}},"fixture_status":{"artifact_path":"/metagraph/fixtures/sn-118-ditto-admin-openapi.json","captured_at":"2026-07-27T10:51:25.372Z","reason":null,"status":"available"},"health":{"status":"unknown","classification":null,"latency_ms":null,"last_ok":null,"last_checked":null,"stale":false,"observed_by":"unavailable"},"kind":"openapi","provider":"ditto-assistant","schema_artifact":"/metagraph/schemas/sn-118-ditto-admin-openapi.json","schema_source":{"artifact":"/metagraph/schemas/sn-118-ditto-admin-openapi.json","hash":"1ab50028010698c52a23b47a4ec9544d40991a0ebef31fbe74a7c40057916289","match":"surface-id","observed_at":"2026-07-27T10:51:25.372Z","status":"captured","surface_id":"sn-118-ditto-admin-openapi","url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json"},"schema_status":"machine-readable","schema_url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json","snippets":{"curl":"curl -sS 'https://api.heyditto.ai/api/admin/v1/swagger/doc.json' \\\n  -H 'Authorization: <api-key>'","python":"import requests\n\nresp = requests.get(\"https://api.heyditto.ai/api/admin/v1/swagger/doc.json\", headers={\"Authorization\": \"<api-key>\"})\nresp.raise_for_status()\nprint(resp.json())","typescript":"const resp = await fetch(\"https://api.heyditto.ai/api/admin/v1/swagger/doc.json\", {\n  headers: { \"Authorization\": \"<api-key>\" },\n});\nif (!resp.ok) throw new Error(`HTTP ${resp.status}`);\nconst data = await resp.json();"},"surface_id":"sn-118-ditto-admin-openapi"},{"auth":{"location":"header","name":"Authorization","scheme":"api-key","scopes_note":"Derived from the subnet's own Swagger securityDefinitions (AdminKey), which every operation in the spec requires."},"auth_required":true,"auth_schemes":["apiKey"],"authority":"official","base_url":"https://api.heyditto.ai/api/admin/v1/users/%7Buser_id%7D/agent-accounts","capability":"Ditto admin user agent-accounts","description":"List a user's agent accounts (paginated) operation on the Ditto Admin API (GET /users/{user_id}/agent-accounts), declared in the subnet's own Swagger 2.0 spec at /api/admin/v1/swagger/doc.json. Every operation in that spec requires the AdminKey security definition, so it is registered auth_required:true with the probe disabled (Phase 3). Path-parameterized on {user_id}, so there is no single fixed callable URL; the template is registered per the registry's catalog-everything policy (Phase 2).","eligibility":{"callable":false,"reasons":["not-bittensor-base-layer","status-unknown","auth-required"],"live_status":"unknown"},"fixture_status":{"artifact_path":null,"captured_at":null,"reason":"fixture capture skips credentialed services","status":"auth-required"},"health":{"status":"unknown","classification":null,"latency_ms":null,"last_ok":null,"last_checked":null,"stale":false,"observed_by":"unavailable"},"kind":"subnet-api","provider":"ditto-assistant","schema_artifact":"/metagraph/schemas/sn-118-ditto-admin-openapi.json","schema_source":{"artifact":"/metagraph/schemas/sn-118-ditto-admin-openapi.json","hash":"1ab50028010698c52a23b47a4ec9544d40991a0ebef31fbe74a7c40057916289","match":"same-origin-openapi","observed_at":"2026-07-27T10:51:25.372Z","status":"captured","surface_id":"sn-118-ditto-admin-openapi","url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json"},"schema_status":"machine-readable","schema_url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json","snippets":{"curl":"curl -sS 'https://api.heyditto.ai/api/admin/v1/users/%7Buser_id%7D/agent-accounts' \\\n  -H 'Authorization: YOUR_API_KEY'","python":"import requests\n\nresp = requests.get(\"https://api.heyditto.ai/api/admin/v1/users/%7Buser_id%7D/agent-accounts\", headers={\"Authorization\": \"YOUR_API_KEY\"})\nresp.raise_for_status()\nprint(resp.json())","typescript":"const resp = await fetch(\"https://api.heyditto.ai/api/admin/v1/users/%7Buser_id%7D/agent-accounts\", {\n  headers: { \"Authorization\": \"YOUR_API_KEY\" },\n});\nif (!resp.ok) throw new Error(`HTTP ${resp.status}`);\nconst data = await resp.json();"},"surface_id":"sn-118-ditto-admin-user-agent-accounts"},{"auth":{"location":"header","name":"Authorization","scheme":"api-key","scopes_note":"Derived from the subnet's own Swagger securityDefinitions (AdminKey), which every operation in the spec requires."},"auth_required":true,"auth_schemes":["apiKey"],"authority":"official","base_url":"https://api.heyditto.ai/api/admin/v1/users/%7Buser_id%7D","capability":"Ditto admin user by id","description":"Get a provisioned user's state operation on the Ditto Admin API (GET, PATCH /users/{user_id}), declared in the subnet's own Swagger 2.0 spec at /api/admin/v1/swagger/doc.json. Every operation in that spec requires the AdminKey security definition, so it is registered auth_required:true with the probe disabled (Phase 3). Path-parameterized on {user_id}, so there is no single fixed callable URL; the template is registered per the registry's catalog-everything policy (Phase 2).","eligibility":{"callable":false,"reasons":["not-bittensor-base-layer","status-unknown","auth-required"],"live_status":"unknown"},"fixture_status":{"artifact_path":null,"captured_at":null,"reason":"fixture capture skips credentialed services","status":"auth-required"},"health":{"status":"unknown","classification":null,"latency_ms":null,"last_ok":null,"last_checked":null,"stale":false,"observed_by":"unavailable"},"kind":"subnet-api","provider":"ditto-assistant","schema_artifact":"/metagraph/schemas/sn-118-ditto-admin-openapi.json","schema_source":{"artifact":"/metagraph/schemas/sn-118-ditto-admin-openapi.json","hash":"1ab50028010698c52a23b47a4ec9544d40991a0ebef31fbe74a7c40057916289","match":"same-origin-openapi","observed_at":"2026-07-27T10:51:25.372Z","status":"captured","surface_id":"sn-118-ditto-admin-openapi","url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json"},"schema_status":"machine-readable","schema_url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json","snippets":{"curl":"curl -sS 'https://api.heyditto.ai/api/admin/v1/users/%7Buser_id%7D' \\\n  -H 'Authorization: YOUR_API_KEY'","python":"import requests\n\nresp = requests.get(\"https://api.heyditto.ai/api/admin/v1/users/%7Buser_id%7D\", headers={\"Authorization\": \"YOUR_API_KEY\"})\nresp.raise_for_status()\nprint(resp.json())","typescript":"const resp = await fetch(\"https://api.heyditto.ai/api/admin/v1/users/%7Buser_id%7D\", {\n  headers: { \"Authorization\": \"YOUR_API_KEY\" },\n});\nif (!resp.ok) throw new Error(`HTTP ${resp.status}`);\nconst data = await resp.json();"},"surface_id":"sn-118-ditto-admin-user-by-id"},{"auth":{"location":"header","name":"Authorization","scheme":"api-key","scopes_note":"Derived from the subnet's own Swagger securityDefinitions (AdminKey), which every operation in the spec requires."},"auth_required":true,"auth_schemes":["apiKey"],"authority":"official","base_url":"https://api.heyditto.ai/api/admin/v1/users/%7Buser_id%7D/grant-requests","capability":"Ditto admin user grant requests","description":"Request data-sharing scopes from a user operation on the Ditto Admin API (POST /users/{user_id}/grant-requests), declared in the subnet's own Swagger 2.0 spec at /api/admin/v1/swagger/doc.json. Every operation in that spec requires the AdminKey security definition, so it is registered auth_required:true with the probe disabled (Phase 3). Path-parameterized on {user_id}, so there is no single fixed callable URL; the template is registered per the registry's catalog-everything policy (Phase 2).","eligibility":{"callable":false,"reasons":["not-bittensor-base-layer","status-unknown","auth-required"],"live_status":"unknown"},"fixture_status":{"artifact_path":null,"captured_at":null,"reason":"fixture capture skips credentialed services","status":"auth-required"},"health":{"status":"unknown","classification":null,"latency_ms":null,"last_ok":null,"last_checked":null,"stale":false,"observed_by":"unavailable"},"kind":"subnet-api","provider":"ditto-assistant","schema_artifact":"/metagraph/schemas/sn-118-ditto-admin-openapi.json","schema_source":{"artifact":"/metagraph/schemas/sn-118-ditto-admin-openapi.json","hash":"1ab50028010698c52a23b47a4ec9544d40991a0ebef31fbe74a7c40057916289","match":"same-origin-openapi","observed_at":"2026-07-27T10:51:25.372Z","status":"captured","surface_id":"sn-118-ditto-admin-openapi","url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json"},"schema_status":"machine-readable","schema_url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json","snippets":{"curl":"curl -sS 'https://api.heyditto.ai/api/admin/v1/users/%7Buser_id%7D/grant-requests' \\\n  -H 'Authorization: YOUR_API_KEY'","python":"import requests\n\nresp = requests.get(\"https://api.heyditto.ai/api/admin/v1/users/%7Buser_id%7D/grant-requests\", headers={\"Authorization\": \"YOUR_API_KEY\"})\nresp.raise_for_status()\nprint(resp.json())","typescript":"const resp = await fetch(\"https://api.heyditto.ai/api/admin/v1/users/%7Buser_id%7D/grant-requests\", {\n  headers: { \"Authorization\": \"YOUR_API_KEY\" },\n});\nif (!resp.ok) throw new Error(`HTTP ${resp.status}`);\nconst data = await resp.json();"},"surface_id":"sn-118-ditto-admin-user-grant-requests"},{"auth":{"location":"header","name":"Authorization","scheme":"api-key","scopes_note":"Derived from the subnet's own Swagger securityDefinitions (AdminKey), which every operation in the spec requires."},"auth_required":true,"auth_schemes":["apiKey"],"authority":"official","base_url":"https://api.heyditto.ai/api/admin/v1/users/%7Buser_id%7D/keys/%7Bprovider%7D","capability":"Ditto admin user provider credential by provider","description":"Set one provider key (BYOK) operation on the Ditto Admin API (PUT /users/{user_id}/keys/{provider}), declared in the subnet's own Swagger 2.0 spec at /api/admin/v1/swagger/doc.json. Every operation in that spec requires the AdminKey security definition, so it is registered auth_required:true with the probe disabled (Phase 3). Path-parameterized on {user_id}, {provider}, so there is no single fixed callable URL; the template is registered per the registry's catalog-everything policy (Phase 2).","eligibility":{"callable":false,"reasons":["not-bittensor-base-layer","status-unknown","auth-required"],"live_status":"unknown"},"fixture_status":{"artifact_path":null,"captured_at":null,"reason":"fixture capture skips credentialed services","status":"auth-required"},"health":{"status":"unknown","classification":null,"latency_ms":null,"last_ok":null,"last_checked":null,"stale":false,"observed_by":"unavailable"},"kind":"subnet-api","provider":"ditto-assistant","schema_artifact":"/metagraph/schemas/sn-118-ditto-admin-openapi.json","schema_source":{"artifact":"/metagraph/schemas/sn-118-ditto-admin-openapi.json","hash":"1ab50028010698c52a23b47a4ec9544d40991a0ebef31fbe74a7c40057916289","match":"same-origin-openapi","observed_at":"2026-07-27T10:51:25.372Z","status":"captured","surface_id":"sn-118-ditto-admin-openapi","url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json"},"schema_status":"machine-readable","schema_url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json","snippets":{"curl":"curl -sS 'https://api.heyditto.ai/api/admin/v1/users/%7Buser_id%7D/keys/%7Bprovider%7D' \\\n  -H 'Authorization: YOUR_API_KEY'","python":"import requests\n\nresp = requests.get(\"https://api.heyditto.ai/api/admin/v1/users/%7Buser_id%7D/keys/%7Bprovider%7D\", headers={\"Authorization\": \"YOUR_API_KEY\"})\nresp.raise_for_status()\nprint(resp.json())","typescript":"const resp = await fetch(\"https://api.heyditto.ai/api/admin/v1/users/%7Buser_id%7D/keys/%7Bprovider%7D\", {\n  headers: { \"Authorization\": \"YOUR_API_KEY\" },\n});\nif (!resp.ok) throw new Error(`HTTP ${resp.status}`);\nconst data = await resp.json();"},"surface_id":"sn-118-ditto-admin-user-provider-credential-by-provider"},{"auth":{"location":"header","name":"Authorization","scheme":"api-key","scopes_note":"Derived from the subnet's own Swagger securityDefinitions (AdminKey), which every operation in the spec requires."},"auth_required":true,"auth_schemes":["apiKey"],"authority":"official","base_url":"https://api.heyditto.ai/api/admin/v1/users/%7Buser_id%7D/keys","capability":"Ditto admin user provider credentials","description":"List a user's provider keys (status only) operation on the Ditto Admin API (GET, POST /users/{user_id}/keys), declared in the subnet's own Swagger 2.0 spec at /api/admin/v1/swagger/doc.json. Every operation in that spec requires the AdminKey security definition, so it is registered auth_required:true with the probe disabled (Phase 3). Path-parameterized on {user_id}, so there is no single fixed callable URL; the template is registered per the registry's catalog-everything policy (Phase 2).","eligibility":{"callable":false,"reasons":["not-bittensor-base-layer","status-unknown","auth-required"],"live_status":"unknown"},"fixture_status":{"artifact_path":null,"captured_at":null,"reason":"fixture capture skips credentialed services","status":"auth-required"},"health":{"status":"unknown","classification":null,"latency_ms":null,"last_ok":null,"last_checked":null,"stale":false,"observed_by":"unavailable"},"kind":"subnet-api","provider":"ditto-assistant","schema_artifact":"/metagraph/schemas/sn-118-ditto-admin-openapi.json","schema_source":{"artifact":"/metagraph/schemas/sn-118-ditto-admin-openapi.json","hash":"1ab50028010698c52a23b47a4ec9544d40991a0ebef31fbe74a7c40057916289","match":"same-origin-openapi","observed_at":"2026-07-27T10:51:25.372Z","status":"captured","surface_id":"sn-118-ditto-admin-openapi","url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json"},"schema_status":"machine-readable","schema_url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json","snippets":{"curl":"curl -sS 'https://api.heyditto.ai/api/admin/v1/users/%7Buser_id%7D/keys' \\\n  -H 'Authorization: YOUR_API_KEY'","python":"import requests\n\nresp = requests.get(\"https://api.heyditto.ai/api/admin/v1/users/%7Buser_id%7D/keys\", headers={\"Authorization\": \"YOUR_API_KEY\"})\nresp.raise_for_status()\nprint(resp.json())","typescript":"const resp = await fetch(\"https://api.heyditto.ai/api/admin/v1/users/%7Buser_id%7D/keys\", {\n  headers: { \"Authorization\": \"YOUR_API_KEY\" },\n});\nif (!resp.ok) throw new Error(`HTTP ${resp.status}`);\nconst data = await resp.json();"},"surface_id":"sn-118-ditto-admin-user-provider-credentials"},{"auth":{"location":"header","name":"Authorization","scheme":"api-key","scopes_note":"Derived from the subnet's own Swagger securityDefinitions (AdminKey), which every operation in the spec requires."},"auth_required":true,"auth_schemes":["apiKey"],"authority":"official","base_url":"https://api.heyditto.ai/api/admin/v1/users","capability":"Ditto admin users collection","description":"List users provisioned by this admin (paginated) operation on the Ditto Admin API (GET, POST /users), declared in the subnet's own Swagger 2.0 spec at /api/admin/v1/swagger/doc.json. Every operation in that spec requires the AdminKey security definition, so it is registered auth_required:true with the probe disabled (Phase 3). Live-verified 2026-07-21: GET https://api.heyditto.ai/api/admin/v1/users without credentials -> HTTP 401 {\"message\":\"unauthorized\",\"status\":401}, confirming the gate.","eligibility":{"callable":false,"reasons":["not-bittensor-base-layer","status-unknown","auth-required"],"live_status":"unknown"},"fixture_status":{"artifact_path":null,"captured_at":null,"reason":"fixture capture skips credentialed services","status":"auth-required"},"health":{"status":"unknown","classification":null,"latency_ms":null,"last_ok":null,"last_checked":null,"stale":false,"observed_by":"unavailable"},"kind":"subnet-api","provider":"ditto-assistant","schema_artifact":"/metagraph/schemas/sn-118-ditto-admin-openapi.json","schema_source":{"artifact":"/metagraph/schemas/sn-118-ditto-admin-openapi.json","hash":"1ab50028010698c52a23b47a4ec9544d40991a0ebef31fbe74a7c40057916289","match":"same-origin-openapi","observed_at":"2026-07-27T10:51:25.372Z","status":"captured","surface_id":"sn-118-ditto-admin-openapi","url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json"},"schema_status":"machine-readable","schema_url":"https://api.heyditto.ai/api/admin/v1/swagger/doc.json","snippets":{"curl":"curl -sS 'https://api.heyditto.ai/api/admin/v1/users' \\\n  -H 'Authorization: YOUR_API_KEY'","python":"import requests\n\nresp = requests.get(\"https://api.heyditto.ai/api/admin/v1/users\", headers={\"Authorization\": \"YOUR_API_KEY\"})\nresp.raise_for_status()\nprint(resp.json())","typescript":"const resp = await fetch(\"https://api.heyditto.ai/api/admin/v1/users\", {\n  headers: { \"Authorization\": \"YOUR_API_KEY\" },\n});\nif (!resp.ok) throw new Error(`HTTP ${resp.status}`);\nconst data = await resp.json();"},"surface_id":"sn-118-ditto-admin-users"},{"auth":null,"auth_required":false,"auth_schemes":[],"authority":"community","base_url":"https://raw.githubusercontent.com/ditto-assistant/dittobench-starter-kit/main/fixtures/seed-user/memory_cases.json","capability":"DittoBench LongMemEval memory cases","description":"Public no-auth JSON benchmark of LongMemEval memory-recall questions (question_id, question_type, query, answer, answer_pair_ids) bundled in the official SN118 DittoBench starter kit at fixtures/seed-user/memory_cases.json. Loaded at runtime by seed.rs (MEMORY_CASES_JSON) for local mem-eval and evaluate flows over the bundled seed user.","eligibility":{"callable":true,"reasons":["not-bittensor-base-layer"],"live_status":"ok"},"fixture_status":{"artifact_path":null,"captured_at":null,"reason":"non-json response","status":"capture-failed"},"health":{"status":"ok","classification":"live","latency_ms":230,"last_ok":"2026-07-27T22:15:19.089Z","last_checked":"2026-07-27T22:15:19.089Z","stale":false,"observed_by":"live-cron-prober"},"kind":"data-artifact","provider":"ditto-assistant","schema_artifact":null,"schema_source":null,"schema_status":null,"schema_url":null,"snippets":{"curl":"curl -sS 'https://raw.githubusercontent.com/ditto-assistant/dittobench-starter-kit/main/fixtures/seed-user/memory_cases.json'","python":"import requests\n\nresp = requests.get(\"https://raw.githubusercontent.com/ditto-assistant/dittobench-starter-kit/main/fixtures/seed-user/memory_cases.json\")\nresp.raise_for_status()\nprint(resp.json())","typescript":"const resp = await fetch(\"https://raw.githubusercontent.com/ditto-assistant/dittobench-starter-kit/main/fixtures/seed-user/memory_cases.json\");\nif (!resp.ok) throw new Error(`HTTP ${resp.status}`);\nconst data = await resp.json();"},"surface_id":"sn-118-ditto-memory-cases"},{"auth":null,"auth_required":false,"auth_schemes":[],"authority":"community","base_url":"https://api.taomarketcap.com/public/v1/subnets/118/","capability":"Ditto TaoMarketCap subnet snapshot API","description":"Public no-auth GET /public/v1/subnets/118/ on api.taomarketcap.com returning machine-readable JSON for SN118 on-chain subnet state, SubnetIdentitiesV3 metadata, economics, and dTAO market fields. Ditto exposes source repositories, docs, and an SDK but no verified first-party public API endpoint; this indexed feed is documented in the TaoMarketCap developer API. TaoMarketCap now enforces a trailing slash (the non-slash path 301s); tracked URL updated to the canonical non-redirecting form. Rejects HEAD (405); probe uses GET.","eligibility":{"callable":true,"reasons":["not-bittensor-base-layer","status-degraded"],"live_status":"ok"},"fixture_status":{"artifact_path":null,"captured_at":null,"reason":"http 429","status":"capture-failed"},"health":{"status":"ok","classification":"live","latency_ms":144,"last_ok":"2026-07-27T22:15:19.089Z","last_checked":"2026-07-27T22:15:19.089Z","stale":false,"observed_by":"live-cron-prober"},"kind":"subnet-api","provider":"taomarketcap","schema_artifact":null,"schema_source":null,"schema_status":null,"schema_url":null,"snippets":{"curl":"curl -sS 'https://api.taomarketcap.com/public/v1/subnets/118/'","python":"import requests\n\nresp = requests.get(\"https://api.taomarketcap.com/public/v1/subnets/118/\")\nresp.raise_for_status()\nprint(resp.json())","typescript":"const resp = await fetch(\"https://api.taomarketcap.com/public/v1/subnets/118/\");\nif (!resp.ok) throw new Error(`HTTP ${resp.status}`);\nconst data = await resp.json();"},"surface_id":"sn-118-taomarketcap-subnet-api"}],"slug":"sn-118","subnet_type":"application","operational_observed_at":"2026-07-27T22:15:19.089Z","health_source":"live-cron-prober"},"meta":{"artifact_path":"/metagraph/agent-catalog/118.json","cache":"standard","contract_version":"2026-07-03.2","generated_at":"2026-07-27T10:51:25.049Z","published_at":"2026-07-27T10:51:25.049Z","source":"live-cron-prober","operational_observed_at":"2026-07-27T22:15:19.089Z"}}