{"openapi": "3.0.3", "info": {"title": "Context crossmatch (P30)", "version": "1.0.0"}, "paths": {"/check": {"post": {"summary": "Crossmatch an artifact against a recipient (metered)", "requestBody": {"content": {"application/json": {"schema": {"type": "object", "properties": {"artifact": {"type": "object", "description": "segments typed by content; claimed kinds never trusted"}, "recipient": {"type": "object", "properties": {"id": {"type": "string"}, "accepted": {"type": "array", "items": {"type": "string"}}}}, "profile": {"type": "object", "description": "optional; omit to have the service type+sign first"}}}}}}, "responses": {"200": {"description": "verdict TRANSFUSE / TRANSFUSE-REDUCED / REFUSE"}, "402": {"description": "x402 payment required ($0.005/check)"}}}}, "/ingest": {"post": {"summary": "Crossmatch, then return the admissible context payload (metered)", "responses": {"200": {"description": "verdict + context (empty on REFUSE)"}}}}, "/type": {"post": {"summary": "Type an artifact and return its Ed25519-signed antigen profile", "responses": {"200": {"description": "signed profile"}}}}, "/mcp": {"post": {"summary": "MCP JSON-RPC: initialize, tools/list, tools/call (type_artifact, crossmatch, ingest)", "responses": {"200": {"description": "JSON-RPC result"}}}}, "/register": {"post": {"summary": "Self-serve account + per-customer token (shown once)", "responses": {"200": {"description": "account_id + token"}}}}, "/trial": {"post": {"summary": "Claim the one-time free crossmatch (once per operator)", "responses": {"200": {"description": "grant claimed"}, "409": {"description": "already claimed"}}}}, "/subscribe": {"post": {"summary": "x402 subscription: solo $9/mo, fleet $19/mo (30-day term)", "responses": {"200": {"description": "plan active"}, "402": {"description": "payment required"}}}}, "/registry/recipients": {"get": {"summary": "Fleet: list own recipient policies"}, "post": {"summary": "Fleet: store a recipient policy"}}, "/audit": {"get": {"summary": "Fleet: own verdict audit log"}}, "/verify-key": {"get": {"summary": "Published Ed25519 verification keys: ?key_id= resolves any operator/legacy key; authenticated returns your own key set"}}, "/keys/rotate": {"post": {"summary": "Rotate your per-operator signing key (old key stays published verify-only)", "responses": {"200": {"description": "rotation receipt with the new key_id"}}}}, "/terms": {"get": {"summary": "terms of service (plain text)"}}, "/privacy": {"get": {"summary": "privacy notice (plain text)"}}, "/health": {"get": {"summary": "health"}}}}