stakeapi Posted January 5, 2025 #1 Posted January 5, 2025 I sometimes get 200 responses but 0 bets returned from the API. Is it possible that I am being rate limited?
Downloaded Posted January 5, 2025 #2 Posted January 5, 2025 The api is CloudFlare protected so you will time out within 20 minutes unless you bypass the cf using like python cfscrape or flaresolverr yes 2 r
stakeapi Posted January 5, 2025 Author #3 Posted January 5, 2025 The following is my code. I previously was able to use this code to get 3 high roller bets (bets that are more than 5000 USD) to show up in my dashboard. Now, when I check my console in Chrome, it says "Retrieved 0 bets from API". This error still occurs even if I have taken a break for a couple hours from calling the API. // In stakeApi.ts const API_URL = "https://stake.com/_api/graphql"; // 1. Fetch bets from Stake API export const fetchHighRollerBets = async (limit: number = 100) => { console.log("Fetching bets from Stake API..."); const response = await axios.post( API_URL, { operationName: "AllSportBets", variables: { limit }, query: ` query AllSportBets($limit: Int!) { allSportBets(limit: $limit) { iid bet { ... on SportBet { active amount currency status outcomes { odds fixture { name tournament { name } } } } } } } ` }, { headers: STAKE_API_HEADERS } ); const bets = response.data.data.allSportBets; console.log(`Retrieved ${bets.length} bets from API`); return bets; }; // 2. Save high roller bets to database export const saveHighRollerBet = async (bet: Bet) => { const usdAmount = convertToUSD(bet.bet?.amount || 0, bet.bet?.currency || 'usd'); console.log(`Attempting to save bet ${bet.iid} to database...`); try { const { error } = await supabase .from('high_roller_bets') .upsert({ bet_id: bet.iid, amount: usdAmount, currency: bet.bet?.currency, status: bet.bet?.status, bet_data: bet as unknown as Json }, { onConflict: 'bet_id' }); if (error) throw error; console.log(`Successfully saved bet ${bet.iid} to database`); } catch (error) { console.error('Failed to save bet to database:', error); throw error; } }; // 3. Fetch stored bets from database export const fetchStoredHighRollerBets = async () => { console.log("Fetching stored bets from database..."); const { data, error } = await supabase .from('high_roller_bets') .select('bet_data') .order('created_at', { ascending: false }); if (error) throw error; const bets = data?.map(row => row.bet_data as unknown as Bet) || []; console.log(`Retrieved ${bets.length} bets from database`); return bets; }; // In Index.tsx const MIN_USD_AMOUNT = 5000; const POLLING_INTERVAL = 5000; // 5 seconds in milliseconds const fetchAndProcessBets = async () => { try { // Fetch both new and stored bets const [newBets, storedBets] = await Promise.all([ fetchHighRollerBets(), fetchStoredHighRollerBets() ]); // Process and save high roller bets for (const bet of newBets) { const usdAmount = convertToUSD(bet.bet?.amount || 0, bet.bet?.currency || 'usd'); if (usdAmount >= MIN_USD_AMOUNT) { await saveHighRollerBet(bet); } } // Combine and filter bets const allBets = [...newBets, ...storedBets]; const uniqueBets = Array.from(new Map(allBets.map(bet => [bet.iid, bet])).values()); const filteredBets = uniqueBets.filter(bet => { const usdAmount = convertToUSD(bet.bet?.amount || 0, bet.bet?.currency || 'usd'); const status = bet.bet?.status?.toLowerCase(); return (status === 'confirmed' || status === 'confirmedpending') && usdAmount >= MIN_USD_AMOUNT; }); setBets(filteredBets); } catch (error) { console.error("Error fetching bets:", error); toast({ title: "Error", description: "Failed to fetch bets", variant: "destructive", }); } }; useEffect(() => { fetchAndProcessBets(); const interval = setInterval(() => { console.log("Fetching new bets..."); fetchAndProcessBets(); }, POLLING_INTERVAL); return () => clearInterval(interval); }, []);
DidoMrtns777 Posted January 14, 2025 #4 Posted January 14, 2025 Hello StakeAPI, What parameters should I include in the STAKE_API_HEADERS? I’ve already added the X-Access-Token parameter, but I’m still getting a 403 error. Thank you!
Featured Comment
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now