GET et DELETE : gérer les réponses
Au-delà de la création
La Responses API ne se limite pas à la création de réponses. Deux endpoints complémentaires vous permettent de récupérer et de supprimer les réponses stockées. Ces opérations sont essentielles pour construire des applications robustes avec gestion d’historique.
GET /v1/responses/{id}
Récupérer une réponse
curl https://api.x.ai/v1/responses/resp-abc123def456 \
-H "Authorization: Bearer $XAI_API_KEY"
L’API retourne exactement le même objet JSON que lors de la création :
{
"id": "resp-abc123def456",
"object": "response",
"created_at": 1712000000,
"status": "completed",
"model": "grok-4.20-reasoning",
"output": [...],
"usage": {...}
}
Cas d’usage pratiques
Reprise de conversation : votre application stocke le dernier response_id dans la session utilisateur. À la reconnexion, récupérez la réponse pour afficher le contexte précédent.
# L'utilisateur revient après une pause
last_response_id = get_from_session(user_id)
previous = client.responses.retrieve(last_response_id)
# Afficher le dernier échange
print(f"Dernière réponse : {previous.output[0].content[0].text[:200]}...")
# Continuer la conversation
new_response = client.responses.create(
model="grok-4.20-reasoning",
input="On en était où ?",
previous_response_id=last_response_id
)
Audit des coûts : parcourez vos réponses stockées pour analyser la consommation par utilisateur ou par fonctionnalité.
response = client.responses.retrieve("resp-abc123")
cost_usd = response.usage.cost_in_nano_usd / 1e9
input_tokens = response.usage.input_tokens
output_tokens = response.usage.output_tokens
print(f"Coût : ${cost_usd:.6f} | In: {input_tokens} | Out: {output_tokens}")
Gestion des erreurs
Si la réponse n’existe pas (supprimée ou expirée), l’API retourne une erreur 404 :
{
"error": {
"message": "Response not found",
"type": "not_found_error"
}
}
Gérez ce cas dans votre code :
try:
response = client.responses.retrieve("resp-expired123")
except Exception as e:
print(f"Réponse introuvable : {e}")
# Démarrer une nouvelle conversation
DELETE /v1/responses/{id}
Supprimer une réponse
curl -X DELETE https://api.x.ai/v1/responses/resp-abc123def456 \
-H "Authorization: Bearer $XAI_API_KEY"
La suppression retourne un statut 200 en cas de succès. L’opération est irréversible.
Impact sur les conversations chaînées
Quand vous supprimez une réponse qui est référencée par d’autres via previous_response_id, le contexte de cette réponse disparaît de la chaîne. Les réponses suivantes ne sont pas supprimées, mais elles perdent l’accès au contexte antérieur.
resp-1 → resp-2 → resp-3 → resp-4
↑ supprimé
Si vous supprimez resp-2, resp-3 et resp-4 existent toujours mais le contexte de resp-1 et resp-2 n’est plus accessible pour de nouvelles requêtes chaînées.
Nettoyage automatisé
Pour les applications en production, implémentez un nettoyage périodique :
import datetime
def cleanup_old_responses(response_ids, max_age_days=7):
for rid in response_ids:
try:
resp = client.responses.retrieve(rid)
age = datetime.datetime.now().timestamp() - resp.created_at
if age > max_age_days * 86400:
client.responses.delete(rid)
print(f"Supprimé : {rid}")
except Exception:
pass # Déjà supprimé ou expiré
Bonnes pratiques
- Stockez les IDs : conservez les
response_iddans votre base de données avec les métadonnées de la conversation - Nettoyez régulièrement : n’attendez pas l’expiration automatique à 30 jours pour les données sensibles
- Gérez les 404 : une réponse peut disparaître entre deux requêtes (expiration, suppression manuelle)
- Documentez vos chaînes : pour le débogage, tracez les liens
previous_response_identre vos réponses
Points clés à retenir
GET /v1/responses/{id}récupère une réponse avec tout son contenu et ses métadonnéesDELETE /v1/responses/{id}supprime définitivement une réponse — opération irréversible- La suppression d’une réponse intermédiaire casse le contexte de la chaîne de conversation
- Gérez les erreurs 404 : les réponses expirent automatiquement après 30 jours
- Conservez les
response_iddans votre propre base pour la traçabilité