
# Kullanıcı oluştur

`POST /v1/users` · izin `users:write`

API anahtarının ortamında bir kullanıcı oluşturur. Kullanıcı yalnızca bu ortama aittir; aynı e-posta adresi iki ortamda kullanılırsa bunlar iki ayrı kullanıcıdır. Benzersiz değerler (`email`, `phone_number`, `username`, `external_id`) ortam bazında kontrol edilir. Yeniden denemelerin güvenli olması için bir `Idempotency-Key` başlığı gönderin.

## İstek

Gövde bir JSON nesnesidir. Tanımlanmamış alanlar `unknown_field` hatasıyla reddedilir.

| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
| `email` | string | hayır* | Birincil e-posta adresi. |
| `email_verified` | boolean | hayır | E-postayı doğrulanmış olarak işaretler. Varsayılan `false`. |
| `phone_number` | string | hayır* | E.164 biçiminde birincil telefon numarası. |
| `phone_verified` | boolean | hayır | Telefon numarasını doğrulanmış olarak işaretler. Varsayılan `false`. |
| `phone_country_code` | string | hayır | ISO 3166-1 alpha-2 kodu. Boş bırakılırsa telefon önekinden türetilir. |
| `username` | string | hayır* | 3 ila 64 karakter. Ortamda benzersiz olmalıdır. |
| `external_id` | string | hayır | Sizin belirlediğiniz tanımlayıcı, 1 ila 255 karakter. Ortamda benzersiz olmalıdır. |
| `name`, `given_name`, `family_name`, `middle_name`, `nickname` | string | hayır | Profil adları. |
| `picture`, `website`, `profile_url` | string | hayır | `https://` URL'leri, en fazla 2048 karakter. |
| `locale`, `zoneinfo`, `gender`, `birthdate` | string | hayır | Profil öznitelikleri. `birthdate` biçimi `YYYY-MM-DD`'dir. |
| `address` | object | hayır | OIDC `address` nesnesi, en fazla 2048 bayt. |
| `user_metadata`, `app_metadata` | object | hayır | Serbest biçimli JSON nesneleri; en fazla 16 KiB, derinlik 5, en üst düzeyde 100 anahtar. |

\* `email`, `phone_number` veya `username` alanlarından en az biri zorunludur.

## Yanıt

`201 Created`. Gövde kullanıcı nesnesidir. `ETag` başlığı kullanıcı sürümünü taşır.

API anahtarında `users:read_pii` izni yoksa kişisel veriler maskelenir: `email` değeri `a***@e***.com` olur, `phone_number` yalnızca son 2 rakamını korur (`+**********67`), `name`, `given_name`, `family_name`, `middle_name` ve `nickname` baş harflere dönüşür (`A. L.`), `username` yalnızca ilk karakterini korur (`a***`), `birthdate` değeri `****-**-**` olur ve `address` değeri `{"redacted": true}` olur. `user_metadata` ve `app_metadata` maskelenmez.

```json
{
  "id": "usr_0a1b2c3d4e5f6g7h8j9k0m1n2p",
  "kind": "regular",
  "status": "active",
  "external_id": null,
  "username": null,
  "name": "Ada Lovelace",
  "email": "ada@example.com",
  "email_verified": true,
  "phone_number": null,
  "phone_verified": false,
  "user_metadata": {},
  "app_metadata": {},
  "created_via": "admin_api",
  "created_at": "2026-01-15T09:30:00Z",
  "updated_at": "2026-01-15T09:30:00Z",
  "last_sign_in_at": null,
  "deletion_requested_at": null,
  "deletion_due_at": null
}
```

## Hatalar

Her hata, kararlı bir `code` değeri içeren bir `application/problem+json` gövdesidir.

| HTTP | `code` | Ne zaman |
|---|---|---|
| 400 | `malformed_request`, `unknown_field` | Gövde geçerli bir JSON değilse veya şemada bulunmayan bir alan içeriyorsa. |
| 409 | `conflict` | Değer zaten kullanımdaysa. `errors[]` alanı, alanı ve nedenini belirtir (`email_taken`, `phone_taken`, `username_taken`, `external_id_taken`). |
| 415 | `unsupported_media_type` | `Content-Type` değeri `application/json` değilse. |
| 422 | `validation_failed` | Bir değer geçersizse; `errors[].pointer` alanı ilgili alanı belirtir. |
| 401 | `unauthenticated` | API anahtarı eksik, geçersiz veya iptal edilmişse. |
| 403 | `insufficient_permissions` | Anahtarda `users:write` izni yoksa. |
| 429 | `rate_limited` | Hız sınırı aşıldıysa; `Retry-After` değerine uyun. |
| 503 | `service_unavailable` | Bir bağımlılık geçici olarak kullanılamıyorsa; daha sonra yeniden deneyin. |

## Örnek

```bash
curl -X POST https://api.eu.keenauth.com/v1/users \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"email": "ada@example.com", "email_verified": true, "name": "Ada Lovelace"}'
```

## Kişisel veriler

Bu uç nokta kişisel veri içerir: son kullanıcı profili. [KeenAuth API'lerinde kişisel veriler](/docs/policies/personal-data) bölümünde neyin saklandığı, ne kadar süreyle tutulduğu ve nasıl silindiği açıklanır. Hiçbir alanda özel nitelikli kişisel verileri (sağlık, biyometrik veriler, din, siyasi görüşler, cinsel yönelim) göndermeyin.
