{"openapi":"3.1.0","info":{"title":"Bankslar Server API","description":"REST API of the bankslar Telegram Mini App backend.","contact":{"name":"Uzum Banks team","email":"dev@uzum.com"},"license":{"name":"Proprietary"},"version":"0.1.0"},"servers":[{"url":"http://bankslar.uzumbank.uz","description":"Generated server url"}],"tags":[{"name":"Admin — Content","description":"Editable app content (texts, players, FAQ)"},{"name":"Health","description":"Liveness/readiness probe"},{"name":"Public — Analytics","description":"Public scan/sync ingest from the Mini App"},{"name":"Admin — Dashboard","description":"Aggregated dashboard snapshot"},{"name":"Admin — Session","description":"Stub session probe for the admin shell"},{"name":"Admin — Users","description":"User detail view + manual edits to opened banks"},{"name":"Admin — Asset uploads","description":"Image and video uploads served via /content-assets/*"},{"name":"Public — Content","description":"Public content read for the React Mini App"},{"name":"Admin — Export","description":"CSV/JSON exports of users, scans, opened banks, summaries"}],"paths":{"/api/admin/users/{telegramId}/opened":{"put":{"tags":["Admin — Users"],"operationId":"updateOpened","parameters":[{"name":"telegramId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateOpenedIdsRequest"}}}},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/api/admin/content":{"get":{"tags":["Admin — Content"],"operationId":"getContent","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}},"put":{"tags":["Admin — Content"],"operationId":"saveContent","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNode"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/api/analytics/users/sync":{"post":{"tags":["Public — Analytics"],"operationId":"syncUser","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncUserRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/api/analytics/scans":{"post":{"tags":["Public — Analytics"],"operationId":"logScan","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/api/analytics/scans/selection":{"post":{"tags":["Public — Analytics"],"operationId":"logScanSelection","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanSelectionRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/api/admin/content/videos":{"post":{"tags":["Admin — Asset uploads"],"operationId":"uploadVideo","requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}},"required":["file"]}}}},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/api/admin/content/assets":{"post":{"tags":["Admin — Asset uploads"],"operationId":"uploadAsset","requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}},"required":["file"]}}}},"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/health":{"get":{"tags":["Health"],"operationId":"health","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/api/content":{"get":{"tags":["Public — Content"],"operationId":"getContent_1","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/api/auth-admin/session":{"get":{"tags":["Admin — Session"],"operationId":"session","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/api/admin/session":{"get":{"tags":["Admin — Session"],"operationId":"session_1","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/api/analytics/users/{telegramId}/progress":{"get":{"tags":["Public — Analytics"],"operationId":"getUserProgress","parameters":[{"name":"telegramId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"type":"object"}}}}}}}},"/api/admin/users/{telegramId}":{"get":{"tags":["Admin — Users"],"operationId":"getUser","parameters":[{"name":"telegramId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/UserDetails"}}}}}}},"/api/admin/export":{"get":{"tags":["Admin — Export"],"operationId":"export","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string"}},{"name":"format","in":"query","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"string","format":"byte"}}}}}}},"/api/admin/dashboard":{"get":{"tags":["Admin — Dashboard"],"operationId":"dashboard","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/DashboardSnapshot"}}}}}}}},"components":{"schemas":{"UpdateOpenedIdsRequest":{"type":"object","properties":{"openedIds":{"type":"array","items":{"type":"integer","format":"int32"}}}},"JsonNode":{"type":"object"},"SyncUserRequest":{"type":"object","properties":{"telegramId":{"type":"string","minLength":1},"firstName":{"type":"string"},"lastName":{"type":"string"},"username":{"type":"string"},"openedIds":{"type":"array","items":{"type":"integer","format":"int32"}}}},"ScanCandidate":{"type":"object","properties":{"bankId":{"type":"integer","format":"int32"},"confidence":{"type":"number","format":"double"},"mustHaveConfidence":{"type":"number","format":"double"},"mustHavePassed":{"type":"boolean"}}},"ScanRequest":{"type":"object","properties":{"telegramId":{"type":"string","minLength":1},"firstName":{"type":"string"},"lastName":{"type":"string"},"username":{"type":"string"},"success":{"type":"boolean"},"matchedBankId":{"type":"integer","format":"int32"},"selectedBankId":{"type":"integer","format":"int32"},"confidence":{"type":"number","format":"double"},"mustHaveConfidence":{"type":"number","format":"double"},"bankDetected":{"type":"boolean"},"bankDetectionScore":{"type":"number","format":"double"},"openedIds":{"type":"array","items":{"type":"integer","format":"int32"}},"topCandidates":{"type":"array","items":{"$ref":"#/components/schemas/ScanCandidate"}}}},"ScanSelectionRequest":{"type":"object","properties":{"telegramId":{"type":"string","minLength":1},"firstName":{"type":"string"},"lastName":{"type":"string"},"username":{"type":"string"},"selectedBankId":{"type":"integer","format":"int32"}},"required":["selectedBankId"]},"AnalyticsUser":{"type":"object","properties":{"telegramId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"username":{"type":"string"},"firstSeenAt":{"type":"string","format":"date-time"},"lastSeenAt":{"type":"string","format":"date-time"},"registeredViaBotAt":{"type":"string","format":"date-time"},"lastBotStartAt":{"type":"string","format":"date-time"},"botStartCount":{"type":"integer","format":"int32"},"currentOpenedIds":{"type":"array","items":{"type":"integer","format":"int32"}},"openedHistory":{"type":"array","items":{"$ref":"#/components/schemas/OpenedHistoryEntry"}},"scanCount":{"type":"integer","format":"int32"},"successfulScanCount":{"type":"integer","format":"int32"},"failedScanCount":{"type":"integer","format":"int32"},"lastScanAt":{"type":"string","format":"date-time"},"lastOpenedAt":{"type":"string","format":"date-time"}}},"OpenedHistoryEntry":{"type":"object","properties":{"bankId":{"type":"integer","format":"int32"},"openedAt":{"type":"string","format":"date-time"}}},"ScanEvent":{"type":"object","properties":{"id":{"type":"string"},"telegramId":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"success":{"type":"boolean"},"matchedBankId":{"type":"integer","format":"int32"},"selectedBankId":{"type":"integer","format":"int32"},"confidence":{"type":"number","format":"double"},"mustHaveConfidence":{"type":"number","format":"double"},"bankDetected":{"type":"boolean"},"bankDetectionScore":{"type":"number","format":"double"},"topCandidates":{"type":"array","items":{"$ref":"#/components/schemas/ScanCandidate"}}}},"UserDetails":{"type":"object","properties":{"user":{"$ref":"#/components/schemas/AnalyticsUser"},"scans":{"type":"array","items":{"$ref":"#/components/schemas/ScanEvent"}}}},"BankCount":{"type":"object","properties":{"bankId":{"type":"integer","format":"int32"},"count":{"type":"integer","format":"int64"}}},"BotMonitoringSnapshot":{"type":"object","properties":{"status":{"type":"string","enum":["ok","warning","error","offline","unknown"]},"statusLabel":{"type":"string"},"lastHeartbeatAt":{"type":"string","format":"date-time"},"secondsSinceLastHeartbeat":{"type":"integer","format":"int32"},"startedAt":{"type":"string","format":"date-time"},"uptimeSeconds":{"type":"integer","format":"int32"},"webAppUrl":{"type":"string"},"heartbeatIntervalSeconds":{"type":"integer","format":"int32"},"offlineAfterSeconds":{"type":"integer","format":"int32"},"points":{"type":"array","items":{"$ref":"#/components/schemas/Point"}}}},"DashboardSnapshot":{"type":"object","properties":{"database":{"$ref":"#/components/schemas/DatabaseMeta"},"summary":{"$ref":"#/components/schemas/Summary"},"metrics":{"$ref":"#/components/schemas/Metrics"},"topOpenedBanks":{"type":"array","items":{"$ref":"#/components/schemas/BankCount"}},"topFailedCandidates":{"type":"array","items":{"$ref":"#/components/schemas/BankCount"}},"weekly":{"$ref":"#/components/schemas/TrendBundle"},"monthly":{"$ref":"#/components/schemas/TrendBundle"},"monitoring":{"$ref":"#/components/schemas/Monitoring"},"users":{"type":"array","items":{"$ref":"#/components/schemas/AnalyticsUser"}},"recentScans":{"type":"array","items":{"$ref":"#/components/schemas/ScanEvent"}}}},"DatabaseMeta":{"type":"object","properties":{"connected":{"type":"boolean"},"engine":{"type":"string"},"name":{"type":"string"},"tableCount":{"type":"integer","format":"int32"},"totalRecords":{"type":"integer","format":"int64"},"userRecords":{"type":"integer","format":"int64"},"scanRecords":{"type":"integer","format":"int64"}}},"Metrics":{"type":"object","properties":{"scansToday":{"type":"integer","format":"int64"},"newUsersToday":{"type":"integer","format":"int64"},"successfulScans":{"type":"integer","format":"int64"},"failedScans":{"type":"integer","format":"int64"},"openedToday":{"type":"integer","format":"int64"},"activeUsersToday":{"type":"integer","format":"int64"},"registeredUsers":{"type":"integer","format":"int64"},"successRate":{"type":"number","format":"double"},"scanToCollectionRate":{"type":"number","format":"double"}}},"Monitoring":{"type":"object","properties":{"bot":{"$ref":"#/components/schemas/BotMonitoringSnapshot"}}},"Point":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time"},"label":{"type":"string"},"value":{"type":"integer","format":"int32"},"ok":{"type":"boolean"}}},"Summary":{"type":"object","properties":{"totalUsers":{"type":"integer","format":"int64"},"totalScans":{"type":"integer","format":"int64"},"totalSuccessfulScans":{"type":"integer","format":"int64"},"totalFailedScans":{"type":"integer","format":"int64"},"totalOpenedBanks":{"type":"integer","format":"int64"},"averageOpenedBanks":{"type":"number","format":"double"}}},"TrendBundle":{"type":"object","properties":{"scans":{"type":"array","items":{"$ref":"#/components/schemas/TrendPoint"}},"activeUsers":{"type":"array","items":{"$ref":"#/components/schemas/TrendPoint"}}}},"TrendPoint":{"type":"object","properties":{"dateKey":{"type":"string"},"label":{"type":"string"},"shortLabel":{"type":"string"},"value":{"type":"integer","format":"int64"}}}}}}