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.Bank: properties: acct_length: type: integer active: type: integer bank_logo: description: URL or base64 type: string country_id: type: integer created_at: type: string currency: type: string id: type: integer is_24hrs: description: nullable type: integer is_active: type: integer is_mobilemoney: description: nullable type: integer is_rtgs: type: integer name: type: string slug: type: string swift: type: string updated_at: 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.FavoriteGameRequest: properties: game_id: type: integer type: object 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.LogEntry: properties: caller: type: string env: type: string fields: additionalProperties: true type: object level: type: string message: type: string service: type: string stacktrace: type: string timestamp: type: string 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: - success - pending - completed - failed type: string x-enum-varnames: - PaymentStatusSuccessful - 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.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.ReportedIssue: properties: created_at: type: string customer_id: type: integer description: type: string id: type: integer issue_type: type: string metadata: additionalProperties: true type: object status: type: string subject: type: string updated_at: type: string 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 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: type: number cashier_id: type: integer created_at: type: string id: type: integer payment_method: type: string receiver_wallet_id: type: integer reference_number: description: ← Add this type: string sender_wallet_id: type: integer type: type: string updated_at: type: string verified: 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/banks: get: produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.Bank' type: array "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: List all banks tags: - Institutions - Banks post: consumes: - application/json parameters: - description: Bank Info in: body name: bank required: true schema: $ref: '#/definitions/domain.Bank' produces: - application/json responses: "201": description: Created schema: $ref: '#/definitions/domain.Bank' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' summary: Create a new bank tags: - Institutions - Banks /api/v1/banks/{id}: delete: parameters: - description: Bank ID in: path name: id required: true type: integer produces: - application/json responses: "204": description: Deleted successfully schema: type: string "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "404": description: Not Found schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Delete a bank tags: - Institutions - Banks get: parameters: - description: Bank ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.Bank' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "404": description: Not Found schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Get a bank by ID tags: - Institutions - Banks put: consumes: - application/json parameters: - description: Bank ID in: path name: id required: true type: integer - description: Bank Info in: body name: bank required: true schema: $ref: '#/definitions/domain.Bank' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.Bank' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "404": description: Not Found schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Update a bank tags: - Institutions - Banks /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/issues: get: description: Admin endpoint to list all reported issues with pagination parameters: - description: Limit in: query name: limit type: integer - description: Offset in: query name: offset type: integer produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.ReportedIssue' type: array "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Get all reported issues tags: - Issues post: consumes: - application/json description: Allows a customer to report a new issue related to the betting platform parameters: - description: Issue to report in: body name: issue required: true schema: $ref: '#/definitions/domain.ReportedIssue' produces: - application/json responses: "201": description: Created schema: $ref: '#/definitions/domain.ReportedIssue' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Report an issue tags: - Issues /api/v1/issues/{issue_id}: delete: description: Admin endpoint to delete a reported issue parameters: - description: Issue ID in: path name: issue_id required: true type: integer responses: "204": description: No Content "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Delete a reported issue tags: - Issues /api/v1/issues/{issue_id}/status: patch: consumes: - application/json description: Admin endpoint to update the status of a reported issue parameters: - description: Issue ID in: path name: issue_id required: true type: integer - description: New issue status (pending, in_progress, resolved, rejected) in: body name: status required: true schema: properties: status: type: string type: object responses: "204": description: No Content "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' summary: Update issue status tags: - Issues /api/v1/issues/customer/{customer_id}: get: description: Returns all issues reported by a specific customer parameters: - description: Customer ID in: path name: customer_id required: true type: integer - description: Limit in: query name: limit type: integer - description: Offset in: query name: offset type: integer produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.ReportedIssue' type: array "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Get reported issues by a customer tags: - Issues /api/v1/logs: get: description: Fetches the 100 most recent application logs from MongoDB produces: - application/json responses: "200": description: List of application logs schema: items: $ref: '#/definitions/domain.LogEntry' type: array "500": description: Internal server error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Retrieve latest application logs tags: - Logs /api/v1/report-files/download/{filename}: get: description: Downloads a generated report CSV file from the server parameters: - description: Name of the report file to download (e.g., report_daily_2025-06-21.csv) in: path name: filename required: true type: string produces: - text/csv responses: "200": description: CSV file will be downloaded schema: type: file "400": description: Missing or invalid filename schema: $ref: '#/definitions/domain.ErrorResponse' "404": description: Report file not found schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal server error while serving the file schema: $ref: '#/definitions/domain.ErrorResponse' summary: Download a CSV report file tags: - Reports /api/v1/report-files/list: get: description: Returns a list of all generated report CSV files available for download produces: - application/json responses: "200": description: List of CSV report filenames schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: items: type: string type: array type: object "500": description: Failed to read report directory schema: $ref: '#/definitions/domain.ErrorResponse' summary: List available report CSV files tags: - Reports /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-game/favorites: get: description: Lists the games that the user marked as favorite 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: Get user's favorite games tags: - VirtualGames - Favourites post: consumes: - application/json description: Adds a game to the user's favorite games list parameters: - description: Game ID to add in: body name: body required: true schema: $ref: '#/definitions/domain.FavoriteGameRequest' produces: - application/json responses: "201": description: created schema: type: string "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Add game to favorites tags: - VirtualGames - Favourites /api/v1/virtual-game/favorites/{gameID}: delete: description: Removes a game from the user's favorites parameters: - description: Game ID to remove in: path name: gameID required: true type: integer produces: - application/json responses: "200": description: removed schema: type: string "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Remove game from favorites tags: - VirtualGames - Favourites /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 /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 /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 /sport/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 /sport/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 /sport/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 /sport/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 /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/domain.ErrorResponse' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' 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/domain.ErrorResponse' "401": description: Unauthorized schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' 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"