definitions: domain.ARIFPAYPaymentMethod: properties: id: type: integer name: type: string type: object 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.ArifpayVerifyByTransactionIDRequest: properties: paymentType: type: integer transactionId: type: string type: object domain.AtlasBetWinRequest: properties: betAmount: type: number casino_id: type: string currency: type: string game: type: string hash: type: string player_id: type: string round_id: type: string session_id: type: string timestamp: type: string transaction_id: type: string winAmount: type: number type: object domain.AtlasBetWinResponse: properties: balance: type: number player_id: type: string type: object domain.AtlasGameEntity: properties: demo_url: description: ✅ new field type: string deviceType: type: string game_id: type: string has_demo: type: boolean hasFreeBets: type: boolean name: type: string providerId: type: string thumbnail_img_url: description: ✅ new field type: string type: type: string type: object domain.AtlasGameInitRequest: properties: currency: type: string game: type: string language: type: string player_id: type: string type: object domain.AtlasGameInitResponse: properties: url: type: string type: object domain.AtlasGetUserDataRequest: properties: casino_id: type: string game: type: string player_id: type: string session_id: type: string type: object domain.AtlasGetUserDataResponse: properties: balance: type: number player_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.BaseEvent: properties: addedTime: $ref: '#/definitions/domain.ValidInt' avgBetAmount: type: integer awayTeam: type: string awayTeamID: type: integer awayTeamImage: type: string defaultIsActive: type: boolean defaultIsFeatured: type: boolean defaultWinningUpperLimit: type: integer fetchedAt: type: string homeTeam: type: string homeTeamID: type: integer homeTeamImage: type: string id: type: integer isLive: type: boolean isMonitored: type: boolean leagueCC: $ref: '#/definitions/domain.ValidString' leagueID: type: integer leagueName: type: string matchMinute: $ref: '#/definitions/domain.ValidInt' matchName: type: string matchPeriod: $ref: '#/definitions/domain.ValidInt' numberOfBets: type: integer score: $ref: '#/definitions/domain.ValidString' source: $ref: '#/definitions/domain.EventSource' sourceEventID: type: string sportID: type: integer startTime: type: string status: $ref: '#/definitions/domain.EventStatus' timerStatus: $ref: '#/definitions/domain.ValidString' totalAmount: type: integer totalOddOutcomes: type: integer totalPotentialWinnings: type: integer type: object domain.BaseLeague: properties: bet365ID: $ref: '#/definitions/domain.ValidInt32' countryCode: $ref: '#/definitions/domain.ValidString' defaultIsActive: type: boolean defaultIsFeatured: type: boolean id: type: integer name: type: string sportID: type: integer 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 cashed_out: example: false type: boolean company_id: example: 1 type: integer company_slug: example: fortune type: string created_at: example: "2025-04-08T12:00:00Z" type: string fast_code: type: string full_name: example: John Smith type: string id: example: 1 type: integer is_shop_bet: example: false type: boolean outcomes: items: $ref: '#/definitions/domain.BetOutcome' type: array status: allOf: - $ref: '#/definitions/domain.OutcomeStatus' example: 1 total_odds: example: 4.22 type: number user_id: example: 2 type: integer type: object domain.BranchDetailRes: properties: balance: example: 100.5 type: number branch_manager_id: example: 1 type: integer company_id: example: 1 type: integer company_name: example: fortune type: string deducted_stake: type: number id: example: 1 type: integer is_active: example: false type: boolean is_self_owned: example: false type: boolean is_wallet_active: 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 number_of_unsettled: type: integer profit_percentage: example: 0.1 type: number stats_updated_at: type: string total_bets: type: integer total_cash_backs: type: number total_cash_out: type: number total_cashiers: type: integer total_stake: type: number total_unsettled_amount: type: number wallet_id: example: 1 type: integer type: object domain.BranchLocation: properties: key: example: addis_ababa type: string name: example: Addis Ababa type: string type: object domain.BranchOperationRes: properties: description: example: Betting on sport events type: string name: example: SportsBook type: string type: object domain.BranchRes: properties: branch_manager_id: example: 1 type: integer company_id: example: 1 type: integer id: example: 1 type: integer is_active: example: false type: boolean is_self_owned: example: false type: boolean location: example: Addis Ababa type: string name: example: 4-kilo Branch type: string profit_percentage: example: 0.1 type: number wallet_id: example: 1 type: integer type: object domain.CashoutReq: properties: account_name: type: string account_number: type: string bank_code: type: string beneficiary_name: type: string branch_id: example: 1 type: integer cashout_id: example: "1234" type: string payment_option: allOf: - $ref: '#/definitions/domain.PaymentOption' example: 1 reference_number: type: string type: object domain.ChapaCancelResponse: properties: amount: type: number created_at: type: string currency: type: string message: type: string status: type: string tx_ref: type: string updated_at: type: string type: object domain.ChapaCustomer: properties: email: type: string first_name: type: string id: type: integer last_name: type: string mobile: type: string type: object domain.ChapaDepositRequestPayload: properties: amount: type: number required: - amount type: object domain.ChapaDepositResponse: properties: checkoutURL: type: string reference: type: string type: object domain.ChapaTransaction: properties: amount: type: string charge: type: string created_at: type: string currency: type: string customer: $ref: '#/definitions/domain.ChapaCustomer' payment_method: type: string ref_id: type: string status: type: string trans_id: type: string type: type: string type: object domain.ChapaTransactionEvent: properties: created_at: type: string item: type: integer message: type: string type: type: string updated_at: type: string type: object domain.ChapaWebhookCustomization: properties: description: type: string logo: type: string title: type: string type: object domain.ChapaWebhookPayment: properties: amount: type: string charge: type: string created_at: type: string currency: type: string customization: $ref: '#/definitions/domain.ChapaWebhookCustomization' email: type: string event: type: string first_name: type: string last_name: type: string meta: description: may vary in structure, so kept flexible mobile: type: string mode: type: string payment_method: type: string reference: type: string status: type: string tx_ref: type: string type: type: string updated_at: 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.CheckoutSessionClientRequest: properties: amount: type: number customerEmail: type: string customerPhone: type: string required: - amount - customerEmail - customerPhone type: object domain.CompanyMarketSettings: properties: companyID: type: integer isActive: $ref: '#/definitions/domain.ValidBool' marketID: type: integer marketName: type: string updatedAt: type: string type: object domain.CompanyRes: properties: admin_id: example: 1 type: integer deducted_percentage: example: 0.1 type: number id: example: 1 type: integer is_active: example: true type: boolean name: example: CompanyName type: string slug: example: slug type: string wallet_id: example: 1 type: integer 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 outcomes: items: $ref: '#/definitions/domain.CreateBetOutcomeReq' type: array required: - amount - outcomes type: object domain.CreateBetWithFastCodeReq: properties: amount: type: number branch_id: type: integer fast_code: type: string type: object domain.CreateBranchOperationReq: properties: branch_id: example: 1 type: integer operation_id: example: 1 type: integer type: object domain.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 profit_percentage: example: 0.1 type: number required: - branch_manager_id - location - name - operations type: object domain.CreateCompanyMarketSettings: properties: companyID: type: integer isActive: $ref: '#/definitions/domain.ValidBool' marketID: type: integer marketName: type: string type: object domain.CreateCompanyReq: properties: admin_id: example: 1 type: integer deducted_percentage: example: 0.1 type: number is_active: type: boolean name: example: CompanyName type: string slug: type: string type: object domain.CreateDirectDeposit: properties: accountHolder: type: string accountNumber: type: string amount: type: number bankName: type: string customerID: type: integer referenceNumber: type: string transferScreenshot: type: string walletID: type: integer type: object domain.CreateSupportedOperationReq: properties: description: example: Betting on sport events type: string name: example: SportsBook type: string 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.CreditBalance: properties: balance: type: number currency: type: string threshold: type: number 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.DemoGameRequest: properties: brandId: type: string deviceType: type: string gameId: type: string ip: type: string language: type: string providerId: type: string type: object domain.DirectDeposit: properties: accountHolder: type: string accountNumber: type: string amount: type: number approvedAt: type: string approvedBy: type: integer bankName: type: string createdAt: type: string customerID: type: integer id: type: integer referenceNumber: type: string rejectionReason: type: string status: type: string transferScreenshot: type: string walletID: type: integer type: object domain.EnetpulseFixture: properties: gender: type: string id: type: string "n": description: convert to int type: string name: type: string round_typeFK: type: string sport_name: type: string sportFK: type: string startdate: description: ISO 8601 type: string status_descFK: type: string status_type: type: string tournament_name: type: string tournament_stage_name: description: TournamentStageFK string `json:"tournament_stageFK"` type: string tournament_template_name: type: string tournament_templateFK: type: string tournamentFK: type: string ut: description: parse to time.Time type: string type: object domain.EnetpulseFixtureWithPreodds: properties: createdAt: type: string fixtureApiID: type: string fixtureID: type: string fixtureName: type: string lastUpdatedAt: type: string preodds: items: $ref: '#/definitions/domain.EnetpulsePreodds' type: array roundTypeFk: type: string sportFk: type: string startDate: type: string statusDescFk: type: string statusType: type: string tournamentFk: type: string tournamentStageFk: type: string tournamentTemplateFk: type: string updatedAt: type: string updatesCount: type: integer type: object domain.EnetpulsePreodds: properties: bettingOffers: items: $ref: '#/definitions/domain.EnetpulsePreoddsBettingOffer' type: array createdAt: type: string dparam: type: string dparam2: type: string eventFK: type: integer eventParticipantNumber: type: integer id: type: integer iparam: type: string iparam2: type: string lastUpdatedAt: type: string outcomeScopeFK: type: integer outcomeSubtypeFK: type: integer outcomeTypeFK: type: integer preoddsID: type: string sparam: type: string updatedAt: type: string updatesCount: type: integer type: object domain.EnetpulsePreoddsBettingOffer: properties: active: type: string betting_offer_id: type: string betting_offer_status_fk: type: integer coupon_key: type: string created_at: type: string id: type: integer last_updated_at: type: string odds: type: number odds_old: type: number odds_provider_fk: type: integer preodds_fk: type: string updated_at: type: string updates_count: type: integer type: object domain.EnetpulseResult: properties: commentary: type: string created_at: type: string first_half_ended: type: string game_ended: type: string game_started: type: string id: type: integer last_updated_at: type: string lineup_confirmed: type: boolean live: type: string livestats_plus: type: string livestats_type: type: string name: type: string result_id: type: string round: type: string round_type_fk: type: string second_half_ended: type: string second_half_started: type: string spectators: type: integer sport_fk: type: string sport_name: type: string start_date: type: string status_desc_fk: type: string status_type: type: string tournament_fk: type: string tournament_name: type: string tournament_stage_name: description: TournamentStageFK string `json:"tournament_stage_fk"` type: string tournament_template_fk: type: string tournament_template_name: type: string updated_at: type: string updates_count: type: integer venue_name: type: string verified: type: boolean type: object domain.EnetpulseSport: properties: created_at: type: string id: description: DB primary key type: integer last_updated_at: type: string name: description: from API "name" type: string sport_id: description: from API "id" type: string status: description: active/inactive type: integer updated_at: type: string updates_count: description: from API "n" type: integer type: object domain.EnetpulseTournament: properties: createdAt: type: string id: description: internal DB PK type: integer lastUpdatedAt: type: string name: type: string status: type: integer tournamentID: type: string tournamentTemplateFK: type: string updatedAt: type: string updatesCount: type: integer type: object domain.EnetpulseTournamentStage: properties: country_fk: description: country FK from API type: string country_name: description: country name from API type: string created_at: type: string end_date: description: end date/time type: string gender: description: male/female/mixed/unknown type: string id: type: integer last_updated_at: description: ut from API type: string name: description: API name type: string stage_id: description: API id type: string start_date: description: start date/time type: string status: description: active/inactive type: integer tournament_fk: description: Foreign key to tournament type: string updated_at: type: string updates_count: description: n from API type: integer type: object domain.EnetpulseTournamentTemplate: properties: created_at: type: string gender: description: male, female, mixed, unknown type: string id: type: integer last_updated_at: type: string name: description: from API "name" type: string sport_fk: description: related sport id type: string status: description: optional type: integer template_id: description: from API "id" type: string updated_at: type: string updates_count: description: from API "n" type: integer type: object domain.ErrorResponse: properties: error: type: string message: type: string type: object domain.EventSource: enum: - b365api - bwin - bfair - 1xbet - enetpulse type: string x-enum-varnames: - EVENT_SOURCE_BET365 - EVENT_SOURCE_BWIN - EVENT_SOURCE_BETFAIR - EVENT_SOURCE_1XBET - EVENT_SOURCE_ENET 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.EventWithSettingsRes: properties: added_time: type: integer average_bet_amount: type: number away_team: type: string away_team_id: type: integer away_team_image: type: string default_is_active: type: boolean default_is_featured: type: boolean default_winning_upper_limit: type: integer fetched_at: type: string home_team: type: string home_team_id: type: integer home_team_image: type: string id: type: integer is_active: type: boolean is_featured: type: boolean is_live: type: boolean is_monitored: type: boolean league_cc: type: string league_id: type: integer league_name: type: string match_minute: type: integer match_name: type: string match_period: type: integer number_of_bets: type: integer score: type: string source: $ref: '#/definitions/domain.EventSource' source_event_id: type: string sport_id: type: integer start_time: type: string status: $ref: '#/definitions/domain.EventStatus' timer_status: type: string total_amount: type: number total_odd_outcomes: type: integer total_potential_winnings: type: number updated_at: type: string winning_upper_limit: type: integer type: object domain.FavoriteGameRequest: properties: game_id: type: integer provider_id: type: string type: object domain.FreeSpinRequest: properties: casino_id: type: string end_date: description: '"yyyy-mm-ddTHH:MM:SS+00:00"' type: string freespins_count: description: count of free spins/bets type: integer hash: type: string player_id: type: string timestamp: type: string type: object domain.FreeSpinResponse: properties: success: type: boolean type: object domain.FreeSpinResultRequest: properties: amount: description: win amount type: number casino_id: type: string currency: type: string game: type: string hash: type: string player_id: type: string round_id: type: integer session_id: type: string timestamp: type: string transaction_id: type: string type: object domain.FreeSpinResultResponse: properties: success: type: boolean type: object domain.GameListRequest: properties: brandId: type: string page: type: integer providerId: type: string size: 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.GameStartRequest: properties: brandId: type: string country: type: string currency: type: string deviceType: type: string gameId: type: string ip: type: string language: type: string playerId: type: string providerId: type: string sessionId: type: string type: object domain.GameStartResponse: properties: startGameUrl: type: string type: object domain.GamingActivityItem: properties: actionType: type: string amount: type: number amountEur: type: number amountUsd: type: number brandId: type: string correlationId: type: string createdAt: type: string currency: type: string gameId: type: string playerId: type: string providerId: type: string refActionType: type: string refRoundType: type: string refTransactionId: type: string roundId: type: string roundType: type: string sessionId: type: string transactionId: type: string type: object domain.GamingActivityRequest: properties: currencies: description: Optional items: type: string type: array excludeFreeWin: description: Optional type: boolean fromDate: description: YYYY-MM-DD type: string gameIds: description: Optional items: type: string type: array page: description: Optional, default 1 type: integer playerIds: description: Optional items: type: string type: array providerId: description: Optional type: string size: description: Optional, default 100 type: integer toDate: description: YYYY-MM-DD type: string type: object domain.GamingActivityResponse: properties: items: items: $ref: '#/definitions/domain.GamingActivityItem' type: array meta: $ref: '#/definitions/domain.PaginationMeta' type: object domain.GeneratePaymentURLRequest: properties: amount: type: integer paymentMethod: type: string paymentReason: type: string phoneNumber: type: string type: object domain.GetCompanyRes: properties: admin_first_name: example: John type: string admin_id: example: 1 type: integer admin_last_name: example: Doe type: string admin_phone_number: example: "1234567890" type: string balance: example: 1 type: number deducted_percentage: example: 0.1 type: number deducted_stake: type: number id: example: 1 type: integer is_active: example: false type: boolean is_wallet_active: example: false type: boolean name: example: CompanyName type: string number_of_unsettled: type: integer slug: example: slug type: string stats_updated_at: type: string total_admins: type: integer total_approvers: type: integer total_bets: type: integer total_branches: type: integer total_cash_backs: type: number total_cash_out: type: number total_cashiers: type: integer total_customers: type: integer total_managers: type: integer total_stake: type: number total_unsettled_amount: type: number wallet_id: example: 1 type: integer type: object domain.HugeWinItem: properties: betAmount: type: number betAmountUsd: type: number betTransactionId: type: string brandId: type: string correlationId: type: string createdAt: type: string currency: type: string gameId: type: string operatorId: type: string playerId: type: string providerId: type: string reason: type: string roundId: type: string winAmount: type: number winAmountUsd: type: number winTransactionId: type: string type: object domain.HugeWinsRequest: properties: brandId: type: string currencies: items: type: string type: array fromDate: type: string gameIds: items: type: string type: array page: type: integer providerId: type: string size: type: integer toDate: type: string type: object domain.HugeWinsResponse: properties: items: items: $ref: '#/definitions/domain.HugeWinItem' type: array meta: $ref: '#/definitions/domain.PaginationMeta' type: object domain.InstResponse: properties: data: description: Changed to interface{} for flexibility message: type: string pagination: allOf: - $ref: '#/definitions/domain.Pagination' description: Made pointer and optional status: type: string type: object domain.JackpotRequest: properties: amount: description: jackpot win type: number casino_id: type: string currency: type: string details: type: string game: type: string hash: type: string player_id: type: string round_id: type: integer session_id: type: string timestamp: type: string transaction_id: type: string type: object domain.JackpotResponse: properties: success: type: boolean 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.LogResponse: properties: data: items: $ref: '#/definitions/domain.LogEntry' type: array message: type: string pagination: $ref: '#/definitions/domain.Pagination' type: object domain.MarketSettings: properties: isActive: type: boolean marketID: type: integer marketName: type: string updatedAt: type: string type: object domain.OddMarketFilter: properties: limit: $ref: '#/definitions/domain.ValidInt32' offset: $ref: '#/definitions/domain.ValidInt32' type: object domain.OddMarketWithEventFilter: properties: isLive: $ref: '#/definitions/domain.ValidBool' limit: $ref: '#/definitions/domain.ValidInt32' offset: $ref: '#/definitions/domain.ValidInt32' status: $ref: '#/definitions/domain.ValidString' type: object domain.OutcomeStatus: enum: - 0 - 1 - 2 - 3 - 4 - 5 type: integer x-enum-comments: OUTCOME_STATUS_ERROR: Error (Unsettled Bet) 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.PaginatedFileResponse: properties: data: items: type: string type: array message: type: string metadata: {} pagination: $ref: '#/definitions/domain.Pagination' status_code: type: integer success: type: boolean type: object domain.Pagination: properties: current_page: type: integer limit: type: integer total: type: integer total_pages: type: integer type: object domain.PaginationMeta: properties: currentPage: type: integer itemCount: type: integer itemsPerPage: type: integer totalItems: type: integer totalPages: type: integer type: object domain.PaymentOption: enum: - 0 - 1 - 2 - 3 type: integer x-enum-varnames: - CASH_TRANSACTION - TELEBIRR_TRANSACTION - ARIFPAY_TRANSACTION - BANK 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.ProviderRequest: properties: brandId: type: string extraData: type: boolean page: type: integer size: type: integer type: object domain.ProviderResponse: properties: items: items: properties: logoForDark: type: string logoForLight: type: string providerId: type: string providerName: type: string type: object type: array 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: expires_at: type: string fetched_at: type: string handicap: type: string id: type: integer market_name: type: string raw_odds: items: additionalProperties: true type: object type: array type: object domain.ReferralStats: properties: totalReferrals: type: integer totalRewardEarned: type: integer type: object domain.ReportedIssue: properties: created_at: type: string 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 user_id: type: integer user_role: $ref: '#/definitions/domain.Role' type: object domain.Response: properties: data: {} message: type: string metadata: {} status_code: type: integer success: type: boolean type: object domain.Role: enum: - super_admin - admin - branch_manager - customer - cashier - transaction_approver type: string x-enum-varnames: - RoleSuperAdmin - RoleAdmin - RoleBranchManager - RoleCustomer - RoleCashier - RoleTransactionApprover domain.RollbackRequest: properties: bet_transaction_id: type: string casino_id: type: string game: type: string hash: type: string player_id: type: string round_id: type: integer session_id: type: string timestamp: type: string type: object domain.RollbackResponse: properties: success: type: boolean type: object domain.RoundResultRequest: properties: amount: description: win amount type: number bet_transaction_id: description: from BET request type: string casino_id: type: string currency: type: string game: type: string hash: type: string player_id: type: string round_id: type: integer session_id: type: string timestamp: type: string transaction_id: description: new transaction id type: string type: object domain.RoundResultResponse: properties: success: type: boolean type: object domain.SantimPayCallbackPayload: properties: accountNumber: type: string address: type: string amount: type: string created_at: type: string currency: type: string failureRedirectUrl: type: string merId: type: string merName: type: string message: type: string msisdn: type: string paymentVia: type: string reason: type: string receiverWalletID: type: string refId: type: string status: type: string successRedirectUrl: type: string thirdPartyId: type: string txnId: type: string updated_at: type: string type: object domain.ShopBetReq: 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 full_name: example: John Smith type: string outcomes: items: $ref: '#/definitions/domain.CreateBetOutcomeReq' type: array payment_option: allOf: - $ref: '#/definitions/domain.PaymentOption' example: 1 phone_number: example: "0911111111" type: string reference_number: type: string type: object domain.ShopBetRes: properties: amount: type: number bet_id: example: 1 type: integer branch_id: example: 2 type: integer cashed_out: example: false type: boolean cashout_id: example: "21234" type: string company_id: example: 2 type: integer created_at: example: "2025-04-08T12:00:00Z" type: string fast_code: example: 12SD1 type: string full_name: example: John type: string id: type: integer number_of_outcomes: example: 1 type: integer outcomes: items: $ref: '#/definitions/domain.BetOutcome' type: array phone_number: example: "1234567890" type: string shop_transaction_id: type: integer status: allOf: - $ref: '#/definitions/domain.OutcomeStatus' example: 1 total_odds: example: 4.22 type: number transaction_verified: example: true type: boolean updated_at: example: "2025-04-08T12:00:00Z" type: string type: object domain.ShopDepositReq: properties: account_name: type: string account_number: type: string amount: example: 100 type: number bank_code: description: |- FullName string `json:"full_name" example:"John Smith"` PhoneNumber string `json:"phone_number" example:"0911111111"` type: string beneficiary_name: type: string branch_id: example: 1 type: integer customer_id: example: 1 type: integer payment_option: allOf: - $ref: '#/definitions/domain.PaymentOption' example: 1 reference_number: type: string type: object domain.ShopDepositRes: properties: customer_id: type: integer id: type: integer shop_transaction_id: type: integer wallet_transfer_id: type: integer type: object domain.ShopTransactionRes: properties: account_name: type: string account_number: type: string amount: example: 100 type: number approved_by: example: 1 type: integer approver_first_name: example: John type: string approver_last_name: example: Smith type: string approver_phone_number: example: "0911111111" type: string bank_code: type: string beneficiary_name: type: string branch_id: example: 1 type: integer branch_location: example: Branch Location type: string branch_name: example: Branch Name type: string cashier_name: example: John Smith type: string company_id: example: 1 type: integer created_at: type: string creator_first_name: example: John type: string creator_last_name: example: Smith type: string creator_phone_number: example: "0911111111" type: string full_name: example: John Smith type: string id: 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 user_id: example: 1 type: integer verified: example: true type: boolean type: object domain.SupportedOperationRes: properties: description: example: Betting on sport events type: string id: example: 1 type: integer name: example: SportsBook type: string type: object domain.SwapRequest: properties: amount: type: number from: type: string to: type: string type: object domain.TelebirrPaymentCallbackPayload: properties: appid: description: App ID provided by Telebirr type: string callback_info: description: Optional merchant-defined callback data type: string merch_code: description: Merchant short code type: string merch_order_id: description: Order ID from merchant system type: string notify_time: description: Notification timestamp (UTC, in seconds) type: string notify_url: description: Optional callback URL type: string payment_order_id: description: Order ID from Telebirr system type: string sign: description: Signature of the payload type: string sign_type: description: Signature type, e.g., SHA256WithRSA type: string total_amount: description: Payment amount type: string trade_status: description: Payment status (e.g., Completed, Failure) type: string trans_currency: description: Currency type (e.g., ETB) type: string trans_end_time: description: Transaction end time (UTC seconds) type: string trans_id: description: Transaction ID type: string type: object 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 company_id: example: 1 type: integer id: example: 1 type: integer outcomes: items: $ref: '#/definitions/domain.TicketOutcome' type: array total_odds: example: 4.22 type: number type: object domain.TransactionStatusRequest: properties: fullParams: type: boolean id: type: string type: object domain.UnifiedGame: properties: bets: items: type: number type: array category: type: string demoUrl: type: string deviceType: type: string gameId: type: string hasDemo: type: boolean hasFreeBets: type: boolean name: type: string provider: type: string providerId: type: string rtp: type: number status: type: integer thumbnail: type: string volatility: type: string type: object domain.UpdateCompanyReq: properties: admin_id: example: 1 type: integer deducted_percentage: example: 0.1 type: number is_active: example: true type: boolean name: example: CompanyName type: string slug: type: string type: object domain.UpdateTransactionVerifiedReq: properties: verified: example: true type: boolean type: object domain.ValidBool: properties: valid: type: boolean value: type: boolean type: object domain.ValidInt: properties: valid: type: boolean value: type: integer type: object domain.ValidInt32: properties: valid: type: boolean value: type: integer type: object domain.ValidString: properties: valid: type: boolean value: type: string type: object domain.VirtualGameProvider: properties: created_at: type: string enabled: type: boolean logo_dark: type: string logo_light: type: string provider_id: description: ID int64 `json:"id" db:"id"` type: string provider_name: type: string updated_at: type: string type: object domain.VirtualGameProviderReport: properties: created_at: type: string id: type: integer provider_id: type: string report_date: type: string report_type: type: string total_bets: type: number total_games_played: type: integer total_payouts: type: number total_players: type: integer total_profit: type: number updated_at: type: string type: object domain.WebhookRequest: properties: nonce: type: string notificationUrl: type: string paymentMethod: type: string phone: type: string sessionId: type: string totalAmount: type: integer transaction: properties: transactionId: type: string transactionStatus: type: string type: object transactionStatus: type: string uuid: type: string type: object handlers.AdminProfileRes: 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.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.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.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.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.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.CreateTransactionApproverReq: 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.CreateTransferReq: properties: amount: example: 100 type: number payment_method: example: cash type: string type: object handlers.CustomerProfileRes: 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 referral_code: type: string role: $ref: '#/definitions/domain.Role' suspended: type: boolean suspended_at: type: string updated_at: type: string type: object handlers.CustomerWalletRes: properties: created_at: type: string customer_id: example: 1 type: integer first_name: example: John type: string id: example: 1 type: integer last_name: example: Smith type: string number_of_deposits: type: integer number_of_transactions: type: integer number_of_transfers: type: integer number_of_withdraws: type: integer phone_number: example: "0911111111" type: string regular_balance: example: 100 type: number regular_id: example: 1 type: integer regular_is_active: example: true type: boolean regular_updated_at: type: string static_balance: example: 100 type: number static_id: example: 1 type: integer static_is_active: example: true type: boolean static_updated_at: type: string total_deposits_amount: type: number total_transactions: type: number total_transfers_amount: type: number total_withdraws_amount: type: number updated_at: type: string type: object handlers.CustomersRes: properties: company_id: type: integer company_name: type: string 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.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 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 referral_code: example: ABC123 type: string type: object handlers.ResetCodeReq: properties: email: example: john.doe@example.com type: string phone_number: example: "1234567890" type: string 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.SetLeagueActiveReq: properties: is_active: type: boolean type: object handlers.SetLeagueAsFeatured: properties: is_featured: example: true type: boolean type: object handlers.TopLeague: properties: events: items: $ref: '#/definitions/domain.EventWithSettingsRes' type: array league_cc: type: string league_id: type: integer league_name: type: string league_sport_id: type: integer type: object handlers.TransferWalletRes: properties: amount: type: number created_at: type: string depositor_first_name: type: string depositor_id: type: integer depositor_last_name: type: string depositor_phone_number: type: string id: type: integer message: type: string 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.UpdateUserSuspendReq: properties: suspended: example: true type: boolean user_id: example: 123 type: integer required: - 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 referral_code: type: string 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: "1" 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.loginAdminReq: 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.loginAdminRes: properties: access_token: type: string refresh_token: type: string role: 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.updateCustomerReq: 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: /account: post: consumes: - application/json description: Callback endpoint for Atlas game server to fetch player balance parameters: - description: Get user data input in: body name: request required: true schema: $ref: '#/definitions/domain.AtlasGetUserDataRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.AtlasGetUserDataResponse' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Atlas Get User Data callback tags: - Virtual Games - Atlas /api/v1/{tenant_slug}/admin-login: post: consumes: - application/json description: Login customer parameters: - description: Login admin in: body name: login required: true schema: $ref: '#/definitions/handlers.loginAdminReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.loginAdminRes' "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 /api/v1/{tenant_slug}/customer-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 /api/v1/{tenant_slug}/events: get: consumes: - application/json description: Retrieve all upcoming events settings 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.BaseEvent' type: array "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Retrieve all upcoming events with settings tags: - prematch /api/v1/{tenant_slug}/leagues: get: consumes: - application/json description: Gets all leagues produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.BaseLeague' 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 /api/v1/{tenant_slug}/leagues/{id}/featured: put: consumes: - application/json description: Set the league to featured/un-featured parameters: - description: League ID in: path name: id required: true type: integer - description: League Featured Request in: body name: active required: true schema: $ref: '#/definitions/handlers.SetLeagueAsFeatured' 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 league to featured/un-featured tags: - leagues /api/v1/{tenant_slug}/leagues/{id}/set-active: put: consumes: - application/json description: Set the league to active parameters: - description: League ID in: path name: id required: true type: integer - description: League Active Request in: body name: active required: true schema: $ref: '#/definitions/handlers.SetLeagueActiveReq' 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 league to active tags: - leagues /api/v1/{tenant_slug}/market-settings: delete: consumes: - application/json description: Remove all overridden market settings for a specific tenant 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 all market settings for a tenant tags: - market_settings get: consumes: - application/json description: Get all market settings overridden for a specific tenant parameters: - 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.CompanyMarketSettings' type: array "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Retrieve all market settings for a tenant tags: - market_settings post: consumes: - application/json description: Insert new market settings for a specific tenant/company parameters: - description: Market Settings in: body name: body required: true schema: $ref: '#/definitions/domain.CreateCompanyMarketSettings' 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: Insert company-specific market settings tags: - market_settings /api/v1/{tenant_slug}/market-settings/{id}: delete: consumes: - application/json description: Remove a specific overridden market setting for a tenant parameters: - description: Market 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 a specific market setting for a tenant tags: - market_settings /api/v1/{tenant_slug}/odds: get: consumes: - application/json description: Retrieve all odds from the database produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.OddMarketFilter' type: array "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Retrieve all odds tags: - prematch /api/v1/{tenant_slug}/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.OddMarketFilter' 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 /api/v1/{tenant_slug}/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 /api/v1/{tenant_slug}/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 /api/v1/{tenant_slug}/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 /api/v1/{tenant_slug}/sport/bet/fastcode: post: consumes: - application/json description: Creates a bet with fast code parameters: - description: Creates bet in: body name: createBetWithFastCode required: true schema: $ref: '#/definitions/domain.CreateBetWithFastCodeReq' 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 with fast code tags: - bet /api/v1/{tenant_slug}/sport/bet/fastcode/{fast_code}: get: consumes: - application/json description: Gets a single bet by fast_code parameters: - description: Bet ID in: path name: fast_code 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 fast_code tags: - bet /api/v1/{tenant_slug}/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 /api/v1/{tenant_slug}/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 /api/v1/{tenant_slug}/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 /api/v1/{tenant_slug}/top-leagues: get: consumes: - application/json description: Retrieve all top leagues produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/handlers.TopLeague' type: array "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Retrieve all top leagues tags: - prematch /api/v1/{tenant_slug}/user/admin-profile: get: consumes: - application/json description: Get user profile produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.AdminProfileRes' "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 /api/v1/{tenant_slug}/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 /api/v1/{tenant_slug}/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 /api/v1/{tenant_slug}/user/customer-profile: get: consumes: - application/json description: Get user profile produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.CustomerProfileRes' "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 /api/v1/{tenant_slug}/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 /api/v1/{tenant_slug}/user/resetPassword: post: consumes: - application/json description: Reset tenant 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 tenant password tags: - user /api/v1/{tenant_slug}/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 /api/v1/{tenant_slug}/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 /api/v1/{tenant_slug}/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 /api/v1/{tenant_slug}/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 /api/v1/{tenant_slug}events/{id}: 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.BaseEvent' "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 /api/v1/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 transaction approver parameters: - description: Create transaction approver in: body name: manger required: true schema: $ref: '#/definitions/handlers.CreateTransactionApproverReq' 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 transaction approver tags: - admin /api/v1/admin-company: get: consumes: - application/json description: Gets a single company by id produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.GetCompanyRes' "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 /api/v1/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/arifpay/b2c-webhook: post: consumes: - application/json description: Handles webhook notifications from Arifpay for B2C transfers and updates transfer + wallet status. parameters: - description: Arifpay webhook payload in: body name: request required: true schema: $ref: '#/definitions/domain.WebhookRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.Response' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Handle Arifpay B2C Webhook tags: - Arifpay /api/v1/arifpay/b2c/transfer: post: consumes: - application/json description: Initiates a B2C transfer using Telebirr, CBE, or MPESA depending on the "type" query parameter parameters: - description: Transfer type (telebirr, cbe, mpesa) in: query name: type required: true type: string - description: Transfer request payload in: body name: request required: true schema: $ref: '#/definitions/domain.CheckoutSessionClientRequest' produces: - application/json responses: "200": description: 'message: transfer executed successfully' schema: additionalProperties: type: string type: object "400": description: 'error: invalid request or unsupported transfer type' schema: additionalProperties: type: string type: object "500": description: 'error: internal server error' schema: additionalProperties: type: string type: object summary: Execute B2C Transfer tags: - Arifpay /api/v1/arifpay/c2b-webhook: post: consumes: - application/json description: Handles webhook notifications from Arifpay for C2B transfers and updates transfer + wallet status. parameters: - description: Arifpay webhook payload in: body name: request required: true schema: $ref: '#/definitions/domain.WebhookRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.Response' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Handle Arifpay C2B Webhook tags: - Arifpay /api/v1/arifpay/checkout: post: consumes: - application/json description: Creates a payment session using Arifpay and returns a redirect URL. parameters: - description: Checkout session request payload in: body name: request required: true schema: $ref: '#/definitions/domain.CheckoutSessionClientRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.Response' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Create Arifpay Checkout Session tags: - Arifpay /api/v1/arifpay/checkout/cancel/{sessionId}: post: consumes: - application/json description: Cancels a payment session using Arifpay before completion. parameters: - description: Checkout session ID in: path name: sessionId required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.Response' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Cancel Arifpay Checkout Session tags: - Arifpay /api/v1/arifpay/payment-methods: get: description: Returns all payment method IDs and names for Arifpay produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.ARIFPAYPaymentMethod' type: array summary: List Arifpay Payment Methods tags: - Arifpay /api/v1/arifpay/session-id/verify-transaction/{session_id}: get: consumes: - application/json description: Verifies an Arifpay transaction using a session ID parameters: - description: Arifpay Session ID in: query name: session_id required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.Response' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Verify Arifpay Transaction by Session ID tags: - Arifpay /api/v1/arifpay/transaction-id/verify-transaction: post: consumes: - application/json description: Verifies a transaction using transaction ID and payment type parameters: - description: Transaction verification payload in: body name: request required: true schema: $ref: '#/definitions/domain.ArifpayVerifyByTransactionIDRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.Response' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Verify Arifpay Transaction tags: - Arifpay /api/v1/atlas/freespin: post: consumes: - application/json description: Sends a request to Atlas to create free spins/bets for a given player parameters: - description: Free spin input in: body name: request required: true schema: $ref: '#/definitions/domain.FreeSpinRequest' produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: $ref: '#/definitions/domain.FreeSpinResponse' type: object "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Create free spins for a player tags: - Virtual Games - Atlas /api/v1/atlas/games: get: description: Retrieves available Atlas virtual games from the provider produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: items: $ref: '#/definitions/domain.AtlasGameEntity' type: array type: object "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: List Atlas virtual games tags: - Virtual Games - Atlas /api/v1/atlas/init-game: post: consumes: - application/json description: Initializes a game session for the given player using Atlas virtual game provider parameters: - description: Start game input in: body name: request required: true schema: $ref: '#/definitions/domain.AtlasGameInitRequest' produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: $ref: '#/definitions/domain.AtlasGameInitResponse' type: object "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Start an Atlas virtual game session tags: - Virtual Games - Atlas /api/v1/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 /api/v1/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 /api/v1/banks: get: parameters: - description: Filter by country ID in: query name: country_id type: integer - description: Filter by active status in: query name: is_active type: boolean - description: Search term for bank name or code in: query name: search type: string - default: 1 description: Page number in: query name: page type: integer - default: 50 description: Items per page in: query maximum: 100 name: page_size type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.InstResponse' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: List all banks with pagination and filtering 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/branch: get: consumes: - application/json description: Gets all branches produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.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/domain.CreateBranchReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.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 /api/v1/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/domain.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/domain.CreateBranchReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.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 /api/v1/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 /api/v1/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 /api/v1/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/domain.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 /api/v1/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 /api/v1/branch/{id}/return: post: consumes: - application/json description: Unassign the branch wallet to company parameters: - description: Branch ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.BranchDetailRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Unassign the branch wallet to company tags: - branch /api/v1/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/domain.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 /api/v1/branchLocation: get: consumes: - application/json description: Gets all branch locations produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.BranchLocation' type: array "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Gets all branch locations tags: - branch /api/v1/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 /api/v1/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 /api/v1/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 /api/v1/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: items: $ref: '#/definitions/handlers.GetCashierRes' type: array "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 /api/v1/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 /api/v1/chapa/balances: get: consumes: - application/json description: Retrieve Chapa account balance, optionally filtered by currency code (e.g., ETB, USD) parameters: - description: Currency code (optional) in: query name: currency_code type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.Response' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Get Chapa account balance tags: - Chapa /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/receipt/{chapa_ref}: get: consumes: - application/json description: Retrieve the Chapa payment receipt URL using the reference ID parameters: - description: Chapa Reference ID in: path name: chapa_ref required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.Response' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Get Chapa Payment Receipt URL tags: - Chapa /api/v1/chapa/payments/webhook/verify: post: consumes: - application/json description: Handles payment and transfer notifications from Chapa parameters: - description: Webhook payload in: body name: request required: true schema: $ref: '#/definitions/domain.ChapaWebhookPayment' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.Response' "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: "200": 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/chapa/swap: post: consumes: - application/json description: Convert an amount from one currency to another using Chapa's currency swap API parameters: - description: Swap request payload in: body name: request required: true schema: $ref: '#/definitions/domain.SwapRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.Response' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Swap currency using Chapa API tags: - Chapa /api/v1/chapa/transaction/cancel/{tx_ref}: put: consumes: - application/json description: Cancels an active Chapa transaction using its transaction reference parameters: - description: Transaction Reference in: path name: tx_ref required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.ChapaCancelResponse' "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' security: - ApiKeyAuth: [] summary: Cancel a Chapa deposit transaction tags: - Chapa /api/v1/chapa/transaction/events/{ref_id}: get: consumes: - application/json description: Retrieve the timeline of events for a specific Chapa transaction parameters: - description: Transaction Reference in: path name: ref_id required: true type: string produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.ChapaTransactionEvent' type: array "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Fetch transaction events tags: - Chapa /api/v1/chapa/transaction/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.Response' "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/transactions: get: consumes: - application/json description: Retrieves all transactions from Chapa payment gateway produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.ChapaTransaction' type: array "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' security: - ApiKeyAuth: [] summary: Get all Chapa transactions tags: - Chapa /api/v1/chapa/transfers: get: consumes: - application/json description: Retrieve all transfer records from Chapa produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.Response' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Get all Chapa transfers tags: - Chapa /api/v1/company: get: consumes: - application/json description: Gets all companies produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.GetCompanyRes' 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/domain.CreateCompanyReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.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 /api/v1/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/domain.GetCompanyRes' "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/domain.UpdateCompanyReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.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 /api/v1/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/domain.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 /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/customer: get: consumes: - application/json description: Get all Customers 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.CustomersRes' "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 Customers tags: - customer /api/v1/customer/{id}: get: consumes: - application/json description: Get a single customer 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.CustomersRes' "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 customer by id tags: - customer put: consumes: - application/json description: Update Customers parameters: - description: Update Customers in: body name: Customers required: true schema: $ref: '#/definitions/handlers.updateCustomerReq' 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 Customers tags: - customer /api/v1/customer/{id}/bets: get: consumes: - application/json description: Get customer bets parameters: - description: User ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.CustomersRes' "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 customer bets tags: - customer /api/v1/customerWallet: get: consumes: - application/json description: Retrieve all customer wallets produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/handlers.CustomerWalletRes' type: array "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Get all customer wallets tags: - wallet /api/v1/direct-deposits: get: consumes: - application/json description: Fetches direct deposits filtered by status with pagination parameters: - description: Deposit status (e.g., PENDING, APPROVED, REJECTED) in: query name: status required: true type: string - description: Page number in: query name: page type: integer - description: Page size in: query name: pageSize type: integer produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: items: $ref: '#/definitions/domain.DirectDeposit' type: array type: object "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Get direct deposits by status tags: - DirectDeposit post: consumes: - application/json description: Creates a direct deposit for a customer and notifies both the customer and admins parameters: - description: Direct deposit details in: body name: body required: true schema: $ref: '#/definitions/domain.CreateDirectDeposit' produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: $ref: '#/definitions/domain.DirectDeposit' type: object "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Create a new direct deposit tags: - DirectDeposit /api/v1/direct-deposits/{depositID}: delete: consumes: - application/json description: Deletes a direct deposit by its ID parameters: - description: Deposit ID in: path name: depositID required: true type: integer produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: type: string type: object "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Delete a direct deposit tags: - DirectDeposit get: consumes: - application/json description: Fetches a single direct deposit by its ID parameters: - description: Deposit ID in: path name: depositID required: true type: integer produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: $ref: '#/definitions/domain.DirectDeposit' type: object "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Get a direct deposit by ID tags: - DirectDeposit /api/v1/direct-deposits/{depositID}/approve: post: consumes: - application/json description: Approves a direct deposit by admin and credits customer wallet parameters: - description: Deposit ID in: path name: depositID required: true type: integer - description: Admin ID performing the approval in: query name: adminID required: true type: integer produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: type: string type: object "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Approve a direct deposit tags: - DirectDeposit /api/v1/direct-deposits/{depositID}/reject: post: consumes: - application/json description: Rejects a direct deposit by admin and notifies the customer parameters: - description: Deposit ID in: path name: depositID required: true type: integer - description: Admin ID performing the rejection in: query name: adminID required: true type: integer - description: Reason for rejection in: query name: reason required: true type: string produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: type: string type: object "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Reject a direct deposit tags: - DirectDeposit /api/v1/enetpulse/betting-offers: get: consumes: - application/json description: Fetches all EnetPulse preodds betting offers stored in the database produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: items: $ref: '#/definitions/domain.EnetpulsePreoddsBettingOffer' type: array type: object "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Get all betting offers tags: - EnetPulse /api/v1/enetpulse/fixtures: get: consumes: - application/json description: Fetches all fixtures stored in the database produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: items: $ref: '#/definitions/domain.EnetpulseFixture' type: array type: object "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Get all stored fixtures tags: - EnetPulse /api/v1/enetpulse/fixtures/preodds: get: consumes: - application/json description: Fetches all EnetPulse fixtures along with their associated pre-match odds produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: items: $ref: '#/definitions/domain.EnetpulseFixtureWithPreodds' type: array type: object "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Get fixtures with preodds tags: - EnetPulse /api/v1/enetpulse/preodds: get: consumes: - application/json description: Fetches all EnetPulse pre-match odds stored in the database produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: items: $ref: '#/definitions/domain.EnetpulsePreodds' type: array type: object "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Get all preodds tags: - EnetPulse /api/v1/enetpulse/preodds-with-offers: get: consumes: - application/json description: Fetches all EnetPulse pre-match odds along with their associated betting offers stored in the database produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: items: $ref: '#/definitions/domain.EnetpulsePreodds' type: array type: object "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Get all preodds with betting offers tags: - EnetPulse /api/v1/enetpulse/results: get: consumes: - application/json description: Fetches all EnetPulse match results stored in the database produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: items: $ref: '#/definitions/domain.EnetpulseResult' type: array type: object "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Get all results tags: - EnetPulse /api/v1/enetpulse/sports: get: consumes: - application/json description: Fetches all sports stored in the database produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: items: $ref: '#/definitions/domain.EnetpulseSport' type: array type: object "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Get all sports tags: - EnetPulse /api/v1/enetpulse/tournament-stages: get: consumes: - application/json description: Fetches all tournament stages stored in the database produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: items: $ref: '#/definitions/domain.EnetpulseTournamentStage' type: array type: object "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Get all tournament stages tags: - EnetPulse /api/v1/enetpulse/tournament-templates: get: consumes: - application/json description: Fetches all tournament templates stored in the database produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: items: $ref: '#/definitions/domain.EnetpulseTournamentTemplate' type: array type: object "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Get all tournament templates tags: - EnetPulse /api/v1/enetpulse/tournaments: get: consumes: - application/json description: Fetches all tournaments stored in the database produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: items: $ref: '#/definitions/domain.EnetpulseTournament' type: array type: object "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Get all tournaments tags: - EnetPulse /api/v1/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.BaseEvent' type: array "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Retrieve all upcoming events tags: - prematch /api/v1/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.BaseEvent' "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 /api/v1/events/{id}/bets: get: consumes: - application/json description: Retrieve bet outcomes by event id parameters: - description: ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.BaseEvent' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Retrieve bet outcomes by event id tags: - prematch /api/v1/events/{id}/is_monitored: patch: consumes: - application/json description: Update the event is_monitored 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: update the event is_monitored tags: - event /api/v1/events/{id}/settings: put: consumes: - application/json description: Update the event settings 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: update the event settings tags: - event /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/user/{user_id}: get: description: Returns all issues reported by a specific user parameters: - description: User ID in: path name: user_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 user tags: - Issues /api/v1/leagues: get: consumes: - application/json description: Gets all leagues produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.BaseLeague' 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 /api/v1/logs: get: description: Fetches application logs from MongoDB with pagination, level filtering, and search parameters: - description: Filter logs by level (debug, info, warn, error, dpanic, panic, fatal) in: query name: level type: string - description: Search term to match against message or fields in: query name: search type: string - default: 1 description: 'Page number for pagination (default: 1)' in: query name: page type: integer - default: 50 description: 'Number of items per page (default: 50, max: 100)' in: query name: limit type: integer produces: - application/json responses: "200": description: Paginated list of application logs schema: $ref: '#/definitions/domain.LogResponse' "400": description: Invalid request parameters schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal server error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Retrieve application logs with filtering and pagination tags: - Logs /api/v1/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/domain.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 /api/v1/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 /api/v1/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 /api/v1/market-settings: get: consumes: - application/json description: Get all market settings that apply globally parameters: - 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.MarketSettings' type: array "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Retrieve all global market settings tags: - market_settings /api/v1/odds: get: consumes: - application/json description: Retrieve all odds from the database produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.OddMarketFilter' type: array "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Retrieve all odds tags: - prematch /api/v1/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.OddMarketWithEventFilter' 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 /api/v1/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 /api/v1/operation: post: consumes: - application/json description: Creates a operation parameters: - description: Creates operation in: body name: createBranchOperation required: true schema: $ref: '#/definitions/domain.CreateBranchOperationReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.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 /api/v1/orchestrator/virtual-game/provider-reports/asc: get: description: Retrieves all virtual game provider reports sorted by total_games_played in ascending order responses: "200": description: OK schema: items: $ref: '#/definitions/domain.VirtualGameProviderReport' type: array "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: List virtual game provider reports (ascending) tags: - VirtualGames - Orchestration /api/v1/orchestrator/virtual-game/provider-reports/desc: get: description: Retrieves all virtual game provider reports sorted by total_games_played in descending order responses: "200": description: OK schema: items: $ref: '#/definitions/domain.VirtualGameProviderReport' type: array "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: List virtual game provider reports (descending) tags: - VirtualGames - Orchestration /api/v1/orchestrator/virtual-games: get: consumes: - application/json description: Returns all virtual games with optional filters (category, search, pagination) parameters: - description: Filter by category in: query name: category type: string - description: Search by game name in: query name: search type: string - description: Pagination limit in: query name: limit type: integer - description: Pagination offset in: query name: offset type: integer produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: items: $ref: '#/definitions/domain.UnifiedGame' type: array type: object "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: List all virtual games tags: - VirtualGames - Orchestration /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 paginated list of generated report CSV files with search capability parameters: - description: Search term to filter filenames in: query name: search type: string - default: 1 description: 'Page number (default: 1)' in: query name: page type: integer - default: 20 description: 'Items per page (default: 20, max: 100)' in: query name: limit type: integer produces: - application/json responses: "200": description: Paginated list of CSV report filenames schema: $ref: '#/definitions/domain.PaginatedFileResponse' "400": description: Invalid pagination parameters schema: $ref: '#/definitions/domain.ErrorResponse' "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/result/b365/{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 /api/v1/santimpay/b2c-withdrawal: post: consumes: - application/json description: Initiates a B2C withdrawal request with SantimPay and returns the response. parameters: - description: SantimPay B2C withdrawal request payload in: body name: request required: true schema: $ref: '#/definitions/domain.GeneratePaymentURLRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.Response' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Process SantimPay B2C Withdrawal tags: - SantimPay /api/v1/santimpay/b2c/partners: get: consumes: - application/json description: Fetches a list of available B2C payout partners (e.g., Telebirr, Mpesa, Banks) from SantimPay. produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.Response' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Get SantimPay B2C Partners tags: - SantimPay /api/v1/santimpay/callback: post: consumes: - application/json description: Processes a callback from SantimPay, updates transfer status, and credits user wallet if payment was successful. parameters: - description: SantimPay callback payload in: body name: request required: true schema: $ref: '#/definitions/domain.SantimPayCallbackPayload' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.Response' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Process SantimPay Payment Callback tags: - SantimPay /api/v1/santimpay/direct-payment: post: consumes: - application/json description: Initiates a direct payment request with SantimPay and returns the response. parameters: - description: SantimPay direct payment request payload in: body name: request required: true schema: $ref: '#/definitions/domain.GeneratePaymentURLRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.Response' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Process SantimPay Direct Payment tags: - SantimPay /api/v1/santimpay/payment: post: consumes: - application/json description: Generates a payment URL using SantimPay and returns it to the client. parameters: - description: SantimPay payment request payload in: body name: request required: true schema: $ref: '#/definitions/domain.GeneratePaymentURLRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.Response' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Create SantimPay Payment Session tags: - SantimPay /api/v1/santimpay/transaction-status: post: consumes: - application/json description: Retrieves the real-time status of a transaction from SantimPay. parameters: - description: Transaction status request payload in: body name: request required: true schema: $ref: '#/definitions/domain.TransactionStatusRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.Response' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Check SantimPay Transaction Status tags: - SantimPay /api/v1/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/domain.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 /api/v1/search/company: get: consumes: - application/json description: Gets all companies produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.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 /api/v1/shop/bet: get: consumes: - application/json description: Gets all the shop bets produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.ShopBetRes' type: array "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Gets all shop bets tags: - bet post: consumes: - application/json description: Create bet at branch parameters: - description: create bet in: body name: createBet required: true schema: $ref: '#/definitions/domain.ShopBetReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.ShopTransactionRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Create bet at branch tags: - transaction /api/v1/shop/bet/{id}: get: consumes: - application/json description: Cashout bet at branch parameters: - description: cashout bet in: body name: createBet required: true schema: $ref: '#/definitions/domain.CashoutReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.ShopTransactionRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Cashout bet at branch tags: - transaction /api/v1/shop/bet/{id}/cashout: post: consumes: - application/json description: Cashout bet at branch parameters: - description: cashout bet in: body name: cashoutBet required: true schema: $ref: '#/definitions/domain.CashoutReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.ShopTransactionRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Cashout bet at branch tags: - transaction /api/v1/shop/cashout: post: consumes: - application/json description: Cashout bet by cashoutID parameters: - description: cashout bet in: body name: cashoutBet required: true schema: $ref: '#/definitions/domain.CashoutReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.ShopTransactionRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Cashout bet by cashoutID tags: - transaction /api/v1/shop/cashout/{id}: get: consumes: - application/json description: Cashout bet at branch parameters: - description: cashout bet in: body name: createBet required: true schema: $ref: '#/definitions/domain.CashoutReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.ShopTransactionRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Cashout bet at branch tags: - transaction /api/v1/shop/deposit: post: consumes: - application/json description: Transfers money from branch wallet to customer wallet parameters: - description: ShopDepositReq in: body name: transferToWallet required: true schema: $ref: '#/definitions/domain.ShopDepositReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.ShopDepositRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Shop deposit into customer wallet tags: - transaction /api/v1/shop/transaction: get: consumes: - application/json description: Gets all the transactions produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.ShopTransactionRes' 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 /api/v1/shop/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/domain.ShopTransactionRes' "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/domain.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 /api/v1/shop/transaction/{id}/bet: get: consumes: - application/json description: Gets a single shop bet by transaction id parameters: - description: Transaction ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.ShopTransactionRes' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Gets shop bet by transaction id tags: - transaction /api/v1/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 /api/v1/super-login: post: consumes: - application/json description: Login super-admin parameters: - description: Login super-admin in: body name: login required: true schema: $ref: '#/definitions/handlers.loginAdminReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.loginAdminRes' "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 super-admin tags: - auth /api/v1/supportedOperation: get: consumes: - application/json description: Gets all supported operations produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.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/domain.CreateSupportedOperationReq' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.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 /api/v1/t-approver: 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 /api/v1/t-approver/{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/telebirr/callback: post: consumes: - application/json description: Processes the Telebirr payment result and updates wallet balance. parameters: - description: Callback payload from Telebirr in: body name: payload required: true schema: $ref: '#/definitions/domain.TelebirrPaymentCallbackPayload' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.Response' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Handle Telebirr Payment Callback tags: - Telebirr /api/v1/telebirr/payment: post: consumes: - application/json description: Generates a payment URL using Telebirr and returns it to the client. parameters: - description: Telebirr payment request payload in: body name: request required: true schema: $ref: '#/definitions/domain.GeneratePaymentURLRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.Response' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Create Telebirr Payment Session tags: - Telebirr /api/v1/tenant: get: 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 /api/v1/tenant/{tenant_slug}/customer: get: consumes: - application/json description: Get all Customers 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.CustomersRes' "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 Customers tags: - customer /api/v1/tenant/{tenant_slug}/customer/{id}: get: consumes: - application/json description: Get a single customer 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.CustomersRes' "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 customer by id tags: - customer put: consumes: - application/json description: Update Customers parameters: - description: Update Customers in: body name: Customers required: true schema: $ref: '#/definitions/handlers.updateCustomerReq' 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 Customers tags: - customer /api/v1/tenant/{tenant_slug}/customer/{id}/bets: get: consumes: - application/json description: Get tenant customer bets parameters: - description: User ID in: path name: id required: true type: integer produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/handlers.CustomersRes' "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 tenant customer bets tags: - customer /api/v1/tenant/{tenant_slug}/events/{id}/bets: get: consumes: - application/json description: Retrieve bet outcomes by event id parameters: - description: ID in: path name: id required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.BaseEvent' "400": description: Bad Request schema: $ref: '#/definitions/response.APIResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/response.APIResponse' summary: Retrieve bet outcomes by event id tags: - prematch /api/v1/tenant/{tenant_slug}/events/{id}/settings: put: consumes: - application/json description: Update the event settings 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: update the event settings tags: - event /api/v1/tenant/{tenant_slug}/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 /api/v1/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 /api/v1/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 /api/v1/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 /api/v1/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 /api/v1/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 /api/v1/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 /api/v1/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 /api/v1/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 /api/v1/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 /api/v1/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 /api/v1/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 /api/v1/veli/credit-balances: get: consumes: - application/json description: Fetches current credit balances per currency for the specified brand parameters: - description: Brand ID in: query name: brandId required: true type: string produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: items: $ref: '#/definitions/domain.CreditBalance' type: array type: object "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Get VeliGames credit balances for a brand tags: - Virtual Games - VeliGames /api/v1/veli/games-list: post: consumes: - application/json description: Retrieves games for the specified provider parameters: - description: Brand and Provider ID in: body name: request required: true schema: $ref: '#/definitions/domain.GameListRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.Response' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Get games by provider tags: - Virtual Games - VeliGames /api/v1/veli/gaming-activity: post: consumes: - application/json description: Retrieves successfully processed gaming activity transactions (BET, WIN, CANCEL) from Veli Games parameters: - description: Gaming Activity Request in: body name: request required: true schema: $ref: '#/definitions/domain.GamingActivityRequest' produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: $ref: '#/definitions/domain.GamingActivityResponse' type: object "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Get Veli Gaming Activity tags: - Virtual Games - VeliGames /api/v1/veli/huge-wins: post: consumes: - application/json description: Retrieves huge win transactions based on brand configuration (e.g. win > 10000 USD or 100x bet) parameters: - description: Huge Wins Request in: body name: request required: true schema: $ref: '#/definitions/domain.HugeWinsRequest' produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: $ref: '#/definitions/domain.HugeWinsResponse' type: object "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Get Veli Huge Wins tags: - Virtual Games - VeliGames /api/v1/veli/providers: post: consumes: - application/json description: Retrieves the list of VeliGames providers parameters: - description: Brand ID and paging options in: body name: request required: true schema: $ref: '#/definitions/domain.ProviderRequest' produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: items: $ref: '#/definitions/domain.ProviderResponse' type: array type: object "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' summary: Get game providers tags: - Virtual Games - VeliGames /api/v1/veli/start-demo-game: post: consumes: - application/json description: Starts a demo session of the specified game (must support demo mode) parameters: - description: Start demo game input in: body name: request required: true schema: $ref: '#/definitions/domain.DemoGameRequest' produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: $ref: '#/definitions/domain.GameStartResponse' type: object "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Start a demo game session tags: - Virtual Games - VeliGames /api/v1/veli/start-game: post: consumes: - application/json description: Starts a real VeliGames session with the given player and game info parameters: - description: Start game input in: body name: request required: true schema: $ref: '#/definitions/domain.GameStartRequest' produces: - application/json responses: "200": description: OK schema: allOf: - $ref: '#/definitions/domain.Response' - properties: data: $ref: '#/definitions/domain.GameStartResponse' type: object "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Start a real game session tags: - Virtual Games - VeliGames /api/v1/virtual-game/favorites: get: description: Lists the games that the user marked as favorite parameters: - description: Filter by provider ID in: query name: providerID type: string - description: Number of results to return in: query name: limit type: integer - description: Results offset in: query name: offset type: integer produces: - application/json responses: "200": description: OK schema: items: $ref: '#/definitions/domain.UnifiedGame' type: array "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "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 and Provider 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 - description: Provider ID of the game in: query name: providerID required: true type: string produces: - application/json responses: "200": description: removed schema: $ref: '#/definitions/domain.Response' "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/virtual-game/orchestrator/providers/status: patch: description: Sets the enabled status of a provider parameters: - description: Provider ID in: path name: provider_id required: true type: string - description: Enable or Disable in: query name: enabled required: true type: boolean produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.VirtualGameProvider' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Enable/Disable a provider tags: - VirtualGames - Orchestration /api/v1/virtual-game/providers: get: description: Lists all providers 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: additionalProperties: true type: object "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: List virtual game providers tags: - VirtualGames - Orchestration /api/v1/virtual-game/providers/{provider_id}: delete: description: Deletes a provider by provider_id parameters: - description: Provider ID in: path name: provider_id required: true type: string responses: "200": description: OK "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Remove a virtual game provider tags: - VirtualGames - Orchestration get: description: Fetches a provider by provider_id parameters: - description: Provider ID in: path name: provider_id required: true type: string produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.VirtualGameProvider' "500": description: Internal Server Error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Get a virtual game provider tags: - VirtualGames - Orchestration /api/v1/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 /api/v1/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 /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 /betwin: post: consumes: - application/json description: Processes a Bet and Win request from Atlas provider parameters: - description: Atlas BetWin input in: body name: request required: true schema: $ref: '#/definitions/domain.AtlasBetWinRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.AtlasBetWinResponse' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Atlas BetWin callback tags: - Virtual Games - Atlas /freespin: post: consumes: - application/json description: Handles the result of a free spin/bet from the game server parameters: - description: Free spin result input in: body name: request required: true schema: $ref: '#/definitions/domain.FreeSpinResultRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.FreeSpinResultResponse' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Free Spin/Bet result callback tags: - Virtual Games - Atlas /jackpot: post: consumes: - application/json description: Handles the jackpot result from the game server parameters: - description: Jackpot result input in: body name: request required: true schema: $ref: '#/definitions/domain.JackpotRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.JackpotResponse' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Jackpot result callback tags: - Virtual Games - Atlas /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 "500": description: Internal Server Error 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 /result: post: consumes: - application/json description: Processes a round result from Atlas or other providers parameters: - description: Round result input in: body name: request required: true schema: $ref: '#/definitions/domain.RoundResultRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.RoundResultResponse' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Atlas Round Result callback tags: - Virtual Games - Atlas /rollback: post: consumes: - application/json description: Processes a rollback request from Atlas or other providers parameters: - description: Rollback request input in: body name: request required: true schema: $ref: '#/definitions/domain.RollbackRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/domain.RollbackResponse' "400": description: Bad Request schema: $ref: '#/definitions/domain.ErrorResponse' "502": description: Bad Gateway schema: $ref: '#/definitions/domain.ErrorResponse' summary: Atlas Rollback callback tags: - Virtual Games - Atlas /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 /win: post: consumes: - application/json description: Processes win callbacks from either Veli or PopOK providers by auto-detecting the format produces: - application/json responses: "200": description: Win processing result schema: {} "400": description: Invalid request format schema: $ref: '#/definitions/domain.ErrorResponse' "401": description: Authentication failed schema: $ref: '#/definitions/domain.ErrorResponse' "409": description: Duplicate transaction schema: $ref: '#/definitions/domain.ErrorResponse' "500": description: Internal server error schema: $ref: '#/definitions/domain.ErrorResponse' summary: Handle win callback (Veli or PopOK) tags: - Wins securityDefinitions: Bearer: in: header name: Authorization type: apiKey swagger: "2.0"