# Profil

Her iki profil endpoint'i de kişi kimliği doğrulanmış endpoint'lerdir: `Authorization` içinde tenant API anahtarını ve `X-Customer-Token` içinde geçerli bir kişi oturum token'ını gerektirirler. Okuma `contacts:read`, güncelleme `contacts:write` scope'una ihtiyaç duyar (`customers:read` / `customers:write` kabul edilir).

## GET /v1/api/contacts/me

Mevcut entegrasyonlar için `/v1/api/customers/me` üzerinde de sunulur; request ve response birebir aynıdır.

Kimliği doğrulanmış kişinin profilini getirir.

### Header'lar

| Ad | Tür | Zorunlu | Açıklama |
| --- | --- | --- | --- |
| `X-Customer-Token` | string | Evet | register veya login'den gelen kişi oturum token'ı. |

Query veya body parametresi yoktur.

```bash title="Request"
curl https://api.borkol.com/v1/api/contacts/me \
  -H "Authorization: Bearer {api_key}" \
  -H "X-Customer-Token: 13|Gh7rS2uX5vWy8zAbCdEfGhIjKlMnOpQrStUvWxYz"
```

Durum: `200 OK`.

```json title="Response"
{
  "data": {
    "id": "9d4e2f1a-6b3c-4f8e-9a1d-2c5b7e8f0a3d",
    "name": "Jane Doe",
    "email": "jane@example.com",
    "phone": "+31612345678",
    "kind": "person",
    "company_name": null,
    "registration_number": null,
    "vat_id": null,
    "external_id": null,
    "display_name": "Jane Doe",
    "created_at": "2026-08-14T10:32:11+00:00"
  }
}
```

Satıcı tarafından şirket olarak oluşturulan bir kişi (client panel veya CSV içe aktarımıyla) bunun yerine şöyle görünür:

```json title="Response (şirket kişisi)"
{
  "data": {
    "id": "c2d3e4f5-6a7b-4c8d-9e0f-1a2b3c4d5e6f",
    "name": "Mark van Dijk",
    "email": null,
    "phone": "+31201234567",
    "kind": "company",
    "company_name": "Van Dijk Bouw B.V.",
    "registration_number": "34567890",
    "vat_id": "NL123456789B01",
    "external_id": "erp-4471",
    "display_name": "Van Dijk Bouw B.V.",
    "created_at": "2026-08-20T09:00:00+00:00"
  }
}
```

### Hatalar

- `X-Customer-Token` eksik veya geçersiz olduğunda `401` `{"message":"Invalid customer token."}`.

## PATCH /v1/api/contacts/me

Mevcut entegrasyonlar için `/v1/api/customers/me` üzerinde de sunulur; request ve response birebir aynıdır.

Kimliği doğrulanmış kişinin profilini günceller. Bu kısmi bir güncellemedir: tüm body alanları isteğe bağlıdır ve yalnızca gönderdiğiniz alanlar değişir. Misafir olmayan bir hesabın e-postasını değiştirmek, hesabın mevcut parolasının `current_password` içinde verilmesini gerektirir. `kind`, `company_name`, `registration_number`, `vat_id` ve `external_id` bu endpoint'te kabul edilmez — bunlar storefront API üzerinden salt okunurdur ve satıcı tarafından ayarlanır.

### Header'lar

| Ad | Tür | Zorunlu | Açıklama |
| --- | --- | --- | --- |
| `X-Customer-Token` | string | Evet | register veya login'den gelen kişi oturum token'ı. |

### Body parametreleri

| Ad | Tür | Zorunlu | Açıklama |
| --- | --- | --- | --- |
| `name` | string | Hayır | Ad soyad. En fazla 150 karakter. |
| `email` | string | Hayır | Geçerli e-posta adresi, en fazla 255 karakter. Sunucu tarafında küçük harfe çevrilir. Başka bir kişiye ait olmamalıdır. Misafir olmayan bir hesapta değiştirmek `current_password` gerektirir. |
| `phone` | string or null | Hayır | Telefon numarası, en fazla 50 karakter. Temizlemek için `null` gönderin. |
| `current_password` | string | Hayır | Yalnızca misafir olmayan bir hesapta `email` değiştirilirken zorunludur. Asla saklanmaz; yalnızca denetlenir. |

```bash title="Request"
curl -X PATCH https://api.borkol.com/v1/api/contacts/me \
  -H "Authorization: Bearer {api_key}" \
  -H "X-Customer-Token: 13|Gh7rS2uX5vWy8zAbCdEfGhIjKlMnOpQrStUvWxYz" \
  -H "Content-Type: application/json" \
  -d '{"name":"Jane A. Doe","phone":"+31612345678"}'
```

Durum: `200 OK`. Güncellenmiş kişiyi döner.

```json title="Response"
{
  "data": {
    "id": "9d4e2f1a-6b3c-4f8e-9a1d-2c5b7e8f0a3d",
    "name": "Jane A. Doe",
    "email": "jane@example.com",
    "phone": "+31612345678",
    "kind": "person",
    "company_name": null,
    "registration_number": null,
    "vat_id": null,
    "external_id": null,
    "display_name": "Jane A. Doe",
    "created_at": "2026-08-14T10:32:11+00:00"
  }
}
```

### Hatalar

- Misafir olmayan bir hesabın e-postası `current_password` olmadan veya yanlış bir parolayla değiştirilmeye çalışıldığında `errors.current_password` `["Current password is required to change email."]` ile `422`.
- Yeni e-posta başka bir kişiye aitse `errors.email` `["Email already registered."]` ile `422`.
- Alan doğrulama hataları için `422`.
- `X-Customer-Token` eksik veya geçersiz olduğunda `401` `{"message":"Invalid customer token."}`.
