openapi: 3.1.0 info: title: Jabbercracky API description: Core API for the Jabbercracky project. version: 1.1.0 contact: name: John Jabbercracky email: contact@jabbercracky.com servers: - url: https://jabbercracky.com paths: /api/ping: get: summary: Returns the status of the server. description: This endpoint is used to check the health status of the server. It returns a simple message indicating that the server is running. tags: - Unauthenticated responses: '200': description: Successful response content: application/json: schema: type: object properties: authenticated: type: string examples: - value: "true" message: type: string examples: - value: "pong" server_time: type: string format: date-time examples: - value: "2025-01-29T21:28:20Z" user: type: string examples: - value: "your-username" /api/login: post: summary: User login description: Authenticates a user and returns a JWT token. tags: - Unauthenticated requestBody: required: true content: application/json: schema: type: object properties: username: type: string examples: - value: "your-username" password: type: string examples: - value: "your-password" responses: '200': description: Login successful content: application/json: schema: type: object properties: token: type: string examples: - value: "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ..." /api/register: post: summary: User registration description: Registers a new user. tags: - Unauthenticated requestBody: required: true content: application/json: schema: type: object properties: username: type: string examples: - value: "your-username" password: type: string examples: - value: "your-password" responses: '200': description: Registration successful content: application/json: schema: type: object properties: PasswordResetCode: type: string examples: - value: "your-password-reset-code" message: type: string examples: - value: "Registration successful" /api/login/reset: post: summary: Reset password description: Resets the password for an existing user. tags: - Unauthenticated requestBody: required: true content: application/json: schema: type: object properties: username: type: string examples: - value: "your-username" password_reset_code: type: string examples: - value: "your-password-reset-code" new_password: type: string examples: - value: "your-new-password" responses: '200': description: Password reset successful content: application/json: schema: type: object properties: PasswordResetCode: type: string examples: - value: "your-new-password-reset-code" message: type: string examples: - value: "Password reset successful" /api/game: get: summary: Get game details description: Retrieves game details. tags: - Unauthenticated - Game responses: '200': description: Game details retrieved successfully content: application/json: schema: type: object properties: config: type: object properties: game_active: type: boolean examples: - value: false time_remaining: type: string examples: - value: "357h6m31.641986056s" total_cracked: type: integer examples: - value: 400000 total_players: type: integer examples: - value: 5 total_items: type: integer examples: - value: 543 total_rare_items: type: integer examples: - value: 412 total_legendary_items: type: integer examples: - value: 112 total_mythical_items: type: integer examples: - value: 19 total_score: type: number examples: - value: 803246.17 leaderboard: type: array items: type: object properties: username: type: string examples: - value: "your-username" total_cracked: type: integer examples: - value: 200000 score: type: number examples: - value: 401623.08 item_count: type: integer examples: - value: 1 level: type: integer examples: - value: 29 visible_item: type: object properties: item_name: type: string examples: - value: "Festive Chalice of PXE Booting" item_rarity: type: string examples: - value: "mythical" do_not_sell: type: boolean examples: - value: false color: type: string examples: - value: "#FF5733" date_obtained: type: string examples: - value: "2025-01-26 03:36:58" has_won: type: boolean examples: - value: false has_placed: type: boolean examples: - value: false total_gold: type: integer examples: - value: 14 message: type: string examples: - value: "success" /api/game/leaderboard: get: summary: Get leaderboard description: Retrieves the leaderboard. tags: - Authenticated - Game responses: '200': description: Leaderboard retrieved successfully content: application/json: schema: type: object properties: message: type: string examples: - value: "success" users: type: array items: type: object properties: username: type: string examples: - value: "your-username" total_cracked: type: integer examples: - value: 200000 score: type: number examples: - value: 401623.08 item_count: type: integer examples: - value: 1 level: type: integer examples: - value: 29 visible_item: type: object properties: item_name: type: string examples: - value: "Festive Chalice of PXE Booting" item_rarity: type: string examples: - value: "mythical" do_not_sell: type: boolean examples: - value: false color: type: string examples: - value: "#FF5733" date_obtained: type: string examples: - value: "2025-01-26 03:36:58" has_won: type: boolean examples: - value: false has_placed: type: boolean examples: - value: false /api/game/log: get: summary: Get game log description: Retrieves the game log. tags: - Authenticated - Game responses: '200': description: Game log retrieved successfully content: application/json: schema: type: object properties: log: type: array items: type: object properties: current_time: type: string format: date-time examples: - value: "2025-01-26T03:30:38Z" time_remaining: type: string examples: - value: "447h29m26.95479424s" total_cracked: type: integer examples: - value: 0 total_items: type: integer examples: - value: 0 total_rare_items: type: integer examples: - value: 0 total_legendary_items: type: integer examples: - value: 0 total_mythical_items: type: integer examples: - value: 0 total_score: type: number examples: - value: 0 total_gold: type: integer examples: - value: 0 leaderboard: type: array items: type: object properties: username: type: string examples: - value: "your-username" total_cracked: type: integer examples: - value: 200000 score: type: number examples: - value: 401623.08 item_count: type: integer examples: - value: 537 level: type: integer examples: - value: 0 visible_item: type: object properties: item_name: type: string examples: - value: "Ticklish Rat Mace of Copious Amounts of Coffee" item_rarity: type: string examples: - value: "legendary" do_not_sell: type: boolean examples: - value: false color: type: string examples: - value: "#FF5733" date_obtained: type: string examples: - value: "2025-01-26 03:42:55" has_won: type: boolean examples: - value: false has_placed: type: boolean examples: - value: false message: type: string examples: - value: "success" /api/game/announcements: get: summary: Get announcements description: Retrieves announcements. tags: - Authenticated - Game responses: '200': description: Announcements retrieved successfully content: application/json: schema: type: object properties: announcements: type: object properties: announcement_log: type: array items: type: object properties: announcement_time: type: string format: date-time examples: - value: "2025-01-26T03:30:33Z" announcement_message: type: string examples: - value: "your announcement message" message: type: string examples: - value: "success" /api/game/hashlist: get: summary: Get hash lists description: Retrieves the list of available hash lists. tags: - Authenticated - Game responses: '200': description: Hash lists retrieved successfully content: application/json: schema: type: object properties: hash_lists: type: array items: type: object properties: hash_list_id: type: integer examples: - value: 1 hash_list_name: type: string examples: - value: "SpookySc4ry-01" message: type: string examples: - value: "success" /api/game/hashlist/{hashlistid}: get: summary: Get hash list description: Retrieves the hash list specified by hashlistid. tags: - Authenticated - Game parameters: - name: hashlistid in: path required: true schema: type: string responses: '200': description: Hash list retrieved successfully content: application/json: schema: type: object properties: hash_list: type: array items: type: string examples: - value: "5d41402abc4b2a76b9719d911017c592" - value: "bc934e0ed9ac13a76e5b9d0590932c6e" - value: "cafd1eaf9f03752bd6320f05ab039a39" message: type: string examples: - value: "success" /api/game/submit/{hashlistid}: post: summary: Submit game data description: Submit game data identified by hashlistid. tags: - Authenticated - Game parameters: - name: hashlistid in: path required: true schema: type: string requestBody: required: true content: multipart/form-data: schema: type: object properties: file: type: string format: binary description: The file containing HASH:PLAIN game data to be submitted. examples: - file: "sample_hashes.txt" application/json: schema: type: object properties: hashes: type: array items: type: string examples: - value: hashes: ["HASH:PLAIN"] responses: '200': description: Successful submission content: application/json: schema: type: object properties: submission_uid: type: string examples: - value: "3fa5cc74-bbf3-46b2-bd92-09754ed04300" hash_list_id: type: string examples: - value: "1" username: type: string examples: - value: "berryt3st" found_count: type: integer examples: - value: 1 added_score: type: number examples: - value: 2.35 total_score: type: number examples: - value: 2.35 new_items: type: array items: type: string examples: - value: [] total_item_count: type: integer examples: - value: 0 date_submitted: type: string format: date-time examples: - value: "2024-12-01T01:01:49Z" /api/user: get: summary: Get user details description: Retrieves user details. tags: - Authenticated - User responses: '200': description: Successful retrieval content: application/json: schema: type: object properties: enabled: type: boolean examples: - value: true experience: type: integer examples: - value: 33860 gold: type: integer examples: - value: 14 item_count: type: integer examples: - value: 1 level: type: integer examples: - value: 29 message: type: string examples: - value: "success" score: type: number examples: - value: 401623.08 total_cracked: type: integer examples: - value: 200000 username: type: string examples: - value: "your-username" visible_item: type: object properties: item_name: type: string examples: - value: "Festive Chalice of PXE Booting" item_rarity: type: string examples: - value: "mythical" do_not_sell: type: boolean examples: - value: false color: type: string examples: - value: "#FF5733" date_obtained: type: string examples: - value: "2025-01-26 03:36:58" has_won: type: boolean examples: - value: false has_placed: type: boolean examples: - value: false /api/user/{username}: get: summary: Get user by username description: Retrieves user details by username. tags: - Authenticated - User parameters: - name: username in: path required: true schema: type: string responses: '200': description: Successful retrieval content: application/json: schema: type: object properties: enabled: type: boolean examples: - value: true experience: type: integer examples: - value: 33860 gold: type: integer examples: - value: 14 item_count: type: integer examples: - value: 1 level: type: integer examples: - value: 29 message: type: string examples: - value: "success" score: type: number examples: - value: 401623.08 total_cracked: type: integer examples: - value: 200000 username: type: string examples: - value: "your-username" visible_item: type: object properties: item_name: type: string examples: - value: "Festive Chalice of PXE Booting" item_rarity: type: string examples: - value: "mythical" do_not_sell: type: boolean examples: - value: false color: type: string examples: - value: "#FF5733" date_obtained: type: string examples: - value: "2025-01-26 03:36:58" has_won: type: boolean examples: - value: false has_placed: type: boolean examples: - value: false /api/user/submissions: get: summary: Get user submissions description: Retrieves a list of user submissions. tags: - Authenticated - User responses: '200': description: Submissions retrieved successfully content: application/json: schema: type: object properties: events: type: array items: type: object properties: submission_uid: type: string examples: - value: "3dabbf41-11d5-4b06-9138-ed38388a8517" hash_list_id: type: string examples: - value: "1" username: type: string examples: - value: "your-username" found_count: type: integer examples: - value: 10 added_score: type: number examples: - value: 20.081154187739436 total_score: type: number examples: - value: 20.081154187739436 new_items: type: array items: type: string examples: - value: [] total_item_count: type: integer examples: - value: 0 date_submitted: type: string format: date-time examples: - value: "2025-01-29T22:24:10Z" message: type: string examples: - value: "success" /api/user/wield: post: summary: Wield an item description: Endpoint to wield an item. tags: - Authenticated - User requestBody: required: true content: application/json: schema: type: object properties: item_name: type: string examples: - value: "The Bcrypt Breaker's Ashen Laser Sword" item_rarity: type: string examples: - value: "mythical" do_not_sell: type: boolean examples: - value: false color: type: string examples: - value: "#FF5733" date_obtained: type: string examples: - value: "2025-01-29 22:29:50" responses: '200': description: Item wielded successfully content: application/json: schema: type: object properties: item: type: object properties: item_name: type: string examples: - value: "The Bcrypt Breaker's Ashen Laser Sword" item_rarity: type: string examples: - value: "mythical" do_not_sell: type: boolean examples: - value: false color: type: string examples: - value: "#FF5733" date_obtained: type: string examples: - value: "2025-01-29 22:29:50" message: type: string examples: - value: "success" /api/user/unwield: delete: summary: Unwield an item description: Endpoint to unwield an item. tags: - Authenticated - User responses: '200': description: Item unwielded successfully content: application/json: schema: type: object properties: item: type: object properties: item_name: type: string examples: - value: "" item_rarity: type: string examples: - value: "" do_not_sell: type: boolean examples: - value: false color: type: string examples: - value: "" date_obtained: type: string examples: - value: "" message: type: string examples: - value: "success" /api/user/items: get: summary: Get items description: Retrieves a list of items. tags: - Authenticated - User responses: '200': description: Items retrieved successfully content: application/json: schema: type: object properties: items: type: array items: type: object properties: item_name: type: string examples: - value: "The Bcrypt Breaker's Ashen Laser Sword" item_rarity: type: string examples: - value: "mythical" do_not_sell: type: boolean examples: - value: false color: type: string examples: - value: "#FF5733" date_obtained: type: string examples: - value: "2025-01-29 22:29:50" message: type: string examples: - value: "success" /api/user/item: put: summary: Update user item description: Updates an item's no sell status for the user. tags: - Authenticated - User requestBody: required: true content: application/json: schema: type: object properties: item_name: type: string examples: - value: "Weirdly-Smelling Spell Book of Mythical Truths" item_rarity: type: string examples: - value: "legendary" do_not_sell: type: boolean examples: - value: true color: type: string examples: - value: "#FF5733" date_obtained: type: string examples: - value: "2025-03-15 21:33:25" responses: '200': description: Item updated successfully content: application/json: schema: type: object properties: message: type: string examples: - value: "success" /api/user/delete: delete: summary: Delete user account description: Deletes the account of the currently authenticated user. tags: - Authenticated - User responses: '200': description: Account deleted successfully content: application/json: schema: type: object properties: message: type: string examples: - value: "Account deleted successfully" /api/user/uid: get: summary: Get user UID description: Returns the user's UID. tags: - Authenticated - User responses: '200': description: UID retrieved successfully content: application/json: schema: type: object properties: message: type: string examples: - value: "success" uid: type: string examples: - value: "user-uid-example" /api/user/uid/auth: get: summary: Check UID authentication status description: Returns whether the user is using UID authentication or not. tags: - Authenticated - User responses: '200': description: UID authentication status retrieved successfully content: application/json: schema: type: object properties: message: type: string examples: - value: "success" uid_auth: type: boolean examples: - value: true post: summary: Update user UID authentication settings description: Updates the user's UID authentication settings. tags: - Authenticated requestBody: required: true content: application/json: schema: type: object properties: uid_auth: type: boolean examples: - value: true responses: '200': description: User settings updated successfully content: application/json: schema: type: object properties: message: type: string examples: - value: "success" username: type: string examples: - value: "username-example" /api/user/admin/disable: post: summary: Disable user description: Disables a user. tags: - Authenticated - Administrator requestBody: required: true content: application/json: schema: type: object properties: username: type: string examples: - value: "Cherry" responses: '200': description: User disabled successfully content: application/json: schema: type: object properties: message: type: string examples: - value: "success" username: type: string examples: - value: "Cherry" /api/user/admin/enable: post: summary: Enable user description: Enables a user. tags: - Authenticated - Administrator requestBody: required: true content: application/json: schema: type: object properties: username: type: string examples: - value: "Cherry" responses: '200': description: User enabled successfully content: application/json: schema: type: object properties: message: type: string examples: - value: "success" username: type: string examples: - value: "Cherry" /api/user/admin/delete: post: summary: Delete user description: Deletes a user. tags: - Authenticated - Administrator requestBody: required: true content: application/json: schema: type: object properties: username: type: string examples: - value: "Cherry" responses: '200': description: User deleted successfully content: application/json: schema: type: object properties: message: type: string examples: - value: "success" username: type: string examples: - value: "Cherry" /api/user/admin/game/download: get: summary: Download game backup description: Returns a zip file of the game backup. tags: - Authenticated - Administrator responses: '200': description: Zip file of the game backup content: application/zip: schema: type: string format: binary /api/user/items/sell: post: summary: Sell an item description: Endpoint to sell an item. tags: - Authenticated - User requestBody: required: true content: application/json: schema: type: object properties: items: type: array items: type: object properties: item_name: type: string examples: - value: "Gluten-Free Catfish of Key Exchange Protocols" item_rarity: type: string examples: - value: "mythical" do_not_sell: type: boolean examples: - value: false color: type: string examples: - value: "#FF5733" date_obtained: type: string examples: - value: "2025-01-29 22:29:50" responses: '200': description: Item sold successfully content: application/json: schema: type: object properties: gold: type: integer examples: - value: 100 message: type: string examples: - value: "success" /api/items/experience: post: summary: Gain experience description: Endpoint to gain experience. tags: - Authenticated - User requestBody: required: true content: application/json: schema: type: object properties: gold: type: integer examples: - value: 1 responses: '200': description: Experience gained successfully content: application/json: schema: type: object properties: experience_points: type: integer examples: - value: 10 message: type: string examples: - value: "success" /api/admin/logs: get: summary: Get admin logs description: Retrieves admin logs. tags: - Authenticated - Administrator responses: '200': description: Admin logs retrieved successfully content: application/json: schema: type: object properties: entries: type: array items: type: object properties: id: type: string examples: - value: "31f39cd1-445a-4860-8bc6-1e61ebd91b72" time: type: string format: date-time examples: - value: "2025-01-29T21:51:45Z" first_seen: type: string examples: - value: "2025-01-29T21:51:45Z" times_seen: type: integer examples: - value: 1 severity: type: string examples: - value: "Low" authenticated: type: boolean examples: - value: false username: type: string examples: - value: "berry24444" type: type: string examples: - value: "Authentication Success" event: type: string examples: - value: "Password Reset" function: type: string examples: - value: "auth.ResetPasswordHandler()" message: type: string examples: - value: "Password reset for user berry24444." message: type: string examples: - value: "success" /api/user/progress: get: summary: Get user progress description: Retrieves user progress. tags: - Authenticated - User responses: '200': description: Successful retrieval content: application/json: schema: type: object properties: message: type: string examples: - value: "success" point_per_crack: type: number examples: - value: 1.05 progress: type: object properties: hash_list_progress: type: array items: type: object properties: hash_list_id: type: integer examples: - value: 1 total_cracked: type: integer examples: - value: 166818 total_remaining: type: integer examples: - value: 33182 points_remaining: type: string examples: - value: "66633.29" user_cracked_percent: type: string examples: - value: "83.41%" average_cracked_percent: type: string examples: - value: "83.41%" /api/user/items/level/{n}: get: summary: Retrieve User Items by Level description: Get the benefits of items for a user at a specified level. parameters: - in: path name: n required: true schema: type: integer description: The level of the user items responses: '200': description: Successful retrieval of user items benefits for the specified level. content: application/json: schema: type: object properties: level_benefits: type: object properties: percent_drop_increase: type: integer description: Increase in drop rate percentage examples: - value: 1 percent_rare_increase: type: integer description: Increase in rare item drop rate percentage examples: - value: 1 percent_legendary_increase: type: integer description: Increase in legendary item drop rate percentage examples: - value: 1 percent_mythical_increase: type: integer description: Increase in mythical item drop rate percentage examples: - value: 1 experience_to_next_level: type: integer description: Experience points required to reach the next level examples: - value: 100 message: type: string description: Response message examples: - value: success /api/user/items/oracle: get: summary: Get oracle data description: Returns the user's oracle data including fatigue charges, last use time, hint, and cost. tags: - Authenticated - User responses: '200': description: Successful retrieval content: application/json: schema: type: object properties: message: type: string examples: - value: "success" oracle: type: object properties: fatigue_charges: type: integer examples: - value: 0 last_use_time: type: string format: date-time examples: - value: "2025-01-26T03:30:38Z" hint: type: string examples: - value: "your hint" cost: type: integer examples: - value: 450 post: summary: Use oracle description: Submits gold to the oracle to receive a random unfound hash from the requested hash list ID. tags: - Authenticated - User requestBody: required: true content: application/json: schema: type: object properties: hash_list_id: type: integer examples: - value: 1 responses: '200': description: Oracle used successfully content: application/json: schema: type: object properties: message: type: string examples: - value: "success" hint: type: string examples: - value: "your hint" cost: type: integer examples: - value: 1125 /api/user/analyze/{hashlistid}: get: summary: Analyze user data description: Analyzes user data identified by hashlistid. tags: - Authenticated - User parameters: - name: hashlistid in: path required: true schema: type: string responses: '200': description: Analysis successful content: application/json: schema: type: object properties: analysis: type: object properties: total_cracked: type: integer examples: - value: 4 length_min: type: integer examples: - value: 15 length_q1: type: integer examples: - value: 15 length_median: type: integer examples: - value: 15 length_q3: type: integer examples: - value: 22 length_max: type: integer examples: - value: 22 top_masks: type: array items: type: string examples: - value: ["?l?l?l?l?l?l?l?l?l?l?l?l?s?d?d", "?l?l?l?l?l?l?l?l?l?l?l?d?d?d?d", "?l?l?l?l?l?l?l?l?l?l?l?l?l?d?d?d?d?d?d?d?d"] top_words: type: array items: type: string examples: - value: ["keepsusyoung", "onceuponatime", "ifyouarehere", "powerranger"] top_alpha_hybrid_masks: type: array items: type: string examples: - value: ["powerranger?d?d?d?d", "keepsusyoung?s?d?d", "onceuponatime?d?d?d?d?d?d?d?d?d", "ifyouarehere?s?d?d"] top_digit_hybrid_masks: type: array items: type: string examples: - value: ["?l?l?l?l?l?l?l?l?l?l?l6825", "?l?l?l?l?l?l?l?l?l?l?l?l.18", "?l?l?l?l?l?l?l?l?l?l?l?l?l012343210", "?l?l?l?l?l?l?l?l?l?l?l?l.00"] message: type: string examples: - value: "success"