Le problème
Les équipes définissent un budget mensuel pour l'API de recherche et l'oublient jusqu'à ce qu'elles reçoivent une facture surprise. Les agents IA peuvent brûler des crédits de manière imprévisible lors de tâches de recherche intensives. Lorsque quelqu'un s'en aperçoit, le budget est déjà 3x dépassé. Aucune alerte intégrée n'existe sur la plupart des tableaux de bord d'API de recherche.
La solution Scavio
Construisez un wrapper de suivi budgétaire autour des appels API Scavio. Suivez l'utilisation cumulative des crédits dans un fichier local ou une base de données. Alertez via Slack ou email lorsque l'utilisation atteint 50%, 75% et 90% du budget mensuel. Optionnellement, mettez en pause automatiquement les recherches non critiques lorsque le budget est épuisé.
Avant
L'équipe définit un budget de recherche de 50$/mois. L'agent exécute une tâche de recherche lourde le 15e jour. L'utilisation atteint 120$ avant que quiconque ne s'en aperçoive. Facture surprise à la fin du mois.
Après
Le wrapper de budget suit chaque appel API. Une alerte Slack se déclenche à 50% (25$), 75% (37,50$) et 90% (45$). Les recherches non critiques sont mises en pause à 100%. Pas de factures surprises.
À qui cela s'adresse
Les équipes d'ingénierie qui exécutent des agents IA avec un volume de recherche variable et qui ont besoin de contrôles budgétaires et d'alertes pour éviter les factures surprises.
Avantages clés
- Suivi budgétaire en temps réel par appel API
- Alertes configurables aux seuils de 50%, 75%, 90%
- Pause automatique des recherches non critiques à la limite budgétaire
- Empêche les factures surprises dues aux pics de recherche des agents
- Fonctionne avec toute API de recherche, optimisé pour Scavio
Exemple Python
import requests, os, json
from pathlib import Path
from datetime import datetime
API_KEY = os.environ["SCAVIO_API_KEY"]
H = {"x-api-key": API_KEY, "Content-Type": "application/json"}
MONTHLY_BUDGET = 10000 # credits
COST_PER_SEARCH = 1 # 1 credit = $0.005
BUDGET_FILE = Path("search_budget.json")
def load_budget() -> dict:
if BUDGET_FILE.exists():
data = json.loads(BUDGET_FILE.read_text())
if data.get("month") != datetime.now().strftime("%Y-%m"):
return {"month": datetime.now().strftime("%Y-%m"), "used": 0, "alerts_sent": []}
return data
return {"month": datetime.now().strftime("%Y-%m"), "used": 0, "alerts_sent": []}
def save_budget(budget: dict):
BUDGET_FILE.write_text(json.dumps(budget))
def check_alerts(budget: dict):
pct = budget["used"] / MONTHLY_BUDGET * 100
for threshold in [50, 75, 90]:
if pct >= threshold and threshold not in budget["alerts_sent"]:
print(f"ALERT: Search budget at {pct:.0f}% ({budget['used']}/{MONTHLY_BUDGET} credits)")
budget["alerts_sent"].append(threshold)
def budgeted_search(query: str, critical: bool = True) -> dict:
budget = load_budget()
if budget["used"] >= MONTHLY_BUDGET and not critical:
return {"error": "Budget exhausted", "used": budget["used"]}
resp = requests.post(
"https://api.scavio.dev/api/v1/search",
headers=H,
json={"query": query, "country_code": "us"},
timeout=10,
)
budget["used"] += COST_PER_SEARCH
check_alerts(budget)
save_budget(budget)
return resp.json()
result = budgeted_search("python async frameworks 2026")
print(f"Results: {len(result.get('organic_results', []))}")Exemple JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
const fs = await import('fs');
const MONTHLY_BUDGET = 10000;
function loadBudget() {
const month = new Date().toISOString().slice(0,7);
try { const d = JSON.parse(fs.readFileSync('search_budget.json','utf8')); return d.month===month?d:{month,used:0,alertsSent:[]}; }
catch { return {month,used:0,alertsSent:[]}; }
}
function saveBudget(b) { fs.writeFileSync('search_budget.json', JSON.stringify(b)); }
function checkAlerts(budget) {
const pct = budget.used/MONTHLY_BUDGET*100;
for (const t of [50,75,90]) {
if (pct>=t && !budget.alertsSent.includes(t)) { console.log('ALERT: Budget at '+pct.toFixed(0)+'%'); budget.alertsSent.push(t); }
}
}
async function budgetedSearch(query, critical=true) {
const budget = loadBudget();
if (budget.used>=MONTHLY_BUDGET && !critical) return {error:'Budget exhausted'};
const r = await fetch('https://api.scavio.dev/api/v1/search', {method:'POST', headers:H, body:JSON.stringify({query, country_code:'us'})});
budget.used++;
checkAlerts(budget);
saveBudget(budget);
return r.json();
}
const r = await budgetedSearch('python async frameworks 2026');
console.log('Results: '+(r.organic_results||[]).length);Plateformes utilisées
Recherche web avec graphe de connaissances, PAA et aperçus IA
YouTube
Recherche de vidéos avec transcriptions et métadonnées
Communauté, publications et commentaires imbriqués de n'importe quel subreddit
Amazon
Recherche de produits avec prix, notes et avis