definitions: domain.AleaPlayCallback: properties: amount: type: number currency: type: string event_id: type: string game_id: type: string is_free_round: type: boolean multiplier: type: number operator_id: type: string round_id: type: string session_id: type: string signature: type: string timestamp: type: integer transaction_id: type: string type: description: BET, WIN, CASHOUT, etc. type: string user_id: type: string type: object domain.BetOutcome: properties: away_team_name: example: Liverpool type: string bet_id: example: 1 type: integer event_id: example: 1 type: integer expires: example: "2025-04-08T12:00:00Z" type: string home_team_name: example: Manchester type: string id: example: 1 type: integer market_id: example: 1 type: integer market_name: example: Fulltime Result type: string odd: example: 1.5 type: number odd_handicap: example: "1" type: string odd_header: example: "1" type: string odd_id: example: 1 type: integer odd_name: example: "1" type: string sport_id: example: 1 type: integer status: allOf: - $ref: '#/definitions/domain.OutcomeStatus' example: 1 type: object domain.BetRes: properties: amount: example: 100 type: number branch_id: example: 2 type: integer cashed_id: example: "21234" type: string cashed_out: example: false type: boolean created_at: example: "2025-04-08T12:00:00Z" type: string full_name: example: John type: string id: example: 1 type: integer is_shop_bet: example: false type: boolean outcomes: items: $ref: '#/definitions/domain.BetOutcome' type: array phone_number: example: "1234567890" type: string status: allOf: - $ref: '#/definitions/domain.OutcomeStatus' example: 1 total_odds: example: 4.22 type: number user_id: example: 2 type: integer type: object domain.ChapaDepositRequestPayload: properties: amount: type: number required: - amount type: object domain.ChapaDepositResponse: properties: checkoutURL: type: string reference: type: string type: object domain.ChapaVerificationResponse: properties: amount: type: number currency: type: string status: type: string tx_ref: type: string type: object domain.ChapaWebhookPayload: properties: amount: type: integer currency: type: string status: $ref: '#/definitions/domain.PaymentStatus' tx_ref: type: string type: object domain.ChapaWithdrawalRequest: properties: account_name: type: string account_number: type: string amount: description: string because Chapa API uses string for monetary values type: string bank_code: type: integer currency: type: string reference: type: string type: object domain.CreateBetOutcomeReq: properties: event_id: example: 1 type: integer market_id: example: 1 type: integer odd_id: example: 1 type: integer type: object domain.CreateBetReq: properties: amount: example: 100 type: number branch_id: example: 1 type: integer full_name: example: John type: string outcomes: items: $ref: '#/definitions/domain.CreateBetOutcomeReq' type: array phone_number: example: "1234567890" type: string status: allOf: - $ref: '#/definitions/domain.OutcomeStatus' example: 1 type: object domain.CreateTicketOutcomeReq: properties: event_id: description: TicketID int64 `json:"ticket_id" example:"1"` example: 1 type: integer market_id: example: 1 type: integer odd_id: example: 1 type: integer type: object domain.CreateTicketReq: properties: amount: example: 100 type: number outcomes: items: $ref: '#/definitions/domain.CreateTicketOutcomeReq' type: array type: object domain.CreateTicketRes: properties: created_number: example: 3 type: integer fast_code: example: 1234 type: integer type: object domain.DashboardSummary: properties: active_admins: type: integer active_bets: type: integer active_branches: type: integer active_cashiers: type: integer active_companies: type: integer active_customers: type: integer active_games: type: integer active_managers: type: integer average_stake: type: integer branches_count: type: integer customer_count: type: integer inactive_admins: type: integer inactive_branches: type: integer inactive_cashiers: type: integer inactive_companies: type: integer inactive_customers: type: integer inactive_games: type: integer inactive_managers: type: integer profit: type: integer read_notifications: type: integer total_admins: type: integer total_bets: type: integer total_cashiers: type: integer total_companies: type: integer total_deposits: type: integer total_games: type: integer total_losses: type: integer total_managers: type: integer total_notifications: type: integer total_stakes: type: integer total_wallets: type: integer total_wins: type: integer total_withdrawals: type: integer unread_notifications: type: integer win_balance: type: integer win_rate: type: number type: object domain.ErrorResponse: properties: error: type: string message: type: string type: object domain.EventStatus: enum: - upcoming - in_play - to_be_fixed - ended - postponed - cancelled - walkover - interrupted - abandoned - retired - suspended - decided_by_fa - removed type: string x-enum-varnames: - STATUS_PENDING - STATUS_IN_PLAY - STATUS_TO_BE_FIXED - STATUS_ENDED - STATUS_POSTPONED - STATUS_CANCELLED - STATUS_WALKOVER - STATUS_INTERRUPTED - STATUS_ABANDONED - STATUS_RETIRED - STATUS_SUSPENDED - STATUS_DECIDED_BY_FA - STATUS_REMOVED domain.GameRecommendation: properties: bets: items: type: number type: array game_id: type: integer game_name: type: string reason: description: e.g., "Based on your activity", "Popular", "Random pick" type: string thumbnail: type: string type: object domain.League: properties: bet365_id: example: 1121 type: integer cc: example: uk type: string id: example: 1 type: integer is_active: example: false type: boolean is_featured: example: false type: boolean name: example: BPL type: string sport_id: example: 1 type: integer type: object domain.Odd: properties: category: type: string event_id: type: string fetched_at: type: string fi: type: string handicap: type: string is_active: type: boolean market_category: type: string market_id: type: string market_name: type: string market_type: type: string name: type: string odds_value: type: number raw_odds: items: {} type: array section: type: string source: type: string type: object domain.OtpProvider: enum: - twilio - aformessage type: string x-enum-varnames: - TwilioSms - AfroMessage domain.OutcomeStatus: enum: - 0 - 1 - 2 - 3 - 4 - 5 type: integer x-enum-comments: OUTCOME_STATUS_ERROR: Half Win and Half Given Back OUTCOME_STATUS_HALF: Half Win and Half Given Back OUTCOME_STATUS_VOID: Give Back x-enum-varnames: - OUTCOME_STATUS_PENDING - OUTCOME_STATUS_WIN - OUTCOME_STATUS_LOSS - OUTCOME_STATUS_VOID - OUTCOME_STATUS_HALF - OUTCOME_STATUS_ERROR domain.PaymentOption: enum: - 0 - 1 - 2 - 3 type: integer x-enum-varnames: - CASH_TRANSACTION - TELEBIRR_TRANSACTION - ARIFPAY_TRANSACTION - BANK domain.PaymentStatus: enum: - pending - completed - failed type: string x-enum-varnames: - PaymentStatusPending - PaymentStatusCompleted - PaymentStatusFailed domain.PopOKCallback: properties: amount: type: number currency: type: string session_id: type: string signature: description: HMAC-SHA256 signature for verification type: string timestamp: type: integer transaction_id: type: string type: description: BET, WIN, REFUND, JACKPOT_WIN type: string type: object domain.PopOKGame: properties: bets: items: type: number type: array gameName: type: string id: type: integer status: type: integer thumbnail: type: string type: object domain.RandomBetReq: properties: branch_id: example: 1 type: integer number_of_bets: example: 1 type: integer required: - branch_id - number_of_bets type: object domain.RawOddsByMarketID: properties: fetched_at: type: string handicap: type: string id: type: integer market_name: type: string raw_odds: items: {} type: array type: object domain.RecommendationErrorResponse: properties: message: type: string type: object domain.RecommendationSuccessfulResponse: properties: message: type: string recommended_games: items: $ref: '#/definitions/domain.VirtualGame' type: array type: object domain.ReferralSettings: properties: betReferralBonusPercentage: type: number cashbackPercentage: type: number createdAt: type: string expiresAfterDays: type: integer id: type: integer maxReferrals: type: integer referralRewardAmount: type: number updatedAt: type: string updatedBy: type: string version: type: integer type: object domain.ReferralStats: properties: completedReferrals: type: integer pendingRewards: type: number totalReferrals: type: integer totalRewardEarned: type: number type: object domain.Response: properties: data: {} message: type: string status_code: type: integer success: type: boolean type: object domain.Role: enum: - super_admin - admin - branch_manager - customer - cashier type: string x-enum-varnames: - RoleSuperAdmin - RoleAdmin - RoleBranchManager - RoleCustomer - RoleCashier domain.TicketOutcome: properties: away_team_name: example: Liverpool type: string event_id: example: 1 type: integer expires: example: "2025-04-08T12:00:00Z" type: string home_team_name: example: Manchester type: string id: example: 1 type: integer market_id: example: 1 type: integer market_name: example: Fulltime Result type: string odd: example: 1.5 type: number odd_handicap: example: "1" type: string odd_header: example: "1" type: string odd_id: example: 1 type: integer odd_name: example: "1" type: string status: allOf: - $ref: '#/definitions/domain.OutcomeStatus' example: 1 ticket_id: example: 1 type: integer type: object domain.TicketRes: properties: amount: example: 100 type: number id: example: 1 type: integer outcomes: items: $ref: '#/definitions/domain.TicketOutcome' type: array total_odds: example: 4.22 type: number type: object domain.UpcomingEvent: properties: away_kit_image: description: Kit or image for away team (optional) type: string away_team: description: Away team name (can be empty/null) type: string away_team_id: description: Away team ID (can be empty/null) type: integer home_kit_image: description: Kit or image for home team (optional) type: string home_team: description: Home team name (if available) type: string home_team_id: description: Home team ID type: integer id: description: Event ID type: string league_cc: description: League country code type: string league_id: description: League ID type: integer league_name: description: League name type: string match_name: description: Match or event name type: string source: description: bet api provider (bet365, betfair) type: string sport_id: description: Sport ID type: integer start_time: description: Converted from "time" field in UNIX format type: string status: allOf: - $ref: '#/definitions/domain.EventStatus' description: Match Status for event type: object domain.VirtualGame: properties: category: type: string created_at: type: string id: type: integer is_active: type: boolean is_featured: type: boolean max_bet: type: number min_bet: type: number name: type: string popularity_score: type: integer provider: type: string rtp: type: number thumbnail_url: type: string updated_at: type: string volatility: type: string type: object handlers.AdminRes: properties: created_at: type: string email: type: string email_verified: type: boolean first_name: type: string id: type: integer last_login: type: string last_name: type: string phone_number: type: string phone_verified: type: boolean role: $ref: '#/definitions/domain.Role' suspended: type: boolean suspended_at: type: string updated_at: type: string type: object handlers.BranchDetailRes: properties: balance: example: 100.5 type: number branch_manager_id: example: 1 type: integer company_id: example: 1 type: integer id: example: 1 type: integer is_self_owned: example: false type: boolean location: example: Addis Ababa type: string manager_name: example: John Smith type: string manager_phone_number: example: "0911111111" type: string name: example: 4-kilo Branch type: string wallet_id: example: 1 type: integer type: object handlers.BranchOperationRes: properties: description: example: Betting on sport events type: string name: example: SportsBook type: string type: object handlers.BranchRes: properties: branch_manager_id: example: 1 type: integer company_id: example: 1 type: integer id: example: 1 type: integer is_self_owned: example: false type: boolean location: example: Addis Ababa type: string name: example: 4-kilo Branch type: string wallet_id: example: 1 type: integer type: object handlers.CheckPhoneEmailExistReq: properties: email: example: john.doe@example.com type: string phone_number: example: "1234567890" type: string type: object handlers.CheckPhoneEmailExistRes: properties: email_exist: type: boolean phone_number_exist: type: boolean type: object handlers.CompanyRes: properties: admin_id: example: 1 type: integer id: example: 1 type: integer name: example: CompanyName type: string wallet_id: example: 1 type: integer type: object handlers.CreateAdminReq: properties: company_id: example: 1 type: integer email: example: john.doe@example.com type: string first_name: example: John type: string last_name: example: Doe type: string password: example: password123 type: string phone_number: example: "1234567890" type: string type: object handlers.CreateBranchOperationReq: properties: branch_id: example: 1 type: integer operation_id: example: 1 type: integer type: object handlers.CreateBranchReq: properties: branch_manager_id: example: 1 type: integer company_id: example: 1 type: integer is_self_owned: example: false type: boolean location: example: Addis Ababa maxLength: 100 minLength: 3 type: string name: example: 4-kilo Branch maxLength: 100 minLength: 3 type: string operations: items: type: integer type: array required: - branch_manager_id - location - name - operations type: object handlers.CreateCashierReq: properties: branch_id: example: 1 type: integer email: example: john.doe@example.com type: string first_name: example: John type: string last_name: example: Doe type: string password: example: password123 type: string phone_number: example: "1234567890" type: string suspended: example: false type: boolean type: object handlers.CreateCompanyReq: properties: admin_id: example: 1 type: integer name: example: CompanyName type: string type: object handlers.CreateManagerReq: properties: company_id: example: 1 type: integer email: example: john.doe@example.com type: string first_name: example: John type: string last_name: example: Doe type: string password: example: password123 type: string phone_number: example: "1234567890" type: string type: object handlers.CreateSupportedOperationReq: properties: description: example: Betting on sport events type: string name: example: SportsBook type: string type: object handlers.CreateTransactionReq: properties: account_name: type: string account_number: type: string amount: example: 100 type: number bank_code: type: string beneficiary_name: type: string bet_id: example: 1 type: integer branch_id: example: 1 type: integer cashout_id: example: "191212" type: string full_name: example: John Smith type: string payment_option: allOf: - $ref: '#/definitions/domain.PaymentOption' example: 1 phone_number: example: "0911111111" type: string reference_number: type: string type: example: 1 type: integer type: object handlers.CreateTransferReq: properties: amount: example: 100 type: number payment_method: example: cash type: string type: object handlers.CustomerWalletRes: properties: created_at: type: string customer_id: example: 1 type: integer id: example: 1 type: integer regular_balance: example: 100 type: number regular_id: example: 1 type: integer regular_updated_at: type: string static_balance: example: 100 type: number static_id: example: 1 type: integer static_updated_at: type: string type: object handlers.GetCashierRes: properties: branch_id: type: integer branch_location: type: string branch_name: type: string branch_wallet: type: integer created_at: type: string email: type: string email_verified: type: boolean first_name: type: string id: type: integer last_login: type: string last_name: type: string phone_number: type: string phone_verified: type: boolean role: $ref: '#/definitions/domain.Role' suspended: type: boolean suspended_at: type: string updated_at: type: string type: object handlers.ManagersRes: properties: created_at: type: string email: type: string email_verified: type: boolean first_name: type: string id: type: integer last_login: type: string last_name: type: string phone_number: type: string phone_verified: type: boolean role: $ref: '#/definitions/domain.Role' suspended: type: boolean suspended_at: type: string updated_at: type: string type: object handlers.RegisterCodeReq: properties: email: example: john.doe@example.com type: string phone_number: example: "1234567890" type: string provider: allOf: - $ref: '#/definitions/domain.OtpProvider' example: twilio required: - provider type: object handlers.RegisterUserReq: properties: email: example: john.doe@example.com type: string first_name: example: John type: string last_name: example: Doe type: string otp: example: "123456" type: string password: example: password123 type: string phone_number: example: "1234567890" type: string provider: allOf: - $ref: '#/definitions/domain.OtpProvider' example: twilio referal_code: example: ABC123 type: string required: - provider type: object handlers.ResetCodeReq: properties: email: example: john.doe@example.com type: string phone_number: example: "1234567890" type: string provider: allOf: - $ref: '#/definitions/domain.OtpProvider' example: twilio required: - provider type: object handlers.ResetPasswordReq: properties: email: example: john.doe@example.com type: string otp: example: "123456" type: string password: example: newpassword123 minLength: 8 type: string phone_number: example: "1234567890" type: string required: - otp - password type: object handlers.ResultRes: properties: outcomes: items: $ref: '#/definitions/domain.BetOutcome' type: array type: object handlers.SearchUserByNameOrPhoneReq: properties: query: type: string role: $ref: '#/definitions/domain.Role' type: object handlers.SupportedOperationRes: properties: description: example: Betting on sport events type: string id: example: 1 type: integer name: example: SportsBook type: string type: object handlers.TransactionRes: properties: account_name: type: string account_number: type: string amount: example: 100 type: number approved_by: example: 1 type: integer approver_name: example: John Smith type: string bank_code: type: string beneficiary_name: type: string bet_id: example: 1 type: integer branch_id: example: 1 type: integer branch_location: example: Branch Location type: string branch_name: example: Branch Name type: string cashier_id: example: 1 type: integer cashier_name: example: John Smith type: string company_id: example: 1 type: integer created_at: type: string full_name: example: John Smith type: string id: example: 1 type: integer number_of_outcomes: example: 1 type: integer payment_option: allOf: - $ref: '#/definitions/domain.PaymentOption' example: 1 phone_number: example: "0911111111" type: string reference_number: type: string type: example: 1 type: integer updated_at: type: string verified: example: true type: boolean type: object handlers.TransferWalletRes: properties: amount: example: 100 type: number cashier_id: example: 789 type: integer created_at: example: "2025-04-08T12:00:00Z" type: string id: example: 1 type: integer payment_method: example: bank type: string receiver_wallet_id: example: 1 type: integer sender_wallet_id: example: 1 type: integer type: example: transfer type: string updated_at: example: "2025-04-08T12:30:00Z" type: string verified: example: true type: boolean type: object handlers.UpdateCashOutReq: properties: cashedOut: type: boolean type: object handlers.UpdateCompanyReq: properties: admin_id: example: 1 type: integer name: example: CompanyName type: string type: object handlers.UpdateTransactionVerifiedReq: properties: verified: example: true type: boolean type: object handlers.UpdateUserSuspendReq: properties: suspended: example: true type: boolean user_id: example: 123 type: integer required: - suspended - user_id type: object handlers.UpdateUserSuspendRes: properties: suspended: type: boolean user_id: type: integer type: object handlers.UpdateWalletActiveReq: properties: is_active: example: true type: boolean required: - is_active type: object handlers.UserProfileRes: properties: created_at: type: string email: type: string email_verified: type: boolean first_name: type: string id: type: integer last_login: type: string last_name: type: string phone_number: type: string phone_verified: type: boolean role: $ref: '#/definitions/domain.Role' suspended: type: boolean suspended_at: type: string updated_at: type: string type: object handlers.WalletRes: properties: amount: example: 100 type: number created_at: type: string id: example: 1 type: integer is_active: example: true type: boolean is_bettable: example: true type: boolean is_transferable: example: true type: boolean is_withdraw: example: true type: boolean updated_at: type: string user_id: example: 1 type: integer type: object handlers.launchVirtualGameReq: properties: currency: example: USD type: string game_id: example: crash_001 type: string mode: enum: - fun - real example: real type: string required: - currency - game_id - mode type: object handlers.launchVirtualGameRes: properties: launch_url: type: string type: object handlers.loginCustomerReq: properties: email: example: john.doe@example.com type: string password: example: password123 type: string phone_number: example: "1234567890" type: string required: - password type: object handlers.loginCustomerRes: properties: access_token: type: string refresh_token: type: string role: type: string type: object handlers.logoutReq: properties: refresh_token: example: type: string required: - refresh_token type: object handlers.refreshToken: properties: access_token: example: type: string refresh_token: example: type: string required: - access_token - refresh_token type: object handlers.updateAdminReq: properties: company_id: example: 1 type: integer first_name: example: John type: string last_name: example: Doe type: string suspended: example: false type: boolean type: object handlers.updateCashierReq: properties: first_name: example: John type: string last_name: example: Doe type: string suspended: example: false type: boolean type: object handlers.updateManagerReq: properties: company_id: example: 1 type: integer first_name: example: John type: string last_name: example: Doe type: string suspended: example: false type: boolean type: object response.APIResponse: properties: data: {} message: type: string metadata: {} page: type: integer status: $ref: '#/definitions/response.Status' timestamp: type: string total: type: integer type: object response.Status: enum: - error - success type: string x-enum-varnames: - Error - Success info: contact: email: support@swagger.io name: API Support url: http://www.swagger.io/support description: This is server for FortuneBet. license: name: Apache 2.0 url: http://www.apache.org/licenses/LICENSE-2.0.html termsOfService: http://swagger.io/terms/ title: FortuneBet API version: 1.0.1 paths: /admin: get: consumes: - application/json description: Get all Admins parameters: - description: Page number in: query name: page type: integer - description: Page size in: query name: page_size type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.AdminRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Get all Admins tags: - admin post: consumes: - application/json description: Create Admin parameters: - description: Create admin in: body name: manger required: true schema: $ref: '#/definitions/handlers.CreateAdminReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Create Admin tags: - admin /admin/{id}: get: consumes: - application/json description: Get a single admin by id parameters: - description: User ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.AdminRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Get admin by id tags: - admin put: consumes: - application/json description: Update Admin parameters: - description: Update Admin in: body name: admin required: true schema: $ref: '#/definitions/handlers.updateAdminReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Update Admin tags: - admin /api/v1/alea-games/launch: get: consumes: - application/json description: Generates an authenticated launch URL for Alea Play virtual games parameters: - description: Game identifier (e.g., 'aviator', 'plinko') in: query name: game_id required: true type: string - default: USD description: Currency code (ISO 4217) enum: - USD - EUR - GBP in: query name: currency type: string - default: real description: Game mode enum: - real - demo in: query name: mode type: string produces: - application/json responses: "200": description: Returns authenticated game launch URL schema: additionalProperties: allOf: - type: string - properties: launch_url: type: string type: object type: object security: - BearerAuth: [] summary: Launch an Alea Play virtual game tags: - Alea Virtual Games /api/v1/chapa/banks: get: consumes: - application/json description: Get list of banks supported by Chapa produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.Response' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Get supported banks tags: - Chapa /api/v1/chapa/payments/deposit: post: consumes: - application/json description: Starts a new deposit process using Chapa payment gateway parameters: - description: Deposit request in: body name: request required: true schema: $ref: '#/definitions/domain.ChapaDepositRequestPayload' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.ChapaDepositResponse' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' security: - ApiKeyAuth: [] summary: Initiate a deposit tags: - Chapa /api/v1/chapa/payments/manual/verify/{tx_ref}: get: consumes: - application/json description: Manually verify a payment using Chapa's API parameters: - description: Transaction Reference in: path name: tx_ref required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.ChapaVerificationResponse' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Verify a payment manually tags: - Chapa /api/v1/chapa/payments/webhook/verify: post: consumes: - application/json description: Handles payment notifications from Chapa parameters: - description: Webhook payload in: body name: request required: true schema: $ref: '#/definitions/domain.ChapaWebhookPayload' produces: - application/json responses: "200": description: OK schema: additionalProperties: true type: object "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Chapa payment webhook callback (used by Chapa) tags: - Chapa /api/v1/chapa/payments/withdraw: post: consumes: - application/json description: Initiates a withdrawal request to transfer funds to a bank account via Chapa parameters: - description: Withdrawal request details in: body name: request required: true schema: $ref: '#/definitions/domain.ChapaWithdrawalRequest' produces: - application/json responses: "201": description: Chapa withdrawal process initiated successfully schema: $ref: '#/definitions/domain.Response' "400": description: Invalid request body schema: $ref: '#/definitions/domain.ErrorResponse' "401": description: Unauthorized schema: $ref: '#/definitions/domain.ErrorResponse' "422": description: Unprocessable entity schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal server error schema: $ref: '#/definitions/domain.ErrorResponse' security: - ApiKeyAuth: [] summary: Initiate a withdrawal tags: - Chapa /api/v1/currencies: get: description: Returns list of supported currencies produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: items: type: integer type: array type: object summary: Get supported currencies tags: - Multi-Currency /api/v1/currencies/convert: get: description: Converts amount from one currency to another parameters: - description: Source currency code (e.g., USD) in: query name: from required: true type: string - description: Target currency code (e.g., ETB) in: query name: to required: true type: string - description: Amount to convert in: query name: amount required: true type: number produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: type: number type: object "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' summary: Convert currency tags: - Multi-Currency /api/v1/reports/dashboard: get: consumes: - application/json description: Returns a comprehensive dashboard report with key metrics parameters: - description: Company ID filter in: query name: company_id type: integer - description: Branch ID filter in: query name: branch_id type: integer - description: User ID filter in: query name: user_id type: integer - description: Start time filter (RFC3339 format) in: query name: start_time type: string - description: End time filter (RFC3339 format) in: query name: end_time type: string - description: Sport ID filter in: query name: sport_id type: string - description: Status filter (0=Pending, 1=Win, 2=Loss, 3=Half, 4=Void, 5=Error) in: query name: status type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.DashboardSummary' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "401": description: Unauthorized schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' security: - ApiKeyAuth: [] summary: Get dashboard report tags: - Reports /api/v1/virtual-games/recommendations/{userID}: get: consumes: - application/json description: Returns a list of recommended virtual games for a specific user parameters: - description: User ID in: path name: userID required: true type: string produces: - application/json responses: "200": description: Recommended games fetched successfully schema: $ref: '#/definitions/domain.RecommendationSuccessfulResponse' "500": description: Failed to fetch recommendations schema: $ref: '#/definitions/domain.RecommendationErrorResponse' summary: Get virtual game recommendations tags: - Recommendations /api/v1/webhooks/alea: post: consumes: - application/json description: Handles webhook callbacks from Alea Play virtual games for bet settlement parameters: - description: Callback payload in: body name: callback required: true schema: $ref: '#/definitions/domain.AleaPlayCallback' produces: - application/json responses: "200": description: Callback processed successfully schema: additionalProperties: allOf: - type: string - properties: status: type: string type: object type: object summary: Process Alea Play game callback tags: - Alea Virtual Games /auth/login: post: consumes: - application/json description: Login customer parameters: - description: Login customer in: body name: login required: true schema: $ref: '#/definitions/handlers.loginCustomerReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.loginCustomerRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Login customer tags: - auth /auth/logout: post: consumes: - application/json description: Logout customer parameters: - description: Logout customer in: body name: logout required: true schema: $ref: '#/definitions/handlers.logoutReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Logout customer tags: - auth /auth/refresh: post: consumes: - application/json description: Refresh token parameters: - description: tokens in: body name: refresh required: true schema: $ref: '#/definitions/handlers.refreshToken' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.loginCustomerRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Refresh token tags: - auth /bet: get: consumes: - application/json description: Gets all the bets produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.BetRes' type: array "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Gets all bets tags: - bet post: consumes: - application/json description: Creates a bet parameters: - description: Creates bet in: body name: createBet required: true schema: $ref: '#/definitions/domain.CreateBetReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.BetRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Create a bet tags: - bet /bet/{id}: delete: consumes: - application/json description: Deletes bet by id parameters: - description: Bet ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Deletes bet by id tags: - bet get: consumes: - application/json description: Gets a single bet by id parameters: - description: Bet ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.BetRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Gets bet by id tags: - bet patch: consumes: - application/json description: Updates the cashed out field parameters: - description: Bet ID in: path name: id required: true type: integer - description: Updates Cashed Out in: body name: updateCashOut required: true schema: $ref: '#/definitions/handlers.UpdateCashOutReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Updates the cashed out field tags: - bet /bet/cashout/{id}: get: consumes: - application/json description: Gets a single bet by cashout id parameters: - description: cashout ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.BetRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Gets bet by cashout id tags: - bet /branch: get: consumes: - application/json description: Gets all branches produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/handlers.BranchDetailRes' type: array "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Gets all branches tags: - branch post: consumes: - application/json description: Creates a branch parameters: - description: Creates branch in: body name: createBranch required: true schema: $ref: '#/definitions/handlers.CreateBranchReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.BranchRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Create a branch tags: - branch /branch/{id}: delete: consumes: - application/json description: Delete the branch parameters: - description: Branch ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Delete the branch tags: - branch get: consumes: - application/json description: Gets a single branch by id parameters: - description: Branch ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.BranchDetailRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Gets branch by id tags: - branch put: consumes: - application/json description: Updates a branch parameters: - description: Branch ID in: path name: id required: true type: integer - description: Update Branch in: body name: updateBranch required: true schema: $ref: '#/definitions/handlers.CreateBranchReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.BranchRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Updates a branch tags: - branch /branch/{id}/bets: get: consumes: - application/json description: Gets bets by its branch id produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.BetRes' type: array "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Gets bets by its branch id tags: - branch /branch/{id}/cashier: get: consumes: - application/json description: Gets branch cashiers parameters: - description: Branch ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/handlers.GetCashierRes' type: array "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Gets branch cashiers tags: - branch /branch/{id}/operation: get: consumes: - application/json description: Gets branch operations parameters: - description: Branch ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/handlers.BranchOperationRes' type: array "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Gets branch operations tags: - branch /branch/{id}/operation/{opID}: delete: consumes: - application/json description: Delete the branch operation parameters: - description: Branch ID in: path name: id required: true type: integer - description: Branch Operation ID in: path name: opID required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Delete the branch operation tags: - branch /branchCashier: get: consumes: - application/json description: Gets branch for cahier parameters: - description: Branch ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.BranchDetailRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Gets branch for cahier tags: - branch /branchWallet: get: consumes: - application/json description: Retrieve all branch wallets produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/handlers.WalletRes' type: array "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Get all branch wallets tags: - wallet /cashier/{id}: get: consumes: - application/json description: Get a single cashier by id parameters: - description: User ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.UserProfileRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Get cashier by id tags: - cashier /cashierWallet: get: consumes: - application/json description: Get wallet for cashier parameters: - description: User ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.UserProfileRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Get wallet for cashier tags: - cashier /cashiers: get: consumes: - application/json description: Get all cashiers parameters: - description: Page number in: query name: page type: integer - description: Page size in: query name: page_size type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Get all cashiers tags: - cashier post: consumes: - application/json description: Create cashier parameters: - description: Create cashier in: body name: cashier required: true schema: $ref: '#/definitions/handlers.CreateCashierReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Create cashier tags: - cashier /cashiers/{id}: put: consumes: - application/json description: Update cashier parameters: - description: Cashier ID in: path name: id required: true type: integer - description: Update cashier in: body name: cashier required: true schema: $ref: '#/definitions/handlers.updateCashierReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Update cashier tags: - cashier /company: get: consumes: - application/json description: Gets all companies produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/handlers.CompanyRes' type: array "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Gets all companies tags: - company post: consumes: - application/json description: Creates a company parameters: - description: Creates company in: body name: createCompany required: true schema: $ref: '#/definitions/handlers.CreateCompanyReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.CompanyRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Create a company tags: - company /company/{id}: delete: consumes: - application/json description: Delete the company parameters: - description: Company ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Delete the company tags: - company get: consumes: - application/json description: Gets a single company by id parameters: - description: Company ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.CompanyRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Gets company by id tags: - company put: consumes: - application/json description: Updates a company parameters: - description: Company ID in: path name: id required: true type: integer - description: Update Company in: body name: updateCompany required: true schema: $ref: '#/definitions/handlers.UpdateCompanyReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.CompanyRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Updates a company tags: - company /company/{id}/branch: get: consumes: - application/json description: Gets branches by company id parameters: - description: Company ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/handlers.BranchDetailRes' type: array "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Gets branches by company id tags: - branch /events: get: consumes: - application/json description: Retrieve all upcoming events from the database parameters: - description: Page number in: query name: page type: integer - description: Page size in: query name: page_size type: integer - description: League ID Filter in: query name: league_id type: string - description: Sport ID Filter in: query name: sport_id type: string - description: Country Code Filter in: query name: cc type: string - description: Start Time in: query name: first_start_time type: string - description: End Time in: query name: last_start_time type: string produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.UpcomingEvent' type: array "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Retrieve all upcoming events tags: - prematch /events/{id}: delete: consumes: - application/json description: Set the event status to removed parameters: - description: Event ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Set the event status to removed tags: - event get: consumes: - application/json description: Retrieve an upcoming event by ID parameters: - description: ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.UpcomingEvent' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Retrieve an upcoming by ID tags: - prematch /leagues: get: consumes: - application/json description: Gets all leagues produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.League' type: array "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Gets all leagues tags: - leagues /manager/{id}/branch: get: consumes: - application/json description: Gets a branches by manager id parameters: - description: User ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/handlers.BranchDetailRes' type: array "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Gets branches by manager id tags: - branch /managers: get: consumes: - application/json description: Get all Managers parameters: - description: Page number in: query name: page type: integer - description: Page size in: query name: page_size type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.ManagersRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Get all Managers tags: - manager post: consumes: - application/json description: Create Manager parameters: - description: Create manager in: body name: manger required: true schema: $ref: '#/definitions/handlers.CreateManagerReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Create Manager tags: - manager /managers/{id}: get: consumes: - application/json description: Get a single manager by id parameters: - description: User ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.ManagersRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Get manager by id tags: - manager put: consumes: - application/json description: Update Managers parameters: - description: Update Managers in: body name: Managers required: true schema: $ref: '#/definitions/handlers.updateManagerReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Update Managers tags: - manager /odds: get: consumes: - application/json description: Retrieve all prematch odds from the database produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.Odd' type: array "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Retrieve all prematch odds tags: - prematch /odds/upcoming/{upcoming_id}: get: consumes: - application/json description: Retrieve prematch odds by upcoming event ID (FI from Bet365) with optional pagination parameters: - description: Upcoming Event ID (FI) in: path name: upcoming_id required: true type: string - description: 'Number of results to return (default: 10)' in: query name: limit type: integer - description: 'Number of results to skip (default: 0)' in: query name: offset type: integer produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.Odd' type: array "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Retrieve prematch odds by upcoming ID (FI) tags: - prematch /odds/upcoming/{upcoming_id}/market/{market_id}: get: consumes: - application/json description: Retrieve raw odds records using a Market ID parameters: - description: Upcoming ID in: path name: upcoming_id required: true type: string - description: Market ID in: path name: market_id required: true type: string produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.RawOddsByMarketID' type: array "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Retrieve raw odds by Market ID tags: - prematch /operation: post: consumes: - application/json description: Creates a operation parameters: - description: Creates operation in: body name: createBranchOperation required: true schema: $ref: '#/definitions/handlers.CreateBranchOperationReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.BranchOperationRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Create a operation tags: - branch /popok/games: get: consumes: - application/json description: Retrieves the list of available PopOK slot games parameters: - default: USD description: Currency (e.g. USD, ETB) in: query name: currency type: string produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.PopOKGame' type: array "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Get PopOK Games List tags: - Virtual Games - PopOK /popok/games/recommend: get: description: Recommends games based on user history or randomly parameters: - description: User ID in: query name: user_id required: true type: integer produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.GameRecommendation' type: array "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Recommend virtual games tags: - Virtual Games - PopOK /random/bet: post: consumes: - application/json description: Generate a random bet parameters: - description: Create Random bet in: body name: createBet required: true schema: $ref: '#/definitions/domain.RandomBetReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.BetRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Generate a random bet tags: - bet /referral/settings: get: consumes: - application/json description: Retrieves current referral settings (admin only) produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.ReferralSettings' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "403": description: Forbidden schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' security: - Bearer: [] summary: Get referral settings tags: - referral put: consumes: - application/json description: Updates referral settings (admin only) parameters: - description: Referral settings in: body name: settings required: true schema: $ref: '#/definitions/domain.ReferralSettings' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "403": description: Forbidden schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' security: - Bearer: [] summary: Update referral settings tags: - referral /referral/stats: get: consumes: - application/json description: Retrieves referral statistics for the authenticated user produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.ReferralStats' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' security: - Bearer: [] summary: Get referral statistics tags: - referral /result/{id}: get: consumes: - application/json description: Get results for an event parameters: - description: Event ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/handlers.ResultRes' type: array "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Get results for an event tags: - result /search/branch: get: consumes: - application/json description: Search branches by name or location parameters: - description: Search query in: query name: q required: true type: string produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/handlers.BranchDetailRes' type: array "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Search branches tags: - branch /search/company: get: consumes: - application/json description: Gets all companies produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/handlers.CompanyRes' type: array "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Gets all companies tags: - company /supportedOperation: get: consumes: - application/json description: Gets all supported operations produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/handlers.BranchDetailRes' type: array "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Gets all supported operations tags: - branch post: consumes: - application/json description: Creates a supported operation parameters: - description: Creates supported operation in: body name: createSupportedOperation required: true schema: $ref: '#/definitions/handlers.CreateSupportedOperationReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.SupportedOperationRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Create a supported operation tags: - branch /ticket: get: consumes: - application/json description: Retrieve all tickets produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.TicketRes' type: array "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Get all tickets tags: - ticket post: consumes: - application/json description: Creates a temporary ticket parameters: - description: Creates ticket in: body name: createTicket required: true schema: $ref: '#/definitions/domain.CreateTicketReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.CreateTicketRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Create a temporary ticket tags: - ticket /ticket/{id}: get: consumes: - application/json description: Retrieve ticket details by ticket ID parameters: - description: Ticket ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.TicketRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Get ticket by ID tags: - ticket /top-leagues: get: consumes: - application/json description: Retrieve all top leagues produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.UpcomingEvent' type: array "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Retrieve all top leagues tags: - prematch /transaction: get: consumes: - application/json description: Gets all the transactions produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/handlers.TransactionRes' type: array "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Gets all transactions tags: - transaction post: consumes: - application/json description: Creates a transaction parameters: - description: Creates transaction in: body name: createBet required: true schema: $ref: '#/definitions/handlers.CreateTransactionReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.TransactionRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Create a transaction tags: - transaction /transaction/{id}: get: consumes: - application/json description: Gets a single transaction by id parameters: - description: Transaction ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.TransactionRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Gets transaction by id tags: - transaction put: consumes: - application/json description: Updates the verified status of a transaction parameters: - description: Transaction ID in: path name: id required: true type: integer - description: Updates Transaction Verification in: body name: updateVerified required: true schema: $ref: '#/definitions/handlers.UpdateTransactionVerifiedReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Updates the verified field of a transaction tags: - transaction /transfer/refill/:id: post: consumes: - application/json description: Super Admin route to refill a wallet parameters: - description: Create Transfer in: body name: refillWallet required: true schema: $ref: '#/definitions/handlers.CreateTransferReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.TransferWalletRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Refill wallet tags: - transfer /transfer/wallet/:id: post: consumes: - application/json description: Create a transfer to wallet parameters: - description: Create Transfer in: body name: transferToWallet required: true schema: $ref: '#/definitions/handlers.CreateTransferReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.TransferWalletRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Create a transfer to wallet tags: - transfer /transfer/wallet/{id}: get: consumes: - application/json description: Get transfer by wallet parameters: - description: Create Transfer in: body name: transferToWallet required: true schema: $ref: '#/definitions/handlers.CreateTransferReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.TransferWalletRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Get transfer by wallet tags: - transfer /user/bets: get: consumes: - application/json description: Gets user bets produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.BetRes' type: array "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Gets user bets tags: - user /user/checkPhoneEmailExist: post: consumes: - application/json description: Check if phone number or email exist parameters: - description: Check phone number or email exist in: body name: checkPhoneEmailExist required: true schema: $ref: '#/definitions/handlers.CheckPhoneEmailExistReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.CheckPhoneEmailExistRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Check if phone number or email exist tags: - user /user/delete/{id}: delete: consumes: - application/json description: Delete a user by their ID parameters: - description: User ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Delete user by ID tags: - user /user/profile: get: consumes: - application/json description: Get user profile produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.UserProfileRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' security: - Bearer: [] summary: Get user profile tags: - user /user/register: post: consumes: - application/json description: Register user parameters: - description: Register user in: body name: registerUser required: true schema: $ref: '#/definitions/handlers.RegisterUserReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Register user tags: - user /user/resetPassword: post: consumes: - application/json description: Reset password parameters: - description: Reset password in: body name: resetPassword required: true schema: $ref: '#/definitions/handlers.ResetPasswordReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Reset password tags: - user /user/search: post: consumes: - application/json description: Search for user using name or phone parameters: - description: Search for using his name or phone in: body name: searchUserByNameOrPhone required: true schema: $ref: '#/definitions/handlers.SearchUserByNameOrPhoneReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.UserProfileRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Search for user using name or phone tags: - user /user/sendRegisterCode: post: consumes: - application/json description: Send register code parameters: - description: Send register code in: body name: registerCode required: true schema: $ref: '#/definitions/handlers.RegisterCodeReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Send register code tags: - user /user/sendResetCode: post: consumes: - application/json description: Send reset code parameters: - description: Send reset code in: body name: resetCode required: true schema: $ref: '#/definitions/handlers.ResetCodeReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Send reset code tags: - user /user/single/{id}: get: consumes: - application/json description: Get a single user by id parameters: - description: User ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.UserProfileRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Get user by id tags: - user /user/suspend: post: consumes: - application/json description: Suspend or unsuspend a user parameters: - description: Suspend or unsuspend a user in: body name: updateUserSuspend required: true schema: $ref: '#/definitions/handlers.UpdateUserSuspendReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.UpdateUserSuspendRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Suspend or unsuspend a user tags: - user /user/wallet: get: consumes: - application/json description: Retrieve customer wallet details parameters: - description: Company ID in: header name: company_id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.CustomerWalletRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' security: - Bearer: [] summary: Get customer wallet tags: - wallet /virtual-game/callback: post: consumes: - application/json description: Processes callbacks from PopOK for game events parameters: - description: Callback data in: body name: callback required: true schema: $ref: '#/definitions/domain.PopOKCallback' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Handle PopOK game callback tags: - Virtual Games - PopOK /virtual-game/launch: post: consumes: - application/json description: Generates a URL to launch a PopOK game parameters: - description: Game launch details in: body name: launch required: true schema: $ref: '#/definitions/handlers.launchVirtualGameReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.launchVirtualGameRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "401": description: Unauthorized schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' security: - Bearer: [] summary: Launch a PopOK virtual game tags: - Virtual Games - PopOK /wallet: get: consumes: - application/json description: Retrieve all wallets produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/handlers.WalletRes' type: array "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Get all wallets tags: - wallet /wallet/{id}: get: consumes: - application/json description: Retrieve wallet details by wallet ID parameters: - description: Wallet ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.WalletRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Get wallet by ID tags: - wallet patch: consumes: - application/json description: Can activate and deactivate wallet parameters: - description: Wallet ID in: path name: id required: true type: integer - description: Update Wallet Active in: body name: updateCashOut required: true schema: $ref: '#/definitions/handlers.UpdateWalletActiveReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/response.APIResponse' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Activate and Deactivate Wallet tags: - wallet securityDefinitions: Bearer: in: header name: Authorization type: apiKey swagger: "2.0"