Σφάλματα και κωδικοί κατάστασης HTTP
Τα σφάλματα της εφαρμογής χρησιμοποιούν application/problem+json (RFC 9457). Βασίστε τη λογική σας στα σταθερά πεδία code και action, όχι στο κείμενο του detail που προορίζεται για ανθρώπους. Στα σφάλματα επικύρωσης, το errors περιέχει τους δείκτες JSON Pointer των πεδίων που επηρεάζονται. Αναφέρετε το request_id όταν επικοινωνείτε με την υποστήριξη. Σε σφάλματα διακομιστή μεσολάβησης ή μετάδοσης το σώμα της απόκρισης μπορεί να διαφέρει, γι' αυτό ελέγξτε το Content-Type πριν αναλύσετε το JSON.
Το παρακάτω συνθετικό παράδειγμα 422 δείχνει μη έγκυρη σύνταξη email, που εντοπίστηκε πριν από τη χρέωση. Ο δημόσιος κατάλογος σφαλμάτων περιέχει όλους τους κωδικούς, τις καταστάσεις, τις εξηγήσεις και τις προτεινόμενες ενέργειες.
| Κατάσταση HTTP | Συνήθης σημασία | Επόμενο βήμα |
|---|---|---|
| 400 / 413 / 415 | Μη έγκυρο JSON, υπερβολικά μεγάλο σώμα ή μη υποστηριζόμενος τύπος περιεχομένου. | Διορθώστε το αίτημα. |
| 401 / 403 | Απόρριψη πρόσβασης, περιορισμός λογαριασμού ή ανεπαρκείς πιστώσεις. | Ελέγξτε το code. Διορθώστε την πρόσβαση, προσθέστε πιστώσεις ή περιμένετε την επαναφορά της δοκιμαστικής πρόσβασης IP. |
| 422 | Μη έγκυρη είσοδος ή ασύμβατες επιλογές. | Διορθώστε τα πεδία που αναφέρονται στο errors. |
| 404 / 405 | Άγνωστη διαδρομή ή μη υποστηριζόμενη μέθοδος HTTP. | Ελέγξτε τη διαδρομή του endpoint και την κεφαλίδα απόκρισης Allow. |
| 429 | Όριο ρυθμού αιτημάτων ή ταυτόχρονων λειτουργιών. | Περιμένετε όσο ορίζει το Retry-After πριν στείλετε άλλο αίτημα. |
| 500 | Απρόβλεπτο σφάλμα διακομιστή. | Επικοινωνήστε με την υποστήριξη και αναφέρετε το request_id. Ελέγξτε τη χρέωση πριν δοκιμάσετε ξανά. |
| 502 / 503 / 504 | Σφάλμα παρόχου, εξάρτησης ή χρέωσης ή λήξη χρονικού ορίου. | Ελέγξτε τα code, action και billing_status πριν δοκιμάσετε ξανά. |
{
"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
}
}
}Πεδία απόκρισης σφάλματος
| Πεδίο | Τύπος | Μπορεί να είναι null | Παράδειγμα | Περιγραφή |
|---|---|---|---|---|
type | string | Όχι | "urn:genderapi:problem:validation_error" | URI που προσδιορίζει τον τύπο του προβλήματος. |
title | string | Όχι | "validation error" | Σύντομος τίτλος του σφάλματος, κατανοητός από ανθρώπους. |
status | integer | Όχι | 422 | Κωδικός κατάστασης HTTP. |
detail | string | Όχι | "The request does not match the schema." | Εξήγηση του συγκεκριμένου σφάλματος. |
instance | string | Όχι | "urn:uuid:550e8400-e29b-41d4-a716-446655440000" | Αναγνωριστικό του αιτήματος που απέτυχε. |
code | string | Όχι | "validation_error" | Σταθερός κωδικός σφάλματος, αναγνώσιμος από μηχανές. |
request_id | string | Όχι | "550e8400-e29b-41d4-a716-446655440000" | Μοναδικό αναγνωριστικό αυτής της απόπειρας HTTP. Αποστέλλεται και στο X-Request-ID. |
documentation | string | Όχι | "https://api.genderapi.io/api/v2/errors" | Σύνδεσμος προς τον κατάλογο σφαλμάτων, όταν υπάρχει. |
action | string | Όχι | "correct_request" | Προτεινόμενη ενέργεια αποκατάστασης, όταν ορίζεται στον κατάλογο σφαλμάτων. |
errors | array<object> | Όχι | [{"pointer":"/value","message":"must NOT have fewer than 1 characters"}] | Προβλήματα επικύρωσης, όταν είναι διαθέσιμα. Κάθε στοιχείο περιέχει pointer και message. |
errors[].pointer | string | Όχι | "/value" | JSON Pointer που προσδιορίζει τη μη έγκυρη είσοδο. |
errors[].message | string | Όχι | "must NOT have fewer than 1 characters" | Εξήγηση του προβλήματος επικύρωσης. |
Μεταδεδομένα πρόσβασης, χρέωσης και αιτήματος
| Πεδίο | Τύπος | Μπορεί να είναι null | Παράδειγμα | Περιγραφή |
|---|---|---|---|---|
meta.request_id | string | Όχι | "550e8400-e29b-41d4-a716-446655440000" | Μοναδικό αναγνωριστικό αυτής της απόπειρας HTTP. Αποστέλλεται και στο X-Request-ID. |
meta.duration_ms | integer | Όχι | 42 | Χρόνος επεξεργασίας του αιτήματος σε χιλιοστά του δευτερολέπτου. |
meta.access.mode | string | Όχι | "api_key" | api_key, ip_trial ή unauthenticated. Με λογαριασμό επί πληρωμή ελέγξτε ότι επιστρέφεται api_key. |
meta.access.reason | string | Ναι | null | Λόγος μετάβασης στη δοκιμαστική πρόσβαση IP: api_key_missing, api_key_invalid ή api_key_not_found. Διαφορετικά null. |
meta.usage.charged_credits | integer | Ναι | 1 | Καθαρές πιστώσεις που χρεώθηκαν. Μηδέν πριν από τη χρέωση ή μετά από πλήρη επιβεβαιωμένη επιστροφή πιστώσεων. null όταν η χρέωση δεν έχει επιβεβαιωθεί. |
meta.usage.remaining_credits | integer | Ναι | 99 | Υπόλοιπο κατά την ολοκλήρωση της λειτουργίας. Μπορεί να είναι αρνητικό. null αν δεν είναι διαθέσιμο ή αν η χρέωση δεν έχει επιβεβαιωθεί. |
meta.usage.billing_status | string | Όχι | "confirmed" | not_charged, confirmed ή unconfirmed. Ελέγξτε το πριν επαναλάβετε μια πρόβλεψη που απέτυχε. |
meta.usage.resets_at | string | Ναι | "2026-09-27T12:00:00.000Z" | Χρονική στιγμή επαναφοράς της δοκιμαστικής πρόσβασης IP σε UTC (ISO 8601). null για λογαριασμούς με κλειδί API ή όταν είναι άγνωστη. |
meta.usage.limit | integer | Ναι | 10 | Όριο πιστώσεων της δοκιμαστικής πρόσβασης IP. null για λογαριασμούς με κλειδί API. |
meta.usage.period_seconds | integer | Ναι | 86400 | Διάρκεια της περιόδου της δοκιμαστικής πρόσβασης IP σε δευτερόλεπτα. null για λογαριασμούς με κλειδί API. |
Νέες προσπάθειες και χρεώσεις
Κάθε αίτημα πρόβλεψης είναι νέα λειτουργία, ακόμη και όταν στέλνετε ξανά ένα πανομοιότυπο αίτημα. Σε κάθε αίτημα ισχύουν οι κανονικοί κανόνες πιστώσεων. Δεν υπάρχει προστασία από διπλά αιτήματα, επομένως αποφύγετε τις αυτόματες νέες προσπάθειες μετά από διακοπή της σύνδεσης ή άγνωστη έκβαση.
Σε απόκριση 429, περιμένετε όσο ορίζει το Retry-After πριν στείλετε άλλο αίτημα. Σε προβλέψεις που απέτυχαν, ελέγξτε πρώτα τα code, action και meta.usage.billing_status. Σε περίπτωση billing_reconciliation_required ή μη επιβεβαιωμένης χρέωσης, επικοινωνήστε με την υποστήριξη και αναφέρετε το request_id πριν δοκιμάσετε ξανά.
Μια παρτίδα που ολοκληρώθηκε εν μέρει επιτυχώς μπορεί να επιστρέψει HTTP 200. Ελέγξτε κάθε στοιχείο και, αφού επιβεβαιωθεί η χρέωση, στείλτε ξανά μόνο τα στοιχεία που απέτυχαν. Τα επιτυχή στοιχεία θα χρεώνονταν για δεύτερη φορά.
Τα X-Request-ID και meta.request_id προσδιορίζουν την τρέχουσα απόπειρα HTTP. Διαβάστε το τρέχον υπόλοιπο μέσω του /usage. Το HEAD δεν ξεκινά χρεώσιμη πρόβλεψη. Οι αποκρίσεις προβλέψεων και λογαριασμού δεν αποθηκεύονται στην κρυφή μνήμη.
Τα προγράμματα-πελάτες πρέπει να ανέχονται νέα πεδία που προστίθενται στην απόκριση και να διατηρούν τις τιμές null όταν μια πληροφορία δεν είναι διαθέσιμη.
Όρια αιτημάτων
Χειριστείτε το HTTP 429 και το Retry-After αντί να υποθέτετε ότι τα αιτήματα γίνονται πάντα δεκτά μέχρι αυτές τις μέγιστες τιμές. Η χωρητικότητα της υπηρεσίας είναι κοινόχρηστη. Οι τιμές που εμφανίζονται είναι οι τρέχουσες προεπιλογές της υπηρεσίας. Οι αποκρίσεις περιορισμού περιλαμβάνουν X-RateLimit-Limit, X-RateLimit-Remaining και X-RateLimit-Reset (δευτερόλεπτα Unix). Το Retry-After είναι χρόνος αναμονής σε δευτερόλεπτα. Αυτές οι κεφαλίδες περιγράφουν τα όρια αιτημάτων, όχι το υπόλοιπο πιστώσεων. Ακόμη και η δωρεάν ανάγνωση του /usage υπολογίζεται στα όρια αιτημάτων.
| Όριο | Τιμή |
|---|---|
| Σώμα αιτήματος JSON | Έως 64 KiB |
| Τιμή για πρόβλεψη | 1–254 χαρακτήρες |
| Παρτίδα | 50 στοιχεία με κλειδί API, 10 με τη δοκιμαστική πρόσβαση IP |
| Ρυθμός ανά λογαριασμό | 120 αιτήματα ανά λεπτό |
| Ρυθμός ανά διεύθυνση IP | 600 αιτήματα ανά λεπτό |
| Ταυτόχρονες λειτουργίες | 2 ανά λογαριασμό, 16 σε ολόκληρη την υπηρεσία |