---
title: احراز هویت
description: کلید API دانا را چطور بفرستید، چه انواعی دارد و چطور امن نگهش دارید
---

هر درخواست به API دانا باید یک کلید معتبر همراه داشته باشد. اگر کلید ندارید، [شروع سریع](/docs/quickstart) در سه قدم یکی می‌سازد.

## کلید را چطور بفرستید

راه اصلی، هدر `Authorization` است:

```
Authorization: Bearer $DANA_API_KEY
```

```bash
curl https://api.dana.expert/v1/chat/completions \
  -H "Authorization: Bearer dn-live-abc123xyz" \
  -H "Content-Type: application/json" \
  -d '{"model":"dana-1","messages":[{"role":"user","content":"سلام"}]}'
```

هدر `x-api-key` هم پذیرفته می‌شود و همان کلید را می‌گیرد. SDK رسمی Anthropic به‌طور پیش‌فرض همین را می‌فرستد، پس روی رابط [Messages](/docs/messages) کاری لازم نیست بکنید. اگر هر دو هدر را بفرستید، `Authorization` مقدم است.

## انواع کلید

| پیشوند | محیط | کاربرد |
|---|---|---|
| `dn-live-` | live | درخواست‌های واقعی، کسر اعتبار |
| `dn-test-` | test | آزمایش، بدون کسر اعتبار |

کلیدهای test برای محیط توسعه‌اند و کلیدهای live برای محیط تولید.

## مدیریت کلید

کلیدها را در [کنسول دانا](https://console.dana.expert/keys) بسازید، نام بگذارید و باطل کنید.

سه نکته عملی:

- هر کلید یک بار به‌صورت کامل نمایش داده می‌شود. بعد از بستن پنجره ساخت، دیگر قابل بازیابی نیست و باید کلید تازه بسازید.
- کلید باطل‌شده تا حدود ۳۰ ثانیه ممکن است هنوز کار کند، چون نتیجه احراز هویت کوتاه‌مدت کش می‌شود. برای قطع فوری، کلید سرویس را هم عوض کنید.
- سقف نرخ روی خودِ کلید تنظیم می‌شود، نه روی حساب. پیش‌فرض ۶۰ درخواست در دقیقه است و شرحش در [محدودیت‌ها](/docs/rate-limits) آمده.

## نگهداری امن

- کلید را در متغیر محیطی یا secrets manager بگذارید، نه داخل کد و نه در مخزن گیت.
- برای هر سرویس و هر محیط یک کلید جدا بسازید. آن‌وقت باطل کردن یکی، بقیه را نمی‌خواباند.
- کلید را در مرورگر یا اپ موبایل نگذارید. هر چه به دست کاربر برسد، لو رفته است؛ درخواست را از سرور خودتان بفرستید.
- به کلید مشکوک شدید؟ اول در کنسول باطلش کنید، بعد دنبال علت بگردید.

## وقتی احراز هویت رد می‌شود

| کد | پیام | علت |
|---|---|---|
| `401` | `Missing API key.` | هیچ‌کدام از دو هدر ارسال نشده |
| `401` | `Invalid API key.` | کلید شناخته نشد، باطل شده یا ناقص کپی شده |
| `403` | - | کلید معتبر است ولی اجازه این مسیر را ندارد |

مطمئنید کلید درست است و باز `401` می‌گیرید؟ معمولا یکی از این سه است:

- کلمه `Bearer` جا افتاده.
- متغیر محیطی خالی مانده.
- موقع کپی، یک خط جدید یا فاصله هم آمده.

شرح کامل هر کد در [خطاها](/docs/errors) آمده است.
