Erreurs et codes d'état HTTP
Les erreurs applicatives utilisent application/problem+json (RFC 9457). Basez votre traitement sur les champs stables code et action, et non sur le texte lisible de detail. Pour les erreurs de validation, errors contient les emplacements JSON Pointer des champs concernés. Indiquez request_id lorsque vous contactez l'assistance. Les défaillances de proxy ou de transport peuvent renvoyer un autre corps ; vérifiez Content-Type avant d'analyser le JSON.
L'exemple synthétique 422 ci-dessous montre une syntaxe d'adresse e-mail non valide détectée avant facturation. Le catalogue public des erreurs répertorie chaque code, statut, explication et action suggérée.
| Statut HTTP | Signification typique | Étape suivante |
|---|---|---|
| 400 / 413 / 415 | JSON mal formé, corps trop volumineux ou type de média non pris en charge. | Corrigez la requête. |
| 401 / 403 | Accès refusé, restriction de compte ou crédits insuffisants. | Consultez code ; corrigez l'accès, rechargez des crédits ou attendez la réinitialisation de l'essai. |
| 422 | Entrée non valide ou options incompatibles. | Corrigez les champs identifiés dans errors. |
| 404 / 405 | Route inconnue ou méthode HTTP non prise en charge. | Vérifiez le chemin du point de terminaison et l'en-tête de réponse Allow. |
| 429 | Limite de débit ou de concurrence. | Attendez le délai indiqué par Retry-After avant d'envoyer une autre requête. |
| 500 | Défaillance inattendue du serveur. | Contactez l'assistance avec request_id ; vérifiez la facturation avant de réessayer. |
| 502 / 503 / 504 | Défaillance du fournisseur, d'une dépendance ou de la facturation, ou délai d'attente dépassé. | Examinez code, action et billing_status avant de réessayer. |
{
"type": "urn:genderapi:problem:validation_error",
"title": "validation error",
"status": 422,
"detail": "A valid email address is required.",
"instance": "urn:uuid:11111111-1111-4111-8111-111111111111",
"code": "validation_error",
"request_id": "11111111-1111-4111-8111-111111111111",
"documentation": "https://api.genderapi.io/api/v2/errors",
"action": "correct_request",
"errors": [
{
"pointer": "/value",
"message": "Invalid email address."
}
],
"meta": {
"request_id": "11111111-1111-4111-8111-111111111111",
"duration_ms": 12,
"access": {
"mode": "ip_trial",
"reason": "api_key_missing"
},
"usage": {
"charged_credits": 0,
"remaining_credits": null,
"billing_status": "not_charged",
"resets_at": "2026-09-26T12:00:00.000Z",
"limit": 10,
"period_seconds": 86400
}
}
}Champs de la réponse d'erreur
| Champ | Type | Peut valoir null | Exemple | Description |
|---|---|---|---|---|
type | string | Non | "urn:genderapi:problem:validation_error" | URI identifiant le type de problème. |
title | string | Non | "validation error" | Titre court de l'erreur, lisible par une personne. |
status | integer | Non | 422 | Code de statut HTTP. |
detail | string | Non | "The request does not match the schema." | Explication de cet échec précis. |
instance | string | Non | "urn:uuid:550e8400-e29b-41d4-a716-446655440000" | Identifiant de la requête échouée. |
code | string | Non | "validation_error" | Code d'erreur stable exploitable par un logiciel. |
request_id | string | Non | "550e8400-e29b-41d4-a716-446655440000" | Identifiant unique de cette tentative HTTP ; également envoyé dans X-Request-ID. |
documentation | string | Non | "https://api.genderapi.io/api/v2/errors" | Lien vers le catalogue d'erreurs, s'il est fourni. |
action | string | Non | "correct_request" | Action de résolution suggérée, lorsqu'elle est définie dans le catalogue d'erreurs. |
errors | array<object> | Non | [{"pointer":"/value","message":"must NOT have fewer than 1 characters"}] | Problèmes de validation, si disponibles. Chaque élément contient pointer et message. |
errors[].pointer | string | Non | "/value" | JSON Pointer identifiant l'entrée non valide. |
errors[].message | string | Non | "must NOT have fewer than 1 characters" | Explication du problème de validation. |
Accès, facturation et métadonnées de la requête
| Champ | Type | Peut valoir null | Exemple | Description |
|---|---|---|---|---|
meta.request_id | string | Non | "550e8400-e29b-41d4-a716-446655440000" | Identifiant unique de cette tentative HTTP ; également envoyé dans X-Request-ID. |
meta.duration_ms | integer | Non | 42 | Durée de traitement de la requête en millisecondes. |
meta.access.mode | string | Non | "api_key" | api_key, ip_trial ou unauthenticated. Vérifiez api_key lorsque vous utilisez un compte payant. |
meta.access.reason | string | Oui | null | Motif du passage à l'essai : api_key_missing, api_key_invalid ou api_key_not_found ; null sinon. |
meta.usage.charged_credits | integer | Oui | 1 | Crédits nets débités. Zéro avant débit ou après remboursement intégral confirmé ; null si la facturation n'est pas confirmée. |
meta.usage.remaining_credits | integer | Oui | 99 | Solde à la fin de l'opération. Peut être négatif ; null si indisponible ou si la facturation n'est pas confirmée. |
meta.usage.billing_status | string | Non | "confirmed" | not_charged, confirmed ou unconfirmed. Vérifiez ce champ avant de relancer une prédiction échouée. |
meta.usage.resets_at | string | Oui | "2026-09-27T12:00:00.000Z" | Réinitialisation de l'essai par IP en UTC (ISO 8601) ; null pour les comptes avec clé API ou si inconnue. |
meta.usage.limit | integer | Oui | 10 | Crédits de l'essai par IP ; null pour les comptes avec clé API. |
meta.usage.period_seconds | integer | Oui | 86400 | Durée de l'essai par IP en secondes ; null pour les comptes avec clé API. |
Nouvelles tentatives et facturation
Chaque requête de prédiction est une nouvelle opération, y compris une requête identique renvoyée. Les règles de crédit habituelles s'appliquent à chaque requête. Il n'existe aucune protection contre les requêtes en double ; évitez donc les nouvelles tentatives automatiques après une perte de connexion ou une issue incertaine.
Pour une réponse 429, attendez le délai indiqué par Retry-After avant d'envoyer une autre requête. En cas d'échec de prédiction, examinez d'abord code, action et meta.usage.billing_status. Pour billing_reconciliation_required ou une facturation unconfirmed, contactez l'assistance avec request_id avant de réessayer.
Un lot partiellement réussi peut renvoyer HTTP 200. Vérifiez chaque élément et ne soumettez de nouveau que les éléments échoués une fois la facturation confirmée ; les éléments réussis seraient facturés une seconde fois.
X-Request-ID et meta.request_id identifient la tentative HTTP en cours. Consultez /usage pour connaître le solde actuel. HEAD ne déclenche aucune prédiction facturable. Les réponses de prédiction et de compte ne peuvent pas être mises en cache.
Les clients doivent tolérer l'ajout de nouveaux champs de réponse et conserver les valeurs null lorsque l'information n'est pas disponible.
Limites de requêtes
Gérez HTTP 429 et Retry-After au lieu de supposer que les requêtes seront toujours acceptées jusqu'à ces plafonds. La capacité du service est partagée. Les valeurs indiquées sont les valeurs par défaut actuelles du service. Les réponses de limitation incluent X-RateLimit-Limit, X-RateLimit-Remaining et X-RateLimit-Reset (secondes Unix). Retry-After est un délai en secondes. Ces en-têtes décrivent les limites de requêtes, et non les crédits restants. Même la consultation gratuite de /usage est prise en compte dans les limites de débit.
| Limite | Valeur |
|---|---|
| Corps de la requête JSON | 64 KiB maximum |
| Valeur de prédiction | 1 à 254 caractères |
| Lot | 50 éléments avec une clé API ; 10 avec l'essai par IP |
| Débit par compte | 120 requêtes par minute |
| Débit par IP | 600 requêtes par minute |
| Opérations simultanées | 2 par compte ; 16 pour l'ensemble du service |