# Kimlik doğrulama

Anahtarlar, izinler (scope) ve anahtarı güvende tutmak.

Her çağrı Authorization başlığında bir API anahtarı taşır. Anahtar gövdede ya da sorgu dizisinde gönderilemez.

```http
Authorization: Bearer hzk_your_key_here
```

### İzinler (scope)

Her anahtara yalnızca ihtiyacı olanı verin. İzin, bir kayıt türü ve bir kiptir: <tür>.read ya da <tür>.write. Doğru izni olmayan çağrı 403 döner.

| İzin | İzin verdiği |
| --- | --- |
| contacts.read | contacts okuma: listeleme, arama, tek kayıt, özellik listesi |
| contacts.write | contacts oluşturma ve değiştirme |
| companies.read | companies okuma: listeleme, arama, tek kayıt, özellik listesi |
| companies.write | companies oluşturma ve değiştirme |
| deals.read | deals okuma: listeleme, arama, tek kayıt, özellik listesi |
| deals.write | deals oluşturma ve değiştirme |
| tickets.read | tickets okuma: listeleme, arama, tek kayıt, özellik listesi |
| tickets.write | tickets oluşturma ve değiştirme |
| products.read | products okuma: listeleme, arama, tek kayıt, özellik listesi |
| products.write | products oluşturma ve değiştirme |
| orders.read | orders okuma: listeleme, arama, tek kayıt, özellik listesi |
| orders.write | orders oluşturma ve değiştirme |
| calls.read | calls okuma: listeleme, arama, tek kayıt, özellik listesi |
| calls.write | calls oluşturma ve değiştirme |

### İyi uygulamalar

- Anahtarları sunucunuzda tutun. Bir web sayfasına, mobil uygulamaya ya da herkese açık depoya asla koymayın.
- Her sistem için ayrı bir anahtar oluşturun, en az izinle. Salt okumayla başlayın.
- Bir anahtarı Ayarlar > Geliştiriciler altında istediğiniz an iptal edin; her anahtarın son çağrıları orada listelenir.
- Bir anahtarın son kullanma tarihi ve izinli IP adresi listesi olabilir.
- Yanlış anahtarlar adres başına sınırlanır; tahmin etmek işe yaramaz.

### Kimlik doğrulama hataları

```json
// 401: no key, a wrong key, or a revoked or expired key
{ "statusCode": 401, "message": "..." }

// 403: the key is valid but lacks the permission (or the address is not allowed)
{ "statusCode": 403, "message": "..." }
```
