Skip to main content
API referenceAgents

Agent Catalog

Last updated

GET
/api/v1/agent-catalog

List subnets exposing callable services for AI agents (compact capability index).

Query Parameters

fields?string

Comma-separated allow-list projecting the response's primary row collection down to just these fields. A response carrying several collections projects only the primary one -- the others keep their full shape. An unrecognised field is a 400 invalid_query naming both the field and the collection it was resolved against, rather than being ignored.

Match^[\s,]*[A-Za-z_][A-Za-z0-9_]*(\s*,[\s,]*[A-Za-z_][A-Za-z0-9_]*)*[\s,]*$
limit?integer

Maximum number of rows to return in one page (at most 1000). A larger value, or a non-positive one, is rejected with 400 invalid_query -- so a short page means the result set is exhausted, not that the server quietly capped you (#9916). Omitted, every matching row is returned.

Range1 <= value <= 1000
cursor?integer

Row offset to resume from — the numeric position of the first row to return, not an opaque token. Rows inserted since the previous page shift it, so prefer the keyset cursor where a tool offers one.

Range0 <= value
sort?string

Field to sort by — the bare field name only (e.g. sort=total_stake_alpha). Pair with the separate order parameter to choose direction; a combined field:desc token is NOT supported.

Value in

  • "netuid"
  • "callable_count"
  • "completeness_score"
  • "example_count"
order?string

Sort direction for sort: asc or desc (default desc). This is a separate parameter from sort — e.g. ?sort=emission_share&order=desc.

Value in

  • "asc"
  • "desc"

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/agent-catalog"
{  "data": {    "blocked_subnet_count": 5000000,    "blocked_subnets": [      {        "agent_readiness": {          "blocker_level": "none",          "blockers": [            {              "code": "example",              "field": "example",              "message": "example",              "next_action": "example",              "severity": "hard"            }          ],          "missing_fields": [            "example"          ],          "status": "callable"        },        "netuid": 7      }    ],    "blocker_summary": {      "by_code": {},      "by_level": {},      "by_severity": {},      "by_status": {}    },    "callable_service_count": 1,    "content_hash": "a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1",    "contract_version": "2026-06-29.1",    "generated_at": "2026-06-01T00:00:00.000Z",    "health_source": "probe-derived",    "notes": "Example description.",    "operational_observed_at": "2026-06-01T00:00:00.000Z",    "published_at": "2026-06-01T00:00:00.000Z",    "schema_version": 1,    "subnet_count": 1,    "subnets": [      {        "netuid": 7,        "service_count": 1      }    ],    "total_subnet_count": 1  },  "meta": {    "artifact_path": "example",    "cache": "short",    "contract_version": "2026-06-29.1",    "generated_at": "2026-06-01T00:00:00.000Z",    "observed_through": "2026-06-01T00:00:00.000Z",    "pagination": {      "collection": "example",      "cursor": 1,      "limit": 1,      "next_cursor": 1,      "order": "asc",      "returned": 1,      "sort": "example",      "total": 1    },    "published_at": "2026-06-01T00:00:00.000Z",    "source": "live-cron-prober",    "stale_contract": {      "built_under": "example",      "live": "example"    }  },  "ok": true,  "schema_version": 1}