# Έλεγχος ταυτότητας API v2 και δωρεάν δοκιμή

> Επαληθεύστε το GenderAPI v2 με το υπάρχον κλειδί API. Μάθετε κεφαλίδες Bearer, κλειδιά ερωτήματος GET, δοκιμαστική πρόσβαση IP και αιτήματα JSON.

Canonical HTML: https://www.genderapi.io/el/docs/v2/authentication

Last reviewed: 2026-09-25

## Έλεγχος ταυτότητας και δωρεάν δοκιμή

Στείλτε το Authorization: Bearer YOUR_API_KEY από τον διακομιστή σας. Αντικαταστήστε το YOUR_API_KEY με το υπάρχον κλειδί GenderAPI. Και οι δύο εκδόσεις μοιράζονται το υπόλοιπό σας. δεν απαιτείται ξεχωριστή συνδρομή ή κλειδί v2.

Όλα τα αιτήματα POST απαιτούν Content-Type: application/json. Χρησιμοποιήστε το υπάρχον κλειδί Bearer API. Κάθε αίτημα επεξεργάζεται ανεξάρτητα. Τα επαναλαμβανόμενα αιτήματα χρησιμοποιούν κανονική χρέωση.

Μόνο το GET /gender δέχεται επίσης την παράμετρο βασικού ερωτήματος. Προτιμήστε την κεφαλίδα Εξουσιοδότηση για ενσωματώσεις, επειδή οι διευθύνσεις URL μπορούν να αποθηκευτούν στο ιστορικό και τα αρχεία καταγραφής του προγράμματος περιήγησης. Μην τοποθετείτε ιδιωτικά κλειδιά στον κώδικα διεπαφής.

Εάν λείπει ένα κλειδί API, έχει μη έγκυρη μορφή ή δεν αναγνωρίζεται, το αίτημα χρησιμοποιεί τη δοκιμή IP που είναι κοινόχρηστη με το v1. Αυτό δεν ισχύει για αναγνωρισμένα κλειδιά που έχουν απενεργοποιηθεί, λήξει ή περιοριστεί. Ελέγξτε τη λειτουργία πρόσβασης στο meta.access.mode: api_key, ip_trial ή unauthenticated. Ο δοκιμαστικός λόγος είναι api_key_missing, api_key_invalid ή api_key_not_found. Επομένως, ένα μη έγκυρο κλειδί μπορεί να λάβει μια επιτυχημένη δοκιμαστική απάντηση. Επαληθεύστε τη λειτουργία πρόσβασης στην παραγωγή.

Οι δοκιμαστικές μονάδες επαναφέρονται μετά από μια περίοδο 24 ωρών, όχι απαραίτητα τα μεσάνυχτα. Χρησιμοποιήστε το /usage για να διαβάσετε το resets_at. Άτομα πίσω από το ίδιο δημόσιο IP μοιράζονται αυτό το επίδομα.

