Virheet ja HTTP-tilakoodit
Sovellusvirheet käyttävät application/problem+json-muotoa (RFC 9457). Käsittele virheet pysyvien code- ja action-kenttien perusteella, älä detail-kentän selitystekstin perusteella. Validointivirheissä errors sisältää kenttien JSON Pointer -sijainnit. Ilmoita request_id tukipyynnössä. Välityspalvelin- tai yhteysvirheen vastaus voi olla erilainen; tarkista Content-Type ennen JSON-jäsennystä.
Seuraava synteettinen 422-esimerkki näyttää virheellisen sähköpostisyntaksin, joka hylätään ennen laskutusta. Julkinen virheluettelo sisältää jokaisen koodin, tilan, selityksen ja suositellun toimenpiteen.
| HTTP-tila | Tyypillinen merkitys | Seuraava vaihe |
|---|---|---|
| 400 / 413 / 415 | Virheellinen JSON, liian suuri runko tai mediatyyppiä ei tueta. | Korjaa pyyntö. |
| 401 / 403 | Käyttö estetty, tilirajoitus tai krediitit eivät riitä. | Tarkista code; korjaa käyttöoikeus tai lisää krediittejä / odota kokeilun nollautumista. |
| 422 | Virheellinen syöte tai yhteensopimattomat asetukset. | Korjaa kentät, jotka errors-taulukko ilmoittaa. |
| 404 / 405 | Tuntematon reitti tai HTTP-metodia ei tueta. | Tarkista päätepisteen polku ja Allow-vastausotsake. |
| 429 | Pyyntömäärä- tai samanaikaisuusraja. | Odota Retry-After-otsakkeen ilmoittama aika ennen uuden pyynnön lähettämistä. |
| 500 | Odottamaton palvelinvirhe. | Ota yhteyttä tukeen ja ilmoita request_id; tarkista laskutus ennen uutta yritystä. |
| 502 / 503 / 504 | Palveluntarjoajan, riippuvuuden, laskutuksen tai aikakatkaisun virhe. | Tarkista code, action ja billing_status ennen kuin yrität uudelleen. |
{
"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
}
}
}Virhevastauksen kentät
| Kenttä | Tyyppi | Voi olla null | Esimerkki | Kuvaus |
|---|---|---|---|---|
type | string | Ei | "urn:genderapi:problem:validation_error" | Ongelman tyypin yksilöivä URI. |
title | string | Ei | "validation error" | Lyhyt, ihmiselle luettava virheotsikko. |
status | integer | Ei | 422 | HTTP-tilakoodi. |
detail | string | Ei | "The request does not match the schema." | Tämän nimenomaisen virheen selitys. |
instance | string | Ei | "urn:uuid:550e8400-e29b-41d4-a716-446655440000" | Epäonnistuneen pyynnön tunniste. |
code | string | Ei | "validation_error" | Vakaa, koneellisesti luettava virhekoodi. |
request_id | string | Ei | "550e8400-e29b-41d4-a716-446655440000" | Tämän HTTP-yrityksen yksilöllinen tunniste; myös X-Request-ID-otsakkeessa. |
documentation | string | Ei | "https://api.genderapi.io/api/v2/errors" | Linkki virheluetteloon, jos annettu. |
action | string | Ei | "correct_request" | Ehdotettu korjaustoimi, jos määritelty virheluettelossa. |
errors | array<object> | Ei | [{"pointer":"/value","message":"must NOT have fewer than 1 characters"}] | Validointiongelmat, jos saatavilla. Kukin kohde sisältää kentät pointer ja message. |
errors[].pointer | string | Ei | "/value" | Virheellisen syötteen osoittava JSON Pointer. |
errors[].message | string | Ei | "must NOT have fewer than 1 characters" | Validointiongelman selitys. |
Käyttöoikeus, veloitus ja pyynnön metatiedot
| Kenttä | Tyyppi | Voi olla null | Esimerkki | Kuvaus |
|---|---|---|---|---|
meta.request_id | string | Ei | "550e8400-e29b-41d4-a716-446655440000" | Tämän HTTP-yrityksen yksilöllinen tunniste; myös X-Request-ID-otsakkeessa. |
meta.duration_ms | integer | Ei | 42 | Pyynnön käsittelyaika millisekunteina. |
meta.access.mode | string | Ei | "api_key" | api_key, ip_trial tai unauthenticated. Tarkista api_key käyttäessäsi maksullista tiliä. |
meta.access.reason | string | Kyllä | null | Kokeiluun siirtymisen syy: api_key_missing, api_key_invalid tai api_key_not_found; muuten null. |
meta.usage.charged_credits | integer | Kyllä | 1 | Veloitetut nettokrediitit. Nolla ennen veloitusta tai vahvistetun täyden palautuksen jälkeen; null, jos veloitusta ei ole vahvistettu. |
meta.usage.remaining_credits | integer | Kyllä | 99 | Saldo toiminnon valmistuessa. Voi olla negatiivinen; null, jos saldoa ei saada tai veloitusta ei ole vahvistettu. |
meta.usage.billing_status | string | Ei | "confirmed" | not_charged, confirmed tai unconfirmed. Tarkista ennen epäonnistuneen ennusteen uutta yritystä. |
meta.usage.resets_at | string | Kyllä | "2026-09-27T12:00:00.000Z" | IP-kokeilun nollausaika UTC-ajassa (ISO 8601); null API-avaintileillä tai jos aika ei ole tiedossa. |
meta.usage.limit | integer | Kyllä | 10 | IP-kokeilun krediittikiintiö; null API-avaintileille. |
meta.usage.period_seconds | integer | Kyllä | 86400 | IP-kokeilujakson pituus sekunteina; null API-avaintileille. |
Uudelleenyritykset ja laskutus
Jokainen ennustepyyntö on uusi toiminto, myös uudelleen lähetetty identtinen pyyntö. Jokaiseen pyyntöön sovelletaan tavallisia krediittisääntöjä. Päällekkäisiltä pyynnöiltä ei ole suojaa, joten vältä automaattisia uudelleenyrityksiä yhteyden katkettua tai kun tulos on epäselvä.
Jos saat 429-vastauksen, odota Retry-After-otsakkeen ilmoittama aika ennen uuden pyynnön lähettämistä. Jos ennuste epäonnistuu, tarkista ensin code, action ja meta.usage.billing_status. Jos tila on billing_reconciliation_required tai laskutusta ei ole vahvistettu, ota yhteyttä tukeen ja ilmoita request_id ennen uutta yritystä.
Osittain onnistunut erä voi palauttaa HTTP 200 -vastauksen. Tarkista jokainen kohde ja lähetä uudelleen vain epäonnistuneet kohteet, kun laskutus on vahvistettu; onnistuneet kohteet laskutettaisiin uudelleen, jos ne lähetettäisiin uudelleen.
X-Request-ID ja meta.request_id yksilöivät nykyisen HTTP-yrityksen. Lue nykyinen saldo reitiltä /usage. HEAD ei käynnistä laskutettavaa ennustetta. Ennuste- ja tilivastauksia ei tallenneta välimuistiin.
Asiakasohjelmien tulee sietää vastaukseen lisättäviä uusia kenttiä ja säilyttää null-arvot, kun tietoa ei ole saatavilla.
Pyyntörajat
Käsittele HTTP 429 ja Retry-After äläkä oleta, että pyynnöt hyväksytään aina näihin ylärajoihin asti. Palvelun kapasiteetti on jaettu. Näytetyt arvot ovat palvelun nykyiset oletukset. Pyyntörajavastaukset sisältävät otsakkeet X-RateLimit-Limit, X-RateLimit-Remaining ja X-RateLimit-Reset (Unix-sekunteina). Retry-After on viive sekunteina. Nämä otsakkeet kuvaavat pyyntörajoja, eivät jäljellä olevia krediittejä. Myös maksuton /usage-luku lasketaan pyyntörajoihin.
| Raja | Arvo |
|---|---|
| JSON-pyynnön runko | enintään 64 KiB |
| Ennustearvo | 1–254 merkkiä |
| Eräpyyntö | 50 kohdetta API-avaimella; 10 IP-kokeilussa |
| Tilikohtainen pyyntöraja | 120 pyyntöä minuutissa |
| IP-kohtainen pyyntöraja | 600 pyyntöä minuutissa |
| Samanaikaiset toiminnot | 2 tiliä kohden; 16 koko palvelussa |