# The canonical handling loop resp = GET /v1/sports/{sport_key}/odds if resp.status == 429: wait(resp.headers["Retry-After"]) # then retry once # Otherwise: exponential backoff with jitter
Good clients treat rate limits as a budget: cache responses that haven't changed, prefer bulk endpoints over per-event loops, and reserve headroom for bursts (game start, injury news). Hammering after a 429 gets integrations blocked at most providers.
ParlayAPI meters usage in credits - the free tier includes 1,000 credits/month with no card required, and paid tiers scale from there (see pricing and limits). For high-frequency use cases, streaming (Business tier and up) replaces polling entirely, which is kinder to both your credit budget and your latency.