{"admin":"enroll takes {\"baseUrl\": …, \"audience\": \"open\" | {\"wallets\": [0x…]}} and retire takes {\"baseUrl\": …}, gated by the x-directory-secret header; both are idempotent, and re-enrolling replaces the audience","audience":"every enrolled service is open to every Seal user or gated to an audience of signing wallets; GET /v1/services?wallet=0x… lists what that wallet sees, an anonymous read lists open services only, and GET /v1/services/visibility?baseUrl=…&wallet=0x… answers {visible} for a gated service deciding admission","identity":"the operator-owned roster of services Seal itself runs; the seal server reads /v1/services to open discovery's In-house section","listing":"each entry relays the enrolled service's own live GET / manifest — the directory describes nothing itself, so an entry can never drift from what its service serves, and a service whose manifest doesn't answer carries no entry until it does","routes":{"admin":["POST /v1/services","DELETE /v1/services"],"free":["/","/health","/v1/services","/v1/services/visibility"]},"service":"seal-x402-directory","version":1}