{"openapi": "3.0.3", "info": {"title": "Span-level replay: fork from the failure", "version": "1.0.0"}, "components": {"securitySchemes": {"bearer": {"type": "http", "scheme": "bearer"}}}, "paths": {"/": {"get": {"responses": {"200": {"description": "product descriptor", "content": {"application/json": {"schema": {"type": "object", "properties": {"name": {"type": "string"}, "prices": {"type": "object"}, "limits": {"type": "array", "items": {"type": "string"}}}}}}}}}}, "/docs": {"get": {"responses": {"200": {"description": "full inline documentation (text)", "content": {"application/json": {"schema": {"type": "object", "properties": {}}}}}}}}, "/health": {"get": {"responses": {"200": {"description": "ok", "content": {"application/json": {"schema": {"type": "object", "properties": {"ok": {"type": "boolean"}}}}}}}}}, "/register": {"post": {"requestBody": {"content": {"application/json": {"schema": {"type": "object", "properties": {"account_name": {"type": "string"}, "payer_wallet": {"type": "string"}}}}}}, "responses": {"200": {"description": "account + token shown once", "content": {"application/json": {"schema": {"type": "object", "properties": {"account_id": {"type": "string"}, "token": {"type": "string"}}}}}}}}}, "/mcp": {"post": {"description": "MCP JSON-RPC 2.0: initialize, ping, tools/list are free; tools/call replay_span is x402 pay-per-call ($0.02 tool span / $0.05 model span) \u2014 unpaid returns HTTP 402 with the x402 challenge.", "requestBody": {"content": {"application/json": {"schema": {"type": "object", "properties": {"jsonrpc": {"type": "string"}, "id": {"type": "integer"}, "method": {"type": "string"}, "params": {"type": "object", "properties": {"name": {"type": "string"}, "arguments": {"type": "object", "properties": {"span": {"type": "object"}, "spans": {"type": "array", "items": {"type": "object"}}, "span_id": {"type": "string"}, "live_env": {"type": "object"}, "live_outputs": {"type": "array"}, "live_output": {"type": "object"}, "live_tool_call": {"type": "object"}}}}}}}}}}, "responses": {"200": {"description": "JSON-RPC response carrying the verdict", "content": {"application/json": {"schema": {"type": "object", "properties": {"jsonrpc": {"type": "string"}, "result": {"type": "object", "properties": {"content": {"type": "array"}}}}}}}}}}}, "/history": {"get": {"security": [{"bearer": []}], "responses": {"200": {"description": "own replay history only", "content": {"application/json": {"schema": {"type": "object", "properties": {"history": {"type": "array", "items": {"type": "object"}}}}}}}}}}, "/tokens/revoke": {"post": {"security": [{"bearer": []}], "responses": {"200": {"description": "revoked", "content": {"application/json": {"schema": {"type": "object", "properties": {"revoked": {"type": "boolean"}}}}}}}}}}}