{ "info": { "name": "Suggest-Bet Platform API", "description": "Auto-generated Postman collection for Nest backend and AI engine endpoints.", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" }, "variable": [ { "key": "beBaseUrl", "value": "http://localhost:3005" }, { "key": "aiBaseUrl", "value": "http://localhost:8000" }, { "key": "accessToken", "value": "" }, { "key": "match_id", "value": "sample-match-id" } ], "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{accessToken}}", "type": "string" } ] }, "item": [ { "name": "Nest API", "item": [ { "name": "Admin", "item": [ { "name": "Get all app settings", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Get all app settings", "url": { "raw": "{{beBaseUrl}}/api/admin/settings", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "admin", "settings" ], "query": [] } }, "response": [ { "name": "GET /api/admin/settings - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/admin/settings", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "admin", "settings" ] } }, "status": "", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "\"string\"" } ] }, { "name": "Get all usage limits", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Get all usage limits", "url": { "raw": "{{beBaseUrl}}/api/admin/usage-limits", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "admin", "usage-limits" ], "query": [ { "key": "page", "value": "1", "description": "Page number", "disabled": true }, { "key": "limit", "value": "10", "description": "Items per page", "disabled": true }, { "key": "sortBy", "value": "", "description": "Field to sort by", "disabled": true }, { "key": "sortOrder", "value": "desc", "description": "Sort order", "disabled": true }, { "key": "search", "value": "", "description": "Search query", "disabled": true } ] } }, "response": [ { "name": "GET /api/admin/usage-limits - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/admin/usage-limits", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "admin", "usage-limits" ] } }, "status": "", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "[\n \"string\"\n]" } ] }, { "name": "Get all users (admin)", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Get all users (admin)", "url": { "raw": "{{beBaseUrl}}/api/admin/users", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "admin", "users" ], "query": [ { "key": "page", "value": "1", "description": "Page number", "disabled": true }, { "key": "limit", "value": "10", "description": "Items per page", "disabled": true }, { "key": "sortBy", "value": "", "description": "Field to sort by", "disabled": true }, { "key": "sortOrder", "value": "desc", "description": "Sort order", "disabled": true }, { "key": "search", "value": "", "description": "Search query", "disabled": true } ] } }, "response": [ { "name": "GET /api/admin/users - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/admin/users", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "admin", "users" ] } }, "status": "", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "[\n \"string\"\n]" } ] }, { "name": "Get system analytics overview", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Get system analytics overview", "url": { "raw": "{{beBaseUrl}}/api/admin/analytics/overview", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "admin", "analytics", "overview" ], "query": [] } }, "response": [ { "name": "GET /api/admin/analytics/overview - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/admin/analytics/overview", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "admin", "analytics", "overview" ] } }, "status": "", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "\"string\"" } ] }, { "name": "Get user by ID", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Get user by ID", "url": { "raw": "{{beBaseUrl}}/api/admin/users/{{id}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "admin", "users", "{id}" ], "query": [] } }, "response": [ { "name": "GET /api/admin/users/{id} - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/admin/users/{{id}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "admin", "users", "{id}" ] } }, "status": "", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "\"string\"" } ] }, { "name": "Reset all usage limits", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Reset all usage limits", "url": { "raw": "{{beBaseUrl}}/api/admin/usage-limits/reset-all", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "admin", "usage-limits", "reset-all" ], "query": [] } }, "response": [ { "name": "POST /api/admin/usage-limits/reset-all - 200", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/admin/usage-limits/reset-all", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "admin", "usage-limits", "reset-all" ] } }, "status": "", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"count\": 1\n}" } ] }, { "name": "Soft delete a user", "request": { "method": "DELETE", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Soft delete a user", "url": { "raw": "{{beBaseUrl}}/api/admin/users/{{id}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "admin", "users", "{id}" ], "query": [] } }, "response": [ { "name": "DELETE /api/admin/users/{id} - 200", "originalRequest": { "method": "DELETE", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/admin/users/{{id}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "admin", "users", "{id}" ] } }, "status": "User deleted", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{}" } ] }, { "name": "Toggle user active status", "request": { "method": "PUT", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Toggle user active status", "url": { "raw": "{{beBaseUrl}}/api/admin/users/{{id}}/toggle-active", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "admin", "users", "{id}", "toggle-active" ], "query": [] } }, "response": [ { "name": "PUT /api/admin/users/{id}/toggle-active - 200", "originalRequest": { "method": "PUT", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/admin/users/{{id}}/toggle-active", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "admin", "users", "{id}", "toggle-active" ] } }, "status": "", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "\"string\"" } ] }, { "name": "Update an app setting", "request": { "method": "PUT", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Update an app setting", "url": { "raw": "{{beBaseUrl}}/api/admin/settings/{{key}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "admin", "settings", "{key}" ], "query": [] } }, "response": [ { "name": "PUT /api/admin/settings/{key} - 200", "originalRequest": { "method": "PUT", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/admin/settings/{{key}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "admin", "settings", "{key}" ] } }, "status": "", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"key\": \"string\",\n \"value\": \"string\"\n}" } ] }, { "name": "Update user role", "request": { "method": "PUT", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Update user role", "url": { "raw": "{{beBaseUrl}}/api/admin/users/{{id}}/role", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "admin", "users", "{id}", "role" ], "query": [] } }, "response": [ { "name": "PUT /api/admin/users/{id}/role - 200", "originalRequest": { "method": "PUT", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/admin/users/{{id}}/role", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "admin", "users", "{id}", "role" ] } }, "status": "", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "\"string\"" } ] }, { "name": "Update user subscription", "request": { "method": "PUT", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Update user subscription", "url": { "raw": "{{beBaseUrl}}/api/admin/users/{{id}}/subscription", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "admin", "users", "{id}", "subscription" ], "query": [] } }, "response": [ { "name": "PUT /api/admin/users/{id}/subscription - 200", "originalRequest": { "method": "PUT", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/admin/users/{{id}}/subscription", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "admin", "users", "{id}", "subscription" ] } }, "status": "", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "\"string\"" } ] } ] }, { "name": "Analysis", "item": [ { "name": "Analyze multiple matches for coupon", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Analyze multiple matches for coupon", "url": { "raw": "{{beBaseUrl}}/api/analysis/analyze-matches", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "analysis", "analyze-matches" ], "query": [] }, "body": { "mode": "raw", "raw": "{\n \"matchIds\": [\n \"string\"\n ]\n}" } }, "response": [ { "name": "POST /api/analysis/analyze-matches - 200", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"matchIds\": [\n \"string\"\n ]\n}" }, "url": { "raw": "{{beBaseUrl}}/api/analysis/analyze-matches", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "analysis", "analyze-matches" ] } }, "status": "Analysis successful", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"success\": true,\n \"data\": \"string\",\n \"message\": \"string\"\n}" }, { "name": "POST /api/analysis/analyze-matches - 400", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"matchIds\": [\n \"string\"\n ]\n}" }, "url": { "raw": "{{beBaseUrl}}/api/analysis/analyze-matches", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "analysis", "analyze-matches" ] } }, "status": "Invalid input", "code": 400, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{}" }, { "name": "POST /api/analysis/analyze-matches - 429", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"matchIds\": [\n \"string\"\n ]\n}" }, "url": { "raw": "{{beBaseUrl}}/api/analysis/analyze-matches", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "analysis", "analyze-matches" ] } }, "status": "Usage limit exceeded", "code": 429, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{}" } ] }, { "name": "Analyze multiple matches for coupon (alias)", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Analyze multiple matches for coupon (alias)", "url": { "raw": "{{beBaseUrl}}/api/analysis/analyze", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "analysis", "analyze" ], "query": [] }, "body": { "mode": "raw", "raw": "{\n \"matchIds\": [\n \"string\"\n ]\n}" } }, "response": [ { "name": "POST /api/analysis/analyze - 200", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"matchIds\": [\n \"string\"\n ]\n}" }, "url": { "raw": "{{beBaseUrl}}/api/analysis/analyze", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "analysis", "analyze" ] } }, "status": "", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{}" } ] }, { "name": "Get analysis history", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Get analysis history", "url": { "raw": "{{beBaseUrl}}/api/analysis/history", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "analysis", "history" ], "query": [] } }, "response": [ { "name": "GET /api/analysis/history - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/analysis/history", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "analysis", "history" ] } }, "status": "History retrieved", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"success\": true,\n \"data\": [\n \"string\"\n ]\n}" } ] } ] }, { "name": "Auth", "item": [ { "name": "Login with email and password", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Login with email and password", "url": { "raw": "{{beBaseUrl}}/api/auth/login", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "auth", "login" ], "query": [] }, "body": { "mode": "raw", "raw": "{\n \"email\": \"user@example.com\",\n \"password\": \"password123\"\n}" } }, "response": [ { "name": "POST /api/auth/login - 200", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"email\": \"user@example.com\",\n \"password\": \"password123\"\n}" }, "url": { "raw": "{{beBaseUrl}}/api/auth/login", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "auth", "login" ] } }, "status": "Login successful", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"accessToken\": \"string\",\n \"refreshToken\": \"string\",\n \"expiresIn\": 1,\n \"user\": {\n \"id\": \"string\",\n \"email\": \"string\",\n \"firstName\": \"string\",\n \"lastName\": \"string\",\n \"roles\": [\n \"string\"\n ]\n }\n}" } ] }, { "name": "Logout and invalidate refresh token", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Logout and invalidate refresh token", "url": { "raw": "{{beBaseUrl}}/api/auth/logout", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "auth", "logout" ], "query": [] }, "body": { "mode": "raw", "raw": "{\n \"refreshToken\": \"string\"\n}" } }, "response": [ { "name": "POST /api/auth/logout - 200", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"refreshToken\": \"string\"\n}" }, "url": { "raw": "{{beBaseUrl}}/api/auth/logout", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "auth", "logout" ] } }, "status": "Logout successful", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"success\": true,\n \"message\": \"string\",\n \"data\": \"string\"\n}" } ] }, { "name": "Refresh access token", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Refresh access token", "url": { "raw": "{{beBaseUrl}}/api/auth/refresh", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "auth", "refresh" ], "query": [] }, "body": { "mode": "raw", "raw": "{\n \"refreshToken\": \"string\"\n}" } }, "response": [ { "name": "POST /api/auth/refresh - 200", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"refreshToken\": \"string\"\n}" }, "url": { "raw": "{{beBaseUrl}}/api/auth/refresh", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "auth", "refresh" ] } }, "status": "Token refreshed successfully", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"accessToken\": \"string\",\n \"refreshToken\": \"string\",\n \"expiresIn\": 1,\n \"user\": {\n \"id\": \"string\",\n \"email\": \"string\",\n \"firstName\": \"string\",\n \"lastName\": \"string\",\n \"roles\": [\n \"string\"\n ]\n }\n}" } ] }, { "name": "Register a new user", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Register a new user", "url": { "raw": "{{beBaseUrl}}/api/auth/register", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "auth", "register" ], "query": [] }, "body": { "mode": "raw", "raw": "{\n \"email\": \"user@example.com\",\n \"password\": \"password123\",\n \"firstName\": \"John\",\n \"lastName\": \"Doe\"\n}" } }, "response": [ { "name": "POST /api/auth/register - 200", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"email\": \"user@example.com\",\n \"password\": \"password123\",\n \"firstName\": \"John\",\n \"lastName\": \"Doe\"\n}" }, "url": { "raw": "{{beBaseUrl}}/api/auth/register", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "auth", "register" ] } }, "status": "User registered successfully", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"accessToken\": \"string\",\n \"refreshToken\": \"string\",\n \"expiresIn\": 1,\n \"user\": {\n \"id\": \"string\",\n \"email\": \"string\",\n \"firstName\": \"string\",\n \"lastName\": \"string\",\n \"roles\": [\n \"string\"\n ]\n }\n}" } ] } ] }, { "name": "Coupon", "item": [ { "name": "Analyze single match with V20 model", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Analyze single match with V20 model", "url": { "raw": "{{beBaseUrl}}/api/coupon/analyze-match", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "coupon", "analyze-match" ], "query": [] }, "body": { "mode": "raw", "raw": "{\n \"matchId\": \"string\"\n}" } }, "response": [ { "name": "POST /api/coupon/analyze-match - 200", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"matchId\": \"string\"\n}" }, "url": { "raw": "{{beBaseUrl}}/api/coupon/analyze-match", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "coupon", "analyze-match" ] } }, "status": "Match analysis", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"success\": true,\n \"data\": \"string\",\n \"message\": \"string\"\n}" } ] }, { "name": "Analyze single match with V20 model (alias)", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Analyze single match with V20 model (alias)", "url": { "raw": "{{beBaseUrl}}/api/coupon/analyze", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "coupon", "analyze" ], "query": [] }, "body": { "mode": "raw", "raw": "{\n \"matchId\": \"string\"\n}" } }, "response": [ { "name": "POST /api/coupon/analyze - 200", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"matchId\": \"string\"\n}" }, "url": { "raw": "{{beBaseUrl}}/api/coupon/analyze", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "coupon", "analyze" ] } }, "status": "", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{}" } ] }, { "name": "Create and save a user coupon", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Create and save a user coupon", "url": { "raw": "{{beBaseUrl}}/api/coupon/create", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "coupon", "create" ], "query": [] }, "body": { "mode": "raw", "raw": "\"string\"" } }, "response": [ { "name": "POST /api/coupon/create - 201", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "\"string\"" }, "url": { "raw": "{{beBaseUrl}}/api/coupon/create", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "coupon", "create" ] } }, "status": "Coupon created", "code": 201, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"success\": true,\n \"data\": \"string\",\n \"message\": \"string\"\n}" } ] }, { "name": "Create and save a user coupon (alias)", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Create and save a user coupon (alias)", "url": { "raw": "{{beBaseUrl}}/api/coupon", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "coupon" ], "query": [] }, "body": { "mode": "raw", "raw": "\"string\"" } }, "response": [ { "name": "POST /api/coupon - 201", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "\"string\"" }, "url": { "raw": "{{beBaseUrl}}/api/coupon", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "coupon" ] } }, "status": "", "code": 201, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{}" } ] }, { "name": "Generate a high-confidence banko combo (2 matches)", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Generate a high-confidence banko combo (2 matches)", "url": { "raw": "{{beBaseUrl}}/api/coupon/daily-banko", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "coupon", "daily-banko" ], "query": [] }, "body": { "mode": "raw", "raw": "{\n \"matchIds\": [\n \"string\"\n ]\n}" } }, "response": [ { "name": "POST /api/coupon/daily-banko - 200", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"matchIds\": [\n \"string\"\n ]\n}" }, "url": { "raw": "{{beBaseUrl}}/api/coupon/daily-banko", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "coupon", "daily-banko" ] } }, "status": "Daily banko coupon", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"success\": true,\n \"data\": \"string\",\n \"message\": \"string\"\n}" } ] }, { "name": "Generate frequency-based parlay coupon", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Scans upcoming matches, applies conditional frequency analysis (team odds-band performance), and builds 2-5 match combos with +EV calculation.", "url": { "raw": "{{beBaseUrl}}/api/coupon/frequency-coupon", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "coupon", "frequency-coupon" ], "query": [] }, "body": { "mode": "raw", "raw": "{\n \"matchIds\": [\n \"string\"\n ],\n \"maxMatches\": 3,\n \"minSignal\": 0.7,\n \"markets\": [\n \"string\"\n ]\n}" } }, "response": [ { "name": "POST /api/coupon/frequency-coupon - 200", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"matchIds\": [\n \"string\"\n ],\n \"maxMatches\": 3,\n \"minSignal\": 0.7,\n \"markets\": [\n \"string\"\n ]\n}" }, "url": { "raw": "{{beBaseUrl}}/api/coupon/frequency-coupon", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "coupon", "frequency-coupon" ] } }, "status": "Frequency coupon generated", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{}" } ] }, { "name": "Get coupon history", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Get coupon history", "url": { "raw": "{{beBaseUrl}}/api/coupon/history", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "coupon", "history" ], "query": [ { "key": "limit", "value": "", "description": "", "disabled": false } ] } }, "response": [ { "name": "GET /api/coupon/history - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/coupon/history", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "coupon", "history" ] } }, "status": "History retrieved", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"success\": true,\n \"data\": [\n \"string\"\n ],\n \"message\": \"string\"\n}" } ] }, { "name": "Get user betting statistics", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Get user betting statistics", "url": { "raw": "{{beBaseUrl}}/api/coupon/my-stats", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "coupon", "my-stats" ], "query": [] } }, "response": [ { "name": "GET /api/coupon/my-stats - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/coupon/my-stats", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "coupon", "my-stats" ] } }, "status": "User statistics", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"success\": true,\n \"data\": \"string\",\n \"message\": \"string\"\n}" } ] }, { "name": "Suggest Smart Coupon", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Suggest Smart Coupon", "url": { "raw": "{{beBaseUrl}}/api/coupon/suggest", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "coupon", "suggest" ], "query": [] }, "body": { "mode": "raw", "raw": "{\n \"matchIds\": [\n \"string\"\n ],\n \"strategy\": \"BALANCED\",\n \"maxMatches\": 5,\n \"minConfidence\": 60\n}" } }, "response": [ { "name": "POST /api/coupon/suggest - 200", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"matchIds\": [\n \"string\"\n ],\n \"strategy\": \"BALANCED\",\n \"maxMatches\": 5,\n \"minConfidence\": 60\n}" }, "url": { "raw": "{{beBaseUrl}}/api/coupon/suggest", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "coupon", "suggest" ] } }, "status": "Smart Coupon generated", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"success\": true,\n \"data\": \"string\",\n \"message\": \"string\"\n}" } ] } ] }, { "name": "Health", "item": [ { "name": "Basic health check", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Basic health check", "url": { "raw": "{{beBaseUrl}}/api/health", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "health" ], "query": [] } }, "response": [ { "name": "GET /api/health - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/health", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "health" ] } }, "status": "", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{}" } ] }, { "name": "Dependency-level health details", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Dependency-level health details", "url": { "raw": "{{beBaseUrl}}/api/health/dependencies", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "health", "dependencies" ], "query": [] } }, "response": [ { "name": "GET /api/health/dependencies - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/health/dependencies", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "health", "dependencies" ] } }, "status": "", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{}" } ] }, { "name": "Liveness check", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Liveness check", "url": { "raw": "{{beBaseUrl}}/api/health/live", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "health", "live" ], "query": [] } }, "response": [ { "name": "GET /api/health/live - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/health/live", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "health", "live" ] } }, "status": "System liveness", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"status\": \"string\",\n \"timestamp\": \"string\"\n}" } ] }, { "name": "Readiness check (includes database)", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Readiness check (includes database)", "url": { "raw": "{{beBaseUrl}}/api/health/ready", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "health", "ready" ], "query": [] } }, "response": [ { "name": "GET /api/health/ready - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/health/ready", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "health", "ready" ] } }, "status": "", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{}" } ] } ] }, { "name": "Leagues", "item": [ { "name": "Get all countries", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Get all countries", "url": { "raw": "{{beBaseUrl}}/api/leagues/countries", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "leagues", "countries" ], "query": [] } }, "response": [ { "name": "GET /api/leagues/countries - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/leagues/countries", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "leagues", "countries" ] } }, "status": "List of countries", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "[\n \"string\"\n]" } ] }, { "name": "Get all leagues", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Get all leagues", "url": { "raw": "{{beBaseUrl}}/api/leagues", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "leagues" ], "query": [ { "key": "sport", "value": "", "description": "", "disabled": true } ] } }, "response": [ { "name": "GET /api/leagues - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/leagues", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "leagues" ] } }, "status": "List of leagues", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "[\n \"string\"\n]" } ] }, { "name": "Get country by ID with leagues", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Get country by ID with leagues", "url": { "raw": "{{beBaseUrl}}/api/leagues/countries/{{id}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "leagues", "countries", "{id}" ], "query": [] } }, "response": [ { "name": "GET /api/leagues/countries/{id} - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/leagues/countries/{{id}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "leagues", "countries", "{id}" ] } }, "status": "Country details", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "\"string\"" } ] }, { "name": "Get head-to-head matches between two teams", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Get head-to-head matches between two teams", "url": { "raw": "{{beBaseUrl}}/api/leagues/teams/h2h", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "leagues", "teams", "h2h" ], "query": [ { "key": "team1", "value": "", "description": "", "disabled": false }, { "key": "team2", "value": "", "description": "", "disabled": false }, { "key": "limit", "value": "", "description": "", "disabled": true } ] } }, "response": [ { "name": "GET /api/leagues/teams/h2h - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/leagues/teams/h2h", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "leagues", "teams", "h2h" ] } }, "status": "Head-to-head matches", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "[\n \"string\"\n]" } ] }, { "name": "Get league by ID", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Get league by ID", "url": { "raw": "{{beBaseUrl}}/api/leagues/{{id}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "leagues", "{id}" ], "query": [] } }, "response": [ { "name": "GET /api/leagues/{id} - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/leagues/{{id}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "leagues", "{id}" ] } }, "status": "League details", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "\"string\"" } ] }, { "name": "Get team by ID", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Get team by ID", "url": { "raw": "{{beBaseUrl}}/api/leagues/teams/{{id}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "leagues", "teams", "{id}" ], "query": [] } }, "response": [ { "name": "GET /api/leagues/teams/{id} - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/leagues/teams/{{id}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "leagues", "teams", "{id}" ] } }, "status": "Team details", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "\"string\"" } ] }, { "name": "Get team's recent matches (paginated)", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Get team's recent matches (paginated)", "url": { "raw": "{{beBaseUrl}}/api/leagues/teams/{{id}}/matches", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "leagues", "teams", "{id}", "matches" ], "query": [ { "key": "page", "value": "", "description": "Page number (default: 1)", "disabled": true }, { "key": "limit", "value": "", "description": "Items per page (default: 20)", "disabled": true }, { "key": "season", "value": "", "description": "Season (e.g. 2024-2025)", "disabled": true } ] } }, "response": [ { "name": "GET /api/leagues/teams/{id}/matches - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/leagues/teams/{{id}}/matches", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "leagues", "teams", "{id}", "matches" ] } }, "status": "Paginated list of matches", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"data\": [\n \"string\"\n ],\n \"meta\": \"string\"\n}" } ] }, { "name": "Search teams by name", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Search teams by name", "url": { "raw": "{{beBaseUrl}}/api/leagues/teams/search", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "leagues", "teams", "search" ], "query": [ { "key": "q", "value": "", "description": "Search query", "disabled": false }, { "key": "sport", "value": "", "description": "", "disabled": true } ] } }, "response": [ { "name": "GET /api/leagues/teams/search - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/leagues/teams/search", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "leagues", "teams", "search" ] } }, "status": "List of teams matching search", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "[\n \"string\"\n]" } ] } ] }, { "name": "Matches", "item": [ { "name": "Advanced match query with filters", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Advanced match query with filters", "url": { "raw": "{{beBaseUrl}}/api/matches/query", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "matches", "query" ], "query": [] }, "body": { "mode": "raw", "raw": "{\n \"sport\": \"football\",\n \"limit\": 50,\n \"leagueId\": \"string\",\n \"status\": \"string\",\n \"date\": \"string\",\n \"team\": {\n \"id\": \"string\",\n \"role\": \"home\"\n },\n \"odds\": [\n {\n \"categoryName\": \"Maç Sonucu\",\n \"selectionName\": \"1\",\n \"value\": 1.5,\n \"tolerance\": 0.1\n }\n ],\n \"dateRange\": {\n \"from\": \"string\",\n \"to\": \"string\"\n }\n}" } }, "response": [ { "name": "POST /api/matches/query - 200", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"sport\": \"football\",\n \"limit\": 50,\n \"leagueId\": \"string\",\n \"status\": \"string\",\n \"date\": \"string\",\n \"team\": {\n \"id\": \"string\",\n \"role\": \"home\"\n },\n \"odds\": [\n {\n \"categoryName\": \"Maç Sonucu\",\n \"selectionName\": \"1\",\n \"value\": 1.5,\n \"tolerance\": 0.1\n }\n ],\n \"dateRange\": {\n \"from\": \"string\",\n \"to\": \"string\"\n }\n}" }, "url": { "raw": "{{beBaseUrl}}/api/matches/query", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "matches", "query" ] } }, "status": "", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "[\n {\n \"id\": \"string\",\n \"name\": \"string\",\n \"code\": \"string\",\n \"country\": \"string\",\n \"sport\": \"string\",\n \"matches\": [\n {\n \"id\": \"string\",\n \"matchName\": \"string\",\n \"matchSlug\": \"string\",\n \"mstUtc\": 1,\n \"status\": \"string\",\n \"state\": \"string\",\n \"scoreHome\": 1,\n \"scoreAway\": 1,\n \"htScoreHome\": 1,\n \"htScoreAway\": 1,\n \"homeTeamName\": \"string\",\n \"homeTeamLogo\": \"string\",\n \"awayTeamName\": \"string\",\n \"awayTeamLogo\": \"string\",\n \"leagueName\": \"string\",\n \"countryName\": \"string\",\n \"odds\": [\n null\n ]\n }\n ]\n }\n]" } ] }, { "name": "Get active leagues with upcoming/live matches", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Get active leagues with upcoming/live matches", "url": { "raw": "{{beBaseUrl}}/api/matches/leagues/active", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "matches", "leagues", "active" ], "query": [ { "key": "sport", "value": "", "description": "", "disabled": true } ] } }, "response": [ { "name": "GET /api/matches/leagues/active - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/matches/leagues/active", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "matches", "leagues", "active" ] } }, "status": "", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "[\n {\n \"id\": \"string\",\n \"name\": \"string\",\n \"code\": \"string\",\n \"countryName\": \"string\",\n \"countryFlag\": \"string\",\n \"matchCount\": 1,\n \"liveCount\": 1\n }\n]" } ] }, { "name": "Get full match details by ID", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Get full match details by ID", "url": { "raw": "{{beBaseUrl}}/api/matches/{{id}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "matches", "{id}" ], "query": [] } }, "response": [ { "name": "GET /api/matches/{id} - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/matches/{{id}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "matches", "{id}" ] } }, "status": "Match details with lineups, stats, odds, events", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "\"string\"" }, { "name": "GET /api/matches/{id} - 404", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/matches/{{id}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "matches", "{id}" ] } }, "status": "Match not found", "code": 404, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{}" } ] }, { "name": "List matches with pagination", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "List matches with pagination", "url": { "raw": "{{beBaseUrl}}/api/matches", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "matches" ], "query": [ { "key": "page", "value": "", "description": "", "disabled": true }, { "key": "limit", "value": "", "description": "", "disabled": true }, { "key": "sport", "value": "", "description": "", "disabled": true } ] } }, "response": [ { "name": "GET /api/matches - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/matches", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "matches" ] } }, "status": "Paginated list of matches", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"data\": [\n \"string\"\n ],\n \"meta\": \"string\"\n}" } ] } ] }, { "name": "Predictions", "item": [ { "name": "Check AI Engine health status", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Check AI Engine health status", "url": { "raw": "{{beBaseUrl}}/api/predictions/health", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "predictions", "health" ], "query": [] } }, "response": [ { "name": "GET /api/predictions/health - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/predictions/health", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "predictions", "health" ] } }, "status": "", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"status\": \"string\",\n \"modelLoaded\": true,\n \"predictionServiceReady\": true,\n \"aiEngineReachable\": true,\n \"circuitState\": \"closed\",\n \"consecutiveFailures\": 0,\n \"endpoint\": \"string\",\n \"detail\": \"string\",\n \"mode\": \"string\"\n}" } ] }, { "name": "Generate prediction with provided match data", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Generate prediction with provided match data", "url": { "raw": "{{beBaseUrl}}/api/predictions/generate", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "predictions", "generate" ], "query": [] }, "body": { "mode": "raw", "raw": "{\n \"matchId\": \"string\"\n}" } }, "response": [ { "name": "POST /api/predictions/generate - 200", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"matchId\": \"string\"\n}" }, "url": { "raw": "{{beBaseUrl}}/api/predictions/generate", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "predictions", "generate" ] } }, "status": "", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"model_version\": \"string\",\n \"calibration_version\": \"string\",\n \"shadow_engine_version\": \"string\",\n \"decision_trace_id\": \"string\",\n \"match_info\": {\n \"match_id\": \"string\",\n \"match_name\": \"string\",\n \"home_team\": \"string\",\n \"away_team\": \"string\",\n \"league\": \"string\",\n \"match_date_ms\": 1,\n \"league_id\": \"string\",\n \"is_top_league\": false,\n \"sport\": \"football\"\n },\n \"data_quality\": {\n \"label\": \"HIGH\",\n \"score\": 1,\n \"home_lineup_count\": 1,\n \"away_lineup_count\": 1,\n \"lineup_source\": \"none\",\n \"flags\": [\n \"string\"\n ]\n },\n \"risk\": {\n \"level\": \"LOW\",\n \"score\": 1,\n \"is_surprise_risk\": true,\n \"surprise_type\": \"string\",\n \"surprise_score\": 0,\n \"surprise_comment\": \"string\",\n \"surprise_reasons\": [\n \"string\"\n ],\n \"warnings\": [\n \"string\"\n ]\n },\n \"engine_breakdown\": {\n \"team\": 1,\n \"player\": 1,\n \"odds\": 1,\n \"referee\": 1\n },\n \"main_pick\": {\n \"market\": \"string\",\n \"strategy_channel\": \"standard\",\n \"pick\": \"string\",\n \"probability\": 1,\n \"confidence\": 1,\n \"odds\": 1,\n \"raw_confidence\": 1,\n \"calibrated_confidence\": 1,\n \"min_required_confidence\": 1,\n \"edge\": 1,\n \"ev_edge\": 0,\n \"implied_prob\": 0,\n \"play_score\": 1,\n \"playable\": true,\n \"bet_grade\": \"A\",\n \"stake_units\": 1,\n \"decision_reasons\": [\n \"string\"\n ],\n \"confidence_interval\": {\n \"lower\": 1,\n \"upper\": 1,\n \"width\": 1,\n \"band\": \"HIGH\",\n \"threshold_met\": true\n },\n \"signal_tier\": \"CORE\"\n },\n \"value_pick\": {\n \"market\": \"string\",\n \"strategy_channel\": \"standard\",\n \"pick\": \"string\",\n \"probability\": 1,\n \"confidence\": 1,\n \"odds\": 1,\n \"raw_confidence\": 1,\n \"calibrated_confidence\": 1,\n \"min_required_confidence\": 1,\n \"edge\": 1,\n \"ev_edge\": 0,\n \"implied_prob\": 0,\n \"play_score\": 1,\n \"playable\": true,\n \"bet_grade\": \"A\",\n \"stake_units\": 1,\n \"decision_reasons\": [\n \"string\"\n ],\n \"confidence_interval\": {\n \"lower\": 1,\n \"upper\": 1,\n \"width\": 1,\n \"band\": \"HIGH\",\n \"threshold_met\": true\n },\n \"signal_tier\": \"CORE\"\n },\n \"surprise_pick\": {\n \"market\": \"string\",\n \"strategy_channel\": \"standard\",\n \"pick\": \"string\",\n \"probability\": 1,\n \"confidence\": 1,\n \"odds\": 1,\n \"raw_confidence\": 1,\n \"calibrated_confidence\": 1,\n \"min_required_confidence\": 1,\n \"edge\": 1,\n \"ev_edge\": 0,\n \"implied_prob\": 0,\n \"play_score\": 1,\n \"playable\": true,\n \"bet_grade\": \"A\",\n \"stake_units\": 1,\n \"decision_reasons\": [\n \"string\"\n ],\n \"confidence_interval\": {\n \"lower\": 1,\n \"upper\": 1,\n \"width\": 1,\n \"band\": \"HIGH\",\n \"threshold_met\": true\n },\n \"signal_tier\": \"CORE\"\n },\n \"bet_advice\": {\n \"playable\": true,\n \"suggested_stake_units\": 1,\n \"reason\": \"string\",\n \"confidence_band\": \"HIGH\",\n \"min_confidence_for_play\": 1,\n \"signal_tier\": \"CORE\"\n },\n \"bet_summary\": [\n {\n \"market\": \"string\",\n \"pick\": \"string\",\n \"raw_confidence\": 1,\n \"calibrated_confidence\": 1,\n \"bet_grade\": \"A\",\n \"playable\": true,\n \"stake_units\": 1,\n \"play_score\": 1,\n \"ev_edge\": 0,\n \"implied_prob\": 0,\n \"odds\": 0,\n \"reasons\": [\n \"string\"\n ],\n \"confidence_interval\": {\n \"lower\": 1,\n \"upper\": 1,\n \"width\": 1,\n \"band\": \"HIGH\",\n \"threshold_met\": true\n },\n \"signal_tier\": \"CORE\"\n }\n ],\n \"supporting_picks\": [\n {\n \"market\": \"string\",\n \"strategy_channel\": \"standard\",\n \"pick\": \"string\",\n \"probability\": 1,\n \"confidence\": 1,\n \"odds\": 1,\n \"raw_confidence\": 1,\n \"calibrated_confidence\": 1,\n \"min_required_confidence\": 1,\n \"edge\": 1,\n \"ev_edge\": 0,\n \"implied_prob\": 0,\n \"play_score\": 1,\n \"playable\": true,\n \"bet_grade\": \"A\",\n \"stake_units\": 1,\n \"decision_reasons\": [\n \"string\"\n ],\n \"confidence_interval\": {\n \"lower\": 1,\n \"upper\": 1,\n \"width\": 1,\n \"band\": \"HIGH\",\n \"threshold_met\": true\n },\n \"signal_tier\": \"CORE\"\n }\n ],\n \"aggressive_pick\": {\n \"market\": \"string\",\n \"pick\": \"string\",\n \"probability\": 1,\n \"confidence\": 1,\n \"odds\": 1,\n \"raw_confidence\": 1,\n \"calibrated_confidence\": 1,\n \"min_required_confidence\": 1,\n \"edge\": 1,\n \"ev_edge\": 0,\n \"implied_prob\": 0,\n \"play_score\": 1,\n \"playable\": true,\n \"bet_grade\": \"A\",\n \"stake_units\": 1,\n \"decision_reasons\": [\n \"string\"\n ],\n \"confidence_interval\": {\n \"lower\": 1,\n \"upper\": 1,\n \"width\": 1,\n \"band\": \"HIGH\",\n \"threshold_met\": true\n }\n },\n \"htft\": {\n \"1/1\": 1,\n \"1/X\": 1,\n \"1/2\": 1,\n \"X/1\": 1,\n \"X/X\": 1,\n \"X/2\": 1,\n \"2/1\": 1,\n \"2/X\": 1,\n \"2/2\": 1,\n \"pick\": \"string\",\n \"confidence\": 1\n },\n \"scenario_top5\": [\n {\n \"scenario\": \"string\",\n \"score\": 1,\n \"probability\": 1\n }\n ],\n \"score_prediction\": {\n \"ft\": \"string\",\n \"ht\": \"string\",\n \"xg_home\": 1,\n \"xg_away\": 1,\n \"xg_total\": 1\n },\n \"market_board\": \"string\",\n \"reasoning_factors\": [\n \"string\"\n ],\n \"market_reliability\": \"string\",\n \"shadow_engine\": \"string\",\n \"surprise_hunter\": \"string\",\n \"v27_engine\": \"string\"\n}" } ] }, { "name": "Generate Smart Coupon with V20 AI recommendations", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Generate Smart Coupon with V20 AI recommendations", "url": { "raw": "{{beBaseUrl}}/api/predictions/smart-coupon", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "predictions", "smart-coupon" ], "query": [] }, "body": { "mode": "raw", "raw": "{\n \"matchIds\": [\n \"string\"\n ],\n \"strategy\": \"BALANCED\",\n \"maxMatches\": 5,\n \"minConfidence\": 60\n}" } }, "response": [ { "name": "POST /api/predictions/smart-coupon - 200", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"matchIds\": [\n \"string\"\n ],\n \"strategy\": \"BALANCED\",\n \"maxMatches\": 5,\n \"minConfidence\": 60\n}" }, "url": { "raw": "{{beBaseUrl}}/api/predictions/smart-coupon", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "predictions", "smart-coupon" ] } }, "status": "Smart coupon generated successfully", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "\"string\"" } ] }, { "name": "Get prediction for a specific match", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Get prediction for a specific match", "url": { "raw": "{{beBaseUrl}}/api/predictions/{{matchId}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "predictions", "{matchId}" ], "query": [] } }, "response": [ { "name": "GET /api/predictions/{matchId} - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/predictions/{{matchId}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "predictions", "{matchId}" ] } }, "status": "Match prediction", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"model_version\": \"string\",\n \"calibration_version\": \"string\",\n \"shadow_engine_version\": \"string\",\n \"decision_trace_id\": \"string\",\n \"match_info\": {\n \"match_id\": \"string\",\n \"match_name\": \"string\",\n \"home_team\": \"string\",\n \"away_team\": \"string\",\n \"league\": \"string\",\n \"match_date_ms\": 1,\n \"league_id\": \"string\",\n \"is_top_league\": false,\n \"sport\": \"football\"\n },\n \"data_quality\": {\n \"label\": \"HIGH\",\n \"score\": 1,\n \"home_lineup_count\": 1,\n \"away_lineup_count\": 1,\n \"lineup_source\": \"none\",\n \"flags\": [\n \"string\"\n ]\n },\n \"risk\": {\n \"level\": \"LOW\",\n \"score\": 1,\n \"is_surprise_risk\": true,\n \"surprise_type\": \"string\",\n \"surprise_score\": 0,\n \"surprise_comment\": \"string\",\n \"surprise_reasons\": [\n \"string\"\n ],\n \"warnings\": [\n \"string\"\n ]\n },\n \"engine_breakdown\": {\n \"team\": 1,\n \"player\": 1,\n \"odds\": 1,\n \"referee\": 1\n },\n \"main_pick\": {\n \"market\": \"string\",\n \"strategy_channel\": \"standard\",\n \"pick\": \"string\",\n \"probability\": 1,\n \"confidence\": 1,\n \"odds\": 1,\n \"raw_confidence\": 1,\n \"calibrated_confidence\": 1,\n \"min_required_confidence\": 1,\n \"edge\": 1,\n \"ev_edge\": 0,\n \"implied_prob\": 0,\n \"play_score\": 1,\n \"playable\": true,\n \"bet_grade\": \"A\",\n \"stake_units\": 1,\n \"decision_reasons\": [\n \"string\"\n ],\n \"confidence_interval\": {\n \"lower\": 1,\n \"upper\": 1,\n \"width\": 1,\n \"band\": \"HIGH\",\n \"threshold_met\": true\n },\n \"signal_tier\": \"CORE\"\n },\n \"value_pick\": {\n \"market\": \"string\",\n \"strategy_channel\": \"standard\",\n \"pick\": \"string\",\n \"probability\": 1,\n \"confidence\": 1,\n \"odds\": 1,\n \"raw_confidence\": 1,\n \"calibrated_confidence\": 1,\n \"min_required_confidence\": 1,\n \"edge\": 1,\n \"ev_edge\": 0,\n \"implied_prob\": 0,\n \"play_score\": 1,\n \"playable\": true,\n \"bet_grade\": \"A\",\n \"stake_units\": 1,\n \"decision_reasons\": [\n \"string\"\n ],\n \"confidence_interval\": {\n \"lower\": 1,\n \"upper\": 1,\n \"width\": 1,\n \"band\": \"HIGH\",\n \"threshold_met\": true\n },\n \"signal_tier\": \"CORE\"\n },\n \"surprise_pick\": {\n \"market\": \"string\",\n \"strategy_channel\": \"standard\",\n \"pick\": \"string\",\n \"probability\": 1,\n \"confidence\": 1,\n \"odds\": 1,\n \"raw_confidence\": 1,\n \"calibrated_confidence\": 1,\n \"min_required_confidence\": 1,\n \"edge\": 1,\n \"ev_edge\": 0,\n \"implied_prob\": 0,\n \"play_score\": 1,\n \"playable\": true,\n \"bet_grade\": \"A\",\n \"stake_units\": 1,\n \"decision_reasons\": [\n \"string\"\n ],\n \"confidence_interval\": {\n \"lower\": 1,\n \"upper\": 1,\n \"width\": 1,\n \"band\": \"HIGH\",\n \"threshold_met\": true\n },\n \"signal_tier\": \"CORE\"\n },\n \"bet_advice\": {\n \"playable\": true,\n \"suggested_stake_units\": 1,\n \"reason\": \"string\",\n \"confidence_band\": \"HIGH\",\n \"min_confidence_for_play\": 1,\n \"signal_tier\": \"CORE\"\n },\n \"bet_summary\": [\n {\n \"market\": \"string\",\n \"pick\": \"string\",\n \"raw_confidence\": 1,\n \"calibrated_confidence\": 1,\n \"bet_grade\": \"A\",\n \"playable\": true,\n \"stake_units\": 1,\n \"play_score\": 1,\n \"ev_edge\": 0,\n \"implied_prob\": 0,\n \"odds\": 0,\n \"reasons\": [\n \"string\"\n ],\n \"confidence_interval\": {\n \"lower\": 1,\n \"upper\": 1,\n \"width\": 1,\n \"band\": \"HIGH\",\n \"threshold_met\": true\n },\n \"signal_tier\": \"CORE\"\n }\n ],\n \"supporting_picks\": [\n {\n \"market\": \"string\",\n \"strategy_channel\": \"standard\",\n \"pick\": \"string\",\n \"probability\": 1,\n \"confidence\": 1,\n \"odds\": 1,\n \"raw_confidence\": 1,\n \"calibrated_confidence\": 1,\n \"min_required_confidence\": 1,\n \"edge\": 1,\n \"ev_edge\": 0,\n \"implied_prob\": 0,\n \"play_score\": 1,\n \"playable\": true,\n \"bet_grade\": \"A\",\n \"stake_units\": 1,\n \"decision_reasons\": [\n \"string\"\n ],\n \"confidence_interval\": {\n \"lower\": 1,\n \"upper\": 1,\n \"width\": 1,\n \"band\": \"HIGH\",\n \"threshold_met\": true\n },\n \"signal_tier\": \"CORE\"\n }\n ],\n \"aggressive_pick\": {\n \"market\": \"string\",\n \"pick\": \"string\",\n \"probability\": 1,\n \"confidence\": 1,\n \"odds\": 1,\n \"raw_confidence\": 1,\n \"calibrated_confidence\": 1,\n \"min_required_confidence\": 1,\n \"edge\": 1,\n \"ev_edge\": 0,\n \"implied_prob\": 0,\n \"play_score\": 1,\n \"playable\": true,\n \"bet_grade\": \"A\",\n \"stake_units\": 1,\n \"decision_reasons\": [\n \"string\"\n ],\n \"confidence_interval\": {\n \"lower\": 1,\n \"upper\": 1,\n \"width\": 1,\n \"band\": \"HIGH\",\n \"threshold_met\": true\n }\n },\n \"htft\": {\n \"1/1\": 1,\n \"1/X\": 1,\n \"1/2\": 1,\n \"X/1\": 1,\n \"X/X\": 1,\n \"X/2\": 1,\n \"2/1\": 1,\n \"2/X\": 1,\n \"2/2\": 1,\n \"pick\": \"string\",\n \"confidence\": 1\n },\n \"scenario_top5\": [\n {\n \"scenario\": \"string\",\n \"score\": 1,\n \"probability\": 1\n }\n ],\n \"score_prediction\": {\n \"ft\": \"string\",\n \"ht\": \"string\",\n \"xg_home\": 1,\n \"xg_away\": 1,\n \"xg_total\": 1\n },\n \"market_board\": \"string\",\n \"reasoning_factors\": [\n \"string\"\n ],\n \"market_reliability\": \"string\",\n \"shadow_engine\": \"string\",\n \"surprise_hunter\": \"string\",\n \"v27_engine\": \"string\"\n}" }, { "name": "GET /api/predictions/{matchId} - 404", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/predictions/{{matchId}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "predictions", "{matchId}" ] } }, "status": "Match not found", "code": 404, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{}" } ] }, { "name": "Get prediction history and accuracy statistics", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Get prediction history and accuracy statistics", "url": { "raw": "{{beBaseUrl}}/api/predictions/history", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "predictions", "history" ], "query": [] } }, "response": [ { "name": "GET /api/predictions/history - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/predictions/history", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "predictions", "history" ] } }, "status": "", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"stats\": {\n \"totalPredictions\": 1,\n \"totalResolved\": 1,\n \"correctPredictions\": 1,\n \"accuracyRate\": 1\n },\n \"history\": [\n \"string\"\n ]\n}" } ] }, { "name": "Get predictions for upcoming matches", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Get predictions for upcoming matches", "url": { "raw": "{{beBaseUrl}}/api/predictions/upcoming", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "predictions", "upcoming" ], "query": [] } }, "response": [ { "name": "GET /api/predictions/upcoming - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/predictions/upcoming", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "predictions", "upcoming" ] } }, "status": "", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"count\": 1,\n \"matches\": [\n {\n \"model_version\": \"string\",\n \"calibration_version\": \"string\",\n \"shadow_engine_version\": \"string\",\n \"decision_trace_id\": \"string\",\n \"match_info\": {\n \"match_id\": \"string\",\n \"match_name\": \"string\",\n \"home_team\": \"string\",\n \"away_team\": \"string\",\n \"league\": \"string\",\n \"match_date_ms\": 1,\n \"league_id\": \"string\",\n \"is_top_league\": false,\n \"sport\": \"football\"\n },\n \"data_quality\": {\n \"label\": \"HIGH\",\n \"score\": 1,\n \"home_lineup_count\": 1,\n \"away_lineup_count\": 1,\n \"lineup_source\": \"none\",\n \"flags\": [\n \"string\"\n ]\n },\n \"risk\": {\n \"level\": \"LOW\",\n \"score\": 1,\n \"is_surprise_risk\": true,\n \"surprise_type\": \"string\",\n \"surprise_score\": 0,\n \"surprise_comment\": \"string\",\n \"surprise_reasons\": [\n \"string\"\n ],\n \"warnings\": [\n \"string\"\n ]\n },\n \"engine_breakdown\": {\n \"team\": 1,\n \"player\": 1,\n \"odds\": 1,\n \"referee\": 1\n },\n \"main_pick\": {\n \"market\": \"string\",\n \"strategy_channel\": \"standard\",\n \"pick\": \"string\",\n \"probability\": 1,\n \"confidence\": 1,\n \"odds\": 1,\n \"raw_confidence\": 1,\n \"calibrated_confidence\": 1,\n \"min_required_confidence\": 1,\n \"edge\": 1,\n \"ev_edge\": 0,\n \"implied_prob\": 0,\n \"play_score\": 1,\n \"playable\": true,\n \"bet_grade\": \"A\",\n \"stake_units\": 1,\n \"decision_reasons\": [\n \"string\"\n ],\n \"confidence_interval\": {\n \"lower\": 1,\n \"upper\": 1,\n \"width\": 1,\n \"band\": \"HIGH\",\n \"threshold_met\": true\n },\n \"signal_tier\": \"CORE\"\n },\n \"value_pick\": {\n \"market\": \"string\",\n \"strategy_channel\": \"standard\",\n \"pick\": \"string\",\n \"probability\": 1,\n \"confidence\": 1,\n \"odds\": 1,\n \"raw_confidence\": 1,\n \"calibrated_confidence\": 1,\n \"min_required_confidence\": 1,\n \"edge\": 1,\n \"ev_edge\": 0,\n \"implied_prob\": 0,\n \"play_score\": 1,\n \"playable\": true,\n \"bet_grade\": \"A\",\n \"stake_units\": 1,\n \"decision_reasons\": [\n \"string\"\n ],\n \"confidence_interval\": {\n \"lower\": 1,\n \"upper\": 1,\n \"width\": 1,\n \"band\": \"HIGH\",\n \"threshold_met\": true\n },\n \"signal_tier\": \"CORE\"\n },\n \"surprise_pick\": {\n \"market\": \"string\",\n \"strategy_channel\": \"standard\",\n \"pick\": \"string\",\n \"probability\": 1,\n \"confidence\": 1,\n \"odds\": 1,\n \"raw_confidence\": 1,\n \"calibrated_confidence\": 1,\n \"min_required_confidence\": 1,\n \"edge\": 1,\n \"ev_edge\": 0,\n \"implied_prob\": 0,\n \"play_score\": 1,\n \"playable\": true,\n \"bet_grade\": \"A\",\n \"stake_units\": 1,\n \"decision_reasons\": [\n \"string\"\n ],\n \"confidence_interval\": {\n \"lower\": 1,\n \"upper\": 1,\n \"width\": 1,\n \"band\": \"HIGH\",\n \"threshold_met\": true\n },\n \"signal_tier\": \"CORE\"\n },\n \"bet_advice\": {\n \"playable\": true,\n \"suggested_stake_units\": 1,\n \"reason\": \"string\",\n \"confidence_band\": \"HIGH\",\n \"min_confidence_for_play\": 1,\n \"signal_tier\": \"CORE\"\n },\n \"bet_summary\": [\n {\n \"market\": \"string\",\n \"pick\": \"string\",\n \"raw_confidence\": 1,\n \"calibrated_confidence\": 1,\n \"bet_grade\": \"A\",\n \"playable\": true,\n \"stake_units\": 1,\n \"play_score\": 1,\n \"ev_edge\": 0,\n \"implied_prob\": 0,\n \"odds\": 0,\n \"reasons\": [\n \"string\"\n ],\n \"confidence_interval\": {\n \"lower\": 1,\n \"upper\": 1,\n \"width\": 1,\n \"band\": \"HIGH\",\n \"threshold_met\": true\n },\n \"signal_tier\": \"CORE\"\n }\n ],\n \"supporting_picks\": [\n {\n \"market\": \"string\",\n \"strategy_channel\": \"standard\",\n \"pick\": \"string\",\n \"probability\": 1,\n \"confidence\": 1,\n \"odds\": 1,\n \"raw_confidence\": 1,\n \"calibrated_confidence\": 1,\n \"min_required_confidence\": 1,\n \"edge\": 1,\n \"ev_edge\": 0,\n \"implied_prob\": 0,\n \"play_score\": 1,\n \"playable\": true,\n \"bet_grade\": \"A\",\n \"stake_units\": 1,\n \"decision_reasons\": [\n \"string\"\n ],\n \"confidence_interval\": {\n \"lower\": 1,\n \"upper\": 1,\n \"width\": 1,\n \"band\": \"HIGH\",\n \"threshold_met\": true\n },\n \"signal_tier\": \"CORE\"\n }\n ],\n \"aggressive_pick\": {\n \"market\": \"string\",\n \"pick\": \"string\",\n \"probability\": 1,\n \"confidence\": 1,\n \"odds\": 1,\n \"raw_confidence\": 1,\n \"calibrated_confidence\": 1,\n \"min_required_confidence\": 1,\n \"edge\": 1,\n \"ev_edge\": 0,\n \"implied_prob\": 0,\n \"play_score\": 1,\n \"playable\": true,\n \"bet_grade\": \"A\",\n \"stake_units\": 1,\n \"decision_reasons\": [\n \"string\"\n ],\n \"confidence_interval\": {\n \"lower\": 1,\n \"upper\": 1,\n \"width\": 1,\n \"band\": \"HIGH\",\n \"threshold_met\": true\n }\n },\n \"htft\": {\n \"1/1\": 1,\n \"1/X\": 1,\n \"1/2\": 1,\n \"X/1\": 1,\n \"X/X\": 1,\n \"X/2\": 1,\n \"2/1\": 1,\n \"2/X\": 1,\n \"2/2\": 1,\n \"pick\": \"string\",\n \"confidence\": 1\n },\n \"scenario_top5\": [\n {\n \"scenario\": \"string\",\n \"score\": 1,\n \"probability\": 1\n }\n ],\n \"score_prediction\": {\n \"ft\": \"string\",\n \"ht\": \"string\",\n \"xg_home\": 1,\n \"xg_away\": 1,\n \"xg_total\": 1\n },\n \"market_board\": \"string\",\n \"reasoning_factors\": [\n \"string\"\n ],\n \"market_reliability\": \"string\",\n \"shadow_engine\": \"string\",\n \"surprise_hunter\": \"string\",\n \"v27_engine\": \"string\"\n }\n ],\n \"modelVersion\": \"string\"\n}" } ] }, { "name": "Get value betting opportunities (EV+)", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Get value betting opportunities (EV+)", "url": { "raw": "{{beBaseUrl}}/api/predictions/value-bets", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "predictions", "value-bets" ], "query": [] } }, "response": [ { "name": "GET /api/predictions/value-bets - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/predictions/value-bets", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "predictions", "value-bets" ] } }, "status": "", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "[\n {\n \"matchId\": \"string\",\n \"matchName\": \"string\",\n \"betType\": \"string\",\n \"prediction\": \"string\",\n \"confidence\": 1,\n \"odd\": 1,\n \"expectedValue\": 1\n }\n]" } ] }, { "name": "Refetch match data and get prediction", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Refetch match data and get prediction", "url": { "raw": "{{beBaseUrl}}/api/predictions/test/{{id}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "predictions", "test", "{id}" ], "query": [] } }, "response": [ { "name": "GET /api/predictions/test/{id} - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/predictions/test/{{id}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "predictions", "test", "{id}" ] } }, "status": "Prediction details", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "\"string\"" } ] } ] }, { "name": "Social Poster", "item": [ { "name": "GET /api/social-poster/preview/{matchId}", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "", "url": { "raw": "{{beBaseUrl}}/api/social-poster/preview/{{matchId}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "social-poster", "preview", "{matchId}" ], "query": [] } }, "response": [ { "name": "GET /api/social-poster/preview/{matchId} - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/social-poster/preview/{{matchId}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "social-poster", "preview", "{matchId}" ] } }, "status": "", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{}" } ] }, { "name": "POST /api/social-poster/post/{matchId}", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "", "url": { "raw": "{{beBaseUrl}}/api/social-poster/post/{{matchId}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "social-poster", "post", "{matchId}" ], "query": [] } }, "response": [ { "name": "POST /api/social-poster/post/{matchId} - 201", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/social-poster/post/{{matchId}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "social-poster", "post", "{matchId}" ] } }, "status": "", "code": 201, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{}" } ] } ] }, { "name": "Spor Toto", "item": [ { "name": "Create a bulletin manually", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Creates a new bulletin with 15 matches. Fails if gameCycleNo already exists.", "url": { "raw": "{{beBaseUrl}}/api/spor-toto/bulletins", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "spor-toto", "bulletins" ], "query": [] }, "body": { "mode": "raw", "raw": "{\n \"gameCycleNo\": 333,\n \"programName\": \"27-29 Mart\",\n \"season\": \"2025-2026\",\n \"payinBeginDate\": \"2026-03-22T10:00:00\",\n \"payinEndDate\": \"2026-03-27T20:55:00\",\n \"matches\": [\n {\n \"matchOrder\": 1,\n \"homeTeamName\": \"Blackpool\",\n \"awayTeamName\": \"Burton Albion\",\n \"leagueName\": \"İN1\",\n \"kickoffTime\": \"2026-03-28T18:00:00\",\n \"matchId\": \"string\"\n }\n ]\n}" } }, "response": [ { "name": "POST /api/spor-toto/bulletins - 201", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"gameCycleNo\": 333,\n \"programName\": \"27-29 Mart\",\n \"season\": \"2025-2026\",\n \"payinBeginDate\": \"2026-03-22T10:00:00\",\n \"payinEndDate\": \"2026-03-27T20:55:00\",\n \"matches\": [\n {\n \"matchOrder\": 1,\n \"homeTeamName\": \"Blackpool\",\n \"awayTeamName\": \"Burton Albion\",\n \"leagueName\": \"İN1\",\n \"kickoffTime\": \"2026-03-28T18:00:00\",\n \"matchId\": \"string\"\n }\n ]\n}" }, "url": { "raw": "{{beBaseUrl}}/api/spor-toto/bulletins", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "spor-toto", "bulletins" ] } }, "status": "Created bulletin with matches", "code": 201, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "\"string\"" }, { "name": "POST /api/spor-toto/bulletins - 409", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"gameCycleNo\": 333,\n \"programName\": \"27-29 Mart\",\n \"season\": \"2025-2026\",\n \"payinBeginDate\": \"2026-03-22T10:00:00\",\n \"payinEndDate\": \"2026-03-27T20:55:00\",\n \"matches\": [\n {\n \"matchOrder\": 1,\n \"homeTeamName\": \"Blackpool\",\n \"awayTeamName\": \"Burton Albion\",\n \"leagueName\": \"İN1\",\n \"kickoffTime\": \"2026-03-28T18:00:00\",\n \"matchId\": \"string\"\n }\n ]\n}" }, "url": { "raw": "{{beBaseUrl}}/api/spor-toto/bulletins", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "spor-toto", "bulletins" ] } }, "status": "Bulletin with this gameCycleNo already exists", "code": 409, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{}" } ] }, { "name": "Evaluate columns against results", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Compares generated column strings against actual match results. Returns correct count per column and summary (15/14/13/12 bilen).", "url": { "raw": "{{beBaseUrl}}/api/spor-toto/columns/evaluate", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "spor-toto", "columns", "evaluate" ], "query": [] }, "body": { "mode": "raw", "raw": "{\n \"bulletinId\": \"string\",\n \"columns\": [\n \"string\"\n ]\n}" } }, "response": [ { "name": "POST /api/spor-toto/columns/evaluate - 200", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"bulletinId\": \"string\",\n \"columns\": [\n \"string\"\n ]\n}" }, "url": { "raw": "{{beBaseUrl}}/api/spor-toto/columns/evaluate", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "spor-toto", "columns", "evaluate" ] } }, "status": "Evaluation results with correct counts per column", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "\"string\"" } ] }, { "name": "Generate AI predictions with contrarian strategy", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Analyzes bulletin matches via AI Engine V20+, applies contrarian parimutüel strategy, and generates optimized system coupons. Supports 4 strategies: CONSERVATIVE (100 cols), BALANCED (500), AGGRESSIVE (2500), FORMULA_6PCT (6% sampling).", "url": { "raw": "{{beBaseUrl}}/api/spor-toto/predict", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "spor-toto", "predict" ], "query": [] }, "body": { "mode": "raw", "raw": "{\n \"bulletinId\": \"string\",\n \"strategy\": \"BALANCED\",\n \"maxBudget\": 500,\n \"maxColumns\": 200\n}" } }, "response": [ { "name": "POST /api/spor-toto/predict - 200", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"bulletinId\": \"string\",\n \"strategy\": \"BALANCED\",\n \"maxBudget\": 500,\n \"maxColumns\": 200\n}" }, "url": { "raw": "{{beBaseUrl}}/api/spor-toto/predict", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "spor-toto", "predict" ] } }, "status": "Prediction result with per-match analysis, system coupon, and EV report with play recommendation", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "\"string\"" } ] }, { "name": "Generate Spor Toto columns (full or reduced system)", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Takes match selections (1/X/2 per match) and generates columns via Cartesian product (full) or random sampling (reduced). Returns columns with cost calculation.", "url": { "raw": "{{beBaseUrl}}/api/spor-toto/columns/generate", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "spor-toto", "columns", "generate" ], "query": [] }, "body": { "mode": "raw", "raw": "{\n \"bulletinId\": \"string\",\n \"matchSelections\": [\n {\n \"matchOrder\": 1,\n \"selections\": [\n \"string\"\n ]\n }\n ],\n \"strategy\": \"FULL_SYSTEM\",\n \"maxColumns\": 100\n}" } }, "response": [ { "name": "POST /api/spor-toto/columns/generate - 200", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"bulletinId\": \"string\",\n \"matchSelections\": [\n {\n \"matchOrder\": 1,\n \"selections\": [\n \"string\"\n ]\n }\n ],\n \"strategy\": \"FULL_SYSTEM\",\n \"maxColumns\": 100\n}" }, "url": { "raw": "{{beBaseUrl}}/api/spor-toto/columns/generate", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "spor-toto", "columns", "generate" ] } }, "status": "Generated columns with strategy, cost, and column strings", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "\"string\"" } ] }, { "name": "Get bulletin details", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Returns a single bulletin with all 15 matches, results, and dividend info.", "url": { "raw": "{{beBaseUrl}}/api/spor-toto/bulletins/{{id}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "spor-toto", "bulletins", "{id}" ], "query": [] } }, "response": [ { "name": "GET /api/spor-toto/bulletins/{id} - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/spor-toto/bulletins/{{id}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "spor-toto", "bulletins", "{id}" ] } }, "status": "Bulletin with matches and results", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "\"string\"" }, { "name": "GET /api/spor-toto/bulletins/{id} - 404", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/spor-toto/bulletins/{{id}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "spor-toto", "bulletins", "{id}" ] } }, "status": "Bulletin not found", "code": 404, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{}" } ] }, { "name": "Get bulletin pool & EV statistics", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Returns pool distribution (35/20/20/25), expected value calculations, and rollover analysis for a bulletin.", "url": { "raw": "{{beBaseUrl}}/api/spor-toto/bulletins/{{id}}/stats", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "spor-toto", "bulletins", "{id}", "stats" ], "query": [] } }, "response": [ { "name": "GET /api/spor-toto/bulletins/{id}/stats - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/spor-toto/bulletins/{{id}}/stats", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "spor-toto", "bulletins", "{id}", "stats" ] } }, "status": "Pool distribution and EV stats", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "\"string\"" } ] }, { "name": "Get rollover history and trends", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Returns the last N bulletins with rollover amounts and consecutive rollover streak.", "url": { "raw": "{{beBaseUrl}}/api/spor-toto/history", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "spor-toto", "history" ], "query": [ { "key": "limit", "value": "", "description": "Number of results (default: 20)", "disabled": true } ] } }, "response": [ { "name": "GET /api/spor-toto/history - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/spor-toto/history", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "spor-toto", "history" ] } }, "status": "Rollover history with trend data", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "\"string\"" } ] }, { "name": "List Spor Toto bulletins", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Returns a paginated list of bulletins, optionally filtered by status.", "url": { "raw": "{{beBaseUrl}}/api/spor-toto/bulletins", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "spor-toto", "bulletins" ], "query": [ { "key": "status", "value": "", "description": "Filter by bulletin status", "disabled": true }, { "key": "limit", "value": "", "description": "Max results (default: 10)", "disabled": true } ] } }, "response": [ { "name": "GET /api/spor-toto/bulletins - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/spor-toto/bulletins", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "spor-toto", "bulletins" ] } }, "status": "Array of bulletins with matches and results", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "\"string\"" } ] }, { "name": "Sync current bulletin from Spor Toto API", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Fetches the latest bulletin from sportotov2.iddaa.com and upserts it into the database. Updates match results and dividends if already exists.", "url": { "raw": "{{beBaseUrl}}/api/spor-toto/sync", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "spor-toto", "sync" ], "query": [] } }, "response": [ { "name": "POST /api/spor-toto/sync - 200", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/spor-toto/sync", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "spor-toto", "sync" ] } }, "status": "Sync result with action (created/updated/unchanged)", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "\"string\"" } ] }, { "name": "Update bulletin match results", "request": { "method": "PATCH", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Updates individual match results and optionally upserts dividend/prize data. Marks bulletin COMPLETED when all 15 results are entered.", "url": { "raw": "{{beBaseUrl}}/api/spor-toto/bulletins/{{id}}/results", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "spor-toto", "bulletins", "{id}", "results" ], "query": [] }, "body": { "mode": "raw", "raw": "{\n \"results\": [\n {\n \"matchOrder\": 1,\n \"result\": \"HOME\",\n \"isCancelled\": false,\n \"drawResult\": \"HOME\"\n }\n ],\n \"winners15\": 1,\n \"prize15\": 1,\n \"winners14\": 1,\n \"prize14\": 1,\n \"winners13\": 1,\n \"prize13\": 1,\n \"winners12\": 1,\n \"prize12\": 1,\n \"rolloverNext\": 1\n}" } }, "response": [ { "name": "PATCH /api/spor-toto/bulletins/{id}/results - 200", "originalRequest": { "method": "PATCH", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"results\": [\n {\n \"matchOrder\": 1,\n \"result\": \"HOME\",\n \"isCancelled\": false,\n \"drawResult\": \"HOME\"\n }\n ],\n \"winners15\": 1,\n \"prize15\": 1,\n \"winners14\": 1,\n \"prize14\": 1,\n \"winners13\": 1,\n \"prize13\": 1,\n \"winners12\": 1,\n \"prize12\": 1,\n \"rolloverNext\": 1\n}" }, "url": { "raw": "{{beBaseUrl}}/api/spor-toto/bulletins/{{id}}/results", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "spor-toto", "bulletins", "{id}", "results" ] } }, "status": "Updated bulletin with results", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "\"string\"" }, { "name": "PATCH /api/spor-toto/bulletins/{id}/results - 404", "originalRequest": { "method": "PATCH", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"results\": [\n {\n \"matchOrder\": 1,\n \"result\": \"HOME\",\n \"isCancelled\": false,\n \"drawResult\": \"HOME\"\n }\n ],\n \"winners15\": 1,\n \"prize15\": 1,\n \"winners14\": 1,\n \"prize14\": 1,\n \"winners13\": 1,\n \"prize13\": 1,\n \"winners12\": 1,\n \"prize12\": 1,\n \"rolloverNext\": 1\n}" }, "url": { "raw": "{{beBaseUrl}}/api/spor-toto/bulletins/{{id}}/results", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "spor-toto", "bulletins", "{id}", "results" ] } }, "status": "Bulletin not found", "code": 404, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{}" } ] } ] }, { "name": "Users", "item": [ { "name": "Change current user password", "request": { "method": "PATCH", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Change current user password", "url": { "raw": "{{beBaseUrl}}/api/users/me/password", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "users", "me", "password" ], "query": [] }, "body": { "mode": "raw", "raw": "{\n \"currentPassword\": \"oldPassword123\",\n \"newPassword\": \"newPassword456\"\n}" } }, "response": [ { "name": "PATCH /api/users/me/password - 200", "originalRequest": { "method": "PATCH", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"currentPassword\": \"oldPassword123\",\n \"newPassword\": \"newPassword456\"\n}" }, "url": { "raw": "{{beBaseUrl}}/api/users/me/password", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "users", "me", "password" ] } }, "status": "Password changed successfully", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{}" } ] }, { "name": "Get a record by ID", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Get a record by ID", "url": { "raw": "{{beBaseUrl}}/api/users/{{id}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "users", "{id}" ], "query": [] } }, "response": [ { "name": "GET /api/users/{id} - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/users/{{id}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "users", "{id}" ] } }, "status": "Record retrieved successfully", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{}" }, { "name": "GET /api/users/{id} - 404", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/users/{{id}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "users", "{id}" ] } }, "status": "Record not found", "code": 404, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{}" } ] }, { "name": "Get all records with pagination", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Get all records with pagination", "url": { "raw": "{{beBaseUrl}}/api/users", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "users" ], "query": [ { "key": "page", "value": "1", "description": "Page number", "disabled": true }, { "key": "limit", "value": "10", "description": "Items per page", "disabled": true }, { "key": "sortBy", "value": "", "description": "Field to sort by", "disabled": true }, { "key": "sortOrder", "value": "desc", "description": "Sort order", "disabled": true }, { "key": "search", "value": "", "description": "Search query", "disabled": true } ] } }, "response": [ { "name": "GET /api/users - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/users", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "users" ] } }, "status": "Records retrieved successfully", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{}" } ] }, { "name": "Get current authenticated user profile", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Get current authenticated user profile", "url": { "raw": "{{beBaseUrl}}/api/users/me", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "users", "me" ], "query": [] } }, "response": [ { "name": "GET /api/users/me - 200", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/users/me", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "users", "me" ] } }, "status": "", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "\"string\"" } ] }, { "name": "Restore a soft-deleted record", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Restore a soft-deleted record", "url": { "raw": "{{beBaseUrl}}/api/users/{{id}}/restore", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "users", "{id}", "restore" ], "query": [] } }, "response": [ { "name": "POST /api/users/{id}/restore - 200", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/users/{{id}}/restore", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "users", "{id}", "restore" ] } }, "status": "Record restored successfully", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{}" } ] }, { "name": "Update an existing record", "request": { "method": "PUT", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Update an existing record", "url": { "raw": "{{beBaseUrl}}/api/users/{{id}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "users", "{id}" ], "query": [] } }, "response": [ { "name": "PUT /api/users/{id} - 200", "originalRequest": { "method": "PUT", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/users/{{id}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "users", "{id}" ] } }, "status": "Record updated successfully", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{}" }, { "name": "PUT /api/users/{id} - 404", "originalRequest": { "method": "PUT", "header": [ { "key": "Content-Type", "value": "application/json" } ], "url": { "raw": "{{beBaseUrl}}/api/users/{{id}}", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "users", "{id}" ] } }, "status": "Record not found", "code": 404, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{}" } ] }, { "name": "Update current user profile", "request": { "method": "PUT", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "description": "Update current user profile", "url": { "raw": "{{beBaseUrl}}/api/users/me", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "users", "me" ], "query": [] }, "body": { "mode": "raw", "raw": "{\n \"firstName\": \"John\",\n \"lastName\": \"Doe\"\n}" } }, "response": [ { "name": "PUT /api/users/me - 200", "originalRequest": { "method": "PUT", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"firstName\": \"John\",\n \"lastName\": \"Doe\"\n}" }, "url": { "raw": "{{beBaseUrl}}/api/users/me", "host": [ "{{beBaseUrl}}" ], "path": [ "api", "users", "me" ] } }, "status": "", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "\"string\"" } ] } ] } ] }, { "name": "AI Engine", "item": [ { "name": "V20+", "item": [ { "name": "Root", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "AI engine root status endpoint", "url": { "raw": "{{aiBaseUrl}}/", "host": [ "{{aiBaseUrl}}" ], "path": [] } }, "response": [ { "name": "GET /", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "AI engine root status endpoint", "url": { "raw": "{{aiBaseUrl}}/", "host": [ "{{aiBaseUrl}}" ], "path": [] } }, "status": "OK", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"status\": \"Suggest-Bet AI Engine v20+\",\n \"engine\": \"V20 Plus Single Match Orchestrator\"\n}" } ] }, { "name": "Health", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "AI engine health endpoint", "url": { "raw": "{{aiBaseUrl}}/health", "host": [ "{{aiBaseUrl}}" ], "path": [ "health" ] } }, "response": [ { "name": "GET /health", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "AI engine health endpoint", "url": { "raw": "{{aiBaseUrl}}/health", "host": [ "{{aiBaseUrl}}" ], "path": [ "health" ] } }, "status": "OK", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"status\": \"healthy\",\n \"engine\": \"v20plus\",\n \"ready\": true\n}" } ] }, { "name": "Analyze Match", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Full V20+ single match analysis", "url": { "raw": "{{aiBaseUrl}}/v20plus/analyze/{{match_id}}", "host": [ "{{aiBaseUrl}}" ], "path": [ "v20plus", "analyze", "{{match_id}}" ] } }, "response": [ { "name": "POST /v20plus/analyze/{{match_id}}", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Full V20+ single match analysis", "url": { "raw": "{{aiBaseUrl}}/v20plus/analyze/{{match_id}}", "host": [ "{{aiBaseUrl}}" ], "path": [ "v20plus", "analyze", "{{match_id}}" ] } }, "status": "OK", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"model_version\": \"v30.0\",\n \"match_info\": {\n \"match_id\": \"{{match_id}}\"\n },\n \"main_pick\": {\n \"market\": \"OU25\",\n \"pick\": \"2.5 Üst\"\n },\n \"market_board\": {}\n}" } ] }, { "name": "Analyze HTMS", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Half-time result analysis endpoint", "url": { "raw": "{{aiBaseUrl}}/v20plus/analyze-htms/{{match_id}}", "host": [ "{{aiBaseUrl}}" ], "path": [ "v20plus", "analyze-htms", "{{match_id}}" ] } }, "response": [ { "name": "GET /v20plus/analyze-htms/{{match_id}}", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Half-time result analysis endpoint", "url": { "raw": "{{aiBaseUrl}}/v20plus/analyze-htms/{{match_id}}", "host": [ "{{aiBaseUrl}}" ], "path": [ "v20plus", "analyze-htms", "{{match_id}}" ] } }, "status": "OK", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"match_id\": \"{{match_id}}\",\n \"market\": \"HT\"\n}" } ] }, { "name": "Analyze HTFT", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Half-time/full-time analysis endpoint", "url": { "raw": "{{aiBaseUrl}}/v20plus/analyze-htft/{{match_id}}", "host": [ "{{aiBaseUrl}}" ], "path": [ "v20plus", "analyze-htft", "{{match_id}}" ], "query": [ { "key": "timeout_sec", "value": "30", "description": "Timeout between 3 and 120 seconds" } ] } }, "response": [ { "name": "GET /v20plus/analyze-htft/{{match_id}}", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Half-time/full-time analysis endpoint", "url": { "raw": "{{aiBaseUrl}}/v20plus/analyze-htft/{{match_id}}", "host": [ "{{aiBaseUrl}}" ], "path": [ "v20plus", "analyze-htft", "{{match_id}}" ], "query": [ { "key": "timeout_sec", "value": "30", "description": "Timeout between 3 and 120 seconds" } ] } }, "status": "OK", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"engine\": \"v20plus.1\",\n \"match_info\": {\n \"match_id\": \"{{match_id}}\"\n },\n \"ht_ft_probs\": {\n \"1/1\": 0.25,\n \"X/X\": 0.18\n }\n}" } ] }, { "name": "Generate Coupon", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Generate V20+ coupon from selected matches", "url": { "raw": "{{aiBaseUrl}}/v20plus/coupon", "host": [ "{{aiBaseUrl}}" ], "path": [ "v20plus", "coupon" ] }, "body": { "mode": "raw", "raw": "{\n \"match_ids\": [\n \"match-1\",\n \"match-2\"\n ],\n \"strategy\": \"BALANCED\",\n \"max_matches\": 4,\n \"min_confidence\": 55\n}" } }, "response": [ { "name": "POST /v20plus/coupon", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Generate V20+ coupon from selected matches", "url": { "raw": "{{aiBaseUrl}}/v20plus/coupon", "host": [ "{{aiBaseUrl}}" ], "path": [ "v20plus", "coupon" ] }, "body": { "mode": "raw", "raw": "{\n \"match_ids\": [\n \"match-1\",\n \"match-2\"\n ],\n \"strategy\": \"BALANCED\",\n \"max_matches\": 4,\n \"min_confidence\": 55\n}" } }, "status": "OK", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"success\": true,\n \"data\": {\n \"strategy\": \"BALANCED\",\n \"bets\": []\n }\n}" } ] }, { "name": "Daily Banker", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Get daily banker picks", "url": { "raw": "{{aiBaseUrl}}/v20plus/daily-banker", "host": [ "{{aiBaseUrl}}" ], "path": [ "v20plus", "daily-banker" ], "query": [ { "key": "count", "value": "3", "description": "Number of banker picks" } ] } }, "response": [ { "name": "GET /v20plus/daily-banker", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Get daily banker picks", "url": { "raw": "{{aiBaseUrl}}/v20plus/daily-banker", "host": [ "{{aiBaseUrl}}" ], "path": [ "v20plus", "daily-banker" ], "query": [ { "key": "count", "value": "3", "description": "Number of banker picks" } ] } }, "status": "OK", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"count\": 3,\n \"bankers\": []\n}" } ] }, { "name": "Reversal Watchlist", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Reversal watchlist candidates", "url": { "raw": "{{aiBaseUrl}}/v20plus/reversal-watchlist", "host": [ "{{aiBaseUrl}}" ], "path": [ "v20plus", "reversal-watchlist" ], "query": [ { "key": "count", "value": "20", "description": "Result size" }, { "key": "horizon_hours", "value": "72", "description": "Future horizon" }, { "key": "min_score", "value": "45", "description": "Minimum score" }, { "key": "top_leagues_only", "value": "false", "description": "Filter to top leagues" } ] } }, "response": [ { "name": "GET /v20plus/reversal-watchlist", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "Reversal watchlist candidates", "url": { "raw": "{{aiBaseUrl}}/v20plus/reversal-watchlist", "host": [ "{{aiBaseUrl}}" ], "path": [ "v20plus", "reversal-watchlist" ], "query": [ { "key": "count", "value": "20", "description": "Result size" }, { "key": "horizon_hours", "value": "72", "description": "Future horizon" }, { "key": "min_score", "value": "45", "description": "Minimum score" }, { "key": "top_leagues_only", "value": "false", "description": "Filter to top leagues" } ] } }, "status": "OK", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"count\": 0,\n \"items\": []\n}" } ] } ] }, { "name": "V2", "item": [ { "name": "V2 Health", "request": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "V2 betting engine health", "url": { "raw": "{{aiBaseUrl}}/v2/health", "host": [ "{{aiBaseUrl}}" ], "path": [ "v2", "health" ] } }, "response": [ { "name": "GET /v2/health", "originalRequest": { "method": "GET", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "V2 betting engine health", "url": { "raw": "{{aiBaseUrl}}/v2/health", "host": [ "{{aiBaseUrl}}" ], "path": [ "v2", "health" ] } }, "status": "OK", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"status\": \"healthy\",\n \"engine\": \"v2.betting_engine\",\n \"models_loaded\": true\n}" } ] }, { "name": "V2 Analyze Match", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "V2 leakage-free match analysis", "url": { "raw": "{{aiBaseUrl}}/v2/analyze/{{match_id}}", "host": [ "{{aiBaseUrl}}" ], "path": [ "v2", "analyze", "{{match_id}}" ] } }, "response": [ { "name": "POST /v2/analyze/{{match_id}}", "originalRequest": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "description": "V2 leakage-free match analysis", "url": { "raw": "{{aiBaseUrl}}/v2/analyze/{{match_id}}", "host": [ "{{aiBaseUrl}}" ], "path": [ "v2", "analyze", "{{match_id}}" ] } }, "status": "OK", "code": 200, "_postman_previewlanguage": "json", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": "{\n \"model_version\": \"v2.betting_engine\",\n \"match_info\": {\n \"match_id\": \"{{match_id}}\"\n },\n \"main_pick\": {\n \"market\": \"MS\",\n \"pick\": \"1\"\n },\n \"market_board\": {\n \"MS\": {\n \"pick\": \"1\",\n \"confidence\": 58.4\n }\n }\n}" } ] } ] } ] } ] }