Solde et recharges automatiques
Surveiller et automatiser les recharges
La combinaison du suivi du solde prépayé et des analytics d’utilisation permet de mettre en place un système de recharges intelligentes. Plutôt que de recharger manuellement, vous pouvez automatiser le processus en fonction de seuils et de prévisions de consommation.
Consulter le solde en détail
Rappel de l’endpoint de consultation du solde :
curl "https://management-api.x.ai/v1/billing/teams/$TEAM_ID/prepaid/balance" \
-H "Authorization: Bearer $MANAGEMENT_API_KEY"
La réponse contient le solde actuel et l’historique des transactions (achats et consommations).
Système de recharge automatique
Voici un script complet qui surveille le solde et recharge automatiquement quand nécessaire :
import requests
from datetime import datetime, timedelta
MANAGEMENT_API = "https://management-api.x.ai"
MGMT_KEY = "xai-mgmt-..."
TEAM_ID = "team-..."
# Configuration
MIN_BALANCE = 50.00 # Seuil de recharge
TOP_UP_AMOUNT = 200.00 # Montant de recharge
MAX_MONTHLY = 1000.00 # Plafond mensuel
def get_balance():
"""Récupère le solde prépayé actuel."""
resp = requests.get(
f"{MANAGEMENT_API}/v1/billing/teams/{TEAM_ID}/prepaid/balance",
headers={"Authorization": f"Bearer {MGMT_KEY}"}
)
return resp.json().get("balance", 0)
def get_monthly_top_ups():
"""Calcule le total des recharges du mois en cours."""
resp = requests.get(
f"{MANAGEMENT_API}/v1/billing/teams/{TEAM_ID}/prepaid/balance",
headers={"Authorization": f"Bearer {MGMT_KEY}"}
)
# Filtrer les transactions du mois courant
transactions = resp.json().get("transactions", [])
current_month = datetime.now().strftime("%Y-%m")
monthly_total = sum(
t.get("amount", 0)
for t in transactions
if t.get("type") == "top-up" and t.get("date", "").startswith(current_month)
)
return monthly_total
def top_up(amount):
"""Effectue une recharge."""
resp = requests.post(
f"{MANAGEMENT_API}/v1/billing/teams/{TEAM_ID}/prepaid/top-up",
headers={
"Authorization": f"Bearer {MGMT_KEY}",
"Content-Type": "application/json"
},
json={"amount": amount}
)
return resp.status_code == 200
# Logique de recharge
balance = get_balance()
monthly_spent = get_monthly_top_ups()
if balance < MIN_BALANCE:
remaining_budget = MAX_MONTHLY - monthly_spent
if remaining_budget >= TOP_UP_AMOUNT:
if top_up(TOP_UP_AMOUNT):
print(f"Rechargé de ${TOP_UP_AMOUNT:.2f}. Nouveau solde estimé : ${balance + TOP_UP_AMOUNT:.2f}")
else:
print("Erreur lors de la recharge")
else:
print(f"Plafond mensuel atteint (${monthly_spent:.2f} / ${MAX_MONTHLY:.2f})")
else:
print(f"Solde suffisant : ${balance:.2f}")
Prévision de consommation
Utilisez les analytics pour estimer quand vos crédits seront épuisés :
import requests
from datetime import datetime, timedelta
MANAGEMENT_API = "https://management-api.x.ai"
MGMT_KEY = "xai-mgmt-..."
TEAM_ID = "team-..."
# Consommation des 7 derniers jours
end = datetime.now()
start = end - timedelta(days=7)
usage_resp = requests.post(
f"{MANAGEMENT_API}/v1/billing/teams/{TEAM_ID}/usage",
headers={
"Authorization": f"Bearer {MGMT_KEY}",
"Content-Type": "application/json"
},
json={
"analyticsRequest": {
"timeRange": {
"startTime": start.strftime("%Y-%m-%d %H:%M:%S"),
"endTime": end.strftime("%Y-%m-%d %H:%M:%S"),
"timezone": "Europe/Paris"
},
"timeUnit": "DAY",
"values": [{"name": "cost", "aggregation": "SUM"}]
}
}
)
# Calculer la moyenne quotidienne
data_points = usage_resp.json().get("dataPoints", [])
daily_costs = [p.get("value", 0) for p in data_points]
avg_daily_cost = sum(daily_costs) / len(daily_costs) if daily_costs else 0
# Estimer les jours restants
balance_resp = requests.get(
f"{MANAGEMENT_API}/v1/billing/teams/{TEAM_ID}/prepaid/balance",
headers={"Authorization": f"Bearer {MGMT_KEY}"}
)
current_balance = balance_resp.json().get("balance", 0)
if avg_daily_cost > 0:
days_remaining = current_balance / avg_daily_cost
exhaustion_date = datetime.now() + timedelta(days=days_remaining)
print(f"Consommation moyenne : ${avg_daily_cost:.2f}/jour")
print(f"Solde actuel : ${current_balance:.2f}")
print(f"Épuisement estimé : {exhaustion_date.strftime('%d/%m/%Y')} ({days_remaining:.0f} jours)")
Dashboard de suivi intégré
Combinez tous les indicateurs dans un script de monitoring :
#!/bin/bash
echo "=== Dashboard xAI - $(date '+%d/%m/%Y %H:%M') ==="
# Solde prépayé
BALANCE=$(curl -s "https://management-api.x.ai/v1/billing/teams/$TEAM_ID/prepaid/balance" \
-H "Authorization: Bearer $MANAGEMENT_API_KEY" | python3 -c "import sys,json; print(json.load(sys.stdin).get('balance', 'N/A'))")
echo "Solde prépayé : $BALANCE $"
# Charges postpaid
POSTPAID=$(curl -s "https://management-api.x.ai/v1/billing/teams/$TEAM_ID/postpaid/invoice/preview" \
-H "Authorization: Bearer $MANAGEMENT_API_KEY" | python3 -c "import sys,json; print(json.load(sys.stdin).get('totalAmount', 'N/A'))")
echo "Charges postpaid : $POSTPAID $"
# Limite de dépenses
LIMIT=$(curl -s "https://management-api.x.ai/v1/billing/teams/$TEAM_ID/postpaid/spending-limits" \
-H "Authorization: Bearer $MANAGEMENT_API_KEY" | python3 -c "import sys,json; print(json.load(sys.stdin).get('monthlyLimit', 'N/A'))")
echo "Limite mensuelle : $LIMIT $"
Points clés à retenir
- Automatisez les recharges avec un seuil minimum et un plafond mensuel
- Utilisez les analytics pour prévoir la date d’épuisement des crédits
- Combinez solde prépayé, charges postpaid et limites dans un dashboard unifié
- Les crédits ne sont pas remboursables — calibrez les recharges automatiques avec prudence
- Intégrez ces scripts dans votre cron ou votre pipeline CI/CD