{"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":[],"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":[],"operationId":"mcp_manifest","responses":{"200":{"description":"manifest"}}}},"/healthz":{"get":{"tags":[],"operationId":"healthz","responses":{"200":{"description":"healthy"}}}},"/openapi.json":{"get":{"tags":[],"operationId":"openapi_json","responses":{"200":{"description":"OpenAPI"}}}},"/readyz":{"get":{"tags":[],"operationId":"readyz","responses":{"200":{"description":"ready"}}}},"/reference":{"get":{"tags":[],"operationId":"reference","responses":{"200":{"description":"Scalar UI"}}}},"/v1/account/credits":{"get":{"tags":[],"operationId":"account_credits","responses":{"200":{"description":"credits"}}}},"/v1/account/recharge-redemptions":{"post":{"tags":[],"operationId":"redeem_recharge_code","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RechargeCodeBody"}}},"required":true},"responses":{"200":{"description":"redeemed"}}}},"/v1/account/usage":{"get":{"tags":[],"operationId":"account_usage","responses":{"200":{"description":"usage"}}}},"/v1/api-keys":{"get":{"tags":[],"operationId":"list_api_keys","responses":{"200":{"description":"list"}}},"post":{"tags":[],"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":[],"operationId":"delete_api_key","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"deleted"}}},"patch":{"tags":[],"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":[],"operationId":"capability_catalog","responses":{"200":{"description":"catalog"}}}},"/v1/capabilities/{capability_id}":{"get":{"tags":[],"operationId":"capability_get","parameters":[{"name":"capability_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"capability"}}},"post":{"tags":[],"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}":{"post":{"tags":[],"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":[],"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"}}}}}}