{"openapi":"3.1.0","info":{"title":"TeliBot CoreAPI","description":"\nA unified, multi-tenant licensing & authentication backend powering desktop applications.\n\n### Capabilities\n\n* JWT-based user authentication with HWID binding\n* Subscription & license-key lifecycle management\n* Device-transfer requests with admin approval workflow\n* Per-app sandboxed file delivery (branding, automation scenarios)\n* Service settings, country pricing, balance & purchase tracking\n* Full admin control plane for clients, apps, and assets\n\n### Authentication\n\nMost endpoints require a **Bearer access token** in the `Authorization` header.\nObtain one via `POST /v1/auth/login`.\n\nAdmin endpoints under `/admin/v1/*` require an `X-Admin-Key` header instead.\n\n### Conventions\n\n* All timestamps are UTC ISO-8601 unless noted otherwise.\n* All responses are JSON unless otherwise documented.\n* Rate-limiting applies to login attempts (10 attempts / 60s per IP).\n","contact":{"name":"TeliBot Support","url":"https://telibot-vip.online/"},"license":{"name":"Proprietary — All rights reserved"},"version":"1.0.0"},"paths":{"/v1/public/{app_id}/images/{filename}":{"get":{"tags":["public"],"summary":"Get Public Image","description":"Branding images that the login screen needs (banner, menu icons).","operationId":"get_public_image_v1_public__app_id__images__filename__get","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/register":{"post":{"tags":["auth"],"summary":"Register","operationId":"register_v1_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/login":{"post":{"tags":["auth"],"summary":"Login","operationId":"login_v1_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/refresh":{"post":{"tags":["auth"],"summary":"Refresh Endpoint","operationId":"refresh_endpoint_v1_auth_refresh_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/logout":{"post":{"tags":["auth"],"summary":"Logout","operationId":"logout_v1_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericOK"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/auth/transfer":{"post":{"tags":["auth"],"summary":"Request Transfer","operationId":"request_transfer_v1_auth_transfer_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/files/manifest":{"get":{"tags":["files"],"summary":"Manifest","description":"List available files for this user's app.","operationId":"manifest_v1_files_manifest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/files/images/{filename}":{"get":{"tags":["files"],"summary":"Get Image","operationId":"get_image_v1_files_images__filename__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/files/scenarios/{filename}":{"get":{"tags":["files"],"summary":"Get Scenario","operationId":"get_scenario_v1_files_scenarios__filename__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/me":{"get":{"tags":["settings"],"summary":"Me","operationId":"me_v1_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/me/features":{"get":{"tags":["settings"],"summary":"Features","operationId":"features_v1_me_features_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/settings":{"get":{"tags":["settings"],"summary":"App Settings","description":"Public app settings (support links, banners, etc.) from app_settings table.","operationId":"app_settings_v1_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/services":{"get":{"tags":["services"],"summary":"Get Services","description":"Active third-party service config (api_key, base_url) for the app.","operationId":"get_services_v1_services_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/countries":{"get":{"tags":["services"],"summary":"List Countries","description":"Enabled allowed countries with prices.","operationId":"list_countries_v1_countries_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/me/balance":{"get":{"tags":["services"],"summary":"Get Balance","description":"Current client balance + spending stats.","operationId":"get_balance_v1_me_balance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/purchases":{"post":{"tags":["services"],"summary":"Create Purchase","description":"Deduct balance and log a purchase (status=pending). Returns purchase_id + new balance.","operationId":"create_purchase_v1_purchases_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePurchaseRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/purchases/{purchase_id}":{"patch":{"tags":["services"],"summary":"Update Purchase","description":"Update purchase status. If marked 'failed', refund the deducted amount.","operationId":"update_purchase_v1_purchases__purchase_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"purchase_id","in":"path","required":true,"schema":{"type":"integer","title":"Purchase Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePurchaseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/server-time":{"get":{"tags":["services"],"summary":"Server Time","description":"Authoritative server time (use this instead of client clock for subscription checks).","operationId":"server_time_v1_server_time_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/v1/health":{"get":{"tags":["admin"],"summary":"Health","operationId":"health_admin_v1_health_get","parameters":[{"name":"X-Admin-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/v1/apps":{"get":{"tags":["admin"],"summary":"List Apps","operationId":"list_apps_admin_v1_apps_get","parameters":[{"name":"X-Admin-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/v1/clients":{"get":{"tags":["admin"],"summary":"List Clients","operationId":"list_clients_admin_v1_clients_get","parameters":[{"name":"app_id","in":"query","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"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":"X-Admin-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Key"}}],"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":"Create Client","operationId":"create_client_admin_v1_clients_post","parameters":[{"name":"X-Admin-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminCreateClient"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericOK"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/v1/clients/{client_id}":{"patch":{"tags":["admin"],"summary":"Update Client","operationId":"update_client_admin_v1_clients__client_id__patch","parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"integer","title":"Client Id"}},{"name":"app_id","in":"query","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"X-Admin-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUpdateClient"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericOK"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/v1/clients/{client_id}/reset-password":{"post":{"tags":["admin"],"summary":"Reset Password","operationId":"reset_password_admin_v1_clients__client_id__reset_password_post","parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"integer","title":"Client Id"}},{"name":"app_id","in":"query","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"new_password","in":"query","required":true,"schema":{"type":"string","title":"New Password"}},{"name":"X-Admin-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericOK"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/v1/transfers":{"get":{"tags":["admin"],"summary":"List Transfers","operationId":"list_transfers_admin_v1_transfers_get","parameters":[{"name":"app_id","in":"query","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"pending","title":"Status"}},{"name":"X-Admin-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/v1/transfers/{transfer_id}/approve":{"post":{"tags":["admin"],"summary":"Approve Transfer","operationId":"approve_transfer_admin_v1_transfers__transfer_id__approve_post","parameters":[{"name":"transfer_id","in":"path","required":true,"schema":{"type":"integer","title":"Transfer Id"}},{"name":"app_id","in":"query","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"X-Admin-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericOK"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/v1/transfers/{transfer_id}/reject":{"post":{"tags":["admin"],"summary":"Reject Transfer","operationId":"reject_transfer_admin_v1_transfers__transfer_id__reject_post","parameters":[{"name":"transfer_id","in":"path","required":true,"schema":{"type":"integer","title":"Transfer Id"}},{"name":"app_id","in":"query","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"X-Admin-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericOK"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/v1/files/{app_id}/{subdir}/{filename}":{"post":{"tags":["admin"],"summary":"Upload File","operationId":"upload_file_admin_v1_files__app_id___subdir___filename__post","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"subdir","in":"path","required":true,"schema":{"type":"string","title":"Subdir"}},{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}},{"name":"X-Admin-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Key"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_file_admin_v1_files__app_id___subdir___filename__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericOK"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin"],"summary":"Delete File","operationId":"delete_file_admin_v1_files__app_id___subdir___filename__delete","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"subdir","in":"path","required":true,"schema":{"type":"string","title":"Subdir"}},{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}},{"name":"X-Admin-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericOK"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/healthz":{"get":{"tags":["public"],"summary":"Healthz","description":"Liveness probe — returns `{\"ok\": true}` if the API is up.","operationId":"healthz_healthz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"AdminCreateClient":{"properties":{"app_id":{"type":"string","title":"App Id"},"email":{"type":"string","format":"email","title":"Email"},"name":{"type":"string","title":"Name"},"phone":{"type":"string","title":"Phone","default":""},"sub_type":{"type":"string","title":"Sub Type","default":""},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"},"status":{"type":"string","title":"Status","default":"active"}},"type":"object","required":["app_id","email","name"],"title":"AdminCreateClient"},"AdminUpdateClient":{"properties":{"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"accounts_enabled":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Accounts Enabled"},"groups_enabled":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Groups Enabled"},"subscription_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Type"},"is_active":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"AdminUpdateClient"},"Body_upload_file_admin_v1_files__app_id___subdir___filename__post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_file_admin_v1_files__app_id___subdir___filename__post"},"CreatePurchaseRequest":{"properties":{"country_code":{"type":"string","maxLength":8,"minLength":1,"title":"Country Code"},"phone":{"type":"string","maxLength":32,"minLength":1,"title":"Phone"},"amount":{"type":"number","maximum":10000.0,"exclusiveMinimum":0.0,"title":"Amount"}},"type":"object","required":["country_code","phone","amount"],"title":"CreatePurchaseRequest"},"GenericOK":{"properties":{"ok":{"type":"boolean","title":"Ok","default":true}},"type":"object","title":"GenericOK"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"LoginRequest":{"properties":{"app_id":{"type":"string","maxLength":64,"minLength":1,"title":"App Id"},"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","maxLength":128,"minLength":1,"title":"Password"},"hwid":{"type":"string","maxLength":256,"minLength":8,"title":"Hwid"}},"type":"object","required":["app_id","email","password","hwid"],"title":"LoginRequest"},"LoginResponse":{"properties":{"status":{"type":"string","title":"Status"},"access_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"},"refresh_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refresh Token"},"expires_in":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires In"},"user":{"anyOf":[{"$ref":"#/components/schemas/UserData"},{"type":"null"}]},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["status"],"title":"LoginResponse"},"RefreshRequest":{"properties":{"refresh_token":{"type":"string","title":"Refresh Token"}},"type":"object","required":["refresh_token"],"title":"RefreshRequest"},"RegisterRequest":{"properties":{"app_id":{"type":"string","maxLength":64,"minLength":1,"title":"App Id"},"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","maxLength":128,"minLength":4,"title":"Password"},"name":{"type":"string","maxLength":128,"minLength":1,"title":"Name"},"phone":{"type":"string","maxLength":32,"title":"Phone","default":""},"sub_type":{"type":"string","maxLength":64,"title":"Sub Type","default":""}},"type":"object","required":["app_id","email","password","name"],"title":"RegisterRequest"},"RegisterResponse":{"properties":{"status":{"type":"string","title":"Status"},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"}},"type":"object","required":["status"],"title":"RegisterResponse"},"TransferRequest":{"properties":{"reason":{"type":"string","maxLength":512,"title":"Reason","default":""}},"type":"object","title":"TransferRequest"},"TransferResponse":{"properties":{"status":{"type":"string","title":"Status"}},"type":"object","required":["status"],"title":"TransferResponse"},"UpdatePurchaseRequest":{"properties":{"status":{"type":"string","maxLength":64,"minLength":1,"title":"Status"}},"type":"object","required":["status"],"title":"UpdatePurchaseRequest"},"UserData":{"properties":{"email":{"type":"string","title":"Email"},"name":{"type":"string","title":"Name","default":""},"phone":{"type":"string","title":"Phone","default":""},"subscription_type":{"type":"string","title":"Subscription Type","default":""},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"},"status":{"type":"string","title":"Status","default":"pending"},"accounts_enabled":{"type":"integer","title":"Accounts Enabled","default":1},"groups_enabled":{"type":"integer","title":"Groups Enabled","default":1},"license_key":{"type":"string","title":"License Key","default":""}},"type":"object","required":["email"],"title":"UserData"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}},"tags":[{"name":"auth","description":"Register, login, refresh tokens, logout, and request device transfers."},{"name":"settings","description":"Authenticated user profile, feature flags, and per-app settings."},{"name":"services","description":"Service configuration, country pricing, balance, and purchase logs."},{"name":"files","description":"Authenticated download of branding images and automation scenarios."},{"name":"public","description":"Unauthenticated branding assets needed before login (banner, icons)."},{"name":"admin","description":"Admin-only operations. Requires the `X-Admin-Key` header."}]}