{"ok":true,"schema_version":1,"data":{"contract_version":"2026-07-03.2","generated_at":"2026-09-20T12:26:49.169Z","name":"Affine","netuid":120,"schema_version":1,"slug":"sn-120","surfaces":[{"auth_required":false,"authority":"community","curation_level":"candidate-discovered","id":"sn-120-affine-config","key":"srf-beede9ae6dbeb1fc","kind":"data-artifact","last_verified_at":null,"name":"Affine validator scoring config","netuid":120,"notes":"Public no-auth GET /api/v1/config on api.affine.io returning the live scoring config (observed: validator_burn_percentage). Documented in the subnet's own OpenAPI schema.","probe":{"enabled":true,"expect":"json","method":"GET","timeout_ms":10000},"provider":"affine","public_safe":true,"review":{"state":"community-submitted","submitted_by":"jsonbored"},"source_urls":["https://api.affine.io/openapi.json"],"stale":null,"subnet_name":"Affine","subnet_slug":"sn-120","url":"https://api.affine.io/api/v1/config"},{"auth_required":false,"authority":"community","curation_level":"candidate-discovered","id":"sn-120-affine-config-param","key":"srf-48f38bb4dab4719e","kind":"subnet-api","last_verified_at":null,"name":"Affine config parameter detail","netuid":120,"notes":"GET /api/v1/config/{key} on api.affine.io -- detail record for a single named config parameter (value, type, version, update metadata), the per-item sibling of the already-registered bulk /api/v1/config surface. Documented in the subnet's own OpenAPI 3.1 schema with no security declared. Live-verified 2026-07-22 using a parameter name obtained from the bulk config surface: HTTP 200 JSON with the full parameter record; an unknown parameter name returns a clean HTTP 404 not-found response. probe.enabled:false -- percent-encoded path template; no per-surface path-param injection in the probe pipeline.","probe":{"enabled":false,"expect":"json","method":"GET","timeout_ms":10000},"provider":"affine","public_safe":true,"review":{"state":"community-submitted","submitted_by":"tryeverything24"},"source_urls":["https://api.affine.io/openapi.json"],"stale":null,"subnet_name":"Affine","subnet_slug":"sn-120","url":"https://api.affine.io/api/v1/config/%7Bkey%7D"},{"auth_required":false,"authority":"community","curation_level":"candidate-discovered","id":"sn-120-affine-data-artifact","key":"srf-7afbe8d6d483462d","kind":"data-artifact","last_verified_at":null,"name":"Affine current champion rank","netuid":120,"notes":"Public no-auth GET /api/v1/rank/current on api.affine.io returning the current champion window (model reference, revision, since-block) plus past champions with their emission share. Documented as GET /api/v1/rank/current in the subnet's own OpenAPI 3.1 schema (already-registered sn-120-affine-openapi surface); same api.affine.io host as the existing health surface. Observed live and populated at submission time.","probe":{"enabled":true,"expect":"json","method":"GET","timeout_ms":10000},"provider":"affine","public_safe":true,"review":{"state":"community-submitted","submitted_by":"philluiz2323"},"source_urls":["https://api.affine.io/openapi.json"],"stale":null,"subnet_name":"Affine","subnet_slug":"sn-120","url":"https://api.affine.io/api/v1/rank/current"},{"auth_required":false,"authority":"community","curation_level":"candidate-discovered","id":"sn-120-affine-health","key":"srf-a85a5fd4273ea028","kind":"subnet-api","last_verified_at":null,"name":"Affine API health","netuid":120,"notes":"Public no-auth GET /api/v1/health on api.affine.io returning liveness JSON (observed: {\"status\":\"ok\",\"service\":\"affine-api\"}). Documented as GET /api/v1/health in the subnet OpenAPI spec; api.affine.io/api/v1 is the default API_URL in the official affine-cortex API client.","probe":{"enabled":true,"expect":"json","method":"GET","timeout_ms":10000},"provider":"affine","public_safe":true,"review":{"state":"community-submitted","submitted_by":"bohdansolovie"},"source_urls":["https://api.affine.io/openapi.json","https://github.com/AffineFoundation/affine-cortex/blob/main/affine/utils/api_client.py"],"stale":null,"subnet_name":"Affine","subnet_slug":"sn-120","url":"https://api.affine.io/api/v1/health"},{"auth_required":false,"authority":"community","curation_level":"candidate-discovered","id":"sn-120-affine-miner-by-hotkey","key":"srf-63722a33c2dc3c9e","kind":"subnet-api","last_verified_at":null,"name":"Affine miner detail by hotkey","netuid":120,"notes":"GET /api/v1/miners/hotkey/{hotkey} on api.affine.io -- the same per-miner detail record as the uid lookup, addressed by the miner's hotkey instead. Documented in the subnet's own OpenAPI 3.1 schema with no security declared. Live-verified 2026-07-22 using a real value obtained from the uid-0 lookup on the sibling surface: HTTP 200 JSON returning the identical miner record; an unknown value returns a clean HTTP 404 not-found response, not an auth rejection. probe.enabled:false -- percent-encoded path template; no per-surface path-param injection in the probe pipeline.","probe":{"enabled":false,"expect":"json","method":"GET","timeout_ms":10000},"provider":"affine","public_safe":true,"review":{"state":"community-submitted","submitted_by":"tryeverything24"},"source_urls":["https://api.affine.io/openapi.json"],"stale":null,"subnet_name":"Affine","subnet_slug":"sn-120","url":"https://api.affine.io/api/v1/miners/hotkey/%7Bhotkey%7D"},{"auth_required":false,"authority":"community","curation_level":"candidate-discovered","id":"sn-120-affine-miner-by-uid","key":"srf-d3cc375c69ec7c52","kind":"subnet-api","last_verified_at":null,"name":"Affine miner detail by uid","netuid":120,"notes":"GET /api/v1/miners/uid/{uid} on api.affine.io -- per-miner detail record (model reference, revision, validity, block numbers) for a registered uid; path-parameterized sibling of the already-registered list-style surfaces. Documented in the subnet's own OpenAPI 3.1 schema (the already-registered sn-120-affine-openapi surface) with no security declared. Live-verified 2026-07-22: uid 0 returns HTTP 200 JSON with the matching miner record; a non-integer path value returns a clean HTTP 422 validation error naming the uid path field. probe.enabled:false -- the URL is a percent-encoded path template and the probe pipeline has no per-surface path-param injection.","probe":{"enabled":false,"expect":"json","method":"GET","timeout_ms":10000},"provider":"affine","public_safe":true,"review":{"state":"community-submitted","submitted_by":"tryeverything24"},"source_urls":["https://api.affine.io/openapi.json"],"stale":null,"subnet_name":"Affine","subnet_slug":"sn-120","url":"https://api.affine.io/api/v1/miners/uid/%7Buid%7D"},{"auth_required":false,"authority":"community","curation_level":"candidate-discovered","id":"sn-120-affine-openapi","key":"srf-37289673f2ce24f0","kind":"openapi","last_verified_at":null,"name":"Affine API OpenAPI schema","netuid":120,"notes":"Machine-readable OpenAPI 3.1 schema for the Affine SN120 API (title: Affine API). Served publicly at api.affine.io; documents rank, miner, score, config, and health routes.","probe":{"enabled":true,"expect":"json","method":"GET","timeout_ms":10000},"provider":"affine","public_safe":true,"review":{"state":"community-submitted","submitted_by":"bohdansolovie"},"schema_status":"machine-readable","schema_url":"https://api.affine.io/openapi.json","source_urls":["https://github.com/AffineFoundation/affine-cortex/blob/main/affine/utils/api_client.py","https://api.affine.io/openapi.json"],"stale":null,"subnet_name":"Affine","subnet_slug":"sn-120","url":"https://api.affine.io/openapi.json"},{"auth_required":false,"authority":"community","curation_level":"candidate-discovered","id":"sn-120-affine-score-by-uid","key":"srf-dc48e0f818c661eb","kind":"subnet-api","last_verified_at":null,"name":"Affine score detail by uid","netuid":120,"notes":"GET /api/v1/scores/uid/{uid} on api.affine.io -- per-miner score detail (overall and average score, per-environment scores, sample count) for a registered uid; path-parameterized sibling of the already-registered scores/latest surface. Documented in the subnet's own OpenAPI 3.1 schema with no security declared. Live-verified 2026-07-22: uid 0 returns HTTP 200 JSON with the matching score record. probe.enabled:false -- percent-encoded path template; no per-surface path-param injection in the probe pipeline.","probe":{"enabled":false,"expect":"json","method":"GET","timeout_ms":10000},"provider":"affine","public_safe":true,"review":{"state":"community-submitted","submitted_by":"tryeverything24"},"source_urls":["https://api.affine.io/openapi.json"],"stale":null,"subnet_name":"Affine","subnet_slug":"sn-120","url":"https://api.affine.io/api/v1/scores/uid/%7Buid%7D"},{"auth_required":false,"authority":"community","curation_level":"candidate-discovered","id":"sn-120-affine-scores-latest","key":"srf-8391cf33b493f5a9","kind":"subnet-api","last_verified_at":null,"name":"Affine latest scores","netuid":120,"notes":"Public no-auth GET returning the latest per-miner scores (block_number, miner_hotkey, uid, model_revision). Documented in the subnet's own OpenAPI schema.","probe":{"enabled":true,"expect":"json","method":"GET","timeout_ms":10000},"provider":"affine","public_safe":true,"review":{"state":"community-submitted","submitted_by":"jsonbored"},"source_urls":["https://api.affine.io/api/v1/scores/latest"],"stale":null,"subnet_name":"Affine","subnet_slug":"sn-120","url":"https://api.affine.io/api/v1/scores/latest"},{"auth_required":false,"authority":"community","curation_level":"candidate-discovered","id":"sn-120-affine-scores-weights-latest","key":"srf-fa2d0232ee94fe85","kind":"subnet-api","last_verified_at":null,"name":"Affine latest weights","netuid":120,"notes":"Public no-auth GET returning the latest computed weights per UID alongside the scoring config. Documented in the subnet's own OpenAPI schema.","probe":{"enabled":true,"expect":"json","method":"GET","timeout_ms":10000},"provider":"affine","public_safe":true,"review":{"state":"community-submitted","submitted_by":"jsonbored"},"source_urls":["https://api.affine.io/api/v1/scores/weights/latest"],"stale":null,"subnet_name":"Affine","subnet_slug":"sn-120","url":"https://api.affine.io/api/v1/scores/weights/latest"},{"auth_required":false,"authority":"official","curation_level":"maintainer-reviewed","id":"sn-120-affine-source-repo","key":"srf-8968d50aa009d546","kind":"source-repo","last_verified_at":"2026-07-16T00:00:00.000Z","name":"Affine source repository","netuid":120,"notes":"Official SN120 source repository. Chain-declared in SubnetIdentitiesV3 at block 8823651 and verified live 2026-08-13; the repository description names SN120. Replaces AffineFoundation/affine-cortex, which now returns 404.","probe":{"enabled":true,"expect":"any","method":"HEAD","timeout_ms":10000},"provider":"affine","public_safe":true,"source_urls":["https://github.com/AffineFoundation/affine"],"stale":false,"subnet_name":"Affine","subnet_slug":"sn-120","url":"https://github.com/AffineFoundation/affine"},{"auth_required":false,"authority":"official","curation_level":"maintainer-reviewed","id":"sn-120-affine-website","key":"srf-0660c0cd5e9c59ac","kind":"website","last_verified_at":"2026-07-16T00:00:00.000Z","name":"Affine website","netuid":120,"notes":"Official SN120 Affine website -- verified live 2026-07-16.","probe":{"enabled":true,"expect":"html","method":"HEAD","timeout_ms":10000},"provider":"affine","public_safe":true,"source_urls":["https://github.com/AffineFoundation/affine-cortex"],"stale":false,"subnet_name":"Affine","subnet_slug":"sn-120","url":"https://www.affine.io/"},{"auth_required":false,"authority":"registry-observed","curation_level":"candidate-discovered","id":"sn-120-backprop-dashboard","key":"srf-f154ee1888410dcb","kind":"dashboard","last_verified_at":null,"name":"Affine Backprop Finance dashboard","netuid":120,"notes":"Universal Backprop Finance dTAO subnet dashboard candidate. Third-party enrichment, not protocol authority.","probe":{"enabled":true,"expect":"any","method":"HEAD","timeout_ms":10000},"provider":"backprop-finance","public_safe":true,"quality_signals":{"content_type_matches_kind":true,"public_safe":true,"rate_limited":false,"redirected":true,"source_tier":"third-party-index","transient_failure":false},"rate_limit_notes":"Candidate only; no recurring probe is configured until maintainer review.","source_urls":["https://backprop.finance/dtao/subnets/120-affine"],"stale":null,"subnet_name":"Affine","subnet_slug":"sn-120","url":"https://backprop.finance/dtao/subnets/120-affine"},{"auth_required":false,"authority":"registry-observed","curation_level":"candidate-discovered","id":"sn-120-subnetradar-dashboard","key":"srf-18775690911205a9","kind":"dashboard","last_verified_at":null,"name":"Affine SubnetRadar dashboard","netuid":120,"notes":"Universal SubnetRadar subnet dashboard candidate. Third-party risk/market analytics enrichment, not Metagraphed endpoint health authority.","probe":{"enabled":true,"expect":"any","method":"HEAD","timeout_ms":10000},"provider":"subnetradar","public_safe":true,"quality_signals":{"content_type_matches_kind":true,"public_safe":true,"rate_limited":false,"redirected":false,"source_tier":"third-party-index","transient_failure":false},"rate_limit_notes":"Candidate only; no recurring probe is configured until maintainer review.","source_urls":["https://subnetradar.com/subnet/120"],"stale":null,"subnet_name":"Affine","subnet_slug":"sn-120","url":"https://subnetradar.com/subnet/120"},{"auth_required":false,"authority":"registry-observed","curation_level":"candidate-discovered","id":"sn-120-taomarketcap-dashboard","key":"srf-acc1cd7583958742","kind":"dashboard","last_verified_at":null,"name":"Affine TaoMarketCap dashboard","netuid":120,"notes":"Universal TaoMarketCap subnet dashboard candidate. Third-party enrichment, not protocol authority.","probe":{"enabled":true,"expect":"any","method":"HEAD","timeout_ms":10000},"provider":"taomarketcap","public_safe":true,"quality_signals":{"content_type_matches_kind":true,"public_safe":true,"rate_limited":false,"redirected":false,"source_tier":"third-party-index","transient_failure":false},"rate_limit_notes":"Candidate only; no recurring probe is configured until maintainer review.","source_urls":["https://api.taomarketcap.com/public/v1/subnets/120"],"stale":null,"subnet_name":"Affine","subnet_slug":"sn-120","url":"https://taomarketcap.com/subnets/120"},{"auth_required":false,"authority":"registry-observed","curation_level":"candidate-discovered","id":"sn-120-taopedia-article","key":"srf-3c5b1e3b486755f7","kind":"docs","last_verified_at":null,"name":"Affine Taopedia article","netuid":120,"notes":"Discovered from the public Taopedia article repository. Not verified as an operational interface.","probe":{"enabled":true,"expect":"any","method":"HEAD","timeout_ms":10000},"provider":"taopedia-articles","public_safe":true,"quality_signals":{"content_type_matches_kind":true,"public_safe":true,"rate_limited":false,"redirected":false,"source_tier":"community-docs","transient_failure":false},"rate_limit_notes":"Candidate only; no recurring probe is configured until maintainer review.","source_urls":["https://github.com/e35ventura/taopedia-articles/blob/main/content/pages/subnet_120/index.mdx"],"stale":null,"subnet_name":"Affine","subnet_slug":"sn-120","url":"https://github.com/e35ventura/taopedia-articles/blob/main/content/pages/subnet_120/index.mdx"},{"auth_required":false,"authority":"registry-observed","curation_level":"candidate-discovered","id":"sn-120-tensorplex-docs","key":"srf-c4bf295a53a07443","kind":"docs","last_verified_at":null,"name":"Affine Tensorplex subnet docs","netuid":120,"notes":"Discovered from Tensorplex subnet-docs. Useful as documentation enrichment, not verified operational authority.","probe":{"enabled":true,"expect":"any","method":"HEAD","timeout_ms":10000},"provider":"tensorplex-subnet-docs","public_safe":true,"quality_signals":{"content_type_matches_kind":true,"public_safe":true,"rate_limited":false,"redirected":false,"source_tier":"community-docs","transient_failure":false},"rate_limit_notes":"Candidate only; no recurring probe is configured until maintainer review.","source_urls":["https://github.com/tensorplex-labs/subnet-docs/blob/main/data/120/subnet.json"],"stale":null,"subnet_name":"Affine","subnet_slug":"sn-120","url":"https://github.com/tensorplex-labs/subnet-docs/tree/main/data/120"},{"auth_required":false,"authority":"registry-observed","curation_level":"candidate-discovered","id":"sn-120-website-common-docs","key":"srf-8848154dd5cdd653","kind":"docs","last_verified_at":null,"name":"Affine docs","netuid":120,"notes":"Common read-only path discovered from a public project website root. Requires verification before promotion.","probe":{"enabled":true,"expect":"any","method":"HEAD","timeout_ms":10000},"provider":"affine","public_safe":true,"quality_signals":{"content_type_matches_kind":true,"public_safe":true,"rate_limited":false,"redirected":true,"source_tier":"provider-claimed","transient_failure":false},"rate_limit_notes":"Candidate only; no recurring probe is configured until maintainer review.","source_urls":["https://www.affine.io/"],"stale":null,"subnet_name":"Affine","subnet_slug":"sn-120","url":"https://www.affine.io/docs"},{"auth_required":false,"authority":"registry-observed","curation_level":"candidate-discovered","id":"sn-120-website-common-openapi-json","key":"srf-109b6d00765cbe69","kind":"openapi","last_verified_at":null,"name":"Affine OpenAPI JSON","netuid":120,"notes":"Common read-only path discovered from a public project website root. Requires verification before promotion.","probe":{"enabled":true,"expect":"any","method":"GET","timeout_ms":10000},"provider":"affine","public_safe":true,"quality_signals":{"content_type_matches_kind":true,"public_safe":true,"rate_limited":false,"redirected":true,"source_tier":"provider-claimed","transient_failure":false},"rate_limit_notes":"Candidate only; no recurring probe is configured until maintainer review.","schema_status":"machine-readable","schema_url":"https://www.affine.io/openapi.json","source_urls":["https://www.affine.io/"],"stale":null,"subnet_name":"Affine","subnet_slug":"sn-120","url":"https://www.affine.io/openapi.json"},{"auth_required":false,"authority":"registry-observed","curation_level":"candidate-discovered","id":"sn-120-website-subdomain-docs-docs-affine-io","key":"srf-f23b792567b906c3","kind":"docs","last_verified_at":null,"name":"Affine docs subdomain","netuid":120,"notes":"Docs subdomain candidate inferred from a public project website root for a subnet without project-level docs. Requires verification before promotion.","probe":{"enabled":true,"expect":"any","method":"HEAD","timeout_ms":10000},"provider":"affine","public_safe":true,"quality_signals":{"content_type_matches_kind":true,"public_safe":true,"rate_limited":false,"redirected":false,"source_tier":"provider-claimed","transient_failure":false},"rate_limit_notes":"Candidate only; no recurring probe is configured until maintainer review.","source_urls":["https://www.affine.io/"],"stale":null,"subnet_name":"Affine","subnet_slug":"sn-120","url":"https://docs.affine.io/"}]},"meta":{"artifact_path":"/metagraph/surfaces/120.json","cache":"standard","contract_version":"2026-07-03.2","generated_at":"2026-09-20T12:26:49.169Z","published_at":"2026-09-20T12:26:49.169Z","source":"r2","pagination":{"collection":"surfaces","total":20,"returned":20,"limit":20,"cursor":0,"next_cursor":null,"sort":null,"order":"asc"}}}