{ "swagger": "2.0", "info": { "description": "This is server for FortuneBet.", "title": "FortuneBet API", "termsOfService": "http://swagger.io/terms/", "contact": { "name": "API Support", "url": "http://www.swagger.io/support", "email": "support@swagger.io" }, "license": { "name": "Apache 2.0", "url": "http://www.apache.org/licenses/LICENSE-2.0.html" }, "version": "1.0.1" }, "paths": { "/account": { "post": { "description": "Callback endpoint for Atlas game server to fetch player balance", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Virtual Games - Atlas" ], "summary": "Atlas Get User Data callback", "parameters": [ { "description": "Get user data input", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.AtlasGetUserDataRequest" } } ], "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" } } } } }, "/api/v1/admin": { "get": { "description": "Get all Admins", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get all Admins", "parameters": [ { "type": "integer", "description": "Page number", "name": "page", "in": "query" }, { "type": "integer", "description": "Page size", "name": "page_size", "in": "query" } ], "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" } } } }, "post": { "description": "Create transaction approver", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Create transaction approver", "parameters": [ { "description": "Create transaction approver", "name": "manger", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.CreateTransactionApproverReq" } } ], "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" } } } } }, "/api/v1/admin-company": { "get": { "description": "Gets a single company by id", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "company" ], "summary": "Gets company by id", "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" } } } } }, "/api/v1/admin/{id}": { "get": { "description": "Get a single admin by id", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get admin by id", "parameters": [ { "type": "integer", "description": "User ID", "name": "id", "in": "path", "required": true } ], "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" } } } }, "put": { "description": "Update Admin", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Update Admin", "parameters": [ { "description": "Update Admin", "name": "admin", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.updateAdminReq" } } ], "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" } } } } }, "/api/v1/alea-games/launch": { "get": { "security": [ { "BearerAuth": [] } ], "description": "Generates an authenticated launch URL for Alea Play virtual games", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Alea Virtual Games" ], "summary": "Launch an Alea Play virtual game", "parameters": [ { "type": "string", "description": "Game identifier (e.g., 'aviator', 'plinko')", "name": "game_id", "in": "query", "required": true }, { "enum": [ "USD", "EUR", "GBP" ], "type": "string", "default": "USD", "description": "Currency code (ISO 4217)", "name": "currency", "in": "query" }, { "enum": [ "real", "demo" ], "type": "string", "default": "real", "description": "Game mode", "name": "mode", "in": "query" } ], "responses": { "200": { "description": "Returns authenticated game launch URL", "schema": { "type": "object", "additionalProperties": { "allOf": [ { "type": "string" }, { "type": "object", "properties": { "launch_url": { "type": "string" } } } ] } } } } } }, "/api/v1/arifpay/b2c-webhook": { "post": { "description": "Handles webhook notifications from Arifpay for B2C transfers and updates transfer + wallet status.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Arifpay" ], "summary": "Handle Arifpay B2C Webhook", "parameters": [ { "description": "Arifpay webhook payload", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.WebhookRequest" } } ], "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" } } } } }, "/api/v1/arifpay/b2c/transfer": { "post": { "description": "Initiates a B2C transfer using Telebirr, CBE, or MPESA depending on the \"type\" query parameter", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Arifpay" ], "summary": "Execute B2C Transfer", "parameters": [ { "type": "string", "description": "Transfer type (telebirr, cbe, mpesa)", "name": "type", "in": "query", "required": true }, { "description": "Transfer request payload", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.ArifpayB2CRequest" } } ], "responses": { "200": { "description": "message: transfer executed successfully", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "400": { "description": "error: invalid request or unsupported transfer type", "schema": { "type": "object", "additionalProperties": { "type": "string" } } }, "500": { "description": "error: internal server error", "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } }, "/api/v1/arifpay/c2b-webhook": { "post": { "description": "Handles webhook notifications from Arifpay for C2B transfers and updates transfer + wallet status.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Arifpay" ], "summary": "Handle Arifpay C2B Webhook", "parameters": [ { "description": "Arifpay webhook payload", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.WebhookRequest" } } ], "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" } } } } }, "/api/v1/arifpay/checkout": { "post": { "description": "Creates a payment session using Arifpay and returns a redirect URL.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Arifpay" ], "summary": "Create Arifpay Checkout Session", "parameters": [ { "description": "Checkout session request payload", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.CheckoutSessionClientRequest" } } ], "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" } } } } }, "/api/v1/arifpay/checkout/{sessionId}/cancel": { "post": { "description": "Cancels a payment session using Arifpay before completion.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Arifpay" ], "summary": "Cancel Arifpay Checkout Session", "parameters": [ { "type": "string", "description": "Checkout session ID", "name": "sessionId", "in": "path", "required": true } ], "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" } } } } }, "/api/v1/arifpay/payment-methods": { "get": { "description": "Returns all payment method IDs and names for Arifpay", "produces": [ "application/json" ], "tags": [ "Arifpay" ], "summary": "List Arifpay Payment Methods", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.ARIFPAYPaymentMethod" } } } } } }, "/api/v1/arifpay/session-id/verify-transaction/{session_id}": { "get": { "description": "Verifies an Arifpay transaction using a session ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Arifpay" ], "summary": "Verify Arifpay Transaction by Session ID", "parameters": [ { "type": "string", "description": "Arifpay Session ID", "name": "session_id", "in": "query", "required": true } ], "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" } } } } }, "/api/v1/arifpay/transaction-id/verify-transaction": { "post": { "description": "Verifies a transaction using transaction ID and payment type", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Arifpay" ], "summary": "Verify Arifpay Transaction", "parameters": [ { "description": "Transaction verification payload", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.ArifpayVerifyByTransactionIDRequest" } } ], "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" } } } } }, "/api/v1/atlas/freespin": { "post": { "description": "Sends a request to Atlas to create free spins/bets for a given player", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Virtual Games - Atlas" ], "summary": "Create free spins for a player", "parameters": [ { "description": "Free spin input", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.FreeSpinRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/domain.Response" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/domain.FreeSpinResponse" } } } ] } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } }, "502": { "description": "Bad Gateway", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/atlas/games": { "get": { "description": "Retrieves available Atlas virtual games from the provider", "produces": [ "application/json" ], "tags": [ "Virtual Games - Atlas" ], "summary": "List Atlas virtual games", "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/domain.Response" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/domain.AtlasGameEntity" } } } } ] } }, "502": { "description": "Bad Gateway", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/atlas/init-game": { "post": { "description": "Initializes a game session for the given player using Atlas virtual game provider", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Virtual Games - Atlas" ], "summary": "Start an Atlas virtual game session", "parameters": [ { "description": "Start game input", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.AtlasGameInitRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/domain.Response" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/domain.AtlasGameInitResponse" } } } ] } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } }, "502": { "description": "Bad Gateway", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/auth/logout": { "post": { "description": "Logout customer", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "auth" ], "summary": "Logout customer", "parameters": [ { "description": "Logout customer", "name": "logout", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.logoutReq" } } ], "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" } } } } }, "/api/v1/auth/refresh": { "post": { "description": "Refresh token", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "auth" ], "summary": "Refresh token", "parameters": [ { "description": "tokens", "name": "refresh", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.refreshToken" } } ], "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" } } } } }, "/api/v1/banks": { "get": { "produces": [ "application/json" ], "tags": [ "Institutions - Banks" ], "summary": "List all banks with pagination and filtering", "parameters": [ { "type": "integer", "description": "Filter by country ID", "name": "country_id", "in": "query" }, { "type": "boolean", "description": "Filter by active status", "name": "is_active", "in": "query" }, { "type": "string", "description": "Search term for bank name or code", "name": "search", "in": "query" }, { "type": "integer", "default": 1, "description": "Page number", "name": "page", "in": "query" }, { "maximum": 100, "type": "integer", "default": 50, "description": "Items per page", "name": "page_size", "in": "query" } ], "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" } } } }, "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Institutions - Banks" ], "summary": "Create a new bank", "parameters": [ { "description": "Bank Info", "name": "bank", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.Bank" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/domain.Bank" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/banks/{id}": { "get": { "produces": [ "application/json" ], "tags": [ "Institutions - Banks" ], "summary": "Get a bank by ID", "parameters": [ { "type": "integer", "description": "Bank ID", "name": "id", "in": "path", "required": true } ], "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" } } } }, "put": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Institutions - Banks" ], "summary": "Update a bank", "parameters": [ { "type": "integer", "description": "Bank ID", "name": "id", "in": "path", "required": true }, { "description": "Bank Info", "name": "bank", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.Bank" } } ], "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" } } } }, "delete": { "produces": [ "application/json" ], "tags": [ "Institutions - Banks" ], "summary": "Delete a bank", "parameters": [ { "type": "integer", "description": "Bank ID", "name": "id", "in": "path", "required": true } ], "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" } } } } }, "/api/v1/branch": { "get": { "description": "Gets all branches", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "branch" ], "summary": "Gets all branches", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.BranchDetailRes" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/response.APIResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } }, "post": { "description": "Creates a branch", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "branch" ], "summary": "Create a branch", "parameters": [ { "description": "Creates branch", "name": "createBranch", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.CreateBranchReq" } } ], "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" } } } } }, "/api/v1/branch/{id}": { "get": { "description": "Gets a single branch by id", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "branch" ], "summary": "Gets branch by id", "parameters": [ { "type": "integer", "description": "Branch ID", "name": "id", "in": "path", "required": true } ], "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" } } } }, "put": { "description": "Updates a branch", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "branch" ], "summary": "Updates a branch", "parameters": [ { "type": "integer", "description": "Branch ID", "name": "id", "in": "path", "required": true }, { "description": "Update Branch", "name": "updateBranch", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.CreateBranchReq" } } ], "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" } } } }, "delete": { "description": "Delete the branch", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "branch" ], "summary": "Delete the branch", "parameters": [ { "type": "integer", "description": "Branch ID", "name": "id", "in": "path", "required": true } ], "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" } } } } }, "/api/v1/branch/{id}/bets": { "get": { "description": "Gets bets by its branch id", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "branch" ], "summary": "Gets bets by its branch id", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.BetRes" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/response.APIResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } } }, "/api/v1/branch/{id}/cashier": { "get": { "description": "Gets branch cashiers", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "branch" ], "summary": "Gets branch cashiers", "parameters": [ { "type": "integer", "description": "Branch ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/handlers.GetCashierRes" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/response.APIResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } } }, "/api/v1/branch/{id}/operation": { "get": { "description": "Gets branch operations", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "branch" ], "summary": "Gets branch operations", "parameters": [ { "type": "integer", "description": "Branch ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.BranchOperationRes" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/response.APIResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } } }, "/api/v1/branch/{id}/operation/{opID}": { "delete": { "description": "Delete the branch operation", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "branch" ], "summary": "Delete the branch operation", "parameters": [ { "type": "integer", "description": "Branch ID", "name": "id", "in": "path", "required": true }, { "type": "integer", "description": "Branch Operation ID", "name": "opID", "in": "path", "required": true } ], "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" } } } } }, "/api/v1/branch/{id}/return": { "post": { "description": "Unassign the branch wallet to company", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "branch" ], "summary": "Unassign the branch wallet to company", "parameters": [ { "type": "integer", "description": "Branch ID", "name": "id", "in": "path", "required": true } ], "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" } } } } }, "/api/v1/branchCashier": { "get": { "description": "Gets branch for cahier", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "branch" ], "summary": "Gets branch for cahier", "parameters": [ { "type": "integer", "description": "Branch ID", "name": "id", "in": "path", "required": true } ], "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" } } } } }, "/api/v1/branchLocation": { "get": { "description": "Gets all branch locations", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "branch" ], "summary": "Gets all branch locations", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.BranchLocation" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/response.APIResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } } }, "/api/v1/branchWallet": { "get": { "description": "Retrieve all branch wallets", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "wallet" ], "summary": "Get all branch wallets", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/handlers.WalletRes" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/response.APIResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } } }, "/api/v1/cashier/{id}": { "get": { "description": "Get a single cashier by id", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "cashier" ], "summary": "Get cashier by id", "parameters": [ { "type": "integer", "description": "User ID", "name": "id", "in": "path", "required": true } ], "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" } } } } }, "/api/v1/cashierWallet": { "get": { "description": "Get wallet for cashier", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "cashier" ], "summary": "Get wallet for cashier", "parameters": [ { "type": "integer", "description": "User ID", "name": "id", "in": "path", "required": true } ], "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" } } } } }, "/api/v1/cashiers": { "get": { "description": "Get all cashiers", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "cashier" ], "summary": "Get all cashiers", "parameters": [ { "type": "integer", "description": "Page number", "name": "page", "in": "query" }, { "type": "integer", "description": "Page size", "name": "page_size", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/handlers.GetCashierRes" } } }, "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" } } } }, "post": { "description": "Create cashier", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "cashier" ], "summary": "Create cashier", "parameters": [ { "description": "Create cashier", "name": "cashier", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.CreateCashierReq" } } ], "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" } } } } }, "/api/v1/cashiers/{id}": { "put": { "description": "Update cashier", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "cashier" ], "summary": "Update cashier", "parameters": [ { "type": "integer", "description": "Cashier ID", "name": "id", "in": "path", "required": true }, { "description": "Update cashier", "name": "cashier", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.updateCashierReq" } } ], "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" } } } } }, "/api/v1/chapa/balances": { "get": { "description": "Retrieve Chapa account balance, optionally filtered by currency code (e.g., ETB, USD)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Chapa" ], "summary": "Get Chapa account balance", "parameters": [ { "type": "string", "description": "Currency code (optional)", "name": "currency_code", "in": "query" } ], "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" } } } } }, "/api/v1/chapa/banks": { "get": { "description": "Get list of banks supported by Chapa", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Chapa" ], "summary": "Get supported banks", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/domain.Response" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/chapa/payments/deposit": { "post": { "security": [ { "ApiKeyAuth": [] } ], "description": "Starts a new deposit process using Chapa payment gateway", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Chapa" ], "summary": "Initiate a deposit", "parameters": [ { "description": "Deposit request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.ChapaDepositRequestPayload" } } ], "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" } } } } }, "/api/v1/chapa/payments/manual/verify/{tx_ref}": { "get": { "description": "Manually verify a payment using Chapa's API", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Chapa" ], "summary": "Verify a payment manually", "parameters": [ { "type": "string", "description": "Transaction Reference", "name": "tx_ref", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/domain.ChapaVerificationResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/chapa/payments/receipt/{chapa_ref}": { "get": { "description": "Retrieve the Chapa payment receipt URL using the reference ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Chapa" ], "summary": "Get Chapa Payment Receipt URL", "parameters": [ { "type": "string", "description": "Chapa Reference ID", "name": "chapa_ref", "in": "path", "required": true } ], "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" } } } } }, "/api/v1/chapa/payments/webhook/verify": { "post": { "description": "Handles payment notifications from Chapa", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Chapa" ], "summary": "Chapa payment webhook callback (used by Chapa)", "parameters": [ { "description": "Webhook payload", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.ChapaWebhookPayload" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/chapa/payments/withdraw": { "post": { "security": [ { "ApiKeyAuth": [] } ], "description": "Initiates a withdrawal request to transfer funds to a bank account via Chapa", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Chapa" ], "summary": "Initiate a withdrawal", "parameters": [ { "description": "Withdrawal request details", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.ChapaWithdrawalRequest" } } ], "responses": { "201": { "description": "Chapa withdrawal process initiated successfully", "schema": { "$ref": "#/definitions/domain.Response" } }, "400": { "description": "Invalid request body", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } }, "401": { "description": "Unauthorized", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } }, "422": { "description": "Unprocessable entity", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } }, "500": { "description": "Internal server error", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/chapa/swap": { "post": { "description": "Perform a USD to ETB currency swap using Chapa's API", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Chapa" ], "summary": "Initiate a currency swap", "parameters": [ { "description": "Swap Request Payload", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.SwapRequest" } } ], "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" } } } } }, "/api/v1/chapa/transfers": { "get": { "description": "Retrieve all transfer records from Chapa", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Chapa" ], "summary": "Get all Chapa transfers", "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" } } } } }, "/api/v1/company": { "get": { "description": "Gets all companies", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "company" ], "summary": "Gets all companies", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.GetCompanyRes" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/response.APIResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } }, "post": { "description": "Creates a company", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "company" ], "summary": "Create a company", "parameters": [ { "description": "Creates company", "name": "createCompany", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.CreateCompanyReq" } } ], "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" } } } } }, "/api/v1/company/{id}": { "get": { "description": "Gets a single company by id", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "company" ], "summary": "Gets company by id", "parameters": [ { "type": "integer", "description": "Company ID", "name": "id", "in": "path", "required": true } ], "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" } } } }, "put": { "description": "Updates a company", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "company" ], "summary": "Updates a company", "parameters": [ { "type": "integer", "description": "Company ID", "name": "id", "in": "path", "required": true }, { "description": "Update Company", "name": "updateCompany", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.UpdateCompanyReq" } } ], "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" } } } }, "delete": { "description": "Delete the company", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "company" ], "summary": "Delete the company", "parameters": [ { "type": "integer", "description": "Company ID", "name": "id", "in": "path", "required": true } ], "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" } } } } }, "/api/v1/company/{id}/branch": { "get": { "description": "Gets branches by company id", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "branch" ], "summary": "Gets branches by company id", "parameters": [ { "type": "integer", "description": "Company ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.BranchDetailRes" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/response.APIResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } } }, "/api/v1/currencies": { "get": { "description": "Returns list of supported currencies", "produces": [ "application/json" ], "tags": [ "Multi-Currency" ], "summary": "Get supported currencies", "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/domain.Response" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "type": "integer" } } } } ] } } } } }, "/api/v1/currencies/convert": { "get": { "description": "Converts amount from one currency to another", "produces": [ "application/json" ], "tags": [ "Multi-Currency" ], "summary": "Convert currency", "parameters": [ { "type": "string", "description": "Source currency code (e.g., USD)", "name": "from", "in": "query", "required": true }, { "type": "string", "description": "Target currency code (e.g., ETB)", "name": "to", "in": "query", "required": true }, { "type": "number", "description": "Amount to convert", "name": "amount", "in": "query", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/domain.Response" }, { "type": "object", "properties": { "data": { "type": "number" } } } ] } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/customer": { "get": { "description": "Get all Customers", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "customer" ], "summary": "Get all Customers", "parameters": [ { "type": "integer", "description": "Page number", "name": "page", "in": "query" }, { "type": "integer", "description": "Page size", "name": "page_size", "in": "query" } ], "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" } } } } }, "/api/v1/customer/{id}": { "get": { "description": "Get a single customer by id", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "customer" ], "summary": "Get customer by id", "parameters": [ { "type": "integer", "description": "User ID", "name": "id", "in": "path", "required": true } ], "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" } } } }, "put": { "description": "Update Customers", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "customer" ], "summary": "Update Customers", "parameters": [ { "description": "Update Customers", "name": "Customers", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.updateCustomerReq" } } ], "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" } } } } }, "/api/v1/customer/{id}/bets": { "get": { "description": "Get customer bets", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "customer" ], "summary": "Get customer bets", "parameters": [ { "type": "integer", "description": "User ID", "name": "id", "in": "path", "required": true } ], "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" } } } } }, "/api/v1/customerWallet": { "get": { "description": "Retrieve all customer wallets", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "wallet" ], "summary": "Get all customer wallets", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/handlers.CustomerWalletRes" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/response.APIResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } } }, "/api/v1/direct_deposit": { "post": { "description": "Customer initiates a direct deposit from mobile banking", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Direct Deposits" ], "summary": "Initiate a direct deposit", "parameters": [ { "description": "Deposit details", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.DirectDepositRequest" } } ], "responses": { "201": { "description": "Created", "schema": { "$ref": "#/definitions/domain.Response" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/direct_deposit/pending": { "get": { "description": "Get list of direct deposits needing verification", "produces": [ "application/json" ], "tags": [ "Direct Deposits" ], "summary": "Get pending direct deposits", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/domain.Response" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/direct_deposit/verify": { "post": { "description": "Cashier verifies a direct deposit transaction", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Direct Deposits" ], "summary": "Verify a direct deposit", "parameters": [ { "description": "Verification details", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.VerifyDirectDepositRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/domain.Response" } }, "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" } } } } }, "/api/v1/enetpulse/fixtures": { "get": { "description": "Fetches all fixtures stored in the database", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "EnetPulse" ], "summary": "Get all stored fixtures", "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/domain.Response" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/domain.EnetpulseFixture" } } } } ] } }, "502": { "description": "Bad Gateway", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/enetpulse/fixtures/preodds": { "get": { "description": "Fetches all EnetPulse fixtures along with their associated pre-match odds", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "EnetPulse" ], "summary": "Get fixtures with preodds", "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/domain.Response" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/domain.EnetpulseFixtureWithPreodds" } } } } ] } }, "502": { "description": "Bad Gateway", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/enetpulse/preodds": { "get": { "description": "Fetches all EnetPulse pre-match odds stored in the database", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "EnetPulse" ], "summary": "Get all preodds", "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/domain.Response" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/domain.EnetpulsePreodds" } } } } ] } }, "502": { "description": "Bad Gateway", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/enetpulse/results": { "get": { "description": "Fetches all EnetPulse match results stored in the database", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "EnetPulse" ], "summary": "Get all results", "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/domain.Response" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/domain.EnetpulseResult" } } } } ] } }, "502": { "description": "Bad Gateway", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/enetpulse/sports": { "get": { "description": "Fetches all sports stored in the database", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "EnetPulse" ], "summary": "Get all sports", "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/domain.Response" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/domain.EnetpulseSport" } } } } ] } }, "502": { "description": "Bad Gateway", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/enetpulse/tournament-stages": { "get": { "description": "Fetches all tournament stages stored in the database", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "EnetPulse" ], "summary": "Get all tournament stages", "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/domain.Response" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/domain.EnetpulseTournamentStage" } } } } ] } }, "502": { "description": "Bad Gateway", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/enetpulse/tournament-templates": { "get": { "description": "Fetches all tournament templates stored in the database", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "EnetPulse" ], "summary": "Get all tournament templates", "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/domain.Response" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/domain.EnetpulseTournamentTemplate" } } } } ] } }, "502": { "description": "Bad Gateway", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/enetpulse/tournaments": { "get": { "description": "Fetches all tournaments stored in the database", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "EnetPulse" ], "summary": "Get all tournaments", "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/domain.Response" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/domain.EnetpulseTournament" } } } } ] } }, "502": { "description": "Bad Gateway", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/events": { "get": { "description": "Retrieve all upcoming events from the database", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "prematch" ], "summary": "Retrieve all upcoming events", "parameters": [ { "type": "integer", "description": "Page number", "name": "page", "in": "query" }, { "type": "integer", "description": "Page size", "name": "page_size", "in": "query" }, { "type": "string", "description": "League ID Filter", "name": "league_id", "in": "query" }, { "type": "string", "description": "Sport ID Filter", "name": "sport_id", "in": "query" }, { "type": "string", "description": "Country Code Filter", "name": "cc", "in": "query" }, { "type": "string", "description": "Start Time", "name": "first_start_time", "in": "query" }, { "type": "string", "description": "End Time", "name": "last_start_time", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.BaseEvent" } } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } } }, "/api/v1/events/{id}": { "get": { "description": "Retrieve an upcoming event by ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "prematch" ], "summary": "Retrieve an upcoming by ID", "parameters": [ { "type": "string", "description": "ID", "name": "id", "in": "path", "required": true } ], "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" } } } }, "delete": { "description": "Set the event status to removed", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "event" ], "summary": "Set the event status to removed", "parameters": [ { "type": "integer", "description": "Event ID", "name": "id", "in": "path", "required": true } ], "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" } } } } }, "/api/v1/events/{id}/bets": { "get": { "description": "Retrieve bet outcomes by event id", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "prematch" ], "summary": "Retrieve bet outcomes by event id", "parameters": [ { "type": "string", "description": "ID", "name": "id", "in": "path", "required": true } ], "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" } } } } }, "/api/v1/events/{id}/is_monitored": { "patch": { "description": "Update the event is_monitored", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "event" ], "summary": "update the event is_monitored", "parameters": [ { "type": "integer", "description": "Event ID", "name": "id", "in": "path", "required": true } ], "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" } } } } }, "/api/v1/events/{id}/settings": { "put": { "description": "Update the event settings", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "event" ], "summary": "update the event settings", "parameters": [ { "type": "integer", "description": "Event ID", "name": "id", "in": "path", "required": true } ], "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" } } } } }, "/api/v1/issues": { "get": { "description": "Admin endpoint to list all reported issues with pagination", "produces": [ "application/json" ], "tags": [ "Issues" ], "summary": "Get all reported issues", "parameters": [ { "type": "integer", "description": "Limit", "name": "limit", "in": "query" }, { "type": "integer", "description": "Offset", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.ReportedIssue" } } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } }, "post": { "description": "Allows a customer to report a new issue related to the betting platform", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Issues" ], "summary": "Report an issue", "parameters": [ { "description": "Issue to report", "name": "issue", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.ReportedIssue" } } ], "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" } } } } }, "/api/v1/issues/user/{user_id}": { "get": { "description": "Returns all issues reported by a specific user", "produces": [ "application/json" ], "tags": [ "Issues" ], "summary": "Get reported issues by a user", "parameters": [ { "type": "integer", "description": "User ID", "name": "user_id", "in": "path", "required": true }, { "type": "integer", "description": "Limit", "name": "limit", "in": "query" }, { "type": "integer", "description": "Offset", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.ReportedIssue" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/issues/{issue_id}": { "delete": { "description": "Admin endpoint to delete a reported issue", "tags": [ "Issues" ], "summary": "Delete a reported issue", "parameters": [ { "type": "integer", "description": "Issue ID", "name": "issue_id", "in": "path", "required": true } ], "responses": { "204": { "description": "No Content" }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/issues/{issue_id}/status": { "patch": { "description": "Admin endpoint to update the status of a reported issue", "consumes": [ "application/json" ], "tags": [ "Issues" ], "summary": "Update issue status", "parameters": [ { "type": "integer", "description": "Issue ID", "name": "issue_id", "in": "path", "required": true }, { "description": "New issue status (pending, in_progress, resolved, rejected)", "name": "status", "in": "body", "required": true, "schema": { "type": "object", "properties": { "status": { "type": "string" } } } } ], "responses": { "204": { "description": "No Content" }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/leagues": { "get": { "description": "Gets all leagues", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "leagues" ], "summary": "Gets all leagues", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.BaseLeague" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/response.APIResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } } }, "/api/v1/logs": { "get": { "description": "Fetches application logs from MongoDB with pagination, level filtering, and search", "produces": [ "application/json" ], "tags": [ "Logs" ], "summary": "Retrieve application logs with filtering and pagination", "parameters": [ { "type": "string", "description": "Filter logs by level (debug, info, warn, error, dpanic, panic, fatal)", "name": "level", "in": "query" }, { "type": "string", "description": "Search term to match against message or fields", "name": "search", "in": "query" }, { "type": "integer", "default": 1, "description": "Page number for pagination (default: 1)", "name": "page", "in": "query" }, { "type": "integer", "default": 50, "description": "Number of items per page (default: 50, max: 100)", "name": "limit", "in": "query" } ], "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" } } } } }, "/api/v1/manager/{id}/branch": { "get": { "description": "Gets a branches by manager id", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "branch" ], "summary": "Gets branches by manager id", "parameters": [ { "type": "integer", "description": "User ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.BranchDetailRes" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/response.APIResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } } }, "/api/v1/managers": { "get": { "description": "Get all Managers", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "manager" ], "summary": "Get all Managers", "parameters": [ { "type": "integer", "description": "Page number", "name": "page", "in": "query" }, { "type": "integer", "description": "Page size", "name": "page_size", "in": "query" } ], "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" } } } }, "post": { "description": "Create Manager", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "manager" ], "summary": "Create Manager", "parameters": [ { "description": "Create manager", "name": "manger", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.CreateManagerReq" } } ], "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" } } } } }, "/api/v1/managers/{id}": { "get": { "description": "Get a single manager by id", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "manager" ], "summary": "Get manager by id", "parameters": [ { "type": "integer", "description": "User ID", "name": "id", "in": "path", "required": true } ], "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" } } } }, "put": { "description": "Update Managers", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "manager" ], "summary": "Update Managers", "parameters": [ { "description": "Update Managers", "name": "Managers", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.updateManagerReq" } } ], "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" } } } } }, "/api/v1/odds": { "get": { "description": "Retrieve all odds from the database", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "prematch" ], "summary": "Retrieve all odds", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.OddMarketFilter" } } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } } }, "/api/v1/odds/upcoming/{upcoming_id}": { "get": { "description": "Retrieve prematch odds by upcoming event ID (FI from Bet365) with optional pagination", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "prematch" ], "summary": "Retrieve prematch odds by upcoming ID (FI)", "parameters": [ { "type": "string", "description": "Upcoming Event ID (FI)", "name": "upcoming_id", "in": "path", "required": true }, { "type": "integer", "description": "Number of results to return (default: 10)", "name": "limit", "in": "query" }, { "type": "integer", "description": "Number of results to skip (default: 0)", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.OddMarketWithEventFilter" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/response.APIResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } } }, "/api/v1/odds/upcoming/{upcoming_id}/market/{market_id}": { "get": { "description": "Retrieve raw odds records using a Market ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "prematch" ], "summary": "Retrieve raw odds by Market ID", "parameters": [ { "type": "string", "description": "Upcoming ID", "name": "upcoming_id", "in": "path", "required": true }, { "type": "string", "description": "Market ID", "name": "market_id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.RawOddsByMarketID" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/response.APIResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } } }, "/api/v1/operation": { "post": { "description": "Creates a operation", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "branch" ], "summary": "Create a operation", "parameters": [ { "description": "Creates operation", "name": "createBranchOperation", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.CreateBranchOperationReq" } } ], "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" } } } } }, "/api/v1/orchestrator/virtual-games": { "get": { "description": "Returns all virtual games with optional filters (category, search, pagination)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "VirtualGames - Orchestration" ], "summary": "List all virtual games", "parameters": [ { "type": "string", "description": "Filter by category", "name": "category", "in": "query" }, { "type": "string", "description": "Search by game name", "name": "search", "in": "query" }, { "type": "integer", "description": "Pagination limit", "name": "limit", "in": "query" }, { "type": "integer", "description": "Pagination offset", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/domain.Response" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/domain.UnifiedGame" } } } } ] } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } }, "502": { "description": "Bad Gateway", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/report-files/download/{filename}": { "get": { "description": "Downloads a generated report CSV file from the server", "produces": [ "text/csv" ], "tags": [ "Reports" ], "summary": "Download a CSV report file", "parameters": [ { "type": "string", "description": "Name of the report file to download (e.g., report_daily_2025-06-21.csv)", "name": "filename", "in": "path", "required": true } ], "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" } } } } }, "/api/v1/report-files/list": { "get": { "description": "Returns a paginated list of generated report CSV files with search capability", "produces": [ "application/json" ], "tags": [ "Reports" ], "summary": "List available report CSV files", "parameters": [ { "type": "string", "description": "Search term to filter filenames", "name": "search", "in": "query" }, { "type": "integer", "default": 1, "description": "Page number (default: 1)", "name": "page", "in": "query" }, { "type": "integer", "default": 20, "description": "Items per page (default: 20, max: 100)", "name": "limit", "in": "query" } ], "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" } } } } }, "/api/v1/reports/dashboard": { "get": { "security": [ { "ApiKeyAuth": [] } ], "description": "Returns a comprehensive dashboard report with key metrics", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Reports" ], "summary": "Get dashboard report", "parameters": [ { "type": "integer", "description": "Company ID filter", "name": "company_id", "in": "query" }, { "type": "integer", "description": "Branch ID filter", "name": "branch_id", "in": "query" }, { "type": "integer", "description": "User ID filter", "name": "user_id", "in": "query" }, { "type": "string", "description": "Start time filter (RFC3339 format)", "name": "start_time", "in": "query" }, { "type": "string", "description": "End time filter (RFC3339 format)", "name": "end_time", "in": "query" }, { "type": "string", "description": "Sport ID filter", "name": "sport_id", "in": "query" }, { "type": "integer", "description": "Status filter (0=Pending, 1=Win, 2=Loss, 3=Half, 4=Void, 5=Error)", "name": "status", "in": "query" } ], "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" } } } } }, "/api/v1/result/b365/{id}": { "get": { "description": "Get results for an event", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "result" ], "summary": "Get results for an event", "parameters": [ { "type": "string", "description": "Event ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/handlers.ResultRes" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/response.APIResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } } }, "/api/v1/santimpay/b2c-withdrawal": { "post": { "description": "Initiates a B2C withdrawal request with SantimPay and returns the response.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "SantimPay" ], "summary": "Process SantimPay B2C Withdrawal", "parameters": [ { "description": "SantimPay B2C withdrawal request payload", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.GeneratePaymentURLRequest" } } ], "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" } } } } }, "/api/v1/santimpay/b2c/partners": { "get": { "description": "Fetches a list of available B2C payout partners (e.g., Telebirr, Mpesa, Banks) from SantimPay.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "SantimPay" ], "summary": "Get SantimPay B2C Partners", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/domain.Response" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/santimpay/callback": { "post": { "description": "Processes a callback from SantimPay, updates transfer status, and credits user wallet if payment was successful.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "SantimPay" ], "summary": "Process SantimPay Payment Callback", "parameters": [ { "description": "SantimPay callback payload", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.SantimPayCallbackPayload" } } ], "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" } } } } }, "/api/v1/santimpay/direct-payment": { "post": { "description": "Initiates a direct payment request with SantimPay and returns the response.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "SantimPay" ], "summary": "Process SantimPay Direct Payment", "parameters": [ { "description": "SantimPay direct payment request payload", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.GeneratePaymentURLRequest" } } ], "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" } } } } }, "/api/v1/santimpay/payment": { "post": { "description": "Generates a payment URL using SantimPay and returns it to the client.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "SantimPay" ], "summary": "Create SantimPay Payment Session", "parameters": [ { "description": "SantimPay payment request payload", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.GeneratePaymentURLRequest" } } ], "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" } } } } }, "/api/v1/santimpay/transaction-status": { "post": { "description": "Retrieves the real-time status of a transaction from SantimPay.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "SantimPay" ], "summary": "Check SantimPay Transaction Status", "parameters": [ { "description": "Transaction status request payload", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.TransactionStatusRequest" } } ], "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" } } } } }, "/api/v1/search/branch": { "get": { "description": "Search branches by name or location", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "branch" ], "summary": "Search branches", "parameters": [ { "type": "string", "description": "Search query", "name": "q", "in": "query", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.BranchDetailRes" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/response.APIResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } } }, "/api/v1/search/company": { "get": { "description": "Gets all companies", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "company" ], "summary": "Gets all companies", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.CompanyRes" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/response.APIResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } } }, "/api/v1/shop/bet": { "get": { "description": "Gets all the shop bets", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "bet" ], "summary": "Gets all shop bets", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.ShopBetRes" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/response.APIResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } }, "post": { "description": "Create bet at branch", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "transaction" ], "summary": "Create bet at branch", "parameters": [ { "description": "create bet", "name": "createBet", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.ShopBetReq" } } ], "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" } } } } }, "/api/v1/shop/bet/{id}": { "get": { "description": "Cashout bet at branch", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "transaction" ], "summary": "Cashout bet at branch", "parameters": [ { "description": "cashout bet", "name": "createBet", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.CashoutReq" } } ], "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" } } } } }, "/api/v1/shop/bet/{id}/cashout": { "post": { "description": "Cashout bet at branch", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "transaction" ], "summary": "Cashout bet at branch", "parameters": [ { "description": "cashout bet", "name": "cashoutBet", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.CashoutReq" } } ], "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" } } } } }, "/api/v1/shop/cashout": { "post": { "description": "Cashout bet by cashoutID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "transaction" ], "summary": "Cashout bet by cashoutID", "parameters": [ { "description": "cashout bet", "name": "cashoutBet", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.CashoutReq" } } ], "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" } } } } }, "/api/v1/shop/cashout/{id}": { "get": { "description": "Cashout bet at branch", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "transaction" ], "summary": "Cashout bet at branch", "parameters": [ { "description": "cashout bet", "name": "createBet", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.CashoutReq" } } ], "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" } } } } }, "/api/v1/shop/deposit": { "post": { "description": "Transfers money from branch wallet to customer wallet", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "transaction" ], "summary": "Shop deposit into customer wallet", "parameters": [ { "description": "ShopDepositReq", "name": "transferToWallet", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.ShopDepositReq" } } ], "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" } } } } }, "/api/v1/shop/transaction": { "get": { "description": "Gets all the transactions", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "transaction" ], "summary": "Gets all transactions", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.ShopTransactionRes" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/response.APIResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } } }, "/api/v1/shop/transaction/{id}": { "get": { "description": "Gets a single transaction by id", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "transaction" ], "summary": "Gets transaction by id", "parameters": [ { "type": "integer", "description": "Transaction ID", "name": "id", "in": "path", "required": true } ], "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" } } } }, "put": { "description": "Updates the verified status of a transaction", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "transaction" ], "summary": "Updates the verified field of a transaction", "parameters": [ { "type": "integer", "description": "Transaction ID", "name": "id", "in": "path", "required": true }, { "description": "Updates Transaction Verification", "name": "updateVerified", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.UpdateTransactionVerifiedReq" } } ], "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" } } } } }, "/api/v1/shop/transaction/{id}/bet": { "get": { "description": "Gets a single shop bet by transaction id", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "transaction" ], "summary": "Gets shop bet by transaction id", "parameters": [ { "type": "integer", "description": "Transaction ID", "name": "id", "in": "path", "required": true } ], "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" } } } } }, "/api/v1/sport/bet/{id}": { "get": { "description": "Gets a single bet by id", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "bet" ], "summary": "Gets bet by id", "parameters": [ { "type": "integer", "description": "Bet ID", "name": "id", "in": "path", "required": true } ], "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" } } } }, "delete": { "description": "Deletes bet by id", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "bet" ], "summary": "Deletes bet by id", "parameters": [ { "type": "integer", "description": "Bet ID", "name": "id", "in": "path", "required": true } ], "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" } } } } }, "/api/v1/super-login": { "post": { "description": "Login super-admin", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "auth" ], "summary": "Login super-admin", "parameters": [ { "description": "Login super-admin", "name": "login", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.loginAdminReq" } } ], "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" } } } } }, "/api/v1/supportedOperation": { "get": { "description": "Gets all supported operations", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "branch" ], "summary": "Gets all supported operations", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.BranchDetailRes" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/response.APIResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } }, "post": { "description": "Creates a supported operation", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "branch" ], "summary": "Create a supported operation", "parameters": [ { "description": "Creates supported operation", "name": "createSupportedOperation", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.CreateSupportedOperationReq" } } ], "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" } } } } }, "/api/v1/t-approver": { "get": { "description": "Get all Admins", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get all Admins", "parameters": [ { "type": "integer", "description": "Page number", "name": "page", "in": "query" }, { "type": "integer", "description": "Page size", "name": "page_size", "in": "query" } ], "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" } } } } }, "/api/v1/t-approver/{id}": { "get": { "description": "Get a single admin by id", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Get admin by id", "parameters": [ { "type": "integer", "description": "User ID", "name": "id", "in": "path", "required": true } ], "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" } } } }, "put": { "description": "Update Admin", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "admin" ], "summary": "Update Admin", "parameters": [ { "description": "Update Admin", "name": "admin", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.updateAdminReq" } } ], "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" } } } } }, "/api/v1/telebirr/callback": { "post": { "description": "Processes the Telebirr payment result and updates wallet balance.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Telebirr" ], "summary": "Handle Telebirr Payment Callback", "parameters": [ { "description": "Callback payload from Telebirr", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.TelebirrPaymentCallbackPayload" } } ], "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" } } } } }, "/api/v1/telebirr/payment": { "post": { "description": "Generates a payment URL using Telebirr and returns it to the client.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Telebirr" ], "summary": "Create Telebirr Payment Session", "parameters": [ { "description": "Telebirr payment request payload", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.GeneratePaymentURLRequest" } } ], "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" } } } } }, "/api/v1/tenant": { "get": { "description": "Check if phone number or email exist", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "user" ], "summary": "Check if phone number or email exist", "parameters": [ { "description": "Check phone number or email exist", "name": "checkPhoneEmailExist", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.CheckPhoneEmailExistReq" } } ], "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" } } } } }, "/api/v1/tenant/{tenant_slug}/customer": { "get": { "description": "Get all Customers", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "customer" ], "summary": "Get all Customers", "parameters": [ { "type": "integer", "description": "Page number", "name": "page", "in": "query" }, { "type": "integer", "description": "Page size", "name": "page_size", "in": "query" } ], "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" } } } } }, "/api/v1/tenant/{tenant_slug}/customer/{id}": { "get": { "description": "Get a single customer by id", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "customer" ], "summary": "Get customer by id", "parameters": [ { "type": "integer", "description": "User ID", "name": "id", "in": "path", "required": true } ], "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" } } } }, "put": { "description": "Update Customers", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "customer" ], "summary": "Update Customers", "parameters": [ { "description": "Update Customers", "name": "Customers", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.updateCustomerReq" } } ], "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" } } } } }, "/api/v1/tenant/{tenant_slug}/customer/{id}/bets": { "get": { "description": "Get tenant customer bets", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "customer" ], "summary": "Get tenant customer bets", "parameters": [ { "type": "integer", "description": "User ID", "name": "id", "in": "path", "required": true } ], "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" } } } } }, "/api/v1/tenant/{tenant_slug}/events/{id}/bets": { "get": { "description": "Retrieve bet outcomes by event id", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "prematch" ], "summary": "Retrieve bet outcomes by event id", "parameters": [ { "type": "string", "description": "ID", "name": "id", "in": "path", "required": true } ], "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" } } } } }, "/api/v1/tenant/{tenant_slug}/events/{id}/settings": { "put": { "description": "Update the event settings", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "event" ], "summary": "update the event settings", "parameters": [ { "type": "integer", "description": "Event ID", "name": "id", "in": "path", "required": true } ], "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" } } } } }, "/api/v1/tenant/{tenant_slug}/referral/stats": { "get": { "security": [ { "Bearer": [] } ], "description": "Retrieves referral statistics for the authenticated user", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "referral" ], "summary": "Get referral statistics", "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" } } } } }, "/api/v1/ticket": { "get": { "description": "Retrieve all tickets", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "ticket" ], "summary": "Get all tickets", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.TicketRes" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/response.APIResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } } }, "/api/v1/ticket/{id}": { "get": { "description": "Retrieve ticket details by ticket ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "ticket" ], "summary": "Get ticket by ID", "parameters": [ { "type": "integer", "description": "Ticket ID", "name": "id", "in": "path", "required": true } ], "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" } } } } }, "/api/v1/transfer/refill/:id": { "post": { "description": "Super Admin route to refill a wallet", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "transfer" ], "summary": "Refill wallet", "parameters": [ { "description": "Create Transfer", "name": "refillWallet", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.CreateTransferReq" } } ], "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" } } } } }, "/api/v1/transfer/wallet/:id": { "post": { "description": "Create a transfer to wallet", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "transfer" ], "summary": "Create a transfer to wallet", "parameters": [ { "description": "Create Transfer", "name": "transferToWallet", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.CreateTransferReq" } } ], "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" } } } } }, "/api/v1/transfer/wallet/{id}": { "get": { "description": "Get transfer by wallet", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "transfer" ], "summary": "Get transfer by wallet", "parameters": [ { "description": "Create Transfer", "name": "transferToWallet", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.CreateTransferReq" } } ], "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" } } } } }, "/api/v1/user/delete/{id}": { "delete": { "description": "Delete a user by their ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "user" ], "summary": "Delete user by ID", "parameters": [ { "type": "integer", "description": "User ID", "name": "id", "in": "path", "required": true } ], "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" } } } } }, "/api/v1/user/resetPassword": { "post": { "description": "Reset password", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "user" ], "summary": "Reset password", "parameters": [ { "description": "Reset password", "name": "resetPassword", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.ResetPasswordReq" } } ], "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" } } } } }, "/api/v1/user/search": { "post": { "description": "Search for user using name or phone", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "user" ], "summary": "Search for user using name or phone", "parameters": [ { "description": "Search for using his name or phone", "name": "searchUserByNameOrPhone", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.SearchUserByNameOrPhoneReq" } } ], "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" } } } } }, "/api/v1/user/sendResetCode": { "post": { "description": "Send reset code", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "user" ], "summary": "Send reset code", "parameters": [ { "description": "Send reset code", "name": "resetCode", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.ResetCodeReq" } } ], "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" } } } } }, "/api/v1/user/single/{id}": { "get": { "description": "Get a single user by id", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "user" ], "summary": "Get user by id", "parameters": [ { "type": "integer", "description": "User ID", "name": "id", "in": "path", "required": true } ], "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" } } } } }, "/api/v1/user/suspend": { "post": { "description": "Suspend or unsuspend a user", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "user" ], "summary": "Suspend or unsuspend a user", "parameters": [ { "description": "Suspend or unsuspend a user", "name": "updateUserSuspend", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.UpdateUserSuspendReq" } } ], "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" } } } } }, "/api/v1/veli/credit-balances": { "get": { "description": "Fetches current credit balances per currency for the specified brand", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Virtual Games - VeliGames" ], "summary": "Get VeliGames credit balances for a brand", "parameters": [ { "type": "string", "description": "Brand ID", "name": "brandId", "in": "query", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/domain.Response" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/domain.CreditBalance" } } } } ] } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } }, "502": { "description": "Bad Gateway", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/veli/games-list": { "post": { "description": "Retrieves games for the specified provider", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Virtual Games - VeliGames" ], "summary": "Get games by provider", "parameters": [ { "description": "Brand and Provider ID", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.GameListRequest" } } ], "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" } } } } }, "/api/v1/veli/gaming-activity": { "post": { "description": "Retrieves successfully processed gaming activity transactions (BET, WIN, CANCEL) from Veli Games", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Virtual Games - VeliGames" ], "summary": "Get Veli Gaming Activity", "parameters": [ { "description": "Gaming Activity Request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.GamingActivityRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/domain.Response" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/domain.GamingActivityResponse" } } } ] } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/veli/huge-wins": { "post": { "description": "Retrieves huge win transactions based on brand configuration (e.g. win \u003e 10000 USD or 100x bet)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Virtual Games - VeliGames" ], "summary": "Get Veli Huge Wins", "parameters": [ { "description": "Huge Wins Request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.HugeWinsRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/domain.Response" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/domain.HugeWinsResponse" } } } ] } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/veli/providers": { "post": { "description": "Retrieves the list of VeliGames providers", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Virtual Games - VeliGames" ], "summary": "Get game providers", "parameters": [ { "description": "Brand ID and paging options", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.ProviderRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/domain.Response" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/domain.ProviderResponse" } } } } ] } }, "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" } } } } }, "/api/v1/veli/start-demo-game": { "post": { "description": "Starts a demo session of the specified game (must support demo mode)", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Virtual Games - VeliGames" ], "summary": "Start a demo game session", "parameters": [ { "description": "Start demo game input", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.DemoGameRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/domain.Response" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/domain.GameStartResponse" } } } ] } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } }, "502": { "description": "Bad Gateway", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/veli/start-game": { "post": { "description": "Starts a real VeliGames session with the given player and game info", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Virtual Games - VeliGames" ], "summary": "Start a real game session", "parameters": [ { "description": "Start game input", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.GameStartRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/domain.Response" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/domain.GameStartResponse" } } } ] } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } }, "502": { "description": "Bad Gateway", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/virtual-game/favorites": { "get": { "description": "Lists the games that the user marked as favorite", "produces": [ "application/json" ], "tags": [ "VirtualGames - Favourites" ], "summary": "Get user's favorite games", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.GameRecommendation" } } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } }, "post": { "description": "Adds a game to the user's favorite games list", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "VirtualGames - Favourites" ], "summary": "Add game to favorites", "parameters": [ { "description": "Game ID to add", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.FavoriteGameRequest" } } ], "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" } } } } }, "/api/v1/virtual-game/favorites/{gameID}": { "delete": { "description": "Removes a game from the user's favorites", "produces": [ "application/json" ], "tags": [ "VirtualGames - Favourites" ], "summary": "Remove game from favorites", "parameters": [ { "type": "integer", "description": "Game ID to remove", "name": "gameID", "in": "path", "required": true } ], "responses": { "200": { "description": "removed", "schema": { "type": "string" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/virtual-game/orchestrator/providers/status": { "patch": { "description": "Sets the enabled status of a provider", "produces": [ "application/json" ], "tags": [ "VirtualGames - Orchestration" ], "summary": "Enable/Disable a provider", "parameters": [ { "type": "string", "description": "Provider ID", "name": "provider_id", "in": "path", "required": true }, { "type": "boolean", "description": "Enable or Disable", "name": "enabled", "in": "query", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/domain.VirtualGameProvider" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/virtual-game/providers": { "get": { "description": "Lists all providers with pagination", "produces": [ "application/json" ], "tags": [ "VirtualGames - Orchestration" ], "summary": "List virtual game providers", "parameters": [ { "type": "integer", "description": "Limit", "name": "limit", "in": "query" }, { "type": "integer", "description": "Offset", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": true } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/virtual-game/providers/{provider_id}": { "get": { "description": "Fetches a provider by provider_id", "produces": [ "application/json" ], "tags": [ "VirtualGames - Orchestration" ], "summary": "Get a virtual game provider", "parameters": [ { "type": "string", "description": "Provider ID", "name": "provider_id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/domain.VirtualGameProvider" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } }, "delete": { "description": "Deletes a provider by provider_id", "tags": [ "VirtualGames - Orchestration" ], "summary": "Remove a virtual game provider", "parameters": [ { "type": "string", "description": "Provider ID", "name": "provider_id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK" }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/api/v1/wallet": { "get": { "description": "Retrieve all wallets", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "wallet" ], "summary": "Get all wallets", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/handlers.WalletRes" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/response.APIResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } } }, "/api/v1/wallet/{id}": { "get": { "description": "Retrieve wallet details by wallet ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "wallet" ], "summary": "Get wallet by ID", "parameters": [ { "type": "integer", "description": "Wallet ID", "name": "id", "in": "path", "required": true } ], "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" } } } }, "patch": { "description": "Can activate and deactivate wallet", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "wallet" ], "summary": "Activate and Deactivate Wallet", "parameters": [ { "type": "integer", "description": "Wallet ID", "name": "id", "in": "path", "required": true }, { "description": "Update Wallet Active", "name": "updateCashOut", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.UpdateWalletActiveReq" } } ], "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" } } } } }, "/api/v1/webhooks/alea": { "post": { "description": "Handles webhook callbacks from Alea Play virtual games for bet settlement", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Alea Virtual Games" ], "summary": "Process Alea Play game callback", "parameters": [ { "description": "Callback payload", "name": "callback", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.AleaPlayCallback" } } ], "responses": { "200": { "description": "Callback processed successfully", "schema": { "type": "object", "additionalProperties": { "allOf": [ { "type": "string" }, { "type": "object", "properties": { "status": { "type": "string" } } } ] } } } } } }, "/api/v1/win": { "post": { "description": "Processes win callbacks from either Veli or PopOK providers by auto-detecting the format", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Wins" ], "summary": "Handle win callback (Veli or PopOK)", "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" } } } } }, "/api/v1/{tenant_slug}/admin-login": { "post": { "description": "Login customer", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "auth" ], "summary": "Login customer", "parameters": [ { "description": "Login admin", "name": "login", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.loginAdminReq" } } ], "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" } } } } }, "/api/v1/{tenant_slug}/customer-login": { "post": { "description": "Login customer", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "auth" ], "summary": "Login customer", "parameters": [ { "description": "Login customer", "name": "login", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.loginCustomerReq" } } ], "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" } } } } }, "/api/v1/{tenant_slug}/events": { "get": { "description": "Retrieve all upcoming events settings from the database", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "prematch" ], "summary": "Retrieve all upcoming events with settings", "parameters": [ { "type": "integer", "description": "Page number", "name": "page", "in": "query" }, { "type": "integer", "description": "Page size", "name": "page_size", "in": "query" }, { "type": "string", "description": "League ID Filter", "name": "league_id", "in": "query" }, { "type": "string", "description": "Sport ID Filter", "name": "sport_id", "in": "query" }, { "type": "string", "description": "Country Code Filter", "name": "cc", "in": "query" }, { "type": "string", "description": "Start Time", "name": "first_start_time", "in": "query" }, { "type": "string", "description": "End Time", "name": "last_start_time", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.BaseEvent" } } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } } }, "/api/v1/{tenant_slug}/leagues": { "get": { "description": "Gets all leagues", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "leagues" ], "summary": "Gets all leagues", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.BaseLeague" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/response.APIResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } } }, "/api/v1/{tenant_slug}/leagues/{id}/featured": { "put": { "description": "Set the league to featured/un-featured", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "leagues" ], "summary": "Set the league to featured/un-featured", "parameters": [ { "type": "integer", "description": "League ID", "name": "id", "in": "path", "required": true }, { "description": "League Featured Request", "name": "active", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.SetLeagueAsFeatured" } } ], "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" } } } } }, "/api/v1/{tenant_slug}/leagues/{id}/set-active": { "put": { "description": "Set the league to active", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "leagues" ], "summary": "Set the league to active", "parameters": [ { "type": "integer", "description": "League ID", "name": "id", "in": "path", "required": true }, { "description": "League Active Request", "name": "active", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.SetLeagueActiveReq" } } ], "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" } } } } }, "/api/v1/{tenant_slug}/odds": { "get": { "description": "Retrieve all odds from the database", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "prematch" ], "summary": "Retrieve all odds", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.OddMarketFilter" } } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } } }, "/api/v1/{tenant_slug}/odds/upcoming/{upcoming_id}": { "get": { "description": "Retrieve prematch odds by upcoming event ID (FI from Bet365) with optional pagination", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "prematch" ], "summary": "Retrieve prematch odds by upcoming ID (FI)", "parameters": [ { "type": "string", "description": "Upcoming Event ID (FI)", "name": "upcoming_id", "in": "path", "required": true }, { "type": "integer", "description": "Number of results to return (default: 10)", "name": "limit", "in": "query" }, { "type": "integer", "description": "Number of results to skip (default: 0)", "name": "offset", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.OddMarketFilter" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/response.APIResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } } }, "/api/v1/{tenant_slug}/odds/upcoming/{upcoming_id}/market/{market_id}": { "get": { "description": "Retrieve raw odds records using a Market ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "prematch" ], "summary": "Retrieve raw odds by Market ID", "parameters": [ { "type": "string", "description": "Upcoming ID", "name": "upcoming_id", "in": "path", "required": true }, { "type": "string", "description": "Market ID", "name": "market_id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.RawOddsByMarketID" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/response.APIResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } } }, "/api/v1/{tenant_slug}/sport/bet": { "get": { "description": "Gets all the bets", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "bet" ], "summary": "Gets all bets", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.BetRes" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/response.APIResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } }, "post": { "description": "Creates a bet", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "bet" ], "summary": "Create a bet", "parameters": [ { "description": "Creates bet", "name": "createBet", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.CreateBetReq" } } ], "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" } } } } }, "/api/v1/{tenant_slug}/sport/bet/fastcode": { "post": { "description": "Creates a bet with fast code", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "bet" ], "summary": "Create a bet with fast code", "parameters": [ { "description": "Creates bet", "name": "createBetWithFastCode", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.CreateBetWithFastCodeReq" } } ], "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" } } } } }, "/api/v1/{tenant_slug}/sport/bet/fastcode/{fast_code}": { "get": { "description": "Gets a single bet by fast_code", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "bet" ], "summary": "Gets bet by fast_code", "parameters": [ { "type": "integer", "description": "Bet ID", "name": "fast_code", "in": "path", "required": true } ], "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" } } } } }, "/api/v1/{tenant_slug}/sport/bet/{id}": { "get": { "description": "Gets a single bet by id", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "bet" ], "summary": "Gets bet by id", "parameters": [ { "type": "integer", "description": "Bet ID", "name": "id", "in": "path", "required": true } ], "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" } } } }, "delete": { "description": "Deletes bet by id", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "bet" ], "summary": "Deletes bet by id", "parameters": [ { "type": "integer", "description": "Bet ID", "name": "id", "in": "path", "required": true } ], "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" } } } }, "patch": { "description": "Updates the cashed out field", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "bet" ], "summary": "Updates the cashed out field", "parameters": [ { "type": "integer", "description": "Bet ID", "name": "id", "in": "path", "required": true }, { "description": "Updates Cashed Out", "name": "updateCashOut", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.UpdateCashOutReq" } } ], "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" } } } } }, "/api/v1/{tenant_slug}/sport/random/bet": { "post": { "description": "Generate a random bet", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "bet" ], "summary": "Generate a random bet", "parameters": [ { "description": "Create Random bet", "name": "createBet", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.RandomBetReq" } } ], "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" } } } } }, "/api/v1/{tenant_slug}/ticket": { "get": { "description": "Retrieve all tickets", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "ticket" ], "summary": "Get all tickets", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.TicketRes" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/response.APIResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } }, "post": { "description": "Creates a temporary ticket", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "ticket" ], "summary": "Create a temporary ticket", "parameters": [ { "description": "Creates ticket", "name": "createTicket", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.CreateTicketReq" } } ], "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" } } } } }, "/api/v1/{tenant_slug}/ticket/{id}": { "get": { "description": "Retrieve ticket details by ticket ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "ticket" ], "summary": "Get ticket by ID", "parameters": [ { "type": "integer", "description": "Ticket ID", "name": "id", "in": "path", "required": true } ], "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" } } } } }, "/api/v1/{tenant_slug}/top-leagues": { "get": { "description": "Retrieve all top leagues", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "prematch" ], "summary": "Retrieve all top leagues", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/handlers.TopLeague" } } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } } }, "/api/v1/{tenant_slug}/user/admin-profile": { "get": { "security": [ { "Bearer": [] } ], "description": "Get user profile", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "user" ], "summary": "Get user profile", "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" } } } } }, "/api/v1/{tenant_slug}/user/bets": { "get": { "description": "Gets user bets", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "user" ], "summary": "Gets user bets", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.BetRes" } } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/response.APIResponse" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/response.APIResponse" } } } } }, "/api/v1/{tenant_slug}/user/checkPhoneEmailExist": { "post": { "description": "Check if phone number or email exist", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "user" ], "summary": "Check if phone number or email exist", "parameters": [ { "description": "Check phone number or email exist", "name": "checkPhoneEmailExist", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.CheckPhoneEmailExistReq" } } ], "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" } } } } }, "/api/v1/{tenant_slug}/user/customer-profile": { "get": { "security": [ { "Bearer": [] } ], "description": "Get user profile", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "user" ], "summary": "Get user profile", "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" } } } } }, "/api/v1/{tenant_slug}/user/register": { "post": { "description": "Register user", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "user" ], "summary": "Register user", "parameters": [ { "description": "Register user", "name": "registerUser", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.RegisterUserReq" } } ], "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" } } } } }, "/api/v1/{tenant_slug}/user/resetPassword": { "post": { "description": "Reset tenant password", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "user" ], "summary": "Reset tenant password", "parameters": [ { "description": "Reset password", "name": "resetPassword", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.ResetPasswordReq" } } ], "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" } } } } }, "/api/v1/{tenant_slug}/user/search": { "post": { "description": "Search for user using name or phone", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "user" ], "summary": "Search for user using name or phone", "parameters": [ { "description": "Search for using his name or phone", "name": "searchUserByNameOrPhone", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.SearchUserByNameOrPhoneReq" } } ], "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" } } } } }, "/api/v1/{tenant_slug}/user/sendRegisterCode": { "post": { "description": "Send register code", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "user" ], "summary": "Send register code", "parameters": [ { "description": "Send register code", "name": "registerCode", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.RegisterCodeReq" } } ], "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" } } } } }, "/api/v1/{tenant_slug}/user/sendResetCode": { "post": { "description": "Send reset code", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "user" ], "summary": "Send reset code", "parameters": [ { "description": "Send reset code", "name": "resetCode", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.ResetCodeReq" } } ], "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" } } } } }, "/api/v1/{tenant_slug}/user/wallet": { "get": { "security": [ { "Bearer": [] } ], "description": "Retrieve customer wallet details", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "wallet" ], "summary": "Get customer wallet", "parameters": [ { "type": "integer", "description": "Company ID", "name": "company_id", "in": "header", "required": true } ], "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" } } } } }, "/api/v1/{tenant_slug}events/{id}": { "get": { "description": "Retrieve an upcoming event by ID", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "prematch" ], "summary": "Retrieve an upcoming by ID", "parameters": [ { "type": "string", "description": "ID", "name": "id", "in": "path", "required": true } ], "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" } } } } }, "/betwin": { "post": { "description": "Processes a Bet and Win request from Atlas provider", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Virtual Games - Atlas" ], "summary": "Atlas BetWin callback", "parameters": [ { "description": "Atlas BetWin input", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.AtlasBetWinRequest" } } ], "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" } } } } }, "/freespin": { "post": { "description": "Handles the result of a free spin/bet from the game server", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Virtual Games - Atlas" ], "summary": "Free Spin/Bet result callback", "parameters": [ { "description": "Free spin result input", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.FreeSpinResultRequest" } } ], "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" } } } } }, "/jackpot": { "post": { "description": "Handles the jackpot result from the game server", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Virtual Games - Atlas" ], "summary": "Jackpot result callback", "parameters": [ { "description": "Jackpot result input", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.JackpotRequest" } } ], "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" } } } } }, "/popok/games": { "get": { "description": "Retrieves the list of available PopOK slot games", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Virtual Games - PopOK" ], "summary": "Get PopOK Games List", "parameters": [ { "type": "string", "default": "USD", "description": "Currency (e.g. USD, ETB)", "name": "currency", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.PopOKGame" } } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/popok/games/recommend": { "get": { "description": "Recommends games based on user history or randomly", "produces": [ "application/json" ], "tags": [ "Virtual Games - PopOK" ], "summary": "Recommend virtual games", "parameters": [ { "type": "integer", "description": "User ID", "name": "user_id", "in": "query", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/domain.GameRecommendation" } } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/domain.ErrorResponse" } } } } }, "/result": { "post": { "description": "Processes a round result from Atlas or other providers", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Virtual Games - Atlas" ], "summary": "Atlas Round Result callback", "parameters": [ { "description": "Round result input", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.RoundResultRequest" } } ], "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" } } } } }, "/rollback": { "post": { "description": "Processes a rollback request from Atlas or other providers", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Virtual Games - Atlas" ], "summary": "Atlas Rollback callback", "parameters": [ { "description": "Rollback request input", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.RollbackRequest" } } ], "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" } } } } }, "/virtual-game/callback": { "post": { "description": "Processes callbacks from PopOK for game events", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Virtual Games - PopOK" ], "summary": "Handle PopOK game callback", "parameters": [ { "description": "Callback data", "name": "callback", "in": "body", "required": true, "schema": { "$ref": "#/definitions/domain.PopOKCallback" } } ], "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" } } } } }, "/virtual-game/launch": { "post": { "security": [ { "Bearer": [] } ], "description": "Generates a URL to launch a PopOK game", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Virtual Games - PopOK" ], "summary": "Launch a PopOK virtual game", "parameters": [ { "description": "Game launch details", "name": "launch", "in": "body", "required": true, "schema": { "$ref": "#/definitions/handlers.launchVirtualGameReq" } } ], "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" } } } } } }, "definitions": { "domain.ARIFPAYPaymentMethod": { "type": "object", "properties": { "id": { "type": "integer" }, "name": { "type": "string" } } }, "domain.AleaPlayCallback": { "type": "object", "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" } } }, "domain.ArifpayB2CRequest": { "type": "object", "required": [ "amount", "customerEmail", "customerPhone" ], "properties": { "Phonenumber": { "type": "string" }, "amount": { "type": "number" }, "customerEmail": { "type": "string" }, "customerPhone": { "type": "string" } } }, "domain.ArifpayVerifyByTransactionIDRequest": { "type": "object", "properties": { "paymentType": { "type": "integer" }, "transactionId": { "type": "string" } } }, "domain.AtlasBetWinRequest": { "type": "object", "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" } } }, "domain.AtlasBetWinResponse": { "type": "object", "properties": { "balance": { "type": "number" }, "player_id": { "type": "string" } } }, "domain.AtlasGameEntity": { "type": "object", "properties": { "demo_url": { "description": "✅ new field", "type": "string" }, "deviceType": { "type": "string" }, "game_id": { "type": "string" }, "hasFreeBets": { "type": "boolean" }, "has_demo": { "type": "boolean" }, "name": { "type": "string" }, "providerId": { "type": "string" }, "thumbnail_img_url": { "description": "✅ new field", "type": "string" }, "type": { "type": "string" } } }, "domain.AtlasGameInitRequest": { "type": "object", "properties": { "currency": { "type": "string" }, "game": { "type": "string" }, "language": { "type": "string" }, "player_id": { "type": "string" } } }, "domain.AtlasGameInitResponse": { "type": "object", "properties": { "url": { "type": "string" } } }, "domain.AtlasGetUserDataRequest": { "type": "object", "properties": { "casino_id": { "type": "string" }, "game": { "type": "string" }, "player_id": { "type": "string" }, "session_id": { "type": "string" } } }, "domain.AtlasGetUserDataResponse": { "type": "object", "properties": { "balance": { "type": "number" }, "player_id": { "type": "string" } } }, "domain.Bank": { "type": "object", "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" } } }, "domain.BaseEvent": { "type": "object", "properties": { "addedTime": { "$ref": "#/definitions/domain.ValidInt" }, "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" }, "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" }, "totalOddOutcomes": { "type": "integer" } } }, "domain.BaseLeague": { "type": "object", "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" } } }, "domain.BetOutcome": { "type": "object", "properties": { "away_team_name": { "type": "string", "example": "Liverpool" }, "bet_id": { "type": "integer", "example": 1 }, "event_id": { "type": "integer", "example": 1 }, "expires": { "type": "string", "example": "2025-04-08T12:00:00Z" }, "home_team_name": { "type": "string", "example": "Manchester" }, "id": { "type": "integer", "example": 1 }, "market_id": { "type": "integer", "example": 1 }, "market_name": { "type": "string", "example": "Fulltime Result" }, "odd": { "type": "number", "example": 1.5 }, "odd_handicap": { "type": "string", "example": "1" }, "odd_header": { "type": "string", "example": "1" }, "odd_id": { "type": "integer", "example": 1 }, "odd_name": { "type": "string", "example": "1" }, "sport_id": { "type": "integer", "example": 1 }, "status": { "allOf": [ { "$ref": "#/definitions/domain.OutcomeStatus" } ], "example": 1 } } }, "domain.BetRes": { "type": "object", "properties": { "amount": { "type": "number", "example": 100 }, "cashed_out": { "type": "boolean", "example": false }, "company_id": { "type": "integer", "example": 1 }, "company_slug": { "type": "string", "example": "fortune" }, "created_at": { "type": "string", "example": "2025-04-08T12:00:00Z" }, "fast_code": { "type": "string" }, "full_name": { "type": "string", "example": "John Smith" }, "id": { "type": "integer", "example": 1 }, "is_shop_bet": { "type": "boolean", "example": false }, "outcomes": { "type": "array", "items": { "$ref": "#/definitions/domain.BetOutcome" } }, "status": { "allOf": [ { "$ref": "#/definitions/domain.OutcomeStatus" } ], "example": 1 }, "total_odds": { "type": "number", "example": 4.22 }, "user_id": { "type": "integer", "example": 2 } } }, "domain.BranchDetailRes": { "type": "object", "properties": { "balance": { "type": "number", "example": 100.5 }, "branch_manager_id": { "type": "integer", "example": 1 }, "company_id": { "type": "integer", "example": 1 }, "id": { "type": "integer", "example": 1 }, "is_active": { "type": "boolean", "example": false }, "is_self_owned": { "type": "boolean", "example": false }, "is_wallet_active": { "type": "boolean", "example": false }, "location": { "type": "string", "example": "Addis Ababa" }, "manager_name": { "type": "string", "example": "John Smith" }, "manager_phone_number": { "type": "string", "example": "0911111111" }, "name": { "type": "string", "example": "4-kilo Branch" }, "profit_percentage": { "type": "number", "example": 0.1 }, "wallet_id": { "type": "integer", "example": 1 } } }, "domain.BranchLocation": { "type": "object", "properties": { "key": { "type": "string", "example": "addis_ababa" }, "name": { "type": "string", "example": "Addis Ababa" } } }, "domain.BranchOperationRes": { "type": "object", "properties": { "description": { "type": "string", "example": "Betting on sport events" }, "name": { "type": "string", "example": "SportsBook" } } }, "domain.BranchRes": { "type": "object", "properties": { "branch_manager_id": { "type": "integer", "example": 1 }, "company_id": { "type": "integer", "example": 1 }, "id": { "type": "integer", "example": 1 }, "is_active": { "type": "boolean", "example": false }, "is_self_owned": { "type": "boolean", "example": false }, "location": { "type": "string", "example": "Addis Ababa" }, "name": { "type": "string", "example": "4-kilo Branch" }, "profit_percentage": { "type": "number", "example": 0.1 }, "wallet_id": { "type": "integer", "example": 1 } } }, "domain.CashoutReq": { "type": "object", "properties": { "account_name": { "type": "string" }, "account_number": { "type": "string" }, "bank_code": { "type": "string" }, "beneficiary_name": { "type": "string" }, "branch_id": { "type": "integer", "example": 1 }, "cashout_id": { "type": "string", "example": "1234" }, "payment_option": { "allOf": [ { "$ref": "#/definitions/domain.PaymentOption" } ], "example": 1 }, "reference_number": { "type": "string" } } }, "domain.ChapaDepositRequestPayload": { "type": "object", "required": [ "amount" ], "properties": { "amount": { "type": "number" } } }, "domain.ChapaDepositResponse": { "type": "object", "properties": { "checkoutURL": { "type": "string" }, "reference": { "type": "string" } } }, "domain.ChapaVerificationResponse": { "type": "object", "properties": { "amount": { "type": "number" }, "currency": { "type": "string" }, "status": { "type": "string" }, "tx_ref": { "type": "string" } } }, "domain.ChapaWebhookPayload": { "type": "object", "properties": { "amount": { "type": "integer" }, "currency": { "type": "string" }, "status": { "$ref": "#/definitions/domain.PaymentStatus" }, "tx_ref": { "type": "string" } } }, "domain.ChapaWithdrawalRequest": { "type": "object", "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" } } }, "domain.CheckoutSessionClientRequest": { "type": "object", "required": [ "amount", "customerEmail", "customerPhone" ], "properties": { "amount": { "type": "number" }, "customerEmail": { "type": "string" }, "customerPhone": { "type": "string" } } }, "domain.CompanyRes": { "type": "object", "properties": { "admin_id": { "type": "integer", "example": 1 }, "deducted_percentage": { "type": "number", "example": 0.1 }, "id": { "type": "integer", "example": 1 }, "is_active": { "type": "boolean", "example": true }, "name": { "type": "string", "example": "CompanyName" }, "slug": { "type": "string", "example": "slug" }, "wallet_id": { "type": "integer", "example": 1 } } }, "domain.CreateBetOutcomeReq": { "type": "object", "properties": { "event_id": { "type": "integer", "example": 1 }, "market_id": { "type": "integer", "example": 1 }, "odd_id": { "type": "integer", "example": 1 } } }, "domain.CreateBetReq": { "type": "object", "required": [ "amount", "outcomes" ], "properties": { "amount": { "type": "number", "example": 100 }, "branch_id": { "type": "integer", "example": 1 }, "outcomes": { "type": "array", "items": { "$ref": "#/definitions/domain.CreateBetOutcomeReq" } } } }, "domain.CreateBetWithFastCodeReq": { "type": "object", "properties": { "amount": { "type": "number" }, "branch_id": { "type": "integer" }, "fast_code": { "type": "string" } } }, "domain.CreateBranchOperationReq": { "type": "object", "properties": { "branch_id": { "type": "integer", "example": 1 }, "operation_id": { "type": "integer", "example": 1 } } }, "domain.CreateBranchReq": { "type": "object", "required": [ "branch_manager_id", "location", "name", "operations" ], "properties": { "branch_manager_id": { "type": "integer", "example": 1 }, "company_id": { "type": "integer", "example": 1 }, "is_self_owned": { "type": "boolean", "example": false }, "location": { "type": "string", "maxLength": 100, "minLength": 3, "example": "Addis Ababa" }, "name": { "type": "string", "maxLength": 100, "minLength": 3, "example": "4-kilo Branch" }, "operations": { "type": "array", "items": { "type": "integer" } }, "profit_percentage": { "type": "number", "example": 0.1 } } }, "domain.CreateCompanyReq": { "type": "object", "properties": { "admin_id": { "type": "integer", "example": 1 }, "deducted_percentage": { "type": "number", "example": 0.1 }, "is_active": { "type": "boolean" }, "name": { "type": "string", "example": "CompanyName" }, "slug": { "type": "string" } } }, "domain.CreateSupportedOperationReq": { "type": "object", "properties": { "description": { "type": "string", "example": "Betting on sport events" }, "name": { "type": "string", "example": "SportsBook" } } }, "domain.CreateTicketOutcomeReq": { "type": "object", "properties": { "event_id": { "description": "TicketID int64 `json:\"ticket_id\" example:\"1\"`", "type": "integer", "example": 1 }, "market_id": { "type": "integer", "example": 1 }, "odd_id": { "type": "integer", "example": 1 } } }, "domain.CreateTicketReq": { "type": "object", "properties": { "amount": { "type": "number", "example": 100 }, "outcomes": { "type": "array", "items": { "$ref": "#/definitions/domain.CreateTicketOutcomeReq" } } } }, "domain.CreateTicketRes": { "type": "object", "properties": { "created_number": { "type": "integer", "example": 3 }, "fast_code": { "type": "integer", "example": 1234 } } }, "domain.CreditBalance": { "type": "object", "properties": { "balance": { "type": "number" }, "currency": { "type": "string" }, "threshold": { "type": "number" } } }, "domain.DashboardSummary": { "type": "object", "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" } } }, "domain.DemoGameRequest": { "type": "object", "properties": { "brandId": { "type": "string" }, "country": { "type": "string" }, "deviceType": { "type": "string" }, "gameId": { "type": "string" }, "ip": { "type": "string" }, "language": { "type": "string" }, "playerId": { "type": "string" }, "providerId": { "type": "string" } } }, "domain.DirectDepositRequest": { "type": "object", "required": [ "amount", "bank_reference", "customer_id", "sender_account" ], "properties": { "amount": { "type": "integer" }, "bank_reference": { "type": "string" }, "customer_id": { "type": "integer" }, "sender_account": { "type": "string" } } }, "domain.EnetpulseFixture": { "type": "object", "properties": { "gender": { "type": "string" }, "id": { "type": "string" }, "n": { "description": "convert to int", "type": "string" }, "name": { "type": "string" }, "round_typeFK": { "type": "string" }, "sportFK": { "type": "string" }, "sport_name": { "type": "string" }, "startdate": { "description": "ISO 8601", "type": "string" }, "status_descFK": { "type": "string" }, "status_type": { "type": "string" }, "tournamentFK": { "type": "string" }, "tournament_name": { "type": "string" }, "tournament_stageFK": { "type": "string" }, "tournament_stage_name": { "type": "string" }, "tournament_templateFK": { "type": "string" }, "tournament_template_name": { "type": "string" }, "ut": { "description": "parse to time.Time", "type": "string" } } }, "domain.EnetpulseFixtureWithPreodds": { "type": "object", "properties": { "createdAt": { "type": "string" }, "fixtureApiID": { "type": "string" }, "fixtureID": { "type": "string" }, "fixtureName": { "type": "string" }, "lastUpdatedAt": { "type": "string" }, "preodds": { "type": "array", "items": { "$ref": "#/definitions/domain.EnetpulsePreodds" } }, "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" } } }, "domain.EnetpulsePreodds": { "type": "object", "properties": { "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" } } }, "domain.EnetpulseResult": { "type": "object", "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_fk": { "type": "string" }, "tournament_stage_name": { "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" } } }, "domain.EnetpulseSport": { "type": "object", "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" } } }, "domain.EnetpulseTournament": { "type": "object", "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" } } }, "domain.EnetpulseTournamentStage": { "type": "object", "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" } } }, "domain.EnetpulseTournamentTemplate": { "type": "object", "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" } } }, "domain.ErrorResponse": { "type": "object", "properties": { "error": { "type": "string" }, "message": { "type": "string" } } }, "domain.EventSource": { "type": "string", "enum": [ "b365api", "bwin", "bfair", "1xbet", "enetpulse" ], "x-enum-varnames": [ "EVENT_SOURCE_BET365", "EVENT_SOURCE_BWIN", "EVENT_SOURCE_BETFAIR", "EVENT_SOURCE_1XBET", "EVENT_SOURCE_ENET" ] }, "domain.EventStatus": { "type": "string", "enum": [ "upcoming", "in_play", "to_be_fixed", "ended", "postponed", "cancelled", "walkover", "interrupted", "abandoned", "retired", "suspended", "decided_by_fa", "removed" ], "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": { "type": "object", "properties": { "added_time": { "type": "integer" }, "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" }, "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_odd_outcomes": { "type": "integer" }, "updated_at": { "type": "string" }, "winning_upper_limit": { "type": "integer" } } }, "domain.FavoriteGameRequest": { "type": "object", "properties": { "game_id": { "type": "integer" } } }, "domain.FreeSpinRequest": { "type": "object", "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" } } }, "domain.FreeSpinResponse": { "type": "object", "properties": { "success": { "type": "boolean" } } }, "domain.FreeSpinResultRequest": { "type": "object", "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" } } }, "domain.FreeSpinResultResponse": { "type": "object", "properties": { "success": { "type": "boolean" } } }, "domain.GameListRequest": { "type": "object", "properties": { "brandId": { "type": "string" }, "page": { "type": "integer" }, "providerId": { "type": "string" }, "size": { "type": "integer" } } }, "domain.GameRecommendation": { "type": "object", "properties": { "bets": { "type": "array", "items": { "type": "number" } }, "game_id": { "type": "integer" }, "game_name": { "type": "string" }, "reason": { "description": "e.g., \"Based on your activity\", \"Popular\", \"Random pick\"", "type": "string" }, "thumbnail": { "type": "string" } } }, "domain.GameStartRequest": { "type": "object", "properties": { "brandId": { "type": "string" }, "cashierUrl": { "type": "string" }, "country": { "type": "string" }, "currency": { "type": "string" }, "deviceType": { "type": "string" }, "gameId": { "type": "string" }, "ip": { "type": "string" }, "language": { "type": "string" }, "lobbyUrl": { "type": "string" }, "playerId": { "type": "string" }, "playerName": { "type": "string" }, "providerId": { "type": "string" }, "sessionId": { "type": "string" }, "userAgent": { "type": "string" } } }, "domain.GameStartResponse": { "type": "object", "properties": { "startGameUrl": { "type": "string" } } }, "domain.GamingActivityItem": { "type": "object", "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" } } }, "domain.GamingActivityRequest": { "type": "object", "properties": { "currencies": { "description": "Optional", "type": "array", "items": { "type": "string" } }, "excludeFreeWin": { "description": "Optional", "type": "boolean" }, "fromDate": { "description": "YYYY-MM-DD", "type": "string" }, "gameIds": { "description": "Optional", "type": "array", "items": { "type": "string" } }, "page": { "description": "Optional, default 1", "type": "integer" }, "playerIds": { "description": "Optional", "type": "array", "items": { "type": "string" } }, "providerId": { "description": "Optional", "type": "string" }, "size": { "description": "Optional, default 100", "type": "integer" }, "toDate": { "description": "YYYY-MM-DD", "type": "string" } } }, "domain.GamingActivityResponse": { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/definitions/domain.GamingActivityItem" } }, "meta": { "$ref": "#/definitions/domain.PaginationMeta" } } }, "domain.GeneratePaymentURLRequest": { "type": "object", "properties": { "amount": { "type": "integer" }, "paymentMethod": { "type": "string" }, "paymentReason": { "type": "string" }, "phoneNumber": { "type": "string" } } }, "domain.GetCompanyRes": { "type": "object", "properties": { "admin_first_name": { "type": "string", "example": "John" }, "admin_id": { "type": "integer", "example": 1 }, "admin_last_name": { "type": "string", "example": "Doe" }, "admin_phone_number": { "type": "string", "example": "1234567890" }, "balance": { "type": "number", "example": 1 }, "deducted_percentage": { "type": "number", "example": 0.1 }, "id": { "type": "integer", "example": 1 }, "is_active": { "type": "boolean", "example": false }, "is_wallet_active": { "type": "boolean", "example": false }, "name": { "type": "string", "example": "CompanyName" }, "slug": { "type": "string", "example": "slug" }, "wallet_id": { "type": "integer", "example": 1 } } }, "domain.HugeWinItem": { "type": "object", "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" } } }, "domain.HugeWinsRequest": { "type": "object", "properties": { "brandId": { "type": "string" }, "currencies": { "type": "array", "items": { "type": "string" } }, "fromDate": { "type": "string" }, "gameIds": { "type": "array", "items": { "type": "string" } }, "page": { "type": "integer" }, "providerId": { "type": "string" }, "size": { "type": "integer" }, "toDate": { "type": "string" } } }, "domain.HugeWinsResponse": { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/definitions/domain.HugeWinItem" } }, "meta": { "$ref": "#/definitions/domain.PaginationMeta" } } }, "domain.InstResponse": { "type": "object", "properties": { "data": { "description": "Changed to interface{} for flexibility" }, "message": { "type": "string" }, "pagination": { "description": "Made pointer and optional", "allOf": [ { "$ref": "#/definitions/domain.Pagination" } ] }, "status": { "type": "string" } } }, "domain.JackpotRequest": { "type": "object", "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" } } }, "domain.JackpotResponse": { "type": "object", "properties": { "success": { "type": "boolean" } } }, "domain.LogEntry": { "type": "object", "properties": { "caller": { "type": "string" }, "env": { "type": "string" }, "fields": { "type": "object", "additionalProperties": true }, "level": { "type": "string" }, "message": { "type": "string" }, "service": { "type": "string" }, "stacktrace": { "type": "string" }, "timestamp": { "type": "string" } } }, "domain.LogResponse": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/domain.LogEntry" } }, "message": { "type": "string" }, "pagination": { "$ref": "#/definitions/domain.Pagination" } } }, "domain.OddMarketFilter": { "type": "object", "properties": { "limit": { "$ref": "#/definitions/domain.ValidInt32" }, "offset": { "$ref": "#/definitions/domain.ValidInt32" } } }, "domain.OddMarketWithEventFilter": { "type": "object", "properties": { "isLive": { "$ref": "#/definitions/domain.ValidBool" }, "limit": { "$ref": "#/definitions/domain.ValidInt32" }, "offset": { "$ref": "#/definitions/domain.ValidInt32" }, "status": { "$ref": "#/definitions/domain.ValidString" } } }, "domain.OutcomeStatus": { "type": "integer", "enum": [ 0, 1, 2, 3, 4, 5 ], "x-enum-comments": { "OUTCOME_STATUS_ERROR": "Half Win and Half Given Back", "OUTCOME_STATUS_HALF": "Half Win and Half Given Back", "OUTCOME_STATUS_VOID": "Give Back" }, "x-enum-varnames": [ "OUTCOME_STATUS_PENDING", "OUTCOME_STATUS_WIN", "OUTCOME_STATUS_LOSS", "OUTCOME_STATUS_VOID", "OUTCOME_STATUS_HALF", "OUTCOME_STATUS_ERROR" ] }, "domain.PaginatedFileResponse": { "type": "object", "properties": { "data": { "type": "array", "items": { "type": "string" } }, "message": { "type": "string" }, "pagination": { "$ref": "#/definitions/domain.Pagination" }, "status_code": { "type": "integer" }, "success": { "type": "boolean" } } }, "domain.Pagination": { "type": "object", "properties": { "current_page": { "type": "integer" }, "limit": { "type": "integer" }, "total": { "type": "integer" }, "total_pages": { "type": "integer" } } }, "domain.PaginationMeta": { "type": "object", "properties": { "currentPage": { "type": "integer" }, "itemCount": { "type": "integer" }, "itemsPerPage": { "type": "integer" }, "totalItems": { "type": "integer" }, "totalPages": { "type": "integer" } } }, "domain.PaymentOption": { "type": "integer", "enum": [ 0, 1, 2, 3 ], "x-enum-varnames": [ "CASH_TRANSACTION", "TELEBIRR_TRANSACTION", "ARIFPAY_TRANSACTION", "BANK" ] }, "domain.PaymentStatus": { "type": "string", "enum": [ "success", "pending", "completed", "failed" ], "x-enum-varnames": [ "PaymentStatusSuccessful", "PaymentStatusPending", "PaymentStatusCompleted", "PaymentStatusFailed" ] }, "domain.PopOKCallback": { "type": "object", "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" } } }, "domain.PopOKGame": { "type": "object", "properties": { "bets": { "type": "array", "items": { "type": "number" } }, "gameName": { "type": "string" }, "id": { "type": "integer" }, "status": { "type": "integer" }, "thumbnail": { "type": "string" } } }, "domain.ProviderRequest": { "type": "object", "properties": { "brandId": { "type": "string" }, "extraData": { "type": "boolean" }, "page": { "type": "integer" }, "size": { "type": "integer" } } }, "domain.ProviderResponse": { "type": "object", "properties": { "items": { "type": "array", "items": { "type": "object", "properties": { "logoForDark": { "type": "string" }, "logoForLight": { "type": "string" }, "providerId": { "type": "string" }, "providerName": { "type": "string" } } } } } }, "domain.RandomBetReq": { "type": "object", "required": [ "branch_id", "number_of_bets" ], "properties": { "branch_id": { "type": "integer", "example": 1 }, "number_of_bets": { "type": "integer", "example": 1 } } }, "domain.RawOddsByMarketID": { "type": "object", "properties": { "expires_at": { "type": "string" }, "fetched_at": { "type": "string" }, "handicap": { "type": "string" }, "id": { "type": "integer" }, "market_name": { "type": "string" }, "raw_odds": { "type": "array", "items": { "type": "object", "additionalProperties": true } } } }, "domain.ReferralStats": { "type": "object", "properties": { "totalReferrals": { "type": "integer" }, "totalRewardEarned": { "type": "integer" } } }, "domain.ReportedIssue": { "type": "object", "properties": { "created_at": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "integer" }, "issue_type": { "type": "string" }, "metadata": { "type": "object", "additionalProperties": true }, "status": { "type": "string" }, "subject": { "type": "string" }, "updated_at": { "type": "string" }, "user_id": { "type": "integer" }, "user_role": { "$ref": "#/definitions/domain.Role" } } }, "domain.Response": { "type": "object", "properties": { "data": {}, "message": { "type": "string" }, "status_code": { "type": "integer" }, "success": { "type": "boolean" } } }, "domain.Role": { "type": "string", "enum": [ "super_admin", "admin", "branch_manager", "customer", "cashier", "transaction_approver" ], "x-enum-varnames": [ "RoleSuperAdmin", "RoleAdmin", "RoleBranchManager", "RoleCustomer", "RoleCashier", "RoleTransactionApprover" ] }, "domain.RollbackRequest": { "type": "object", "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" } } }, "domain.RollbackResponse": { "type": "object", "properties": { "success": { "type": "boolean" } } }, "domain.RoundResultRequest": { "type": "object", "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" } } }, "domain.RoundResultResponse": { "type": "object", "properties": { "success": { "type": "boolean" } } }, "domain.SantimPayCallbackPayload": { "type": "object", "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" } } }, "domain.ShopBetReq": { "type": "object", "properties": { "account_name": { "type": "string" }, "account_number": { "type": "string" }, "amount": { "type": "number", "example": 100 }, "bank_code": { "type": "string" }, "beneficiary_name": { "type": "string" }, "bet_id": { "type": "integer", "example": 1 }, "branch_id": { "type": "integer", "example": 1 }, "full_name": { "type": "string", "example": "John Smith" }, "outcomes": { "type": "array", "items": { "$ref": "#/definitions/domain.CreateBetOutcomeReq" } }, "payment_option": { "allOf": [ { "$ref": "#/definitions/domain.PaymentOption" } ], "example": 1 }, "phone_number": { "type": "string", "example": "0911111111" }, "reference_number": { "type": "string" } } }, "domain.ShopBetRes": { "type": "object", "properties": { "amount": { "type": "number" }, "bet_id": { "type": "integer", "example": 1 }, "branch_id": { "type": "integer", "example": 2 }, "cashed_out": { "type": "boolean", "example": false }, "cashout_id": { "type": "string", "example": "21234" }, "company_id": { "type": "integer", "example": 2 }, "created_at": { "type": "string", "example": "2025-04-08T12:00:00Z" }, "fast_code": { "type": "string", "example": "12SD1" }, "full_name": { "type": "string", "example": "John" }, "id": { "type": "integer" }, "number_of_outcomes": { "type": "integer", "example": 1 }, "outcomes": { "type": "array", "items": { "$ref": "#/definitions/domain.BetOutcome" } }, "phone_number": { "type": "string", "example": "1234567890" }, "shop_transaction_id": { "type": "integer" }, "status": { "allOf": [ { "$ref": "#/definitions/domain.OutcomeStatus" } ], "example": 1 }, "total_odds": { "type": "number", "example": 4.22 }, "transaction_verified": { "type": "boolean", "example": true }, "updated_at": { "type": "string", "example": "2025-04-08T12:00:00Z" } } }, "domain.ShopDepositReq": { "type": "object", "properties": { "account_name": { "type": "string" }, "account_number": { "type": "string" }, "amount": { "type": "number", "example": 100 }, "bank_code": { "description": "FullName string `json:\"full_name\" example:\"John Smith\"`\nPhoneNumber string `json:\"phone_number\" example:\"0911111111\"`", "type": "string" }, "beneficiary_name": { "type": "string" }, "branch_id": { "type": "integer", "example": 1 }, "customer_id": { "type": "integer", "example": 1 }, "payment_option": { "allOf": [ { "$ref": "#/definitions/domain.PaymentOption" } ], "example": 1 }, "reference_number": { "type": "string" } } }, "domain.ShopDepositRes": { "type": "object", "properties": { "customer_id": { "type": "integer" }, "id": { "type": "integer" }, "shop_transaction_id": { "type": "integer" }, "wallet_transfer_id": { "type": "integer" } } }, "domain.ShopTransactionRes": { "type": "object", "properties": { "account_name": { "type": "string" }, "account_number": { "type": "string" }, "amount": { "type": "number", "example": 100 }, "approved_by": { "type": "integer", "example": 1 }, "approver_first_name": { "type": "string", "example": "John" }, "approver_last_name": { "type": "string", "example": "Smith" }, "approver_phone_number": { "type": "string", "example": "0911111111" }, "bank_code": { "type": "string" }, "beneficiary_name": { "type": "string" }, "branch_id": { "type": "integer", "example": 1 }, "branch_location": { "type": "string", "example": "Branch Location" }, "branch_name": { "type": "string", "example": "Branch Name" }, "cashier_name": { "type": "string", "example": "John Smith" }, "company_id": { "type": "integer", "example": 1 }, "created_at": { "type": "string" }, "creator_first_name": { "type": "string", "example": "John" }, "creator_last_name": { "type": "string", "example": "Smith" }, "creator_phone_number": { "type": "string", "example": "0911111111" }, "full_name": { "type": "string", "example": "John Smith" }, "id": { "type": "integer", "example": 1 }, "payment_option": { "allOf": [ { "$ref": "#/definitions/domain.PaymentOption" } ], "example": 1 }, "phone_number": { "type": "string", "example": "0911111111" }, "reference_number": { "type": "string" }, "type": { "type": "integer", "example": 1 }, "updated_at": { "type": "string" }, "user_id": { "type": "integer", "example": 1 }, "verified": { "type": "boolean", "example": true } } }, "domain.SupportedOperationRes": { "type": "object", "properties": { "description": { "type": "string", "example": "Betting on sport events" }, "id": { "type": "integer", "example": 1 }, "name": { "type": "string", "example": "SportsBook" } } }, "domain.SwapRequest": { "type": "object", "properties": { "amount": { "type": "number" }, "from": { "type": "string" }, "to": { "type": "string" } } }, "domain.TelebirrPaymentCallbackPayload": { "type": "object", "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" } } }, "domain.TicketOutcome": { "type": "object", "properties": { "away_team_name": { "type": "string", "example": "Liverpool" }, "event_id": { "type": "integer", "example": 1 }, "expires": { "type": "string", "example": "2025-04-08T12:00:00Z" }, "home_team_name": { "type": "string", "example": "Manchester" }, "id": { "type": "integer", "example": 1 }, "market_id": { "type": "integer", "example": 1 }, "market_name": { "type": "string", "example": "Fulltime Result" }, "odd": { "type": "number", "example": 1.5 }, "odd_handicap": { "type": "string", "example": "1" }, "odd_header": { "type": "string", "example": "1" }, "odd_id": { "type": "integer", "example": 1 }, "odd_name": { "type": "string", "example": "1" }, "status": { "allOf": [ { "$ref": "#/definitions/domain.OutcomeStatus" } ], "example": 1 }, "ticket_id": { "type": "integer", "example": 1 } } }, "domain.TicketRes": { "type": "object", "properties": { "amount": { "type": "number", "example": 100 }, "company_id": { "type": "integer", "example": 1 }, "id": { "type": "integer", "example": 1 }, "outcomes": { "type": "array", "items": { "$ref": "#/definitions/domain.TicketOutcome" } }, "total_odds": { "type": "number", "example": 4.22 } } }, "domain.TransactionStatusRequest": { "type": "object", "properties": { "fullParams": { "type": "boolean" }, "id": { "type": "string" } } }, "domain.UnifiedGame": { "type": "object", "properties": { "bets": { "type": "array", "items": { "type": "number" } }, "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" } } }, "domain.UpdateCompanyReq": { "type": "object", "properties": { "admin_id": { "type": "integer", "example": 1 }, "deducted_percentage": { "type": "number", "example": 0.1 }, "is_active": { "type": "boolean", "example": true }, "name": { "type": "string", "example": "CompanyName" }, "slug": { "type": "string" } } }, "domain.UpdateTransactionVerifiedReq": { "type": "object", "properties": { "verified": { "type": "boolean", "example": true } } }, "domain.ValidBool": { "type": "object", "properties": { "valid": { "type": "boolean" }, "value": { "type": "boolean" } } }, "domain.ValidInt": { "type": "object", "properties": { "valid": { "type": "boolean" }, "value": { "type": "integer" } } }, "domain.ValidInt32": { "type": "object", "properties": { "valid": { "type": "boolean" }, "value": { "type": "integer" } } }, "domain.ValidString": { "type": "object", "properties": { "valid": { "type": "boolean" }, "value": { "type": "string" } } }, "domain.VerifyDirectDepositRequest": { "type": "object", "required": [ "deposit_id", "is_verified" ], "properties": { "deposit_id": { "type": "integer" }, "is_verified": { "type": "boolean" }, "notes": { "type": "string" } } }, "domain.VirtualGameProvider": { "type": "object", "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" } } }, "domain.WebhookRequest": { "type": "object", "properties": { "nonce": { "type": "string" }, "notificationUrl": { "type": "string" }, "paymentMethod": { "type": "string" }, "phone": { "type": "string" }, "sessionId": { "type": "string" }, "totalAmount": { "type": "integer" }, "transaction": { "type": "object", "properties": { "transactionId": { "type": "string" }, "transactionStatus": { "type": "string" } } }, "transactionStatus": { "type": "string" }, "uuid": { "type": "string" } } }, "handlers.AdminProfileRes": { "type": "object", "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" } } }, "handlers.AdminRes": { "type": "object", "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" } } }, "handlers.CheckPhoneEmailExistReq": { "type": "object", "properties": { "email": { "type": "string", "example": "john.doe@example.com" }, "phone_number": { "type": "string", "example": "1234567890" } } }, "handlers.CheckPhoneEmailExistRes": { "type": "object", "properties": { "email_exist": { "type": "boolean" }, "phone_number_exist": { "type": "boolean" } } }, "handlers.CreateAdminReq": { "type": "object", "properties": { "company_id": { "type": "integer", "example": 1 }, "email": { "type": "string", "example": "john.doe@example.com" }, "first_name": { "type": "string", "example": "John" }, "last_name": { "type": "string", "example": "Doe" }, "password": { "type": "string", "example": "password123" }, "phone_number": { "type": "string", "example": "1234567890" } } }, "handlers.CreateCashierReq": { "type": "object", "properties": { "branch_id": { "type": "integer", "example": 1 }, "email": { "type": "string", "example": "john.doe@example.com" }, "first_name": { "type": "string", "example": "John" }, "last_name": { "type": "string", "example": "Doe" }, "password": { "type": "string", "example": "password123" }, "phone_number": { "type": "string", "example": "1234567890" }, "suspended": { "type": "boolean", "example": false } } }, "handlers.CreateManagerReq": { "type": "object", "properties": { "company_id": { "type": "integer", "example": 1 }, "email": { "type": "string", "example": "john.doe@example.com" }, "first_name": { "type": "string", "example": "John" }, "last_name": { "type": "string", "example": "Doe" }, "password": { "type": "string", "example": "password123" }, "phone_number": { "type": "string", "example": "1234567890" } } }, "handlers.CreateTransactionApproverReq": { "type": "object", "properties": { "company_id": { "type": "integer", "example": 1 }, "email": { "type": "string", "example": "john.doe@example.com" }, "first_name": { "type": "string", "example": "John" }, "last_name": { "type": "string", "example": "Doe" }, "password": { "type": "string", "example": "password123" }, "phone_number": { "type": "string", "example": "1234567890" } } }, "handlers.CreateTransferReq": { "type": "object", "properties": { "amount": { "type": "number", "example": 100 }, "payment_method": { "type": "string", "example": "cash" } } }, "handlers.CustomerProfileRes": { "type": "object", "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" } } }, "handlers.CustomerWalletRes": { "type": "object", "properties": { "created_at": { "type": "string" }, "customer_id": { "type": "integer", "example": 1 }, "first_name": { "type": "string", "example": "John" }, "id": { "type": "integer", "example": 1 }, "last_name": { "type": "string", "example": "Smith" }, "phone_number": { "type": "string", "example": "0911111111" }, "regular_balance": { "type": "number", "example": 100 }, "regular_id": { "type": "integer", "example": 1 }, "regular_is_active": { "type": "boolean", "example": true }, "regular_updated_at": { "type": "string" }, "static_balance": { "type": "number", "example": 100 }, "static_id": { "type": "integer", "example": 1 }, "static_is_active": { "type": "boolean", "example": true }, "static_updated_at": { "type": "string" } } }, "handlers.CustomersRes": { "type": "object", "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" } } }, "handlers.GetCashierRes": { "type": "object", "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" } } }, "handlers.ManagersRes": { "type": "object", "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" } } }, "handlers.RegisterCodeReq": { "type": "object", "properties": { "email": { "type": "string", "example": "john.doe@example.com" }, "phone_number": { "type": "string", "example": "1234567890" } } }, "handlers.RegisterUserReq": { "type": "object", "properties": { "email": { "type": "string", "example": "john.doe@example.com" }, "first_name": { "type": "string", "example": "John" }, "last_name": { "type": "string", "example": "Doe" }, "otp": { "type": "string", "example": "123456" }, "password": { "type": "string", "example": "password123" }, "phone_number": { "type": "string", "example": "1234567890" }, "referral_code": { "type": "string", "example": "ABC123" } } }, "handlers.ResetCodeReq": { "type": "object", "properties": { "email": { "type": "string", "example": "john.doe@example.com" }, "phone_number": { "type": "string", "example": "1234567890" } } }, "handlers.ResetPasswordReq": { "type": "object", "required": [ "otp", "password" ], "properties": { "email": { "type": "string", "example": "john.doe@example.com" }, "otp": { "type": "string", "example": "123456" }, "password": { "type": "string", "minLength": 8, "example": "newpassword123" }, "phone_number": { "type": "string", "example": "1234567890" } } }, "handlers.ResultRes": { "type": "object", "properties": { "outcomes": { "type": "array", "items": { "$ref": "#/definitions/domain.BetOutcome" } } } }, "handlers.SearchUserByNameOrPhoneReq": { "type": "object", "properties": { "query": { "type": "string" }, "role": { "$ref": "#/definitions/domain.Role" } } }, "handlers.SetLeagueActiveReq": { "type": "object", "properties": { "is_active": { "type": "boolean" } } }, "handlers.SetLeagueAsFeatured": { "type": "object", "properties": { "is_featured": { "type": "boolean", "example": true } } }, "handlers.TopLeague": { "type": "object", "properties": { "events": { "type": "array", "items": { "$ref": "#/definitions/domain.EventWithSettingsRes" } }, "league_cc": { "type": "string" }, "league_id": { "type": "integer" }, "league_name": { "type": "string" }, "league_sport_id": { "type": "integer" } } }, "handlers.TransferWalletRes": { "type": "object", "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" } } }, "handlers.UpdateCashOutReq": { "type": "object", "properties": { "cashedOut": { "type": "boolean" } } }, "handlers.UpdateUserSuspendReq": { "type": "object", "required": [ "user_id" ], "properties": { "suspended": { "type": "boolean", "example": true }, "user_id": { "type": "integer", "example": 123 } } }, "handlers.UpdateUserSuspendRes": { "type": "object", "properties": { "suspended": { "type": "boolean" }, "user_id": { "type": "integer" } } }, "handlers.UpdateWalletActiveReq": { "type": "object", "required": [ "is_active" ], "properties": { "is_active": { "type": "boolean", "example": true } } }, "handlers.UserProfileRes": { "type": "object", "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" } } }, "handlers.WalletRes": { "type": "object", "properties": { "amount": { "type": "number", "example": 100 }, "created_at": { "type": "string" }, "id": { "type": "integer", "example": 1 }, "is_active": { "type": "boolean", "example": true }, "is_bettable": { "type": "boolean", "example": true }, "is_transferable": { "type": "boolean", "example": true }, "is_withdraw": { "type": "boolean", "example": true }, "updated_at": { "type": "string" }, "user_id": { "type": "integer", "example": 1 } } }, "handlers.launchVirtualGameReq": { "type": "object", "required": [ "currency", "game_id", "mode" ], "properties": { "currency": { "type": "string", "example": "USD" }, "game_id": { "type": "string", "example": "1" }, "mode": { "type": "string", "enum": [ "fun", "real" ], "example": "real" } } }, "handlers.launchVirtualGameRes": { "type": "object", "properties": { "launch_url": { "type": "string" } } }, "handlers.loginAdminReq": { "type": "object", "required": [ "password" ], "properties": { "email": { "type": "string", "example": "john.doe@example.com" }, "password": { "type": "string", "example": "password123" }, "phone_number": { "type": "string", "example": "1234567890" } } }, "handlers.loginAdminRes": { "type": "object", "properties": { "access_token": { "type": "string" }, "refresh_token": { "type": "string" }, "role": { "type": "string" } } }, "handlers.loginCustomerReq": { "type": "object", "required": [ "password" ], "properties": { "email": { "type": "string", "example": "john.doe@example.com" }, "password": { "type": "string", "example": "password123" }, "phone_number": { "type": "string", "example": "1234567890" } } }, "handlers.loginCustomerRes": { "type": "object", "properties": { "access_token": { "type": "string" }, "refresh_token": { "type": "string" }, "role": { "type": "string" } } }, "handlers.logoutReq": { "type": "object", "required": [ "refresh_token" ], "properties": { "refresh_token": { "type": "string", "example": "\u003crefresh-token\u003e" } } }, "handlers.refreshToken": { "type": "object", "required": [ "access_token", "refresh_token" ], "properties": { "access_token": { "type": "string", "example": "\u003cjwt-token\u003e" }, "refresh_token": { "type": "string", "example": "\u003crefresh-token\u003e" } } }, "handlers.updateAdminReq": { "type": "object", "properties": { "company_id": { "type": "integer", "example": 1 }, "first_name": { "type": "string", "example": "John" }, "last_name": { "type": "string", "example": "Doe" }, "suspended": { "type": "boolean", "example": false } } }, "handlers.updateCashierReq": { "type": "object", "properties": { "first_name": { "type": "string", "example": "John" }, "last_name": { "type": "string", "example": "Doe" }, "suspended": { "type": "boolean", "example": false } } }, "handlers.updateCustomerReq": { "type": "object", "properties": { "first_name": { "type": "string", "example": "John" }, "last_name": { "type": "string", "example": "Doe" }, "suspended": { "type": "boolean", "example": false } } }, "handlers.updateManagerReq": { "type": "object", "properties": { "company_id": { "type": "integer", "example": 1 }, "first_name": { "type": "string", "example": "John" }, "last_name": { "type": "string", "example": "Doe" }, "suspended": { "type": "boolean", "example": false } } }, "response.APIResponse": { "type": "object", "properties": { "data": {}, "message": { "type": "string" }, "metadata": {}, "page": { "type": "integer" }, "status": { "$ref": "#/definitions/response.Status" }, "timestamp": { "type": "string" }, "total": { "type": "integer" } } }, "response.Status": { "type": "string", "enum": [ "error", "success" ], "x-enum-varnames": [ "Error", "Success" ] } }, "securityDefinitions": { "Bearer": { "type": "apiKey", "name": "Authorization", "in": "header" } } }