{"openapi":"3.1.0","info":{"title":"pubfi-api-server","description":"Production Rust HTTP and MCP backend for PubFi.","contact":{"name":"Xavier Lau","email":"x@acg.box"},"license":{"name":"GPL-3.0","identifier":"GPL-3.0"},"version":"0.1.0"},"paths":{"\/":{"post":{"tags":["mcp"],"operationId":"mcp_post","requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/JsonRpcRequest"}}},"required":true},"responses":{"200":{"description":"MCP JSON-RPC"}}}},"\/.well-known\/mcp.json":{"get":{"tags":["mcp"],"operationId":"mcp_manifest","responses":{"200":{"description":"manifest"}}}},"\/healthz":{"get":{"tags":["health"],"operationId":"healthz","responses":{"200":{"description":"healthy"}}}},"\/openapi.json":{"get":{"tags":["docs"],"operationId":"openapi_json","responses":{"200":{"description":"OpenAPI"}}}},"\/readyz":{"get":{"tags":["health"],"operationId":"readyz","responses":{"200":{"description":"ready"}}}},"\/reference":{"get":{"tags":["docs"],"operationId":"reference","responses":{"200":{"description":"Scalar UI"}}}},"\/v1\/account\/credits":{"get":{"tags":["account_routes"],"operationId":"account_credits","responses":{"200":{"description":"credits"}}}},"\/v1\/account\/recharge-redemptions":{"post":{"tags":["account_routes"],"operationId":"redeem_recharge_code","requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/RechargeCodeBody"}}},"required":true},"responses":{"200":{"description":"redeemed"}}}},"\/v1\/account\/usage":{"get":{"tags":["account_routes"],"operationId":"account_usage","responses":{"200":{"description":"usage"}}}},"\/v1\/api-keys":{"get":{"tags":["account_routes"],"operationId":"list_api_keys","responses":{"200":{"description":"list"}}},"post":{"tags":["account_routes"],"operationId":"create_api_key","requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiKeyCreateBody"}}},"required":true},"responses":{"200":{"description":"created"}}}},"\/v1\/api-keys\/{id}":{"delete":{"tags":["account_routes"],"operationId":"delete_api_key","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"deleted"}}},"patch":{"tags":["account_routes"],"operationId":"rename_api_key","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiKeyRenameBody"}}},"required":true},"responses":{"200":{"description":"renamed"}}}},"\/v1\/capabilities":{"get":{"tags":["capabilities"],"operationId":"capability_catalog","responses":{"200":{"description":"catalog"}}}},"\/v1\/capabilities\/{capability_id}":{"get":{"tags":["capabilities"],"operationId":"capability_get","parameters":[{"name":"capability_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"capability"}}},"post":{"tags":["capabilities"],"operationId":"capability_post","parameters":[{"name":"capability_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{}}},"required":true},"responses":{"200":{"description":"capability"}}}},"\/v1\/gateway\/{provider}\/{network}\/{endpoint...}":{"get":{"tags":["gateway"],"operationId":"gateway_route","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string"}},{"name":"network","in":"path","required":true,"schema":{"type":"string"}},{"name":"endpoint...","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{}}},"required":true},"responses":{"200":{"description":"gateway"}}},"put":{"tags":["gateway"],"operationId":"gateway_route","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string"}},{"name":"network","in":"path","required":true,"schema":{"type":"string"}},{"name":"endpoint...","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{}}},"required":true},"responses":{"200":{"description":"gateway"}}},"post":{"tags":["gateway"],"operationId":"gateway_route","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string"}},{"name":"network","in":"path","required":true,"schema":{"type":"string"}},{"name":"endpoint...","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{}}},"required":true},"responses":{"200":{"description":"gateway"}}},"delete":{"tags":["gateway"],"operationId":"gateway_route","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string"}},{"name":"network","in":"path","required":true,"schema":{"type":"string"}},{"name":"endpoint...","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{}}},"required":true},"responses":{"200":{"description":"gateway"}}},"patch":{"tags":["gateway"],"operationId":"gateway_route","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string"}},{"name":"network","in":"path","required":true,"schema":{"type":"string"}},{"name":"endpoint...","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{}}},"required":true},"responses":{"200":{"description":"gateway"}}}},"\/version":{"get":{"tags":["health"],"operationId":"version","responses":{"200":{"description":"version"}}}}},"components":{"schemas":{"ApiKeyCreateBody":{"type":"object","required":["name","environment"],"properties":{"environment":{"type":"string"},"name":{"type":"string"},"scopes":{"type":["array","null"],"items":{"type":"string"}},"subject_id":{"type":["string","null"]}}},"ApiKeyRenameBody":{"type":"object","required":["name"],"properties":{"name":{"type":"string"}}},"ErrorBody":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#\/components\/schemas\/ErrorBody"}}},"HealthResponse":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}}},"JsonRpcRequest":{"type":"object","description":"JSON-RPC request accepted by the MCP service.","required":["jsonrpc","method"],"properties":{"id":{"description":"Request id."},"jsonrpc":{"type":"string","description":"JSON-RPC version."},"method":{"type":"string","description":"Method name."},"params":{"description":"Method params."}},"additionalProperties":false},"RechargeCodeBody":{"type":"object","required":["code"],"properties":{"code":{"type":"string"}}},"VersionResponse":{"type":"object","required":["version","backend"],"properties":{"backend":{"type":"string"},"git_ref":{"type":["string","null"]},"git_sha":{"type":["string","null"]},"image_tag":{"type":["string","null"]},"version":{"type":"string"}}}}}}