- [Συνδεθείτε στον λογαριασμό σας GenderAPI](https://app.genderapi.io/user/login)
- [Δημιουργήστε έναν λογαριασμό](https://app.genderapi.io/user/register)

## Ρυθμίστε το κλειδί API

Αντιγράψτε το κλειδί API από τον λογαριασμό σας GenderAPI. Αντικαταστήστε το YOUR_API_KEY παρακάτω με αυτό το κλειδί και, στη συνέχεια, εκτελέστε το επιλεγμένο παράδειγμα στην ίδια περίοδο λειτουργίας τερματικού. Αυτές οι εντολές ορίζουν μια μεταβλητή περιβάλλοντος μόνο για αυτήν τη συνεδρία. το δημοσιευμένο σύμβολο κράτησης θέσης δεν είναι κλειδί εργασίας.

Για μια εφαρμογή ή ανάπτυξη, διαμορφώστε το GENDERAPI_API_KEY ως μυστικό από την πλευρά του διακομιστή. Τα παραδείγματα δεν φορτώνουν αυτόματα ένα αρχείο .env. Κρατήστε το κλειδί μακριά από πακέτα προγράμματος περιήγησης, έλεγχο πηγής και δημόσιες διευθύνσεις URL.

**τερματικό macOS / Linux**

```bash
export GENDERAPI_API_KEY='YOUR_API_KEY'
```

**Windows PowerShell**

```powershell
$env:GENDERAPI_API_KEY = 'YOUR_API_KEY'
```

## Επαληθεύστε την πρόσβαση χωρίς να ξοδέψετε πιστώσεις

Καλέστε το GET /usage με την κεφαλίδα Bearer. Ένα έγκυρο κλειδί λογαριασμού δημιουργεί meta.access.mode: api_key. Εάν το αποτέλεσμα λέει ip_trial, ελέγξτε το αντιγραμμένο κλειδί πριν εκτελέσετε προβλέψεις. Αυτό το αίτημα είναι δωρεάν, συμπεριλαμβανομένου ενός λογαριασμού χωρίς υπολειπόμενες πιστώσεις.

Εκτελέστε αυτά τα παραδείγματα στον διακομιστή σας. Ρυθμίστε το GENDERAPI_API_KEY στο περιβάλλον διεργασίας στο υπάρχον κλειδί API. Επιβεβαιώστε ότι το meta.access.mode είναι api_key: ένα μη αναγνωρισμένο κλειδί μπορεί να επιστρέψει στη δοκιμή IP.

Αυτή η ανάγνωση υπολοίπου δεν κοστίζει πιστώσεις. Εξακολουθεί να μετράει στα όρια ποσοστού αιτήματος.

Οι αποκρίσεις HTTP 4xx και 5xx JSON διατηρούν το σώμα σφάλματος και επιστρέφουν μια κατάσταση εξόδου μη μηδενική. Ελέγξτε τα code, action και meta.usage.billing_status πριν δοκιμάσετε ξανά.

**cURL**

cURL 7,76+ σε κέλυφος POSIX. Εκτελέστε στο τερματικό σας.

```bash
curl --silent --show-error --fail-with-body --max-time 30 \
  --request GET 'https://api.genderapi.io/api/v2/usage' \
  --header "Authorization: Bearer ${GENDERAPI_API_KEY:?Set GENDERAPI_API_KEY}"
```

**JavaScript / Node.js**

Node.js 22+; ενσωματωμένη ανάκτηση. Αποθηκεύστε ως example.mjs και εκτελέστε το node example.mjs.

```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 response = await fetch("https://api.genderapi.io/api/v2/usage", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${apiKey}`,
  },
  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+; τυπική βιβλιοθήκη. Αποθηκεύστε ως example.py και εκτελέστε το python3 example.py.

```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")

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/usage",
    method="GET",
    headers={
        "Authorization": "Bearer " + api_key,
    },
)
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. Αποθηκεύστε ως example.php και εκτελέστε το php example.php.

```php
<?php
$apiKey = getenv('GENDERAPI_API_KEY');
if (!$apiKey) {
    throw new RuntimeException('Set GENDERAPI_API_KEY');
}

$ch = curl_init('https://api.genderapi.io/api/v2/usage');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => 'GET',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => false,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . $apiKey,
    ],
]);
$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+; τυπικό πελάτη HTTP. Αποθηκεύστε ως GenderApiExample.java και εκτελέστε το java GenderApiExample.java.

```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");
        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/usage"))
            .timeout(Duration.ofSeconds(30))
            .header("Authorization", "Bearer " + apiKey)
            .GET()
            .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+. Χρησιμοποιήστε το ως Program.cs σε ένα έργο κονσόλας και, στη συνέχεια, εκτελέστε το dotnet run.

```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.Get, "https://api.genderapi.io/api/v2/usage");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);

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+; τυπική βιβλιοθήκη. Αποθηκεύστε ως main.go και εκτελέστε το go run main.go.

```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")
    request, err := http.NewRequest("GET", "https://api.genderapi.io/api/v2/usage", nil)
    if err != nil { return err }
    request.Header.Set("Authorization", "Bearer " + apiKey)
    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)
    }
}
```

## Επόμενα βήματα

- [Κάντε μια πρόβλεψη ονόματος](https://www.genderapi.io/el/docs/v2/gender-from-name)
- [Διαβάστε το πιστωτικό σας υπόλοιπο](https://www.genderapi.io/el/docs/v2/credits-and-usage)
- [Δοκιμάστε ξανά τα αιτήματα με ασφάλεια](https://www.genderapi.io/el/docs/v2/errors-and-retries#retries)
