Fehler und HTTP-Statuscodes
Anwendungsfehler verwenden application/problem+json (RFC 9457). Werten Sie die stabilen Felder code und action aus, nicht den menschenlesbaren Text in detail. Bei Validierungsfehlern enthält errors die JSON-Pointer der betroffenen Stellen. Geben Sie bei Anfragen an den Support die request_id an. Bei Proxy- oder Übertragungsfehlern kann der Antwortinhalt abweichen; prüfen Sie daher Content-Type, bevor Sie JSON parsen.
Das folgende synthetische 422-Beispiel zeigt eine ungültige E-Mail-Syntax vor der Abrechnung. Der öffentliche Fehlerkatalog führt alle Codes, Status, Erklärungen und empfohlenen Maßnahmen auf.
| HTTP-Status | Typische Bedeutung | Nächster Schritt |
|---|---|---|
| 400 / 413 / 415 | Fehlerhaftes JSON, zu großer Body oder nicht unterstützter Medientyp. | Korrigieren Sie die Anfrage. |
| 401 / 403 | Zugriff abgelehnt, Kontoeinschränkung oder unzureichende Credits. | Prüfen Sie code; korrigieren Sie den Zugang oder laden Sie Credits nach bzw. warten Sie auf das Zurücksetzen des Testzugangs. |
| 422 | Ungültige Eingabe oder inkompatible Optionen. | Korrigieren Sie die in errors genannten Felder. |
| 404 / 405 | Unbekannte Route oder nicht unterstützte HTTP-Methode. | Prüfen Sie den Endpunktpfad und den Antwort-Header Allow. |
| 429 | Limit für Anfragerate oder gleichzeitige Anfragen. | Warten Sie die Zeit aus Retry-After ab, bevor Sie eine weitere Anfrage senden. |
| 500 | Unerwarteter Serverfehler. | Wenden Sie sich mit der request_id an den Support; prüfen Sie die Abrechnung vor einer Wiederholung. |
| 502 / 503 / 504 | Fehler bei Anbieter, Abhängigkeit oder Abrechnung oder Zeitüberschreitung. | Prüfen Sie code, action und billing_status vor einer Wiederholung. |
{
"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
}
}
}Felder der Fehlerantwort
| Feld | Typ | Kann null sein | Beispiel | Beschreibung |
|---|---|---|---|---|
type | string | Nein | "urn:genderapi:problem:validation_error" | URI zur Kennzeichnung des Problemtyps. |
title | string | Nein | "validation error" | Kurzer, lesbarer Fehlertitel. |
status | integer | Nein | 422 | HTTP-Statuscode. |
detail | string | Nein | "The request does not match the schema." | Erläuterung dieses konkreten Fehlers. |
instance | string | Nein | "urn:uuid:550e8400-e29b-41d4-a716-446655440000" | Kennung der fehlgeschlagenen Anfrage. |
code | string | Nein | "validation_error" | Stabiler, maschinenlesbarer Fehlercode. |
request_id | string | Nein | "550e8400-e29b-41d4-a716-446655440000" | Eindeutige Kennung dieses HTTP-Versuchs; auch in X-Request-ID enthalten. |
documentation | string | Nein | "https://api.genderapi.io/api/v2/errors" | Link zum Fehlerkatalog, sofern enthalten. |
action | string | Nein | "correct_request" | Empfohlene Abhilfemaßnahme, sofern im Fehlerkatalog definiert. |
errors | array<object> | Nein | [{"pointer":"/value","message":"must NOT have fewer than 1 characters"}] | Validierungsprobleme, sofern verfügbar. Jeder Eintrag enthält pointer und message. |
errors[].pointer | string | Nein | "/value" | JSON Pointer zur ungültigen Eingabe. |
errors[].message | string | Nein | "must NOT have fewer than 1 characters" | Erläuterung des Validierungsfehlers. |
Zugang, Abrechnung und Anfragemetadaten
| Feld | Typ | Kann null sein | Beispiel | Beschreibung |
|---|---|---|---|---|
meta.request_id | string | Nein | "550e8400-e29b-41d4-a716-446655440000" | Eindeutige Kennung dieses HTTP-Versuchs; auch in X-Request-ID enthalten. |
meta.duration_ms | integer | Nein | 42 | Bearbeitungszeit der Anfrage in Millisekunden. |
meta.access.mode | string | Nein | "api_key" | api_key, ip_trial oder unauthenticated. Prüfen Sie bei einem bezahlten Konto, ob api_key gemeldet wird. |
meta.access.reason | string | Ja | null | Grund für den Wechsel in den Testzugang: api_key_missing, api_key_invalid oder api_key_not_found; sonst null. |
meta.usage.charged_credits | integer | Ja | 1 | Netto abgebuchte Credits. 0 vor der Abbuchung oder nach einer bestätigten vollständigen Erstattung; null bei unbestätigter Abrechnung. |
meta.usage.remaining_credits | integer | Ja | 99 | Guthaben beim Abschluss des Vorgangs. Kann negativ sein; null, wenn nicht verfügbar oder die Abrechnung unbestätigt ist. |
meta.usage.billing_status | string | Nein | "confirmed" | not_charged, confirmed oder unconfirmed. Prüfen Sie dies, bevor Sie eine fehlgeschlagene Vorhersage wiederholen. |
meta.usage.resets_at | string | Ja | "2026-09-27T12:00:00.000Z" | Zeitpunkt des Zurücksetzens des IP-Testzugangs in UTC (ISO 8601); null bei Konten mit API-Schlüssel oder wenn unbekannt. |
meta.usage.limit | integer | Ja | 10 | Kontingent des IP-Testzugangs; null bei Konten mit API-Schlüssel. |
meta.usage.period_seconds | integer | Ja | 86400 | Zeitfenster des IP-Testzugangs in Sekunden; null bei Konten mit API-Schlüssel. |
Wiederholungen und Abrechnung
Jede Vorhersageanfrage ist ein neuer Vorgang, auch eine identische, erneut gesendete Anfrage. Für jede Anfrage gelten die normalen Credit-Regeln. Es gibt keinen Schutz vor doppelten Anfragen; vermeiden Sie daher automatische Wiederholungen nach einem Verbindungsabbruch oder einem ungeklärten Ausgang.
Warten Sie bei einer 429-Antwort die Zeit aus Retry-After ab, bevor Sie eine weitere Anfrage senden. Prüfen Sie bei fehlgeschlagenen Vorhersagen zuerst code, action und meta.usage.billing_status. Wenden Sie sich bei billing_reconciliation_required oder unbestätigter Abrechnung mit der request_id an den Support, bevor Sie die Anfrage wiederholen.
Ein teilweise erfolgreicher Batch kann HTTP 200 liefern. Prüfen Sie jeden Eintrag und senden Sie nach bestätigter Abrechnung nur die fehlgeschlagenen Einträge erneut; erneut gesendete erfolgreiche Einträge würden noch einmal berechnet.
X-Request-ID und meta.request_id kennzeichnen den aktuellen HTTP-Versuch. Lesen Sie das aktuelle Guthaben über /usage. HEAD startet keine kostenpflichtige Vorhersage. Vorhersage- und Kontoantworten sind nicht cachebar.
Clients sollten zusätzliche Antwortfelder tolerieren und null-Werte beibehalten, wenn Informationen nicht verfügbar sind.
Anfragelimits
Behandeln Sie HTTP 429 und Retry-After, statt davon auszugehen, dass Anfragen bis zu diesen Obergrenzen immer angenommen werden. Die Kapazität des Dienstes wird geteilt. Die angegebenen Werte sind die aktuellen Standardwerte des Dienstes. Antworten zur Ratenbegrenzung enthalten X-RateLimit-Limit, X-RateLimit-Remaining und X-RateLimit-Reset (Unix-Sekunden). Retry-After ist eine Wartezeit in Sekunden. Diese Header beschreiben Anfragelimits, nicht verbleibende Credits. Auch die kostenlose Abfrage von /usage zählt zu den Anfragelimits.
| Limit | Wert |
|---|---|
| JSON-Anfrage-Body | maximal 64 KiB |
| Wert für die Vorhersage | 1–254 Zeichen |
| Batch | 50 Einträge mit API-Schlüssel; 10 im IP-Testzugang |
| Rate pro Konto | 120 Anfragen pro Minute |
| Rate pro IP-Adresse | 600 Anfragen pro Minute |
| Gleichzeitige Vorgänge | 2 pro Konto; 16 im gesamten Dienst |