{"2fa":[{"Arguments":["current_user"],"Description":"Get 2FA backup codes for mobile.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, codes: [ ... ] }","admin":false,"function":"mobile_2fa_backup_codes_list","last_test":{"ok":false,"response_snippet":"{\"error\":\"2fa_not_enabled\",\"message\":\"2FA not enabled\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:23.119719Z"},"path":"/2fa/backup-codes","premium":false,"request_example":{"user":"test"}},{"Arguments":["current_user"],"Description":"Regenerate 2FA backup codes.","Method":"POST","Other notes":"Requires authentication.","Returns":"codes","admin":false,"function":"mobile_2fa_backup_codes_regen","last_test":{"ok":false,"response_snippet":"{\"error\":\"2fa_not_enabled\",\"message\":\"2FA not enabled\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:23.125475Z"},"path":"/2fa/backup-codes/regenerate","premium":false,"request_example":{"user":"test"}},{"Arguments":["current_user"],"Description":"Enable 2FA for mobile user.","Method":"POST","Other notes":"Requires authentication.","Returns":"already_enabled","admin":false,"function":"mobile_2fa_enable","last_test":{"ok":true,"response_snippet":"{\"ok\":true,\"provisioning_uri\":\"otpauth://totp/TCGTraders.app:EXAMPLE?secret=REDACTED&issuer=TCGTraders.app\",\"secret\":\"REDACTED\"}\n","status_code":200,"tested_at":"2025-10-26T01:11:23.133436Z"},"path":"/api/mobile/2fa/enable","path_original":"/2fa/enable","premium":false},{"Arguments":["current_user"],"Description":"Check 2FA status for mobile user.","Method":"GET","Other notes":"Requires authentication.","Returns":"two_factor_enabled","admin":false,"function":"mobile_2fa_status","last_test":{"ok":true,"response_snippet":"{\"backup_codes\":0,\"has_secret\":true,\"ok\":true,\"two_factor_enabled\":false}\n","status_code":200,"tested_at":"2025-10-26T01:11:23.135841Z"},"path":"/api/mobile/2fa/status","path_original":"/2fa/status","premium":false},{"Arguments":["current_user"],"Description":"Verify 2FA code for mobile user.","Method":"POST","Other notes":"Requires authentication.","Returns":"activated","admin":false,"function":"mobile_2fa_verify","last_test":{"ok":false,"response_snippet":"{\"error\":\"code_required\",\"message\":\"Code required\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:23.141057Z"},"path":"/2fa/verify","premium":false,"request_example":{"code":"test","user":"test"}}],"achievements":[{"Arguments":["current_user"],"Description":"List user achievements for mobile app.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, achievements: [ { id, name, points } ] }","admin":false,"function":"mobile_achievements_list","last_test":{"ok":true,"response_snippet":"{\"achievements\":[{\"badge_color\":\"success\",\"category\":\"getting_started\",\"description\":\"Complete your first login to the trading platform\",\"earned\":false,\"icon\":\"fas fa-hand-wave\",\"id\":1,\"name\":\"Welcome Aboard!\",\"points\":10},{\"badge_color\":\"info\",\"category\":\"getting_started\",\"description\":\"Complete your profile with bio, location, and trading focus\",\"earned\":false,\"icon\":\"fas fa-user-edit\",\"id\":2,\"name\":\"Profile Master\",\"points\":25},{\"badge_color\":\"primary\",\"category\":\"collecting\",\"description\":\"Add your first card to your inventory\",\"earned\":true,\"icon\":\"fas fa-plus-circle\",\"id\":3,\"name\":\"First Steps\",\"points\":15},{\"badge_color\":\"success\",\"category\":\"trading\",\"description\":\"Complete your first successful trade\",\"earned\":false,\"icon\":\"fas fa-handshake\",\"id\":4,\"name\":\"First Deal\",\"points\":50},{\"badge_color\":\"warning\",\"category\":\"trading\",\"description\":\"Complete 10 successful trades\",\"earned\":false,\"icon\":\"fas fa-exchange-alt\",\"id\":5,\"name\":\"Veteran Trader\",\"points\":100},{\"badge_color\":\"warning\",\"category\":\"trading\",\"description\":\"Complete 50 successful trades\",\"earned\":false,\"icon\":\"fas fa-crown\",\"id\":6,\"name\":\"Trading Master\",\"points\":250},{\"badge_color\":\"info\",\"category\":\"collecting\",\"description\":\"Build an inventory of 100 cards\",\"earned\":false,\"icon\":\"fas fa-archive\",\"id\":7,\"name\":\"Collector\",\"points\":75},{\"badge_color\":\"info\",\"category\":\"collecting\",\"description\":\"Build an inventory of 500 cards\",\"earned\":false,\"icon\":\"fas fa-boxes\",\"id\":8,\"name\":\"Serious Collector\",\"points\":150},{\"badge_color\":\"warning\",\"category\":\"premium\",\"description\":\"Become a Premium member\",\"earned\":true,\"icon\":\"fas fa-gem\",\"id\":9,\"name\":\"VIP Member\",\"points\":100}],\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:23.145871Z"},"path":"/api/mobile/achievements/list","path_original":"/achievements/list","premium":false},{"Arguments":["current_user"],"Description":"Query database and return results.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, achievements: [ { id, name, progress } ] }","admin":false,"function":"mobile_achievements_summary","last_test":{"ok":true,"response_snippet":"{\"achievements\":{\"earned\":2,\"percent_complete\":22.2,\"recent\":[{\"badge_color\":\"warning\",\"earned_at\":\"2025-10-25T23:47:42.071138\",\"icon\":\"fas fa-gem\",\"id\":9,\"name\":\"VIP Member\",\"points\":100},{\"badge_color\":\"primary\",\"earned_at\":\"2025-10-25T22:28:33.222821\",\"icon\":\"fas fa-plus-circle\",\"id\":3,\"name\":\"First Steps\",\"points\":15}],\"total\":9},\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:23.156973Z"},"path":"/api/mobile/achievements/summary","path_original":"/achievements/summary","premium":false}],"admin":[{"Arguments":["current_user"],"Description":"Query database and return results.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, metrics: { users, sessions, errors } } (admin only)","admin":true,"function":"mobile_admin_analytics","last_test":{"ok":true,"response_snippet":"{\"data\":{\"api_requests_today\":0,\"daily_active_users\":0,\"database_size\":\"0MB\",\"error_rate\":\"0%\",\"monthly_revenue\":0,\"server_uptime\":\"99.9%\",\"storage_used\":\"0%\",\"total_inventory_items\":29,\"total_trades\":0,\"total_users\":6},\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:23.171497Z"},"path":"/api/mobile/admin/analytics","path_original":"/admin/analytics","premium":false},{"Arguments":["current_user"],"Description":"","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, flagged: [ { id, type, reason } ] } (admin only)","admin":true,"function":"mobile_admin_flagged_content","last_test":{"ok":true,"response_snippet":"{\"data\":{\"content\":[]},\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:23.174407Z"},"path":"/api/mobile/admin/content/flagged","path_original":"/admin/content/flagged","premium":false},{"Arguments":["current_user"],"Description":"Query database and return results.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, dashboard: { jobs, flags, recent_reports } } (admin only)","admin":true,"function":"mobile_admin_dashboard","last_test":{"ok":true,"response_snippet":"{\"data\":{\"content_management\":{\"flagged_content\":0,\"pending_reports\":0,\"total_inventory_items\":29},\"system_status\":{\"database_status\":\"connected\",\"last_backup\":null,\"server_status\":\"online\"},\"user_management\":{\"active_users\":0,\"banned_users\":0,\"total_users\":6}},\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:23.177770Z"},"path":"/api/mobile/admin/dashboard","path_original":"/admin/dashboard","premium":false},{"Arguments":["current_user"],"Description":"Get machine-readable API documentation in JSON format.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, jobs: [ { id, name, status, started_at } ] } (admin only)","admin":true,"function":"mobile_admin_jobs","last_test":{"ok":true,"response_snippet":"\ufeff<!DOCTYPE html>\n<html lang=\"en\" data-bs-theme=\"dark\" >\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta http-equiv=\"Cache-Control\" content=\"no-cache, no-store, must-revalidate\">\n    <meta http-equiv=\"Pragma\" content=\"no-cache\">\n    <meta http-equiv=\"Expires\" content=\"0\">\n    <title>Background Jobs</title>\n    \n    <!-- Bootstrap CSS -->\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <!-- Font Awesome -->\n    <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css\">\n    <!-- Custom CSS with cache busting -->\n    <link rel=\"stylesheet\" href=\"/static/css/style.css?v=20250901c\">\n    <link rel=\"stylesheet\" href=\"/static/css/tcg-dark-theme.css?v=20250817b\">\n    <style>\n    /* PRO badge: single smooth yellow\u2192pink gradient, gem icon */\n    .badge-pro {\n        display: inline-flex;\n        align-items: center;\n        gap: 0.35rem;\n        background: linear-gradient(90deg, #ff69b4 0%, #ffd700 100%);\n        color: #000000;\n        font-weight: 700;\n        font-size: 0.75rem;\n        padding: 0.25rem 0.6rem;\n        border-radius: 0.375rem;\n        letter-spacing: 0.02em;\n        line-height: 1;\n        background-clip: padding-box;\n        border: none;\n        vertical-align: middle;\n    }\n\n    .badge-pro .fa-gem {\n        font-size: 0.85em;\n        line-height: 1;\n        color: #000000;\n    }\n\n    /* Lifetime badge: solid yellow, white text, gem on each side */\n    .badge-lifetime {\n        display: inline-flex;\n        align-items: center;\n        gap: 0.35rem;\n        background: #ffd700;\n        color: #fff;\n        font-weight: 700;\n        font-size: 0.75rem;\n        padding: 0.25rem 0.6rem;\n        border-radius: 0.375rem;\n        letter-spacing: 0.02em;\n        line-height: 1;\n        box-shadow: 0 4px 18px rgba(0,0,0,0.22), i...","status_code":200,"tested_at":"2025-10-26T01:11:23.536017Z"},"path":"/admin/jobs","premium":false},{"Arguments":["current_user"],"Description":"","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, reports: [ { id, title, status } ] } (admin only)","admin":true,"function":"mobile_admin_reports","last_test":{"ok":true,"response_snippet":"{\"data\":{\"reports\":[]},\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:23.538834Z"},"path":"/api/mobile/admin/reports","path_original":"/admin/reports","premium":false},{"Arguments":["current_user"],"Description":"Query database and return results.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, roles: [ { id, name, permissions } ] } (admin only)","admin":true,"function":"mobile_admin_roles","last_test":{"ok":true,"response_snippet":"{\"data\":{\"admins\":[{\"email\":\"redacted@example.com\",\"granted_at\":\"2025-09-05T10:11:20.868992\",\"id\":2,\"role\":\"super_admin\",\"username\":\"Kairi\"},{\"email\":\"\",\"granted_at\":\"2025-10-25T21:56:50.308818\",\"id\":7,\"role\":\"super_admin\",\"username\":\"api_test_user\"}]},\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:23.544216Z"},"path":"/api/mobile/admin/roles","path_original":"/admin/roles","premium":false},{"Arguments":["current_user"],"Description":"","Method":"POST","Other notes":"Requires authentication.","Returns":"{ ok: True, maintenance_enabled: True|False } (admin only)","admin":true,"function":"mobile_admin_toggle_maintenance","last_test":{"ok":true,"response_snippet":"{\"message\":\"Maintenance mode setting updated\",\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:23.546531Z"},"path":"/api/mobile/admin/system/maintenance","path_original":"/admin/system/maintenance","premium":false},{"Arguments":["current_user"],"Description":"","Method":"POST","Other notes":"Requires authentication.","Returns":"{ ok: True, registration_open: True|False } (admin only)","admin":true,"function":"mobile_admin_toggle_registration","last_test":{"ok":true,"response_snippet":"{\"message\":\"Registration setting updated\",\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:23.548894Z"},"path":"/api/mobile/admin/system/registration","path_original":"/admin/system/registration","premium":false},{"Arguments":["current_user"],"Description":"","Method":"POST","Other notes":"Requires authentication.","Returns":"{ ok: True, trades: [ { id, summary } ], filters?: { games, sets } }","admin":true,"function":"mobile_admin_toggle_trading","last_test":{"ok":true,"response_snippet":"{\"message\":\"Trading system setting updated\",\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:23.551173Z"},"path":"/api/mobile/admin/system/trading","path_original":"/admin/system/trading","premium":false},{"Arguments":["current_user"],"Description":"Manage or list trades.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, trades: [ { id, status, user } ] } (admin only)","admin":true,"function":"mobile_admin_trades","last_test":{"ok":true,"response_snippet":"{\"data\":{\"trades\":[]},\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:23.553406Z"},"path":"/api/mobile/admin/trades","path_original":"/admin/trades","premium":false},{"Arguments":["current_user"],"Description":"Query database and return results.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, users: [ { id, username, banned? } ] } (admin only)","admin":true,"function":"mobile_admin_users","last_test":{"ok":true,"response_snippet":"{\"data\":{\"has_next\":false,\"page\":1,\"per_page\":50,\"total\":6,\"users\":[{\"email\":\"redacted@example.com\",\"id\":8,\"is_verified\":false,\"last_login\":null,\"registration_date\":\"2025-10-25T22:19:45.263508\",\"trade_count\":0,\"username\":\"api_test_partner\"},{\"email\":\"\",\"id\":7,\"is_verified\":false,\"last_login\":null,\"registration_date\":\"2025-10-25T21:56:50.308818\",\"trade_count\":0,\"username\":\"api_test_user\"},{\"email\":\"redacted@example.com\",\"id\":6,\"is_verified\":false,\"last_login\":null,\"registration_date\":\"2025-10-14T14:51:39.390047\",\"trade_count\":0,\"username\":\"GoogleUserCreationTest\"},{\"email\":\"redacted@example.com\",\"id\":5,\"is_verified\":false,\"last_login\":null,\"registration_date\":\"2025-09-09T02:32:06.856388\",\"trade_count\":0,\"username\":\"cavelepus\"},{\"email\":\"redacted@example.com\",\"id\":3,\"is_verified\":false,\"last_login\":null,\"registration_date\":\"2025-09-05T14:54:56.126355\",\"trade_count\":0,\"username\":\"tester\"},{\"email\":\"redacted@example.com\",\"id\":2,\"is_verified\":false,\"last_login\":null,\"registration_date\":\"2025-09-05T10:11:20.868992\",\"trade_count\":0,\"username\":\"Kairi\"}]},\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:23.559855Z"},"path":"/api/mobile/admin/users","path_original":"/admin/users","premium":false},{"Arguments":["current_user","user_id"],"Description":"Query database and return results.","Method":"POST","Other notes":"Requires authentication.","Returns":"message","admin":true,"function":"mobile_admin_ban_user","last_test":{"ok":false,"response_snippet":"<!doctype html>\n<html lang=en>\n<title>404 Not Found</title>\n<h1>Not Found</h1>\n<p>The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.</p>\n","status_code":404,"tested_at":"2025-10-26T01:11:23.568230Z"},"path":"/admin/users/<int:user_id>/ban","premium":false,"request_example":{"user":"test"}},{"Arguments":["current_user","user_id"],"Description":"Query database and return results.","Method":"POST","Other notes":"Requires authentication.","Returns":"message","admin":true,"function":"mobile_admin_unban_user","last_test":{"ok":false,"response_snippet":"<!doctype html>\n<html lang=en>\n<title>404 Not Found</title>\n<h1>Not Found</h1>\n<p>The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.</p>\n","status_code":404,"tested_at":"2025-10-26T01:11:23.576427Z"},"path":"/admin/users/<int:user_id>/unban","premium":false,"request_example":{"user":"test"}},{"Arguments":["current_user"],"Description":"","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, users: [ { id, username, ban_reason } ] } (admin only)","admin":true,"function":"mobile_admin_banned_users","last_test":{"ok":true,"response_snippet":"{\"data\":{\"users\":[]},\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:23.578999Z"},"path":"/api/mobile/admin/users/banned","path_original":"/admin/users/banned","premium":false}],"alerts":[{"Arguments":[],"Description":"","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, alerts: [ { id, type, message, created_at } ], total: <int> }","admin":false,"function":"mobile_alerts_unread","last_test":{"ok":true,"response_snippet":"{\"ok\":true,\"unread\":2}\n","status_code":200,"tested_at":"2025-10-26T01:11:23.584774Z"},"path":"/api/mobile/alerts/unread","path_original":"/alerts/unread","premium":false}],"base_url":"https://www.tcgtraders.app/","cards":[{"Arguments":["current_user"],"Description":"Get detailed card information for mobile.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, card: { productId, name, images: [...], prices: {...} } }","admin":false,"function":"mobile_card_detail","last_test":{"ok":false,"response_snippet":"{\"error\":\"id_required\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:23.588689Z"},"path":"/cards/detail","premium":false,"request_example":{"card":"test","product_id":1,"unique_id":1}},{"Arguments":["current_user"],"Description":"Export cards data for mobile user.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, download_url, meta: { total_rows } }","admin":false,"function":"mobile_cards_export","last_test":{"ok":false,"response_snippet":"{\"error\":\"export_unavailable\",\"ok\":false}\n","status_code":503,"tested_at":"2025-10-26T01:11:23.595485Z"},"path":"/cards/export","premium":false,"request_example":{"built":"test"}},{"Arguments":["current_user"],"Description":"Get metadata for card export functionality.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, meta: { columns, total_rows } }","admin":false,"function":"mobile_cards_export_meta","last_test":{"ok":false,"response_snippet":"{\"error\":\"export_unavailable\",\"ok\":false}\n","status_code":503,"tested_at":"2025-10-26T01:11:23.599408Z"},"path":"/cards/export/meta","premium":false,"request_example":{"built":"test"}},{"Arguments":[],"Description":"","Method":"GET","Other notes":"Requires authentication.Rate-limited.","Returns":"count, error, game, last_modified, ok, product_ids","admin":false,"function":"mobile_images_manifest","last_test":{"ok":false,"response_snippet":"{\"error\":\"product_id_required\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:23.603360Z"},"path":"/cards/image/debug","premium":false,"request_example":{"pid":1,"product_id":1}},{"Arguments":["current_user"],"Description":"Image bootstrap / manifest endpoints for client caching.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, images: [ { productId, url, quality? } ] }","admin":false,"function":"mobile_card_images","last_test":{"ok":true,"response_snippet":"{\"images\":{},\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:23.605792Z"},"path":"/api/mobile/cards/images","path_original":"/cards/images","premium":false},{"Arguments":["current_user"],"Description":"Get detailed information for a specific card by product ID.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, card: { productId, name, image_url } }","admin":false,"function":"mobile_random_card","last_test":{"ok":true,"response_snippet":"{\"data\":{\"game\":\"Yu-Gi-Oh!\",\"image_url\":\"/static/images/cards/dark_magician.jpg\",\"name\":\"Dark Magician\",\"set\":\"Legend of Blue Eyes\"},\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:23.608207Z"},"path":"/api/mobile/cards/random","path_original":"/cards/random","premium":false},{"Arguments":["current_user"],"Description":"Get card store status for mobile.","Method":"GET","Other notes":"Requires authentication.","Returns":"cards, error, games, loaded, message, ok","admin":false,"function":"mobile_card_store_status","last_test":{"ok":true,"response_snippet":"{\"cards\":548199,\"games\":0,\"loaded\":true,\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:24.921418Z"},"path":"/api/mobile/cards/store_status","path_original":"/cards/store_status","premium":false}],"changes":[{"Arguments":["current_user"],"Description":"Get recent changes for mobile user.","Method":"GET","Other notes":"Requires authentication.","Returns":"changes, entity, error, has_more, next_since_id, ok","admin":false,"function":"mobile_changes","last_test":{"ok":true,"response_snippet":"{\"changes\":[{\"entity\":\"notification\",\"entity_id\":\"1\",\"id\":1,\"op\":\"update\",\"updated_at\":\"2025-10-01T00:54:50.177829Z\"},{\"entity\":\"notification\",\"entity_id\":\"2\",\"id\":2,\"op\":\"update\",\"updated_at\":\"2025-10-01T00:54:50.178117Z\"},{\"entity\":\"notification\",\"entity_id\":\"3\",\"id\":3,\"op\":\"update\",\"updated_at\":\"2025-10-01T00:54:50.178251Z\"},{\"entity\":\"notification\",\"entity_id\":\"5\",\"id\":4,\"op\":\"update\",\"updated_at\":\"2025-10-01T00:54:50.178363Z\"},{\"entity\":\"notification\",\"entity_id\":\"8\",\"id\":5,\"op\":\"update\",\"updated_at\":\"2025-10-01T00:54:50.178470Z\"},{\"entity\":\"trade\",\"entity_id\":\"1\",\"id\":6,\"op\":\"update\",\"updated_at\":\"2025-10-25T23:47:46.716915Z\"},{\"entity\":\"trade\",\"entity_id\":\"1\",\"id\":7,\"op\":\"update\",\"updated_at\":\"2025-10-25T23:49:37.004849Z\"},{\"entity\":\"trade\",\"entity_id\":\"1\",\"id\":8,\"op\":\"update\",\"updated_at\":\"2025-10-25T23:58:29.458469Z\"}],\"entity\":null,\"has_more\":false,\"next_since_id\":8,\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:24.939295Z"},"path":"/api/mobile/changes","path_original":"/changes","premium":false}],"collection":[{"Arguments":["current_user"],"Description":"Get collection summary for mobile user.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, summary: { total_items, total_value, top_games: [...] } }","admin":false,"function":"mobile_collection_summary","last_test":{"ok":true,"response_snippet":"{\"ok\":true,\"summary\":{\"for_trade_distinct\":0,\"owned_distinct\":1,\"total_records\":1,\"wanted_distinct\":0}}\n","status_code":200,"tested_at":"2025-10-26T01:11:24.950316Z"},"path":"/api/mobile/collection/summary","path_original":"/collection/summary","premium":false}],"contact":[{"Arguments":[],"Description":"","Method":"GET","Other notes":"Requires authentication.","Returns":"email, feature, ok, placeholder","admin":false,"function":"mobile_contact_info","last_test":{"ok":true,"response_snippet":"{\"email\":\"redacted@example.com\",\"feature\":\"contact\",\"ok\":true,\"placeholder\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:24.952640Z"},"path":"/api/mobile/contact/info","path_original":"/contact/info","premium":false}],"data":[{"Arguments":[],"Description":"","Method":"GET","Other notes":"Requires authentication.","Returns":"json (ok: bool, ...)","admin":false,"function":"mobile_data_bootstrap","last_test":{"ok":true,"response_snippet":"{\"games\":[],\"ok\":true,\"rarities\":[],\"sets\":[]}\n","status_code":200,"tested_at":"2025-10-26T01:11:24.954919Z"},"path":"/api/mobile/data/bootstrap","path_original":"/data/bootstrap","premium":false}],"db":[{"Arguments":["current_user"],"Description":"Database snapshot/version endpoints (admin-only download).","Method":"GET","Other notes":"Requires authentication.","Returns":"File download (sqlite or zip) or 404","admin":true,"function":"mobile_db_download","last_test":{"ok":true,"response_snippet":"<binary 1853547 bytes: 504b03041400000008006ba9595b12fad859e5471c0000c07200120000006d6f62696c655f736e617073686f742e6462ec7d099c1c47757e1f73ecec6a777c89...>","status_code":200,"tested_at":"2025-10-26T01:11:25.520443Z"},"path":"/api/mobile/db/download","path_original":"/db/download","premium":false},{"Arguments":["current_user"],"Description":"Database snapshot/version endpoints (admin-only download).","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, version: <str> , generated_at?: <ts> }","admin":false,"function":"mobile_db_version","last_test":{"ok":true,"response_snippet":"{\"db_version\":1761455485,\"download_url\":\"https://localhost/api/mobile/db/download\",\"ok\":true,\"sha256\":\"97a5c8580ab4d2863f2dd54c30bec536410d771e0926bc16b78177ecd96a8dda\",\"size_bytes\":1853547,\"updated_at\":\"2025-10-26T01:11:25.426560Z\"}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.592458Z"},"path":"/api/mobile/db/version","path_original":"/db/version","premium":false}],"debug":[{"Arguments":[],"Description":"Local debug endpoint used by wishlist debug toolbar. Returns a simple JSON payload and logs the remote address.","Method":"GET, POST","Other notes":"DEV only. Not intended for public use \u2014 keep restricted to local/dev environments and remove before production deployment.","Returns":"{ ok: True }","admin":false,"function":"_local_debug_ping","last_test":{"ok":true,"response_snippet":"{\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:23.119719Z"},"path":"/_local_debug_ping","premium":false}],"dm":[{"Arguments":["current_user"],"Description":"Send or list direct messages / message threads.","Method":"POST","Other notes":"Requires authentication.","Returns":"{ ok: True, message_id }","admin":false,"function":"mobile_dm_send","last_test":{"ok":false,"response_snippet":"{\"error\":\"username_and_content_required\",\"message\":\"Recipient username and content required.\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:25.597000Z"},"path":"/dm/send","premium":false,"request_example":{"content":"Hello from api_test_user","subject":"Test","username":"api_test_partner"}}],"friend_requests":[{"Arguments":["current_user"],"Description":"Cancel friend request from mobile.","Method":"POST","Other notes":"Requires authentication.","Returns":"error, message, ok","admin":false,"function":"mobile_friend_request_cancel","last_test":{"ok":false,"response_snippet":"{\"error\":\"username_or_id_required\",\"message\":\"username or id required.\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:25.601169Z"},"path":"/friend_requests/cancel","premium":false,"request_example":{"id":2}},{"Arguments":["current_user"],"Description":"Query database and return results.","Method":"GET","Other notes":"Requires authentication.","Returns":"created_at, error, from_id, id, incoming, message, ok, outgoing, status, to_id","admin":false,"function":"mobile_friend_requests_list","last_test":{"ok":true,"response_snippet":"{\"incoming\":[],\"ok\":true,\"outgoing\":[{\"created_at\":\"2025-10-25T22:27:41.540119Z\",\"from_id\":7,\"id\":2,\"status\":\"pending\",\"to_id\":8}]}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.607153Z"},"path":"/api/mobile/friend_requests/list","path_original":"/friend_requests/list","premium":false},{"Arguments":["current_user"],"Description":"Respond to friend request (legacy).","Method":"POST","Other notes":"Requires authentication.","Returns":"error, message, ok","admin":false,"function":"mobile_friend_request_respond_legacy","last_test":{"ok":false,"response_snippet":"{\"error\":\"invalid_parameters\",\"message\":\"id and valid action required.\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:25.611341Z"},"path":"/friend_requests/respond","premium":false,"request_example":{"action":"accept","id":2}},{"Arguments":["current_user"],"Description":"Send friend request (legacy endpoint).","Method":"POST","Other notes":"Requires authentication.","Returns":"error, id, message, ok","admin":false,"function":"mobile_friend_request_send_legacy","last_test":{"ok":false,"response_snippet":"{\"error\":\"username_required\",\"message\":\"Username required.\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:25.615463Z"},"path":"/friend_requests/send","premium":false,"request_example":{"username":"api_test_partner"}}],"friends":[{"Arguments":["current_user"],"Description":"Query database and return results.","Method":"GET","Other notes":"Requires authentication.Rate-limited.","Returns":"{ ok: True, friends: [ { id, username, avatar_url } ] }","admin":false,"function":"mobile_friends_list","last_test":{"ok":true,"response_snippet":"{\"friends\":[{\"avatar\":null,\"id\":8,\"since\":\"2025-10-25T23:57:50.017023\",\"username\":\"api_test_partner\"}],\"has_more\":false,\"limit\":50,\"next_offset\":null,\"offset\":0,\"ok\":true,\"total\":1}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.625158Z"},"path":"/api/mobile/friends/list","path_original":"/friends/list","premium":false},{"Arguments":["current_user"],"Description":"Get friend requests for mobile user.","Method":"GET","Other notes":"Requires authentication.","Returns":"direction, has_more, limit, next_offset, offset, requests, status_filter, total","admin":false,"function":"mobile_friend_requests_list_alt","last_test":{"ok":true,"response_snippet":"{\"direction\":\"all\",\"has_more\":false,\"limit\":50,\"next_offset\":null,\"offset\":0,\"ok\":true,\"requests\":[{\"created_at\":\"2025-10-25T22:27:41.540119\",\"id\":2,\"is_incoming\":false,\"is_outgoing\":true,\"receiver_id\":8,\"sender_id\":7,\"status\":\"pending\"}],\"status_filter\":\"pending\",\"total\":1}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.631354Z"},"path":"/api/mobile/friends/requests","path_original":"/friends/requests","premium":false},{"Arguments":["current_user"],"Description":"Respond to friend request from mobile.","Method":"POST","Other notes":"Requires authentication.","Returns":"{ ok: True, status }","admin":false,"function":"mobile_friend_request_respond","last_test":{"ok":false,"response_snippet":"{\"error\":\"invalid_payload\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:25.635442Z"},"path":"/friends/requests/respond","premium":false,"request_example":{"action":"test","fr":"test","request_id":1,"user":"test"}},{"Arguments":["current_user"],"Description":"Send friend request from mobile.","Method":"POST","Other notes":"Requires authentication.","Returns":"{ ok: True, request_id }","admin":false,"function":"mobile_friend_request_send","last_test":{"ok":false,"response_snippet":"{\"error\":\"username_required\",\"message\":\"Username required\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:25.639916Z"},"path":"/friends/requests/send","premium":false,"request_example":{"target":"test","target_username":"test","user":"test","username":"test"}},{"Arguments":["current_user"],"Description":"Get friends summary for mobile user.","Method":"GET","Other notes":"Requires authentication.","Returns":"error, friends, ok, outgoing, pending","admin":false,"function":"mobile_friends_summary","last_test":{"ok":true,"response_snippet":"{\"friends\":1,\"ok\":true,\"outgoing\":1,\"pending\":0}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.648850Z"},"path":"/api/mobile/friends/summary","path_original":"/friends/summary","premium":false}],"health":[{"Arguments":[],"Description":"Query database and return results.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True }","admin":false,"function":"mobile_health_report","last_test":{"ok":true,"response_snippet":"{\"auth\":true,\"card_store_loaded\":false,\"friends_count\":1,\"ok\":true,\"unread_messages\":0,\"unread_notifications\":2}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.656545Z"},"path":"/api/mobile/health/report","path_original":"/health/report","premium":false}],"images":[{"Arguments":["current_user"],"Description":"Image bootstrap / manifest endpoints for client caching.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, generated_at, images: [ { path, url, size?, hash? } ] }","admin":false,"function":"mobile_images_bootstrap","last_test":{"ok":true,"response_snippet":"{\"generated_at\":1761441085,\"images\":[],\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.659317Z"},"path":"/api/mobile/images/bootstrap","path_original":"/images/bootstrap","premium":false},{"Arguments":[],"Description":"Image bootstrap / manifest endpoints for client caching.","Method":"POST","Other notes":"Requires authentication.","Returns":"{ ok: True, jobs_enqueued: <int> }","admin":false,"function":"mobile_images_prefetch","last_test":{"ok":true,"response_snippet":"{\"ok\":true,\"provided\":0,\"requested\":null,\"to_fetch\":{}}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.661539Z"},"path":"/api/mobile/images/prefetch","path_original":"/images/prefetch","premium":false},{"Arguments":["product_id"],"Description":"Image bootstrap / manifest endpoints for client caching.","Method":"GET","Other notes":"","Returns":"file (attachment)","admin":false,"function":"mobile_card_image_direct","last_test":{"ok":true,"response_snippet":"{\"direct_url\":\"/api/mobile/cards/image/direct/1\",\"extension\":\"jpg\",\"filename\":\"1.jpg\",\"ok\":true,\"product_id\":\"1\",\"quality\":\"LQ\",\"size\":29,\"url_https\":\"https://localhost/static/LQ/1.jpg\"}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.664268Z"},"path":"/api/mobile/images/simple/1","path_original":"/images/simple/<product_id>","premium":false}],"import":[{"Arguments":["current_user"],"Description":"","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, jobs: [...] }","admin":false,"function":"mobile_import_status","last_test":{"ok":true,"response_snippet":"{\"data\":{\"last_import\":{\"count\":250,\"date\":\"2025-09-15\",\"status\":\"completed\"}},\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.666543Z"},"path":"/api/mobile/import/status","path_original":"/import/status","premium":false},{"Arguments":["current_user"],"Description":"","Method":"POST","Other notes":"Requires authentication.","Returns":"{ ok: True, job_id } or error","admin":false,"function":"mobile_import_tcgcsv","last_test":{"ok":false,"response_snippet":"{\"error\":\"missing_url\",\"message\":\"Import URL is required\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:25.670456Z"},"path":"/import/tcgcsv","premium":false,"request_example":{"url":"https://example.com/import.csv"}}],"inventory":[{"Arguments":["current_user"],"Description":"Add items to user inventory.","Method":"POST","Other notes":"Requires authentication.","Returns":"{ ok: True, item_id }","admin":false,"function":"mobile_inventory_add_intercept","last_test":{"ok":false,"response_snippet":"{\"message\":\"UniqueID required\",\"success\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:25.679520Z"},"path":"/inventory/add","premium":true,"request_example":{"condition":"Near Mint","quantity":1,"unique_id":"1"}},{"Arguments":[],"Description":"Inventory/Wishlist related endpoint: /inventory/import/status","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, jobs: [...] }","admin":false,"function":"mobile_inventory_import_status","last_test":{"ok":true,"response_snippet":"{\"feature\":\"inventory_import_status\",\"jobs\":[],\"ok\":true,\"placeholder\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.681864Z"},"path":"/api/mobile/inventory/import/status","path_original":"/inventory/import/status","premium":false},{"Arguments":["current_user"],"Description":"Inventory/Wishlist related endpoint: /inventory/item/update","Method":"POST","Other notes":"Requires authentication.","Returns":"{ ok: True, updated_item: { id, qty, condition } }","admin":false,"function":"mobile_inventory_item_update","last_test":{"ok":false,"response_snippet":"{\"error\":\"id_required\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:25.685814Z"},"path":"/inventory/item/update","premium":false,"request_example":{"id":316,"owned":1}},{"Arguments":["current_user"],"Description":"Get mobile inventory items.","Method":"GET","Other notes":"Requires authentication.Rate-limited.","Returns":"{ ok: True, items: [ { id, unique_id, quantity, condition } ], total: <int> }","admin":false,"function":"mobile_inventory_items","last_test":{"ok":true,"response_snippet":"{\"count\":1,\"has_more\":false,\"items\":[{\"for_trade\":0,\"game\":\"Unknown Game\",\"id\":316,\"image_url\":null,\"name\":\"1\",\"owned\":1,\"productId\":\"1\",\"rarity\":\"Unknown\",\"set\":\"Unknown Set\",\"unique_id\":\"1\",\"updated_at\":\"2025-10-25T22:27:41.480570\",\"wanted\":0}],\"limit\":50,\"next_offset\":null,\"offset\":0,\"ok\":true,\"total\":1}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.692422Z"},"path":"/api/mobile/inventory/items","path_original":"/inventory/items","premium":false},{"Arguments":["current_user"],"Description":"Return paginated list of items for the user.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, items: [ { id, productId, unique_id, qty } ], total: <int> }","admin":false,"function":"mobile_inventory_list_alias","last_test":{"ok":true,"response_snippet":"{\"count\":1,\"has_more\":false,\"items\":[{\"for_trade\":0,\"game\":\"Unknown Game\",\"id\":316,\"image_url\":null,\"name\":\"1\",\"owned\":1,\"productId\":\"1\",\"rarity\":\"Unknown\",\"set\":\"Unknown Set\",\"unique_id\":\"1\",\"updated_at\":\"2025-10-25T22:27:41.480570\",\"wanted\":0}],\"limit\":50,\"next_offset\":null,\"offset\":0,\"ok\":true,\"total\":1}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.696334Z"},"path":"/api/mobile/inventory/list","path_original":"/inventory/list","premium":false},{"Arguments":["current_user"],"Description":"Return aggregated summary for user inventory/wishlist/collection.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, total_items, total_value, top_games: [...] }","admin":false,"function":"mobile_inventory_summary","last_test":{"ok":true,"response_snippet":"{\"inventory\":{\"last_updated\":\"2025-10-25T22:27:41.480570\",\"total_for_trade\":0,\"total_inventory\":1,\"total_owned\":1,\"total_wanted\":0,\"unique_cards\":1},\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.700256Z"},"path":"/api/mobile/inventory/summary","path_original":"/inventory/summary","premium":false}],"legal":[{"Arguments":[],"Description":"","Method":"GET","Other notes":"Requires authentication.","Returns":"feature, ok, pages, placeholder","admin":false,"function":"mobile_legal_pages","last_test":{"ok":true,"response_snippet":"{\"feature\":\"legal_pages\",\"ok\":true,\"pages\":[],\"placeholder\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.702505Z"},"path":"/api/mobile/legal/pages","path_original":"/legal/pages","premium":false}],"login":[{"Arguments":[],"Description":"Mobile login using username/password credentials.","Method":"POST","Other notes":"Requires authentication.","Returns":"{ ok: True, access_token, access_expires_in, refresh_token, refresh_expires_in }","admin":false,"function":"mobile_login_google","last_test":{"ok":true,"response_snippet":"<!doctype html>\n<html lang=en>\n<title>Redirecting...</title>\n<h1>Redirecting...</h1>\n<p>You should be redirected automatically to the target URL: <a href=\"/\">/</a>. If not, click the link.\n","status_code":302,"tested_at":"2025-10-26T01:11:25.704549Z"},"path":"/login","premium":false}],"messages":[{"Arguments":["current_user"],"Description":"Send or list direct messages / message threads.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, messages: [...], total: <int> }","admin":false,"function":"mobile_messages_list","last_test":{"ok":true,"response_snippet":"{\"has_more\":false,\"items\":[{\"created_at\":\"2025-10-25T23:57:49.989201\",\"id\":18,\"is_unread\":false,\"receiver\":\"api_test_partner\",\"root_id\":17,\"sender\":\"api_test_user\",\"snippet\":\"Thanks, received\",\"subject\":\"(no subject)\"},{\"created_at\":\"2025-10-25T23:47:26.766280\",\"id\":16,\"is_unread\":false,\"receiver\":\"api_test_partner\",\"root_id\":15,\"sender\":\"api_test_user\",\"snippet\":\"Thanks, received\",\"subject\":\"(no subject)\"},{\"created_at\":\"2025-10-25T22:50:49.470539\",\"id\":14,\"is_unread\":false,\"receiver\":\"api_test_partner\",\"root_id\":13,\"sender\":\"api_test_user\",\"snippet\":\"Thanks, received\",\"subject\":\"(no subject)\"},{\"created_at\":\"2025-10-25T22:45:47.340494\",\"id\":12,\"is_unread\":false,\"receiver\":\"api_test_partner\",\"root_id\":11,\"sender\":\"api_test_user\",\"snippet\":\"Thanks, received\",\"subject\":\"(no subject)\"},{\"created_at\":\"2025-10-25T22:44:03.760136\",\"id\":10,\"is_unread\":false,\"receiver\":\"api_test_partner\",\"root_id\":9,\"sender\":\"api_test_user\",\"snippet\":\"Thanks, received\",\"subject\":\"(no subject)\"},{\"created_at\":\"2025-10-25T22:38:59.625877\",\"id\":8,\"is_unread\":false,\"receiver\":\"api_test_partner\",\"root_id\":7,\"sender\":\"api_test_user\",\"snippet\":\"Thanks, received\",\"subject\":\"(no subject)\"},{\"created_at\":\"2025-10-25T22:30:37.002957\",\"id\":6,\"is_unread\":false,\"receiver\":\"api_test_partner\",\"root_id\":5,\"sender\":\"api_test_user\",\"snippet\":\"Thanks, received\",\"subject\":\"(no subject)\"},{\"created_at\":\"2025-10-25T22:27:41.528349\",\"id\":4,\"is_unread\":false,\"receiver\":\"api_test_partner\",\"root_id\":3,\"sender\":\"api_test_user\",\"snippet\":\"Thanks, received\",\"subject\":\"(no subject)\"},{\"created_at\":\"2025-10-25T22:19:45.353193\",\"id\":2,\"is_unread\":false,\"receiver\":\"api_test_partner\",\"root_id\":1,\"sender\":\"api_test_user\",\"snippet\":\"Thanks, received\",\"subject\":\"(no subject)\"}],\"next_cursor\":null,\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.710949Z"},"path":"/api/mobile/messages/list","path_original":"/messages/list","premium":false},{"Arguments":[],"Description":"Send or list direct messages / message threads.","Method":"POST","Other notes":"Requires authentication.","Returns":"body: { ids: [int] } (POST)","admin":false,"function":"mobile_messages_mark_read","last_test":{"ok":true,"response_snippet":"{\"ok\":true,\"updated\":0}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.714700Z"},"path":"/api/mobile/messages/mark_read","path_original":"/messages/mark_read","premium":false},{"Arguments":["current_user"],"Description":"Send or list direct messages / message threads.","Method":"POST","Other notes":"Requires authentication.","Returns":"body: { to, subject?, content } (POST)","admin":false,"function":"mobile_messages_send","last_test":{"ok":false,"response_snippet":"{\"error\":\"username_and_content_required\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:25.718657Z"},"path":"/messages/send","premium":false,"request_example":{"content":"Hello from api_test_user","subject":"Test","to":"api_test_partner"}},{"Arguments":["current_user"],"Description":"Send or list direct messages / message threads.","Method":"GET","Other notes":"Requires authentication.","Returns":"None (GET, auth)","admin":false,"function":"mobile_messages_summary","last_test":{"ok":true,"response_snippet":"{\"messages\":{\"threads\":[{\"created_at\":\"2025-10-25T23:57:49.989201\",\"id\":18,\"is_unread\":false,\"receiver\":\"api_test_partner\",\"root_id\":17,\"sender\":\"api_test_user\",\"snippet\":\"Thanks, received\",\"subject\":\"(no subject)\"},{\"created_at\":\"2025-10-25T23:47:26.766280\",\"id\":16,\"is_unread\":false,\"receiver\":\"api_test_partner\",\"root_id\":15,\"sender\":\"api_test_user\",\"snippet\":\"Thanks, received\",\"subject\":\"(no subject)\"},{\"created_at\":\"2025-10-25T22:50:49.470539\",\"id\":14,\"is_unread\":false,\"receiver\":\"api_test_partner\",\"root_id\":13,\"sender\":\"api_test_user\",\"snippet\":\"Thanks, received\",\"subject\":\"(no subject)\"},{\"created_at\":\"2025-10-25T22:45:47.340494\",\"id\":12,\"is_unread\":false,\"receiver\":\"api_test_partner\",\"root_id\":11,\"sender\":\"api_test_user\",\"snippet\":\"Thanks, received\",\"subject\":\"(no subject)\"},{\"created_at\":\"2025-10-25T22:44:03.760136\",\"id\":10,\"is_unread\":false,\"receiver\":\"api_test_partner\",\"root_id\":9,\"sender\":\"api_test_user\",\"snippet\":\"Thanks, received\",\"subject\":\"(no subject)\"},{\"created_at\":\"2025-10-25T22:38:59.625877\",\"id\":8,\"is_unread\":false,\"receiver\":\"api_test_partner\",\"root_id\":7,\"sender\":\"api_test_user\",\"snippet\":\"Thanks, received\",\"subject\":\"(no subject)\"},{\"created_at\":\"2025-10-25T22:30:37.002957\",\"id\":6,\"is_unread\":false,\"receiver\":\"api_test_partner\",\"root_id\":5,\"sender\":\"api_test_user\",\"snippet\":\"Thanks, received\",\"subject\":\"(no subject)\"},{\"created_at\":\"2025-10-25T22:27:41.528349\",\"id\":4,\"is_unread\":false,\"receiver\":\"api_test_partner\",\"root_id\":3,\"sender\":\"api_test_user\",\"snippet\":\"Thanks, received\",\"subject\":\"(no subject)\"},{\"created_at\":\"2025-10-25T22:19:45.353193\",\"id\":2,\"is_unread\":false,\"receiver\":\"api_test_partner\",\"root_id\":1,\"sender\":\"api_test_user\",\"snippet\":\"Thanks, received\",\"subject\":\"(no subject)\"}],\"unread\":0},\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.725692Z"},"path":"/api/mobile/messages/summary","path_original":"/messages/summary","premium":false},{"Arguments":["current_user","root_id: int"],"Description":"Send or list direct messages / message threads.","Method":"GET","Other notes":"Requires authentication.","Returns":"error, messages, ok, root_id, thread","admin":false,"function":"mobile_messages_thread","last_test":{"ok":true,"response_snippet":"{\"ok\":true,\"thread\":{\"messages\":[{\"content\":\"Hello from partner\",\"created_at\":\"2025-10-25T22:19:45.334440\",\"id\":1,\"is_read\":true,\"receiver\":\"api_test_user\",\"root_id\":1,\"sender\":\"api_test_partner\",\"subject\":\"Test thread\"},{\"content\":\"Thanks, received\",\"created_at\":\"2025-10-25T22:19:45.353193\",\"id\":2,\"is_read\":false,\"receiver\":\"api_test_partner\",\"root_id\":1,\"sender\":\"api_test_user\",\"subject\":null}],\"root_id\":1}}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.732266Z"},"path":"/api/mobile/messages/thread/1","path_original":"/messages/thread/<int:root_id>","premium":false,"request_example":{"root_msg":"test","user":"test"}},{"Arguments":["current_user","root_id: int"],"Description":"Send or list direct messages / message threads.","Method":"POST","Other notes":"Requires authentication.","Returns":"error, id, message, ok","admin":false,"function":"mobile_messages_reply","last_test":{"ok":false,"response_snippet":"{\"error\":\"content_required\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:25.736360Z"},"path":"/messages/thread/<int:root_id>/reply","premium":false,"request_example":{"content":"Received, thanks"}},{"Arguments":["current_user"],"Description":"Send or list direct messages / message threads.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, threads: [...] }","admin":false,"function":"mobile_messages_threads","last_test":{"ok":true,"response_snippet":"{\"has_more\":false,\"items\":[{\"created_at\":\"2025-10-25T23:57:49.989201\",\"id\":18,\"is_unread\":false,\"receiver\":\"api_test_partner\",\"root_id\":17,\"sender\":\"api_test_user\",\"snippet\":\"Thanks, received\",\"subject\":\"(no subject)\"},{\"created_at\":\"2025-10-25T23:47:26.766280\",\"id\":16,\"is_unread\":false,\"receiver\":\"api_test_partner\",\"root_id\":15,\"sender\":\"api_test_user\",\"snippet\":\"Thanks, received\",\"subject\":\"(no subject)\"},{\"created_at\":\"2025-10-25T22:50:49.470539\",\"id\":14,\"is_unread\":false,\"receiver\":\"api_test_partner\",\"root_id\":13,\"sender\":\"api_test_user\",\"snippet\":\"Thanks, received\",\"subject\":\"(no subject)\"},{\"created_at\":\"2025-10-25T22:45:47.340494\",\"id\":12,\"is_unread\":false,\"receiver\":\"api_test_partner\",\"root_id\":11,\"sender\":\"api_test_user\",\"snippet\":\"Thanks, received\",\"subject\":\"(no subject)\"},{\"created_at\":\"2025-10-25T22:44:03.760136\",\"id\":10,\"is_unread\":false,\"receiver\":\"api_test_partner\",\"root_id\":9,\"sender\":\"api_test_user\",\"snippet\":\"Thanks, received\",\"subject\":\"(no subject)\"},{\"created_at\":\"2025-10-25T22:38:59.625877\",\"id\":8,\"is_unread\":false,\"receiver\":\"api_test_partner\",\"root_id\":7,\"sender\":\"api_test_user\",\"snippet\":\"Thanks, received\",\"subject\":\"(no subject)\"},{\"created_at\":\"2025-10-25T22:30:37.002957\",\"id\":6,\"is_unread\":false,\"receiver\":\"api_test_partner\",\"root_id\":5,\"sender\":\"api_test_user\",\"snippet\":\"Thanks, received\",\"subject\":\"(no subject)\"},{\"created_at\":\"2025-10-25T22:27:41.528349\",\"id\":4,\"is_unread\":false,\"receiver\":\"api_test_partner\",\"root_id\":3,\"sender\":\"api_test_user\",\"snippet\":\"Thanks, received\",\"subject\":\"(no subject)\"},{\"created_at\":\"2025-10-25T22:19:45.353193\",\"id\":2,\"is_unread\":false,\"receiver\":\"api_test_partner\",\"root_id\":1,\"sender\":\"api_test_user\",\"snippet\":\"Thanks, received\",\"subject\":\"(no subject)\"}],\"next_cursor\":null,\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.741803Z"},"path":"/api/mobile/messages/threads","path_original":"/messages/threads","premium":false},{"Arguments":["current_user"],"Description":"Send or list direct messages / message threads.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, unread: <int> }","admin":false,"function":"mobile_messages_unread_count","last_test":{"ok":true,"response_snippet":"{\"ok\":true,\"unread\":0}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.744827Z"},"path":"/api/mobile/messages/unread/count","path_original":"/messages/unread/count","premium":false}],"mobile":[{"Arguments":["current_user"],"Description":"Inventory/Wishlist related endpoint: /mobile/inventory/add","Method":"POST","Other notes":"Requires authentication.","Returns":"{ ok: True, item_id }","admin":false,"function":"mobile_inventory_add_compat","last_test":{"ok":false,"response_snippet":"{\"error\":\"missing_data\",\"message\":\"UniqueID is required\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:25.749253Z"},"path":"/mobile/inventory/add","premium":false,"request_example":{"condition":"Near Mint","quantity":1,"unique_id":"1"}}],"news":[{"Arguments":["current_user"],"Description":"","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, news: [ { id, title, summary, published_at } ] }","admin":false,"function":"mobile_news_list","last_test":{"ok":true,"response_snippet":"{\"data\":{\"announcements\":[],\"articles\":[],\"message\":\"News feature coming soon\"},\"has_more\":false,\"limit\":20,\"offset\":0,\"ok\":true,\"total\":0}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.751567Z"},"path":"/api/mobile/news/list","path_original":"/news/list","premium":false}],"notifications":[{"Arguments":["current_user"],"Description":"List all notifications for the current user.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, notifications: [ { id, type, message, created_at } ] }","admin":false,"function":"mobile_notifications_list","last_test":{"ok":true,"response_snippet":"{\"limit\":50,\"notifications\":[{\"content\":\"Become a Premium member\",\"created_at\":\"2025-10-25T23:47:42.099121\",\"id\":18,\"is_read\":false,\"sender_id\":null,\"subject\":\"Achievement Unlocked: VIP Member\"},{\"content\":\"Add your first card to your inventory\",\"created_at\":\"2025-10-25T22:28:33.257185\",\"id\":17,\"is_read\":false,\"sender_id\":null,\"subject\":\"Achievement Unlocked: First Steps\"}],\"offset\":0,\"ok\":true,\"total\":2}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.759734Z"},"path":"/api/mobile/notifications/list","path_original":"/notifications/list","premium":false},{"Arguments":["current_user"],"Description":"Mark mobile notifications as read.","Method":"POST","Other notes":"Requires authentication.","Returns":"{ ok: True }","admin":false,"function":"mobile_notifications_mark_read","last_test":{"ok":true,"response_snippet":"{\"ok\":true,\"updated\":0}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.763669Z"},"path":"/api/mobile/notifications/mark_read","path_original":"/notifications/mark_read","premium":false},{"Arguments":["current_user"],"Description":"Get notifications summary for mobile.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, total_unread, recent: [...] }","admin":false,"function":"mobile_notifications_summary","last_test":{"ok":true,"response_snippet":"{\"ok\":true,\"total\":2,\"unread\":2}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.767467Z"},"path":"/api/mobile/notifications/summary","path_original":"/notifications/summary","premium":false},{"Arguments":[],"Description":"Query database and return results.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, unread: <int> }","admin":false,"function":"mobile_notifications_unread_count","last_test":{"ok":true,"response_snippet":"{\"ok\":true,\"unread\":2}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.771133Z"},"path":"/api/mobile/notifications/unread/count","path_original":"/notifications/unread/count","premium":false},{"Arguments":["current_user"],"Description":"Query database and return results.","Method":"GET","Other notes":"Requires authentication.","Returns":"count, error, message, ok, unread","admin":false,"function":"mobile_unread_notifications","last_test":{"ok":true,"response_snippet":"{\"count\":2,\"ok\":true,\"unread\":[{\"content\":\"Become a Premium member\",\"created_at\":\"2025-10-25T23:47:42.099121Z\",\"id\":18,\"subject\":\"Achievement Unlocked: VIP Member\"},{\"content\":\"Add your first card to your inventory\",\"created_at\":\"2025-10-25T22:28:33.257185Z\",\"id\":17,\"subject\":\"Achievement Unlocked: First Steps\"}]}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.774924Z"},"path":"/api/mobile/notifications/unread_list","path_original":"/notifications/unread_list","premium":false}],"ping":[{"Arguments":["current_user"],"Description":"Mobile login using Google ID token.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, user?: { id, username, is_premium?, is_admin? } }","admin":false,"function":"mobile_ping","last_test":{"ok":true,"response_snippet":"{\"message\":\"pong\",\"ok\":true,\"user\":{\"id\":7,\"username\":\"api_test_user\"}}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.777202Z"},"path":"/api/mobile/ping","path_original":"/ping","premium":false}],"referrals":[{"Arguments":["current_user"],"Description":"Lookup a user's referral code by username.","Method":"GET","Other notes":"Requires authentication.","Returns":"feature, ok, placeholder, referral_code","admin":false,"function":"mobile_referrals_info","last_test":{"ok":true,"response_snippet":"{\"feature\":\"referrals\",\"ok\":true,\"placeholder\":true,\"referral_code\":null}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.779501Z"},"path":"/api/mobile/referrals/info","path_original":"/referrals/info","premium":false},{"Arguments":["current_user"],"Description":"Lookup a user's referral code by username.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, referrals: { total, converted, rewards } }","admin":false,"function":"mobile_referrals_summary","last_test":{"ok":true,"response_snippet":"{\"data\":{\"active_referrals\":0,\"join_bonus_claimed\":false,\"recent_referrals\":[],\"referral_code\":\"USER7\",\"referral_earnings\":0.0,\"total_referrals\":0},\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.781760Z"},"path":"/api/mobile/referrals/summary","path_original":"/referrals/summary","premium":false}],"refresh":[{"Arguments":["current_user"],"Description":"Refresh mobile access token using refresh token.","Method":"POST","Other notes":"Requires authentication.","Returns":"{ ok: True, access_token, access_expires_in, refresh_token, refresh_expires_in }","admin":false,"function":"mobile_logout","last_test":{"ok":false,"response_snippet":"{\"error\":\"refresh_token_required\",\"message\":\"Refresh token required.\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:25.786421Z"},"path":"/refresh","premium":false,"request_example":{"refresh_token":"test","token":"test","user":"test","user_id":1}}],"scan":[{"Arguments":["current_user"],"Description":"","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, db_version, size_bytes }","admin":false,"function":"mobile_card_scan_database_info","last_test":{"ok":true,"response_snippet":"{\"database_status\":\"unavailable\",\"last_updated\":null,\"message\":\"Hash database not found. Run hash generation script.\",\"ok\":true,\"total_cards\":0}\n","status_code":200,"tested_at":"2025-10-26T01:11:25.788798Z"},"path":"/api/mobile/scan/database-info","path_original":"/scan/database-info","premium":false},{"Arguments":["current_user"],"Description":"","Method":"POST","Other notes":"Requires authentication.Rate-limited.","Returns":"{ ok: True, matches: [ { productId, score } ] }","admin":false,"function":"mobile_card_scan_identify","last_test":{"ok":false,"response_snippet":"{\"error\":\"missing_data\",\"message\":\"No data provided\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:26.798458Z"},"path":"/scan/identify","premium":false,"request_example":{"Game":"Magic","image_data":""}}],"search":[{"Arguments":["current_user"],"Description":"Search or list card data; supports filters via query params.","Method":"POST","Other notes":"Requires authentication.","Returns":"{ ok: True, results: [...], total: <int> }","admin":false,"function":"mobile_advanced_search","last_test":{"ok":true,"response_snippet":"{\"data\":{\"filters_applied\":{\"game\":\"\",\"price_range\":[null,null],\"query\":\"\",\"rarity\":\"\",\"set\":\"\"},\"results\":[{\"available_conditions\":[\"poor\",\"played\",\"light played\",\"near mint\"],\"avg_price\":25000.0,\"game\":\"Magic: The Gathering\",\"image_url\":\"/static/images/cards/black-lotus.jpg\",\"in_inventory\":false,\"in_wishlist\":false,\"market_trend\":\"up\",\"name\":\"Black Lotus\",\"rarity\":\"Rare\",\"set\":\"Alpha\",\"unique_id\":\"MTG-001-001\"},{\"available_conditions\":[\"played\",\"light played\",\"near mint\",\"mint\"],\"avg_price\":15.0,\"game\":\"Pokemon\",\"image_url\":\"/static/images/cards/pikachu.jpg\",\"in_inventory\":false,\"in_wishlist\":true,\"market_trend\":\"stable\",\"name\":\"Pikachu\",\"rarity\":\"Common\",\"set\":\"Base Set\",\"unique_id\":\"PKM-001-025\"}],\"total\":2},\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:26.804531Z"},"path":"/api/mobile/search/advanced","path_original":"/search/advanced","premium":false},{"Arguments":["current_user"],"Description":"Search cards from mobile application.","Method":"GET","Other notes":"Requires authentication.Rate-limited.","Returns":"{ ok: True, results: [ { productId, name, image_url, price } ], total: <int> }","admin":true,"function":"mobile_search_cards","last_test":{"ok":true,"response_snippet":"{\"empty_store\":true,\"ok\":true,\"results\":[],\"total\":0}\n","status_code":200,"tested_at":"2025-10-26T01:11:26.807078Z"},"path":"/api/mobile/search/cards","path_original":"/search/cards","premium":false},{"Arguments":["current_user"],"Description":"Get search history for mobile user.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, history: [ { query, ts } ] }","admin":false,"function":"mobile_search_history","last_test":{"ok":true,"response_snippet":"{\"history\":[],\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:26.809350Z"},"path":"/api/mobile/search/history","path_original":"/search/history","premium":false},{"Arguments":["current_user"],"Description":"Get search metadata for mobile app.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, meta: { games: [...], sets: [...], rarities: [...] } }","admin":false,"function":"mobile_search_meta","last_test":{"ok":true,"response_snippet":"{\"games\":[],\"ok\":true,\"progressive\":false,\"rarities\":[],\"sets\":[]}\n","status_code":200,"tested_at":"2025-10-26T01:11:26.811694Z"},"path":"/api/mobile/search/meta","path_original":"/search/meta","premium":false},{"Arguments":["current_user"],"Description":"Search or list card data; supports filters via query params.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, queries: [ { q, count } ] }","admin":false,"function":"mobile_popular_searches","last_test":{"ok":true,"response_snippet":"{\"data\":[{\"count\":1250,\"query\":\"Magic: The Gathering\"},{\"count\":980,\"query\":\"Pokemon\"},{\"count\":750,\"query\":\"Yu-Gi-Oh!\"},{\"count\":500,\"query\":\"Charizard\"}],\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:26.813967Z"},"path":"/api/mobile/search/popular","path_original":"/search/popular","premium":false},{"Arguments":["current_user"],"Description":"List saved searches for mobile user.","Method":"GET","Other notes":"Requires authentication.Rate-limited.","Returns":"{ ok: True, saved_searches: [ { id, name, query } ] }","admin":false,"function":"mobile_saved_searches_list","last_test":{"ok":true,"response_snippet":"{\"has_more\":false,\"limit\":50,\"next_offset\":null,\"offset\":0,\"ok\":true,\"saved_searches\":[],\"total\":0}\n","status_code":200,"tested_at":"2025-10-26T01:11:26.821441Z"},"path":"/api/mobile/search/saved","path_original":"/search/saved","premium":false},{"Arguments":["current_user"],"Description":"List saved searches for mobile user.","Method":"POST","Other notes":"Requires authentication.","Returns":"{ ok: True, saved_searches: [ { id, name, query } ] }","admin":false,"function":"mobile_saved_searches_create","last_test":{"ok":false,"response_snippet":"{\"error\":\"name_required\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:26.825658Z"},"path":"/search/saved","premium":false,"request_example":{"filters":{},"name":"api_test_search_more"}},{"Arguments":["saved_id"],"Description":"Search or list card data; supports filters via query params.","Method":"DELETE","Other notes":"Requires authentication.","Returns":"deleted, error, ok","admin":false,"function":"mobile_saved_searches_delete","last_test":{"ok":false,"response_snippet":"<!doctype html>\n<html lang=en>\n<title>404 Not Found</title>\n<h1>Not Found</h1>\n<p>The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.</p>\n","status_code":404,"tested_at":"2025-10-26T01:11:26.831136Z"},"path":"/api/mobile/search/saved/1","path_original":"/search/saved/<int:saved_id>","premium":false,"request_example":{"ss":"test","user":"test"}},{"Arguments":["current_user"],"Description":"Search or list card data; supports filters via query params.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, status: { queued, last_run, errors? } }","admin":false,"function":"mobile_search_status","last_test":{"ok":true,"response_snippet":"{\"data\":{\"card_store_loaded\":false,\"message\":\"Search disabled - card data not loaded (SKIP_CARD_LOAD=1)\",\"search_available\":false,\"skip_card_load_enabled\":true,\"total_cards\":0},\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:26.833393Z"},"path":"/api/mobile/search/status","path_original":"/search/status","premium":false}],"set_completion":[{"Arguments":[],"Description":"","Method":"GET","Other notes":"Requires authentication.","Returns":"feature, ok, placeholder, sets","admin":false,"function":"mobile_set_completion_summary","last_test":{"ok":true,"response_snippet":"{\"feature\":\"set_completion_summary\",\"ok\":true,\"placeholder\":true,\"sets\":[]}\n","status_code":200,"tested_at":"2025-10-26T01:11:26.835562Z"},"path":"/api/mobile/set_completion/summary","path_original":"/set_completion/summary","premium":false}],"sets":[{"Arguments":["current_user"],"Description":"Query database and return results.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, set_code, completion_percent, total_owned }","admin":false,"function":"mobile_sets_completion_enhanced","last_test":{"ok":true,"response_snippet":"{\"data\":{\"sets\":[{\"game\":\"Magic: The Gathering\",\"id\":1,\"image_url\":\"/static/images/sets/magic_foundations.jpg\",\"name\":\"Magic Foundations\",\"owned\":45,\"total\":50,\"year\":\"2025\"},{\"game\":\"Pokemon\",\"id\":2,\"image_url\":\"/static/images/sets/pokemon_base.jpg\",\"name\":\"Pokemon Base Set\",\"owned\":102,\"total\":102,\"year\":\"1998\"},{\"game\":\"Yu-Gi-Oh!\",\"id\":3,\"image_url\":\"/static/images/sets/yugioh_lob.jpg\",\"name\":\"Yu-Gi-Oh! LOB\",\"owned\":32,\"total\":78,\"year\":\"2002\"}]},\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:26.838383Z"},"path":"/api/mobile/sets/completion","path_original":"/sets/completion","premium":false}],"settings":[{"Arguments":["current_user"],"Description":"","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, settings: { notifications, privacy, trade_defaults } }","admin":false,"function":"mobile_settings","last_test":{"ok":true,"response_snippet":"\ufeff<!DOCTYPE html>\n<html lang=\"en\" data-bs-theme=\"dark\" >\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta http-equiv=\"Cache-Control\" content=\"no-cache, no-store, must-revalidate\">\n    <meta http-equiv=\"Pragma\" content=\"no-cache\">\n    <meta http-equiv=\"Expires\" content=\"0\">\n    <title>Settings - TCG Traders</title>\n    \n    <!-- Bootstrap CSS -->\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <!-- Font Awesome -->\n    <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css\">\n    <!-- Custom CSS with cache busting -->\n    <link rel=\"stylesheet\" href=\"/static/css/style.css?v=20250901c\">\n    <link rel=\"stylesheet\" href=\"/static/css/tcg-dark-theme.css?v=20250817b\">\n    <style>\n    /* PRO badge: single smooth yellow\u2192pink gradient, gem icon */\n    .badge-pro {\n        display: inline-flex;\n        align-items: center;\n        gap: 0.35rem;\n        background: linear-gradient(90deg, #ff69b4 0%, #ffd700 100%);\n        color: #000000;\n        font-weight: 700;\n        font-size: 0.75rem;\n        padding: 0.25rem 0.6rem;\n        border-radius: 0.375rem;\n        letter-spacing: 0.02em;\n        line-height: 1;\n        background-clip: padding-box;\n        border: none;\n        vertical-align: middle;\n    }\n\n    .badge-pro .fa-gem {\n        font-size: 0.85em;\n        line-height: 1;\n        color: #000000;\n    }\n\n    /* Lifetime badge: solid yellow, white text, gem on each side */\n    .badge-lifetime {\n        display: inline-flex;\n        align-items: center;\n        gap: 0.35rem;\n        background: #ffd700;\n        color: #fff;\n        font-weight: 700;\n        font-size: 0.75rem;\n        padding: 0.25rem 0.6rem;\n        border-radius: 0.375rem;\n        letter-spacing: 0.02em;\n        line-height: 1;\n        box-shadow: 0 4px 18px rgba(0,0,0,0...","status_code":200,"tested_at":"2025-10-26T01:11:26.878373Z"},"path":"/settings","premium":true},{"Arguments":["current_user"],"Description":"","Method":"POST","Other notes":"Requires authentication.","Returns":"{ ok: True, settings: { notifications, privacy, trade_defaults } }","admin":false,"function":"mobile_settings_update","last_test":{"ok":true,"response_snippet":"\ufeff<!DOCTYPE html>\n<html lang=\"en\" data-bs-theme=\"dark\" >\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta http-equiv=\"Cache-Control\" content=\"no-cache, no-store, must-revalidate\">\n    <meta http-equiv=\"Pragma\" content=\"no-cache\">\n    <meta http-equiv=\"Expires\" content=\"0\">\n    <title>Settings - TCG Traders</title>\n    \n    <!-- Bootstrap CSS -->\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css\" rel=\"stylesheet\">\n    <!-- Font Awesome -->\n    <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css\">\n    <!-- Custom CSS with cache busting -->\n    <link rel=\"stylesheet\" href=\"/static/css/style.css?v=20250901c\">\n    <link rel=\"stylesheet\" href=\"/static/css/tcg-dark-theme.css?v=20250817b\">\n    <style>\n    /* PRO badge: single smooth yellow\u2192pink gradient, gem icon */\n    .badge-pro {\n        display: inline-flex;\n        align-items: center;\n        gap: 0.35rem;\n        background: linear-gradient(90deg, #ff69b4 0%, #ffd700 100%);\n        color: #000000;\n        font-weight: 700;\n        font-size: 0.75rem;\n        padding: 0.25rem 0.6rem;\n        border-radius: 0.375rem;\n        letter-spacing: 0.02em;\n        line-height: 1;\n        background-clip: padding-box;\n        border: none;\n        vertical-align: middle;\n    }\n\n    .badge-pro .fa-gem {\n        font-size: 0.85em;\n        line-height: 1;\n        color: #000000;\n    }\n\n    /* Lifetime badge: solid yellow, white text, gem on each side */\n    .badge-lifetime {\n        display: inline-flex;\n        align-items: center;\n        gap: 0.35rem;\n        background: #ffd700;\n        color: #fff;\n        font-weight: 700;\n        font-size: 0.75rem;\n        padding: 0.25rem 0.6rem;\n        border-radius: 0.375rem;\n        letter-spacing: 0.02em;\n        line-height: 1;\n        box-shadow: 0 4px 18px rgba(0,0,0,0...","status_code":200,"tested_at":"2025-10-26T01:11:26.889728Z"},"path":"/settings","premium":false}],"shop":[{"Arguments":["current_user"],"Description":"","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, items: [ { id, name, price_cents } ] }","admin":false,"function":"_mobile_shop_items_placeholder_removed_for_duplicate_fix","last_test":{"ok":false,"response_snippet":"{\"error\":\"not_implemented\",\"message\":\"This endpoint was removed in favor of a single implementation\",\"ok\":false}\n","status_code":501,"tested_at":"2025-10-26T01:11:26.894054Z"},"path":"/shop/items","premium":false},{"Arguments":["current_user"],"Description":"","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, items: [ { id, name, price_cents } ] }","admin":false,"function":"mobile_shop_items","last_test":{"ok":false,"response_snippet":"{\"error\":\"not_implemented\",\"message\":\"This endpoint was removed in favor of a single implementation\",\"ok\":false}\n","status_code":501,"tested_at":"2025-10-26T01:11:26.897966Z"},"path":"/shop/items","premium":false},{"Arguments":["current_user"],"Description":"","Method":"POST","Other notes":"Requires authentication.","Returns":"{ ok: True, payment: { id, status } }","admin":false,"function":"mobile_confirm_payment","last_test":{"ok":false,"response_snippet":"{\"error\":\"missing_data\",\"message\":\"Payment intent ID is required\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:26.902070Z"},"path":"/shop/payment/confirm","premium":false,"request_example":{"payment_intent_id":1}},{"Arguments":["current_user"],"Description":"","Method":"POST","Other notes":"Requires authentication.","Returns":"{ ok: True, client_secret, intent_id }","admin":false,"function":"mobile_create_payment_intent","last_test":{"ok":false,"response_snippet":"{\"error\":\"missing_data\",\"message\":\"Product ID is required\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:26.906141Z"},"path":"/shop/payment/create-intent","premium":false,"request_example":{"payment_method":"test","product":"test","product_id":1,"quantity":"test"}}],"statistics":[{"Arguments":["current_user"],"Description":"Query database and return results.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, stats: { users, trades, inventory_items } }","admin":false,"function":"mobile_statistics_summary","last_test":{"ok":true,"response_snippet":"{\"data\":{\"global_stats\":{\"active_trades\":0,\"total_cards\":0,\"total_users\":6},\"recent_activity\":{\"messages_today\":0,\"new_users_today\":0,\"trades_today\":0},\"user_stats\":{\"inventory_items\":1,\"is_premium\":true,\"member_since\":\"2025-10-25T21:56:50.308818\",\"rank_points\":0}},\"ok\":true}\n","status_code":200,"tested_at":"2025-10-26T01:11:26.909768Z"},"path":"/api/mobile/statistics/summary","path_original":"/statistics/summary","premium":true}],"stats":[{"Arguments":[],"Description":"","Method":"GET","Other notes":"Requires authentication.","Returns":"feature, ok, placeholder, totals","admin":false,"function":"mobile_stats_summary","last_test":{"ok":true,"response_snippet":"{\"feature\":\"stats_summary\",\"ok\":true,\"placeholder\":true,\"totals\":{}}\n","status_code":200,"tested_at":"2025-10-26T01:11:26.912536Z"},"path":"/api/mobile/stats/summary","path_original":"/stats/summary","premium":false}],"test":[{"Arguments":[],"Description":"","Method":"GET","Other notes":"","Returns":"error, status","admin":false,"function":"mobile_debug_connection","last_test":{"ok":true,"response_snippet":"{\"found\":true,\"image_url\":\"https://10.0.0.154/static/LQ2/1000.jpg\",\"product_id\":\"1000\",\"test_instructions\":[\"Copy the image_url\",\"Paste it in your browser to verify it works\",\"Then try loading it in your Flutter app using Image.network()\",\"Add errorBuilder to see any specific errors\"]}\n","status_code":200,"tested_at":"2025-10-26T01:11:27.049439Z"},"path":"/api/mobile/test/image","path_original":"/test/image","premium":false}],"trades":[{"Arguments":["trade_id: int"],"Description":"Manage or list trades.","Method":"GET","Other notes":"Requires authentication.","Returns":"error, ok, trade","admin":false,"function":"mobile_trade_detail","last_test":{"ok":true,"response_snippet":"{\"ok\":true,\"trade\":{\"coins_offered\":0,\"coins_requested\":0,\"comment\":\"API test fixture trade\",\"created_at\":\"2025-10-25T22:19:45.305486\",\"escrow\":{\"agreed_receiver\":false,\"agreed_sender\":true,\"initiator_id\":7,\"status\":\"pending_submission\",\"tracking_inbound\":null,\"tracking_outbound\":null},\"id\":1,\"offered_cards\":[{\"coin_value\":0,\"condition\":\"Near Mint\",\"quantity\":1,\"unique_id\":\"1\"}],\"points_offered\":0,\"points_requested\":0,\"receiver_received\":false,\"receiver_shipped\":false,\"requested_cards\":[],\"role\":\"sender\",\"sender_received\":false,\"sender_shipped\":false,\"status\":\"pending\",\"trade_type\":\"cards_only\",\"updated_at\":\"2025-10-25T23:49:36.996679\",\"use_escrow\":true}}\n","status_code":200,"tested_at":"2025-10-26T01:11:27.087506Z"},"path":"/api/mobile/trades/1","path_original":"/trades/<int:trade_id>","premium":false,"request_example":{"trade":"test","user":"test"}},{"Arguments":["trade_id: int"],"Description":"Accept/reject/cancel or perform actions on trades.","Method":"POST","Other notes":"Requires authentication.","Returns":"changed, error, ok, status","admin":false,"function":"mobile_trade_action","last_test":{"ok":false,"response_snippet":"{\"error\":\"unknown_action\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:27.092760Z"},"path":"/trades/<int:trade_id>/action","premium":false,"request_example":{"action":"cancel"}},{"Arguments":["current_user","trade_id: int"],"Description":"Manage or list trades.","Method":"POST","Other notes":"Requires authentication.","Returns":"agreed_receiver, agreed_sender, trade_id","admin":false,"function":"mobile_trade_escrow_agree","last_test":{"ok":true,"response_snippet":"{\"agreed_receiver\":false,\"agreed_sender\":true,\"ok\":true,\"trade_id\":1}\n","status_code":200,"tested_at":"2025-10-26T01:11:27.108152Z"},"path":"/api/mobile/trades/1/escrow/agree","path_original":"/trades/<int:trade_id>/escrow/agree","premium":false,"request_example":{"trade":"test"}},{"Arguments":["current_user","trade_id: int"],"Description":"Manage or list trades.","Method":"POST","Other notes":"Requires authentication.","Returns":"already_enabled, trade_id","admin":false,"function":"mobile_trade_escrow_enable","last_test":{"ok":true,"response_snippet":"{\"already_enabled\":true,\"ok\":true,\"trade_id\":1}\n","status_code":200,"tested_at":"2025-10-26T01:11:27.115481Z"},"path":"/api/mobile/trades/1/escrow/enable","path_original":"/trades/<int:trade_id>/escrow/enable","premium":false,"request_example":{"trade":"test"}},{"Arguments":["current_user","trade_id: int"],"Description":"Manage or list trades.","Method":"POST","Other notes":"Requires authentication.","Returns":"status, tracking_inbound, trade_id","admin":false,"function":"mobile_trade_escrow_tracking","last_test":{"ok":false,"response_snippet":"{\"error\":\"tracking_required\",\"message\":\"Tracking number required\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:27.125377Z"},"path":"/trades/<int:trade_id>/escrow/tracking","premium":false,"request_example":{"tracking":"test","tracking_number":1,"trade":"test"}},{"Arguments":[],"Description":"Manage or list trades.","Method":"POST","Other notes":"Requires authentication.","Returns":"error, message, ok, trade_id","admin":false,"function":"mobile_trade_create","last_test":{"ok":false,"response_snippet":"{\"error\":\"partner_required\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:27.134347Z"},"path":"/trades/create","premium":false,"request_example":{"message":"Test trade","offered":[{"quantity":1,"unique_id":"1"}],"partner_username":"api_test_partner","requested":[]}},{"Arguments":["current_user"],"Description":"Manage or list trades.","Method":"GET","Other notes":"Requires authentication.Rate-limited.","Returns":"{ ok: True, trades: [ { id, other_user, status } ], total: <int> }","admin":false,"function":"mobile_trades_list","last_test":{"ok":true,"response_snippet":"{\"has_more\":false,\"limit\":50,\"next_offset\":null,\"offset\":0,\"ok\":true,\"status_filter\":null,\"total\":1,\"trades\":[{\"coins_offered\":0,\"coins_requested\":0,\"created_at\":\"2025-10-25T22:19:45.305486\",\"id\":1,\"points_offered\":0,\"points_requested\":0,\"role\":\"sender\",\"status\":\"pending\",\"trade_type\":\"cards_only\",\"updated_at\":\"2025-10-25T23:49:36.996679\"}]}\n","status_code":200,"tested_at":"2025-10-26T01:11:27.158209Z"},"path":"/api/mobile/trades/list","path_original":"/trades/list","premium":false},{"Arguments":["current_user"],"Description":"Preview trade matches for mobile.","Method":"GET","Other notes":"Requires authentication.","Returns":"error, offered_candidates, ok, partner_found, requested_candidates","admin":false,"function":"mobile_trade_match_preview","last_test":{"ok":true,"response_snippet":"{\"offered_candidates\":[],\"ok\":true,\"partner_found\":false,\"requested_candidates\":[]}\n","status_code":200,"tested_at":"2025-10-26T01:11:27.160816Z"},"path":"/api/mobile/trades/match_preview","path_original":"/trades/match_preview","premium":false},{"Arguments":["current_user"],"Description":"Get trade partners for mobile user.","Method":"GET","Other notes":"Requires authentication.","Returns":"error, ok, partners","admin":false,"function":"mobile_trade_partners","last_test":{"ok":true,"response_snippet":"{\"ok\":true,\"partners\":[{\"source\":\"friend\",\"username\":\"api_test_partner\"}]}\n","status_code":200,"tested_at":"2025-10-26T01:11:27.169572Z"},"path":"/api/mobile/trades/partners","path_original":"/trades/partners","premium":false},{"Arguments":["current_user"],"Description":"Accept/reject/cancel or perform actions on trades.","Method":"POST","Other notes":"Requires authentication.","Returns":"{ ok: True, result } or error","admin":false,"function":"mobile_trade_respond","last_test":{"ok":false,"response_snippet":"{\"error\":\"invalid_payload\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:27.173707Z"},"path":"/trades/respond","premium":false,"request_example":{"action":"cancel","trade_id":1}},{"Arguments":["current_user"],"Description":"Return summary counts for user trades.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, trades: [...], total: <int> }","admin":false,"function":"mobile_trades_summary","last_test":{"ok":true,"response_snippet":"{\"ok\":true,\"trades\":{\"accepted\":0,\"cancelled\":0,\"completed\":0,\"incoming_offers\":0,\"last_trade\":{\"coins_offered\":0,\"coins_requested\":0,\"created_at\":\"2025-10-25T22:19:45.305486\",\"id\":1,\"is_receiver\":false,\"is_sender\":true,\"points_offered\":0,\"points_requested\":0,\"status\":\"pending\",\"trade_type\":\"cards_only\",\"updated_at\":\"2025-10-25T23:49:36.996679\"},\"outgoing_offers\":1,\"pending\":1}}\n","status_code":200,"tested_at":"2025-10-26T01:11:27.189868Z"},"path":"/api/mobile/trades/summary","path_original":"/trades/summary","premium":false},{"Arguments":["current_user"],"Description":"Calculate trade value for mobile.","Method":"POST","Other notes":"Requires authentication.","Returns":"diff, error, lines, offered_total, ok, requested_total","admin":false,"function":"mobile_trade_value","last_test":{"ok":true,"response_snippet":"{\"diff\":0,\"lines\":{},\"offered_total\":0,\"ok\":true,\"requested_total\":0}\n","status_code":200,"tested_at":"2025-10-26T01:11:27.192537Z"},"path":"/api/mobile/trades/value","path_original":"/trades/value","premium":false}],"user":[{"Arguments":[],"Description":"Search for users by username or email.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, profile: { id, username, avatar_url, bio } }","admin":false,"function":"mobile_user_profile","last_test":{"ok":true,"response_snippet":"{\"ok\":true,\"profile\":{\"avatar_url\":null,\"coins\":0,\"email\":\"\",\"email_verified\":false,\"escrow_tokens\":5,\"id\":7,\"premium_expires_at\":null,\"username\":\"api_test_user\"}}\n","status_code":200,"tested_at":"2025-10-26T01:11:27.194804Z"},"path":"/api/mobile/user/profile","path_original":"/user/profile","premium":true},{"Arguments":["current_user"],"Description":"Get user progress information for mobile.","Method":"GET","Other notes":"Requires authentication.","Returns":"achievement_points, error, level, level_progress, ok, premium, progress, rank, rank_points, reputation, streak_days","admin":false,"function":"mobile_user_progress","last_test":{"ok":true,"response_snippet":"{\"ok\":true,\"progress\":{\"achievement_points\":115,\"level\":1,\"level_progress\":{\"current\":0,\"max_level\":false,\"needed\":100,\"next\":100,\"progress\":0},\"premium\":true,\"rank\":\"Novice\",\"rank_points\":0,\"reputation\":0,\"streak_days\":0}}\n","status_code":200,"tested_at":"2025-10-26T01:11:27.197081Z"},"path":"/api/mobile/user/progress","path_original":"/user/progress","premium":true},{"Arguments":["current_user"],"Description":"Query database and return results.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, state: { inventory_count, unread_messages, pending_trades } }","admin":false,"function":"mobile_user_state","last_test":{"ok":true,"response_snippet":"{\"dms_unread\":0,\"friend_requests\":{\"incoming_pending\":0,\"outgoing_pending\":1},\"friends\":1,\"notifications_unread\":2,\"ok\":true,\"premium\":true,\"rank_points\":0,\"user\":{\"id\":7,\"username\":\"api_test_user\"}}\n","status_code":200,"tested_at":"2025-10-26T01:11:27.203133Z"},"path":"/api/mobile/user/state","path_original":"/user/state","premium":true}],"users":[{"Arguments":["current_user"],"Description":"Query database and return results.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, users: [ { id, username, avatar } ], total: <int> }","admin":false,"function":"mobile_users_list","last_test":{"ok":true,"response_snippet":"{\"data\":{\"users\":[{\"id\":2,\"is_premium\":true,\"member_since\":\"2025-09-05T10:11:20.868992\",\"rank_points\":3086,\"username\":\"Kairi\"},{\"id\":5,\"is_premium\":false,\"member_since\":\"2025-09-09T02:32:06.856388\",\"rank_points\":10,\"username\":\"cavelepus\"},{\"id\":6,\"is_premium\":false,\"member_since\":\"2025-10-14T14:51:39.390047\",\"rank_points\":0,\"username\":\"GoogleUserCreationTest\"},{\"id\":8,\"is_premium\":false,\"member_since\":\"2025-10-25T22:19:45.263508\",\"rank_points\":0,\"username\":\"api_test_partner\"},{\"id\":3,\"is_premium\":false,\"member_since\":\"2025-09-05T14:54:56.126355\",\"rank_points\":0,\"username\":\"tester\"}]},\"has_more\":false,\"limit\":50,\"offset\":0,\"ok\":true,\"total\":5}\n","status_code":200,"tested_at":"2025-10-26T01:11:27.215520Z"},"path":"/api/mobile/users/list","path_original":"/users/list","premium":true}],"wishlist":[{"Arguments":["current_user"],"Description":"Return paginated list of items for the user.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, items: [ { productId, note?, added_at? } ] }","admin":false,"function":"mobile_wishlist_list_alias","last_test":{"ok":true,"response_snippet":"{\"items\":[],\"ok\":true,\"summary\":{\"by_game\":{},\"ok\":true,\"public\":false,\"share_url\":null,\"total\":0}}\n","status_code":200,"tested_at":"2025-10-26T01:11:27.221268Z"},"path":"/api/mobile/wishlist/list","path_original":"/wishlist/list","premium":false},{"Arguments":["current_user"],"Description":"Return paginated list of items for the user.","Method":"POST","Other notes":"Requires authentication.","Returns":"{ ok: True } or error","admin":false,"function":"mobile_wishlist_remove_v2","last_test":{"ok":false,"response_snippet":"{\"error\":\"missing_data\",\"message\":\"UniqueID is required\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:27.225518Z"},"path":"/wishlist/remove","premium":false,"request_example":{"unique_id":"1"}}],"wishlists":[{"Arguments":["current_user"],"Description":"Get wishlist items for mobile user.","Method":"GET","Other notes":"Requires authentication.","Returns":"{ ok: True, items: [ { productId, note?, added_at? } ] }","admin":false,"function":"mobile_wishlist_list","last_test":{"ok":true,"response_snippet":"{\"has_more\":false,\"items\":[],\"limit\":50,\"next_offset\":null,\"offset\":0,\"ok\":true,\"total\":0}\n","status_code":200,"tested_at":"2025-10-26T01:11:27.230803Z"},"path":"/api/mobile/wishlists/items","path_original":"/wishlists/items","premium":false},{"Arguments":["current_user"],"Description":"Get wishlist items for mobile user.","Method":"POST","Other notes":"Requires authentication.","Returns":"{ ok: True, items: [ { productId, note?, added_at? } ] }","admin":false,"function":"mobile_wishlist_add","last_test":{"ok":false,"response_snippet":"{\"error\":\"product_id_required\",\"message\":\"productId required\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:27.235007Z"},"path":"/wishlists/items","premium":false,"request_example":{"condition":"Near Mint","max_price":1.0,"productId":"1"}},{"Arguments":["item_id"],"Description":"Get specific wishlist item details.","Method":"DELETE","Other notes":"Requires authentication.","Returns":"deleted, error, ok","admin":false,"function":"mobile_wishlist_remove_by_id","last_test":{"ok":false,"response_snippet":"<!doctype html>\n<html lang=en>\n<title>404 Not Found</title>\n<h1>Not Found</h1>\n<p>The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.</p>\n","status_code":404,"tested_at":"2025-10-26T01:11:27.244783Z"},"path":"/api/mobile/wishlists/items/1","path_original":"/wishlists/items/<int:item_id>","premium":false,"request_example":{"item":"test","user":"test"}},{"Arguments":["current_user"],"Description":"Remove items from mobile wishlist.","Method":"POST","Other notes":"Requires authentication.","Returns":"deleted, productId","admin":false,"function":"mobile_wishlist_remove","last_test":{"ok":false,"response_snippet":"{\"error\":\"product_id_required\",\"message\":\"productId required\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:27.248885Z"},"path":"/wishlists/items/remove","premium":false,"request_example":{"productId":"1"}},{"Arguments":["current_user"],"Description":"Toggle wishlist public visibility.","Method":"POST","Other notes":"Requires authentication.","Returns":"created, error, id, ok, productId, public, updated","admin":false,"function":"mobile_wishlist_toggle_public","last_test":{"ok":false,"response_snippet":"{\"error\":\"product_id_required\",\"message\":\"productId required\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:27.253030Z"},"path":"/wishlists/items/toggle_public","premium":false,"request_example":{"productId":"1","public":true}},{"Arguments":["username"],"Description":"View public wishlist of another user.","Method":"GET","Other notes":"Requires authentication.","Returns":"error, id, items, ok, owner, total_public, username","admin":false,"function":"mobile_wishlist_public_view","last_test":{"ok":false,"response_snippet":"<!doctype html>\n<html lang=en>\n<title>404 Not Found</title>\n<h1>Not Found</h1>\n<p>The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.</p>\n","status_code":404,"tested_at":"2025-10-26T01:11:27.261411Z"},"path":"/wishlists/public/<username>","premium":false,"request_example":{"u":"test","username":"test","viewer":"test"}},{"Arguments":["current_user"],"Description":"Toggle public wishlist visibility.","Method":"POST","Other notes":"Requires authentication.","Returns":"error, ok, productId, public","admin":false,"function":"mobile_wishlist_toggle_public_legacy","last_test":{"ok":false,"response_snippet":"{\"error\":\"product_id_required\",\"ok\":false}\n","status_code":400,"tested_at":"2025-10-26T01:11:27.265523Z"},"path":"/wishlists/public/toggle","premium":false,"request_example":{"productId":"1","public":true}},{"Arguments":["current_user"],"Description":"Get wishlist summary for mobile user.","Method":"GET","Other notes":"Requires authentication.","Returns":"by_game, error, game, game_count, ok, public, share_url, total","admin":false,"function":"mobile_wishlist_summary","last_test":{"ok":true,"response_snippet":"{\"by_game\":{},\"ok\":true,\"public\":false,\"share_url\":null,\"total\":0}\n","status_code":200,"tested_at":"2025-10-26T01:11:27.268287Z"},"path":"/api/mobile/wishlists/summary","path_original":"/wishlists/summary","premium":false},{"Arguments":["current_user"],"Description":"Return a compact JSON summary of public wishlists for the Browse tab. By default returns site-wide public wishlists; callers may pass ?friends_only=1 to restrict to friends only.","Method":"GET","Other notes":"Requires authentication. Capped to scanning a limited set of users (200) and up to 6 preview cards per wishlist to keep payload small.","Returns":"{ public_wishlists: [ { id, name, description, owner_username, owner_id, cards: [ { name, product_id, unique_id, image_url } ] } ] }","admin":false,"function":"api_public_wishlists","last_test":{"ok":null,"response_snippet":null,"status_code":null,"tested_at":null},"path":"/api/public_wishlists","premium":false}]}
