{"openapi":"3.1.0","info":{"title":"Paul's API Hub","description":"Private FastAPI API hub with documentation wiki, scoped API keys, and local deterministic tools.","version":"1.0.0"},"paths":{"/health":{"get":{"tags":["public"],"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Health Get"}}}}}}},"/v1/me":{"get":{"tags":["account"],"summary":"Me","operationId":"me_v1_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeResponse"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}]}},"/v1/services":{"get":{"tags":["services"],"summary":"Services","operationId":"services_v1_services_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServicesResponse"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}]}},"/v1/agent/echo":{"post":{"tags":["agent"],"summary":"Agent Echo","operationId":"agent_echo_v1_agent_echo_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EchoRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EchoResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}]}},"/v1/agent/brief":{"post":{"tags":["agent"],"summary":"Agent Brief","operationId":"agent_brief_v1_agent_brief_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriefRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriefResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}]}},"/v1/tools/summarize":{"post":{"tags":["tools"],"summary":"Summarize","operationId":"summarize_v1_tools_summarize_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SummarizeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SummarizeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}]}},"/v1/webhook/test":{"post":{"tags":["webhooks"],"summary":"Webhook Test","operationId":"webhook_test_v1_webhook_test_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookTestRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookTestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}]}},"/v1/admin/keys":{"get":{"tags":["admin"],"summary":"Admin List Keys","operationId":"admin_list_keys_v1_admin_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/KeyMetadata"},"type":"array","title":"Response Admin List Keys V1 Admin Keys Get"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}]},"post":{"tags":["admin"],"summary":"Admin Create Key","operationId":"admin_create_key_v1_admin_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateKeyRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}]}},"/v1/admin/keys/{key_id}":{"delete":{"tags":["admin"],"summary":"Admin Revoke Key","operationId":"admin_revoke_key_v1_admin_keys__key_id__delete","security":[{"HTTPBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevokeKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"BriefRequest":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Title"},"text":{"type":"string","maxLength":30000,"minLength":1,"title":"Text"},"bullets":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"Bullets","default":5}},"type":"object","required":["text"],"title":"BriefRequest"},"BriefResponse":{"properties":{"title":{"type":"string","title":"Title"},"summary":{"type":"string","title":"Summary"},"bullets":{"items":{"type":"string"},"type":"array","title":"Bullets"},"word_count":{"type":"integer","title":"Word Count"}},"type":"object","required":["title","summary","bullets","word_count"],"title":"BriefResponse"},"CreateKeyRequest":{"properties":{"owner":{"type":"string","maxLength":120,"minLength":1,"title":"Owner"},"scopes":{"items":{"type":"string"},"type":"array","maxItems":25,"minItems":1,"title":"Scopes"},"note":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Note"},"rate_limit_per_minute":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":1.0},{"type":"null"}],"title":"Rate Limit Per Minute"}},"type":"object","required":["owner","scopes"],"title":"CreateKeyRequest"},"CreateKeyResponse":{"properties":{"token":{"type":"string","title":"Token","description":"Raw API key. Returned once; store it securely."},"key":{"$ref":"#/components/schemas/KeyMetadata"}},"type":"object","required":["token","key"],"title":"CreateKeyResponse"},"EchoRequest":{"properties":{"message":{"type":"string","maxLength":10000,"minLength":1,"title":"Message"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","required":["message"],"title":"EchoRequest"},"EchoResponse":{"properties":{"message":{"type":"string","title":"Message"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"},"echoed_at":{"type":"string","format":"date-time","title":"Echoed At"}},"type":"object","required":["message","echoed_at"],"title":"EchoResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"KeyMetadata":{"properties":{"id":{"type":"string","title":"Id"},"owner":{"type":"string","title":"Owner"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"rate_limit_per_minute":{"type":"integer","minimum":1.0,"title":"Rate Limit Per Minute"},"fingerprint":{"type":"string","title":"Fingerprint","description":"Short SHA-256 hash fingerprint; never the raw key."}},"type":"object","required":["id","owner","scopes","created_at","rate_limit_per_minute","fingerprint"],"title":"KeyMetadata"},"MeResponse":{"properties":{"key_id":{"type":"string","title":"Key Id"},"owner":{"type":"string","title":"Owner"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"limits":{"additionalProperties":true,"type":"object","title":"Limits"}},"type":"object","required":["key_id","owner","scopes","limits"],"title":"MeResponse"},"RevokeKeyResponse":{"properties":{"id":{"type":"string","title":"Id"},"revoked":{"type":"boolean","title":"Revoked"},"revoked_at":{"type":"string","format":"date-time","title":"Revoked At"}},"type":"object","required":["id","revoked","revoked_at"],"title":"RevokeKeyResponse"},"Service":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"required_scope":{"type":"string","title":"Required Scope"},"method":{"type":"string","enum":["GET","POST","DELETE"],"title":"Method"},"path":{"type":"string","title":"Path"}},"type":"object","required":["id","name","description","required_scope","method","path"],"title":"Service"},"ServicesResponse":{"properties":{"services":{"items":{"$ref":"#/components/schemas/Service"},"type":"array","title":"Services"}},"type":"object","required":["services"],"title":"ServicesResponse"},"SummarizeRequest":{"properties":{"text":{"type":"string","maxLength":30000,"minLength":1,"title":"Text"},"sentences":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"Sentences","default":3}},"type":"object","required":["text"],"title":"SummarizeRequest"},"SummarizeResponse":{"properties":{"summary":{"type":"string","title":"Summary"},"selected_sentences":{"items":{"type":"string"},"type":"array","title":"Selected Sentences"},"sentence_count":{"type":"integer","title":"Sentence Count"}},"type":"object","required":["summary","selected_sentences","sentence_count"],"title":"SummarizeResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WebhookTestRequest":{"properties":{"event":{"type":"string","maxLength":120,"minLength":1,"title":"Event"},"payload":{"additionalProperties":true,"type":"object","title":"Payload"}},"type":"object","required":["event"],"title":"WebhookTestRequest"},"WebhookTestResponse":{"properties":{"ok":{"type":"boolean","title":"Ok"},"event":{"type":"string","title":"Event"},"payload":{"additionalProperties":true,"type":"object","title":"Payload"},"received_at":{"type":"string","format":"date-time","title":"Received At"}},"type":"object","required":["ok","event","payload","received_at"],"title":"WebhookTestResponse"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"},"APIKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key"}}}}