{"openapi":"3.1.0","info":{"title":"AI Proxy Gateway","version":"1.2.0"},"paths":{"/api/dashboard/config":{"get":{"tags":["Customer Dashboard"],"summary":"Dashboard Config","operationId":"dashboard_config_api_dashboard_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/dashboard/me":{"get":{"tags":["Customer Dashboard"],"summary":"Dashboard Me","operationId":"dashboard_me_api_dashboard_me_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dashboard/wallet":{"get":{"tags":["Customer Dashboard"],"summary":"Dashboard Wallet","operationId":"dashboard_wallet_api_dashboard_wallet_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dashboard/payments":{"get":{"tags":["Customer Dashboard"],"summary":"Dashboard Payments","operationId":"dashboard_payments_api_dashboard_payments_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dashboard/transactions":{"get":{"tags":["Customer Dashboard"],"summary":"Dashboard Transactions","operationId":"dashboard_transactions_api_dashboard_transactions_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dashboard/requests":{"get":{"tags":["Customer Dashboard"],"summary":"Dashboard Requests","operationId":"dashboard_requests_api_dashboard_requests_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dashboard/api-keys":{"get":{"tags":["Customer Dashboard"],"summary":"Dashboard Api Keys","operationId":"dashboard_api_keys_api_dashboard_api_keys_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Customer Dashboard"],"summary":"Create Dashboard Api Key","operationId":"create_dashboard_api_key_api_dashboard_api_keys_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dashboard/api-keys/{key_id}/revoke":{"post":{"tags":["Customer Dashboard"],"summary":"Revoke Dashboard Api Key","operationId":"revoke_dashboard_api_key_api_dashboard_api_keys__key_id__revoke_post","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dashboard/api-keys/ensure":{"post":{"tags":["Customer Dashboard"],"summary":"Ensure Dashboard Api Key","description":"Create the customer's first API key after funding, if none exists.\n\nThe plaintext key is returned only at creation time. Existing active keys\nare never rotated or regenerated automatically.","operationId":"ensure_dashboard_api_key_api_dashboard_api_keys_ensure_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dashboard/payments/initialize":{"post":{"tags":["Customer Dashboard"],"summary":"Dashboard Initialize Payment","operationId":"dashboard_initialize_payment_api_dashboard_payments_initialize_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/me":{"get":{"tags":["Admin"],"summary":"Admin Me","operationId":"admin_me_api_admin_me_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/summary":{"get":{"tags":["Admin"],"summary":"Admin Summary","operationId":"admin_summary_api_admin_summary_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/customers":{"get":{"tags":["Admin"],"summary":"Admin Customers","operationId":"admin_customers_api_admin_customers_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/customers/{customer_id}/status":{"post":{"tags":["Admin"],"summary":"Admin Customer Status","operationId":"admin_customer_status_api_admin_customers__customer_id__status_post","parameters":[{"name":"customer_id","in":"path","required":true,"schema":{"type":"string","title":"Customer Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerStatusRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/payments":{"get":{"tags":["Admin"],"summary":"Admin Payments","operationId":"admin_payments_api_admin_payments_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/requests":{"get":{"tags":["Admin"],"summary":"Admin Requests","operationId":"admin_requests_api_admin_requests_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/pricing":{"get":{"tags":["Admin"],"summary":"Admin Pricing","operationId":"admin_pricing_api_admin_pricing_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin"],"summary":"Admin Set Pricing","operationId":"admin_set_pricing_api_admin_pricing_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PricingRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/wallet-adjustments":{"post":{"tags":["Admin"],"summary":"Admin Wallet Adjustment","operationId":"admin_wallet_adjustment_api_admin_wallet_adjustments_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletAdjustmentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"summary":"Health Check","operationId":"health_check__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Health Check  Get"}}}}}}},"/payments/initialize":{"post":{"summary":"Initialize Payment","operationId":"initialize_payment_payments_initialize_post","parameters":[{"name":"amount","in":"query","required":true,"schema":{"type":"number","title":"Amount"}},{"name":"currency","in":"query","required":false,"schema":{"type":"string","default":"NGN","title":"Currency"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Initialize Payment Payments Initialize Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/payments/callback":{"get":{"summary":"Payment Callback","operationId":"payment_callback_payments_callback_get","parameters":[{"name":"reference","in":"query","required":true,"schema":{"type":"string","title":"Reference"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/payments/webhook":{"post":{"summary":"Paystack Webhook","operationId":"paystack_webhook_payments_webhook_post","parameters":[{"name":"x-paystack-signature","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Paystack-Signature"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Paystack Webhook Payments Webhook Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/chat/completions":{"post":{"summary":"Chat Completion","operationId":"chat_completion_v1_chat_completions_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatCompletionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Chat Completion V1 Chat Completions Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"ApiKeyCreateRequest":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","default":"API Key"}},"type":"object","title":"ApiKeyCreateRequest"},"ChatCompletionRequest":{"properties":{"model":{"type":"string","maxLength":100,"minLength":1,"title":"Model","description":"Requested model identifier. Must exist as an active model in the database registry.","default":"gpt-4o-mini"},"messages":{"items":{"$ref":"#/components/schemas/ChatMessage"},"type":"array","maxItems":100,"minItems":1,"title":"Messages","description":"Ordered conversation messages."},"temperature":{"type":"number","maximum":2.0,"minimum":0.0,"title":"Temperature","description":"Sampling temperature.","default":0.7},"max_tokens":{"type":"integer","maximum":4000.0,"minimum":1.0,"title":"Max Tokens","description":"Maximum completion tokens requested by the customer.","default":500}},"additionalProperties":false,"type":"object","required":["messages"],"title":"ChatCompletionRequest","description":"Canonical request accepted by /v1/chat/completions.\n\nModel availability is intentionally NOT hard-coded in this Pydantic model.\nA requested model is resolved at runtime through:\n    model_pricing -> provider_models -> provider credentials\n\nThis lets the gateway support any configured model without deploying\nnew application code for every model addition."},"ChatMessage":{"properties":{"role":{"type":"string","enum":["system","user","assistant"],"title":"Role","description":"Message author role."},"content":{"type":"string","maxLength":100000,"minLength":1,"title":"Content","description":"Message content."}},"additionalProperties":false,"type":"object","required":["role","content"],"title":"ChatMessage","description":"A single chat message accepted by the proxy."},"CustomerStatusRequest":{"properties":{"status":{"type":"string","pattern":"^(active|suspended|closed)$","title":"Status"}},"type":"object","required":["status"],"title":"CustomerStatusRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"PaymentRequest":{"properties":{"amount":{"type":"number","maximum":100000000.0,"exclusiveMinimum":0.0,"title":"Amount"},"currency":{"type":"string","maxLength":3,"minLength":3,"title":"Currency","default":"NGN"}},"type":"object","required":["amount"],"title":"PaymentRequest"},"PricingRequest":{"properties":{"model_name":{"type":"string","maxLength":100,"minLength":1,"title":"Model Name"},"input_price_per_1m":{"type":"number","maximum":1000000.0,"minimum":0.0,"title":"Input Price Per 1M"},"output_price_per_1m":{"type":"number","maximum":1000000.0,"minimum":0.0,"title":"Output Price Per 1M"},"customer_markup_multiplier":{"type":"number","maximum":100.0,"minimum":1.0,"title":"Customer Markup Multiplier"}},"type":"object","required":["model_name","input_price_per_1m","output_price_per_1m","customer_markup_multiplier"],"title":"PricingRequest"},"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"},"WalletAdjustmentRequest":{"properties":{"customer_id":{"type":"string","title":"Customer Id"},"direction":{"type":"string","pattern":"^(credit|debit)$","title":"Direction"},"amount_usd":{"type":"number","maximum":1000000.0,"exclusiveMinimum":0.0,"title":"Amount Usd"},"reason":{"type":"string","maxLength":500,"minLength":3,"title":"Reason"}},"type":"object","required":["customer_id","direction","amount_usd","reason"],"title":"WalletAdjustmentRequest"}}}}