# Poimi sähköpostiosoitteesta nimiehdokas ja sukupuolisignaali

> Poimi sähköpostiosoitteesta nimiehdokas ja lisää ennusteet ja niiden lähdekentät Exceliin, Google Sheetsiin tai API-integraatioon muuttamatta henkilön itse ilmoittamia tietoja.

Canonical HTML: https://www.genderapi.io/fi/blog/extract-names-from-email-addresses

Last reviewed: 2026-09-30

## Julkaisun tiedot

Julkaistu ensimmäisen kerran: 2025-07-22T07:00:00.000Z

Tarkistettu viimeksi: 2026-09-30T00:00:00.000Z

## Voiko GenderAPI poimia nimen sähköpostiosoitteesta?

Kyllä. Tuetuista henkilökohtaisista sähköpostiosoitteista GenderAPI poimii @-merkkiä edeltävästä osasta nimiehdokkaan ja palauttaa sukupuolisignaalin, maakontekstin ja luottamusarvon. Kyse on ennusteesta, ei henkilöllisyyden vahvistuksesta. Jaetut tai satunnaiset osoitteet eivät välttämättä palauta tulosta.

- [V2:n reaaliaikainen demo ja asetukset](https://www.genderapi.io/fi/blog/extract-names-from-email-addresses#demo)

## Analysoi sähköpostiosoite

Lähetä arvo ja tarkastele koko vastausta, myös tuntemattomia tuloksia ja käytettyjä krediittejä.

Aina tekoäly (oletus): 2 krediittiä, myös kun tulos on tuntematon. Tekoäly varalla: 1 krediitti, myös kun tekoälyä käytetään varalla tai tulos on tuntematon. Pois, vain tietoaineisto (ei tekoälyä): 1 krediitti jokaisesta valmistuneesta pyynnöstä, myös kun tulos on tuntematon. Lempinimianalyysilla: 1 krediitti, jos tulos saadaan tietoaineistosta, tai yhteensä 2 krediittiä, jos tekoälyä käytetään, myös silloin, kun tulos on tuntematon.

Lähettämäsi arvo (koko sähköpostiosoite) välitetään GenderAPI.io-palveluun ja myös määritetylle tekoälypalvelulle oletustilassa Aina tekoäly tai kun tekoälyä tarvitaan varalla. Pois-tilassa sitä ei välitetä tekoälypalvelulle. [Lue, miten tietoja käsitellään](https://www.genderapi.io/fi/data-provenance).

Tämä todellinen vastaus tallennettiin 1. lokakuuta 2026; vain tilin saldo on korvattu. Reaaliaikaiset arvot voivat poiketa. Ennuste ei ole vahvistettu henkilöllisyys.

**Todellinen V2-vastaus; tallennettu 1. lokakuuta 2026**

```json
{
  "data": {
    "input": {
      "type": "email",
      "value": "mikko.virtanen@example.com",
      "country": null
    },
    "name": "mikko",
    "gender": "male",
    "country": null,
    "confidence": 0.98,
    "confidence_kind": "model_reported",
    "sample_count": null,
    "source": "ai",
    "result_status": "identified",
    "reason": null,
    "country_source": null,
    "match": {
      "name": null,
      "method": "model_inference",
      "scope": null,
      "country": null
    }
  },
  "meta": {
    "request_id": "a58ce5b6-387c-4909-89b0-21fd10d81c3a",
    "duration_ms": 391,
    "access": {
      "mode": "api_key",
      "reason": null
    },
    "usage": {
      "charged_credits": 2,
      "remaining_credits": 49999,
      "billing_status": "confirmed",
      "resets_at": null,
      "limit": null,
      "period_seconds": null
    }
  }
}
```

- [luo tili](https://app.genderapi.io/user/register)

## Sähköpostiosoitteesta jäsennellyksi tiedoksi

- Syöte: emilyblack@email.com
- Poimittu nimi: Emily
- Rikastus: Sukupuoli + luottamusarvo

## Valitse, missä sähköpostitiedot käsitellään

- [Microsoft Excel Asenna lisäosa →](https://appsource.microsoft.com/en-us/product/office/WA200008555)
- [Google Sheets Avaa Marketplace →](https://workspace.google.com/marketplace/app/gender_api_for_google_sheets_determines/712811575775)
- [Shopify Näytä sovellus →](https://apps.shopify.com/gender-api)
- [Excel/CSV-eräkäsittely Avaa tiedostotyökalu →](https://app.genderapi.io/csv)
- [Airtable Näytä laajennus →](https://airtable.com/marketplace/blkqCasjQIqmmBrmb/gender-api-io-determine-gender)
- [REST API Näytä päätepiste →](https://www.genderapi.io/fi/docs/v2/gender-from-email)

## Käsittele sähköpostisarake Excel-lisäosalla

Valitse sähköpostiosoitteiden menetelmä ja yhdistä sitten syötesarake ja tulossarakkeet. Käytä solukohtaisiin dynaamisiin hakuihin funktiota GENDER.FROM_EMAIL ja tulosten kirjoittamiseen kiinteinä arvoina sivupaneelia.

- [Katso Excel-video-opas](https://youtu.be/6j4w-3oMZnA)
- [GenderAPI-lisäosa Excelissä](https://www.genderapi.io/fi/blog/genderize-excel-names-using-genderapi-excel-add-in)
- [GENDER-kaava Excelissä](https://www.genderapi.io/fi/blog/gender-formula-for-microsoft-excel)

## Analysoi sähköpostiosoitteet lisäosalla tai kaavalla

Käytä olemassa oleville riveille lisäosaa, uusille riveille vastaavaa automaattista käsittelyä ja yksittäisen solun hakuun GENDER-kaavaa.

- [Google Sheets -lisäosan opas](https://www.genderapi.io/fi/blog/how-to-determine-gender-in-google-sheets-using-gender-api-add-on)
- [GENDER-kaava Google Sheetsissa](https://www.genderapi.io/fi/blog/gender-formula-google-sheets-detect-gender-from-names)

## Lisää sähköpostiosoitteiden analyysi palvelimellesi

Kutsu sähköpostiosoitteiden dokumentoitua päätepistettä palvelimelta äläkä lisää API-avainta selaimeen tai julkiseen koodiin. Käsittele vastauksen rakenne, virhekoodit ja krediittien käyttö erikseen.

Kuva esittää vanhemman integraation tulosta, eikä se vastaa V2:n nykyisiä vastaussääntöjä.

- [Yhden sähköpostiosoitteen pyyntö](https://www.genderapi.io/fi/docs/v2/gender-from-email)
- [Useiden sähköpostiosoitteiden pyyntö](https://www.genderapi.io/fi/docs/v2/batch)

## Älä pakota tulosta, jos osoitteessa ei ole nimeä

Yleisosoitteet, satunnaiset tunnisteet ja jaetut postilaatikot eivät välttämättä anna luotettavaa signaalia. Säilytä kentät data.result_status, data.reason ja data.confidence ja käsittele epävarmat tulokset erikseen.

Sähköpostiosoitteen osuma ei vahvista osoitteen omistajan henkilöllisyyttä eikä nimeä. Mittaa laatua omalla aineistollasi äläkä perusta henkilöön merkittävästi vaikuttavia päätöksiä pelkästään tähän ennusteeseen.

## Tallenna lähdetiedot ja ennuste erikseen

Säilytä tietueen alkuperäinen tunniste. API ei avaa profiilia, ei tarkista, kenelle tili kuuluu, eikä vahvista henkilöllisyyttä. Lähetä maakonteksti vain, kun sinulla on siitä luotettavaa tietoa, äläkä päättele sitä verkkotunnuksesta tai sivuston kielestä.

Tietoaineiston haku analysoi @-merkkiä edeltävän osan, poistaa plus-merkillä alkavan päätteen ja arvioi nimiehdokkaat. Tavallinen pyyntö voi lisäksi kokeilla rajattua määrää ehdokkaita yhdyssanojen osien alusta ja lopusta. Jos useampi rivi vastaa hakua, valituksi tulee rivi, jonka tallennettu kokonaismäärä on suurin; tämä ehdokas ei välttämättä ole henkilön todellinen nimi. Jos lähetät maan, kunkin ehdokkaan kohdalla maakohtainen rivi on etusijalla; jos sitä ei ole, voidaan käyttää globaalia riviä. Tarkista data.match.scope ja country_source.

| Tietue | Kenttä | Tulkinta |
| --- | --- | --- |
| Lähdetietue | contact_id / original_email | Säilytä lähdetiedot omassa järjestelmässäsi äläkä korvaa henkilön itse ilmoittamaa nimeä ennusteella. Tämä ei ole API-vastauksen kenttä. |
| Nimiehdokas | data.name / data.match | Valittu nimi voi olla null. Vahvistetun sukunimen kenttää ei ole, eikä osuma todista, kenelle postilaatikko kuuluu. |
| Ennuste | data.gender / data.result_status / data.reason | Tallenna tuntematon tulos JSON null -arvona. Tietoaineiston rivi, jonka määrät ovat tasan, voi palauttaa nimiehdokkaan ilman sukupuolta. |
| Perusteet | data.source / data.confidence_kind / data.confidence / data.sample_count | confidence on välillä 0–1. Tietoaineiston esiintymisosuus ja tekoälyn arvo mittaavat eri asioita; tekoälyn tuloksessa sample_count on null. |
| Käsittelytietue | meta.request_id / meta.usage | Tallenna tunniste ja laskutuksen tila. Kadonnut vastaus ei tarkoita, että käsittely oli maksuton tai että se epäonnistui. |

### Valitse käsittelytila ja krediittihinta

Yksittäisen pyynnön oletus on fallback ja eräpyynnön kohteiden oletus off. forceToGenderize on valinnainen nimille, sähköpostiosoitteille ja käyttäjänimille; jätä tällöin ai_mode pois tai käytä arvoa fallback, koska asetusta ei voi yhdistää arvoihin off tai always. Myös valmiit unknown-tulokset veloitetaan. Positiivinen saldo riittää pyynnön aloittamiseen, ja käsittelyn jälkeen saldo voi olla negatiivinen.

Kun tekoälyä käytetään, se saa koko lähetetyn osoitteen verkkotunnus ja plus-merkin jälkeinen pääte mukaan lukien, vaikka sitä ohjeistetaan jättämään nämä osat huomiotta. forceToGenderize voi palauttaa sukupuolen ilman, että todellista etunimeä löytyy; se ei tarkoita, että CRM-järjestelmääsi olisi saatu vahvistettu nimi.

| Asetus | Käsittely | Krediittiä valmista kohdetta kohden |
| --- | --- | --- |
| options.ai_mode: off | Vain tietoaineisto | 1 krediitti |
| options.ai_mode: fallback | Ensin tietoaineisto; tavallinen tekoäly varalla, jos sukupuolta ei voida määrittää | Yhteensä 1 krediitti tekoäly mukaan lukien |
| options.ai_mode: always | Suoraan tekoäly | 2 krediittiä |
| forceToGenderize: true | Ensin tietoaineisto, sitten lempinimen arviointi ilman todellisen etunimen vaatimusta | 1, jos tietoaineisto riittää; yhteensä 2, jos tekoälyä käytetään |

### Testaa sähköpostipyyntö ensin pelkällä tietoaineistolla

Esimerkkisyötteet eivät takaa tiettyä ennustetta. Aseta GENDERAPI_API_KEY palvelimen ympäristöön äläkä lisää avainta julkiseen selainpuolen koodiin. V1 ja V2 käyttävät samaa API-avainta ja samaa tilin saldoa. Tarkista avain osoitteella /api/v2/usage ja varmista, että meta.access.mode on api_key.

Valitse ohjelmointikieli. [Määritä API-avain](https://www.genderapi.io/fi/docs/v2/authentication#environment-setup), suorita sitten esimerkki palvelimellasi.

Jokainen ennustepyyntö on uusi laskutettava toiminto, myös uudelleenyritys. Nämä esimerkit eivät yritä uudelleen automaattisesti. Tarkista laskutuksen tila ennen uuden pyynnön lähettämistä.

### Ennen suorittamista: käyttöoikeus ja virheiden käsittely

Suorita esimerkit palvelimellasi. Aseta prosessin ympäristömuuttujan GENDERAPI_API_KEY arvoksi nykyinen API-avaimesi. Varmista, että meta.access.mode on api_key: tunnistamaton avain voi siirtää pyynnön IP-kokeiluun.

HTTP 4xx- ja 5xx-JSON-vastauksissa esimerkit säilyttävät virherungon ja palauttavat nollasta poikkeavan poistumiskoodin. Tarkista code, action ja meta.usage.billing_status ennen uutta yritystä.

**cURL**

cURL 7.76+ POSIX-komentotulkissa. Suorita päätteessä. [Suoritusympäristön dokumentaatio](https://curl.se/docs/manpage.html)

```bash
curl --silent --show-error --fail-with-body --max-time 30 \
  --request POST 'https://api.genderapi.io/api/v2/gender' \
  --header "Authorization: Bearer ${GENDERAPI_API_KEY:?Set GENDERAPI_API_KEY}" \
  --header 'Content-Type: application/json' \
  --data '{
  "type": "email",
  "value": "alice.smith@example.com",
  "options": {
    "ai_mode": "off"
  }
}'
```

**JavaScript / Node.js**

Node.js 22+; sisäänrakennettu fetch. Tallenna nimellä example.mjs ja suorita node example.mjs. [Suoritusympäristön dokumentaatio](https://nodejs.org/api/globals.html#fetch)

```javascript
// Server-side Node.js. Save as example.mjs.
const apiKey = process.env.GENDERAPI_API_KEY;
if (!apiKey) throw new Error("Set GENDERAPI_API_KEY");
const body = {
  "type": "email",
  "value": "alice.smith@example.com",
  "options": {
    "ai_mode": "off"
  }
};

const response = await fetch("https://api.genderapi.io/api/v2/gender", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify(body),
  signal: AbortSignal.timeout(30_000),
  redirect: "error",
});
const raw = await response.text();
if (!(response.headers.get("content-type") ?? "").includes("json")) {
  throw new Error(`HTTP ${response.status}: expected JSON; request ID ${response.headers.get("x-request-id")}`);
}
const result = JSON.parse(raw); // Also accepts application/problem+json.
if (!response.ok) {
  console.error(`HTTP ${response.status}`, result);
  process.exitCode = 1; // A retry is a new operation; inspect billing first.
} else {
  console.log(JSON.stringify(result, null, 2));
  // For batches, inspect every item: HTTP 200 may contain item errors.
}
```

**Python**

Python 3.10+; standardikirjasto. Tallenna nimellä example.py ja suorita python3 example.py. [Suoritusympäristön dokumentaatio](https://docs.python.org/3/library/urllib.request.html)

```python
import json
import os
import sys
import urllib.error
import urllib.request

api_key = os.environ.get("GENDERAPI_API_KEY")
if not api_key:
    raise RuntimeError("Set GENDERAPI_API_KEY")
body = json.loads("{\"type\":\"email\",\"value\":\"alice.smith@example.com\",\"options\":{\"ai_mode\":\"off\"}}")

class NoRedirect(urllib.request.HTTPRedirectHandler):
    def redirect_request(self, req, fp, code, msg, headers, newurl):
        return None

request = urllib.request.Request(
    "https://api.genderapi.io/api/v2/gender",
    method="POST",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": "Bearer " + api_key,
        "Content-Type": "application/json",
    },
)
opener = urllib.request.build_opener(NoRedirect())
try:
    response = opener.open(request, timeout=30)
except urllib.error.HTTPError as error:
    response = error  # Keep the Problem Details body on non-2xx responses.
with response:
    status = response.status
    raw = response.read().decode("utf-8")
    if "json" not in response.headers.get("Content-Type", ""):
        raise RuntimeError(f"HTTP {status}: expected a JSON response")
    result = json.loads(raw)
print(json.dumps(result, indent=2), file=sys.stderr if status >= 300 else sys.stdout)
if not 200 <= status < 300:
    sys.exit(1)  # Inspect code, action and billing before retrying.
# For batches, inspect every item even when HTTP status is 200.
```

**PHP**

PHP 8+ cURL-laajennuksella. Tallenna nimellä example.php ja suorita php example.php. [Suoritusympäristön dokumentaatio](https://www.php.net/manual/en/book.curl.php)

```php
<?php
$apiKey = getenv('GENDERAPI_API_KEY');
if (!$apiKey) {
    throw new RuntimeException('Set GENDERAPI_API_KEY');
}
$body = json_decode('{"type":"email","value":"alice.smith@example.com","options":{"ai_mode":"off"}}', true, 512, JSON_THROW_ON_ERROR);

$ch = curl_init('https://api.genderapi.io/api/v2/gender');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => false,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode($body, JSON_THROW_ON_ERROR),
]);
$raw = curl_exec($ch);
if ($raw === false) {
    throw new RuntimeException(curl_error($ch));
}
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE) ?: '';
curl_close($ch);
if (strpos($contentType, 'json') === false) {
    throw new RuntimeException("HTTP $status: expected a JSON response");
}
$result = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
$output = json_encode($result, JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR) . PHP_EOL;
if ($status < 200 || $status >= 300) {
    fwrite(STDERR, $output); // Preserve the Problem Details body.
    exit(1);
}
echo $output;
// For batches, inspect every item; HTTP 200 can contain item errors.
```

**Java**

Java 17+; standardikirjaston HTTP-asiakas. Tallenna nimellä GenderApiExample.java ja suorita java GenderApiExample.java. [Suoritusympäristön dokumentaatio](https://docs.oracle.com/en/java/javase/17/docs/api/java.net.http/java/net/http/HttpClient.html)

```java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.time.Duration;

public class GenderApiExample {
    private static String requiredEnv(String name) {
        String value = System.getenv(name);
        if (value == null || value.isBlank()) throw new IllegalStateException("Set " + name);
        return value;
    }

    public static void main(String[] args) throws Exception {
        String apiKey = requiredEnv("GENDERAPI_API_KEY");
        String body = "{\"type\":\"email\",\"value\":\"alice.smith@example.com\",\"options\":{\"ai_mode\":\"off\"}}";
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .followRedirects(HttpClient.Redirect.NEVER)
            .build();
        HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.genderapi.io/api/v2/gender"))
            .timeout(Duration.ofSeconds(30))
            .header("Authorization", "Bearer " + apiKey)
            .header("Content-Type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(body, StandardCharsets.UTF_8))
            .build();
        HttpResponse<String> response = client.send(request,
            HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8));
        if (!response.headers().firstValue("content-type").orElse("").contains("json")) {
            throw new IllegalStateException("HTTP " + response.statusCode() + ": expected JSON");
        }
        // JSON text; parse with your application's JSON library when integrating.
        if (response.statusCode() < 200 || response.statusCode() >= 300) {
            System.err.println(response.body()); // Includes Problem Details.
            System.exit(1);
        }
        System.out.println(response.body());
        // For batches, inspect each item's data or error, including on HTTP 200.
    }
}
```

**C# / .NET**

.NET 8+ -konsolisovellus. Käytä konsoliprojektissa nimellä Program.cs ja suorita sitten dotnet run. [Suoritusympäristön dokumentaatio](https://learn.microsoft.com/en-us/dotnet/fundamentals/networking/http/httpclient)

```csharp
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;

string RequiredEnv(string name) =>
    !string.IsNullOrWhiteSpace(Environment.GetEnvironmentVariable(name))
        ? Environment.GetEnvironmentVariable(name)!
        : throw new InvalidOperationException($"Set {name}");

var apiKey = RequiredEnv("GENDERAPI_API_KEY");
using var handler = new HttpClientHandler { AllowAutoRedirect = false };
using var client = new HttpClient(handler) { Timeout = TimeSpan.FromSeconds(30) };
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.genderapi.io/api/v2/gender");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);
request.Content = new StringContent("{\"type\":\"email\",\"value\":\"alice.smith@example.com\",\"options\":{\"ai_mode\":\"off\"}}", Encoding.UTF8, "application/json");

using var response = await client.SendAsync(request);
var raw = await response.Content.ReadAsStringAsync();
if (!(response.Content.Headers.ContentType?.MediaType?.Contains("json") ?? false))
    throw new InvalidOperationException($"HTTP {(int)response.StatusCode}: expected JSON");
using var result = JsonDocument.Parse(raw);
if (!response.IsSuccessStatusCode)
{
    Console.Error.WriteLine(result.RootElement); // Preserve Problem Details.
    Environment.ExitCode = 1;
}
else
{
    Console.WriteLine(result.RootElement);
    // For batches, inspect every item even on HTTP 200.
}
```

**Go**

Go 1.22+; standardikirjasto. Tallenna nimellä main.go ja suorita go run main.go. [Suoritusympäristön dokumentaatio](https://pkg.go.dev/net/http)

```go
package main

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "os"
    "strings"
    "time"
)

func requiredEnv(name string) string {
    value := os.Getenv(name)
    if value == "" { panic("Set " + name) }
    return value
}

func run() error {
    apiKey := requiredEnv("GENDERAPI_API_KEY")
    body := "{\"type\":\"email\",\"value\":\"alice.smith@example.com\",\"options\":{\"ai_mode\":\"off\"}}"
    request, err := http.NewRequest("POST", "https://api.genderapi.io/api/v2/gender", strings.NewReader(body))
    if err != nil { return err }
    request.Header.Set("Authorization", "Bearer " + apiKey)
    request.Header.Set("Content-Type", "application/json")
    client := &http.Client{
        Timeout: 30 * time.Second,
        CheckRedirect: func(req *http.Request, via []*http.Request) error {
            return http.ErrUseLastResponse
        },
    }
    response, err := client.Do(request)
    if err != nil { return err }
    defer response.Body.Close()
    raw, err := io.ReadAll(response.Body)
    if err != nil { return err }
    if !strings.Contains(response.Header.Get("Content-Type"), "json") || !json.Valid(raw) {
        return fmt.Errorf("HTTP %d: expected a JSON response", response.StatusCode)
    }
    if response.StatusCode < 200 || response.StatusCode >= 300 {
        return fmt.Errorf("HTTP %d: %s", response.StatusCode, raw)
    }
    fmt.Println(string(raw))
    // For batches, inspect every item even on HTTP 200.
    return nil
}

func main() {
    if err := run(); err != nil {
        fmt.Fprintln(os.Stderr, err) // Keep Problem Details for error handling.
        os.Exit(1)
    }
}
```

- [Virhe- ja uudelleenyritysopas →](https://www.genderapi.io/fi/docs/v2/errors-and-retries)

### Käsittele luettelojen tulokset ja uudelleenyritykset

POST /api/v2/gender/batch hyväksyy enintään 50 kohdetta API-avaimella ja 10 kohdetta IP-kokeilussa. Anna jokaiselle kohteelle omat type-, value- ja options-arvot. Jos haluat käyttää tavallista tekoälyä varalla, aseta fallback erikseen jokaiseen kohteeseen. id-arvon on oltava yksilöllinen eräpyynnön sisällä, ja index lasketaan nollasta lähetetyn eräpyynnön sisällä. Tallenna omat ajo- ja lähderivitunnisteesi erikseen.

HTTP 200 ei tarkoita, että kaikki kohteet olisi käsitelty. Käsittele tulokset identified, unknown ja error erikseen; meta.summary.succeeded laskee mukaan sekä identified- että unknown-tulokset. Arvioi data.gender, source, confidence_kind, confidence, match ja reason yhdessä äläkä sekoita tekoälyn arvoa tietoaineiston esiintymisosuuteen.

Jos meta.usage.billing_status on confirmed, yritä uudelleen vain virheitä, jotka sen sallivat. Jos tila on unconfirmed tai vastaus katosi, keskeytä ja tarkista laskutus. Jos lähetät saman kohteen uudelleen, myös valmiin unknown-tuloksen, se veloitetaan uutena toimintona; älä koskaan lähetä koko luetteloa uudelleen tarkistamatta.

[Eräpyyntöjen säännöt](https://www.genderapi.io/fi/docs/v2/batch) · [Vastauskentät](https://www.genderapi.io/fi/docs/v2/responses) · [Tekoälyasetukset](https://www.genderapi.io/fi/docs/v2/ai-options) · [Tarkkuus ja luottamusarvo](https://www.genderapi.io/fi/accuracy-methodology) · [Tietosuojakäytäntö](https://www.genderapi.io/fi/privacy-policy)

Excel- ja Google Sheets -lisäosat ja muut valmiit integraatiot voivat käyttää omaa yhteyttään ja omaa tulosmuotoaan. Älä oleta, että niiden tulos vastaa tätä V2:n JSON-rakennetta; lue kyseisen integraation ajantasainen opas.

## Nimi ja sukupuoli sähköpostiosoitteesta

### Voiko sähköpostiosoitteesta poimia nimen?

Tuetuista henkilökohtaisista osoitteista GenderAPI voi poimia @-merkkiä edeltävästä osasta nimiehdokkaan ja, jos tulos löytyy, palauttaa sukupuolen, maan ja luottamusarvon. Nimiehdokas on ennuste, ei postilaatikon omistajan vahvistettu nimi.

### Sisältääkö jokainen sähköpostiosoite nimen?

Ei. Yleisosoitteet, satunnaiset tunnisteet ja paikalliset osat, joissa ei ole todellista nimeä, eivät välttämättä anna luotettavaa signaalia. Tarkista V2-vastauksesta data.result_status, data.reason, data.confidence ja data.confidence_kind.

### Tallennetaanko sähköpostikyselyt?

Julkaistun käytännön mukaan sähköpostikyselyjä ei säilytetä uudelleenkäytettävinä kyselytietueina. Erillisiin teknisiin ja tietoturvalokeihin sovelletaan tietosuojakäytännössä kuvattuja säilytysaikoja. Älä käytä julkisessa demossa arkaluonteisia henkilötietoja.

### Voinko käyttää tätä Excelissä ja Google Sheetsissa?

Kyllä. Sähköpostiosoitteita sisältäviä sarakkeita voi käsitellä Excel-lisäosalla, Google Sheets -lisäosalla tai Excel- ja CSV-tiedostotyökalulla. Näillä integraatioilla on oma tulosmuotonsa, joka poikkeaa V2:n JSON-muodosta.

### Mitä kenttiä API palauttaa?

V2 palauttaa kentät data.name, data.gender ja data.match sekä lähde- ja luottamusarvokentät, ja meta-osassa pyynnön tunnisteen ja krediittien käytön. Nimiehdokas tai sukupuoli voi olla null. Vahvistetun sukunimen kenttää ei ole.

### Milloin tekoälyä käytetään?

V2:n yksittäisessä pyynnössä tavallinen tekoäly varalla on oletuksena käytössä. Tässä demossa voit käyttää tavallista pyyntöä tai forceToGenderize-asetusta; off- ja always-tilat asetetaan API-pyynnössä. Tavallinen tekoäly varalla maksaa yhteensä 1 krediitin ja always 2 krediittiä. forceToGenderize-asetuksella tietoaineiston tulos maksaa 1 krediitin ja tekoälyn tulos yhteensä 2 krediittiä; tulos voi silti olla unknown.

### Voinko kokeilla maksutta?

Tili saa 200 maksutonta krediittiä päivässä, ja jaettu IP-kokeilu antaa 10 krediittiä julkista IP-osoitetta kohden 24 tunnin välein. Puuttuva tai tunnistamaton avain voi johtaa IP-kokeiluun, joten tarkista vastauksesta meta.access.mode. Laskennassa käytetään krediittejä, ei pyyntöjen määrää.
